From f710c148795073b07c0d82dff67283d28924a413 Mon Sep 17 00:00:00 2001 From: 7small7 <1005349393@qq.com> Date: Sat, 8 Jul 2023 20:44:19 +0800 Subject: [PATCH] update --- .DS_Store | Bin 6148 -> 10244 bytes App.vue | 91 + basicPage/avatar/avatar.vue | 145 + basicPage/badge/badge.vue | 105 + basicPage/border/border.vue | 141 + basicPage/button/button.vue | 109 + basicPage/color/color.vue | 759 +++++ basicPage/flex-layout/flex-layout.vue | 456 +++ basicPage/grid-layout/grid-layout.vue | 169 + basicPage/icon/icon.vue | 231 ++ basicPage/icon/iconfont.js | 3 + basicPage/shadow/shadow.vue | 79 + basicPage/tag/tag.vue | 141 + basicPage/test/test.vue | 261 ++ basicPage/utils/color/index.vue | 105 + basicPage/utils/message/index.vue | 176 + basicPage/utils/number/index.vue | 159 + basicPage/utils/string/index.vue | 89 + common/config.js | 3 + componentsPage/action-sheet/action-sheet.vue | 139 + componentsPage/calendar/calendar.vue | 213 ++ componentsPage/check-box/check-box.vue | 95 + componentsPage/collapse/collapse.vue | 119 + componentsPage/count-down/count-down.vue | 78 + componentsPage/count-scroll/count-scroll.vue | 68 + componentsPage/count-to/count-to.vue | 68 + componentsPage/empty/empty.vue | 101 + componentsPage/fab/fab.vue | 196 ++ componentsPage/form/form.vue | 523 +++ componentsPage/goods-nav/goods-nav.vue | 126 + componentsPage/image-upload/image-upload.vue | 273 ++ .../index-list/avatar/index-list.vue | 70 + componentsPage/index-list/base/index-list.vue | 63 + componentsPage/index-list/index-list.vue | 40 + componentsPage/input/input.vue | 231 ++ componentsPage/keyboard/keyboard.vue | 317 ++ componentsPage/landscape/landscape.vue | 185 + componentsPage/lazy-load/lazy-load.vue | 102 + componentsPage/list/list.vue | 365 ++ componentsPage/load-more/load-more.vue | 81 + componentsPage/loading/loading.vue | 86 + componentsPage/mock/index.list.js | 585 ++++ componentsPage/modal/modal.vue | 277 ++ componentsPage/nav-bar/nav-bar.vue | 188 ++ componentsPage/notice-bar/notice-bar.vue | 93 + componentsPage/number-box/number-box.vue | 80 + componentsPage/picker/picker.vue | 303 ++ componentsPage/popup/popup.vue | 240 ++ componentsPage/progress/progress.vue | 97 + componentsPage/radio/radio.vue | 89 + componentsPage/rate/rate.vue | 84 + componentsPage/read-more/read-more.vue | 84 + componentsPage/scroll-list/scroll-list.vue | 135 + componentsPage/select/select.vue | 381 +++ componentsPage/sign-board/sign-board.vue | 134 + componentsPage/skeleton/skeleton.vue | 236 ++ componentsPage/slider/slider.vue | 97 + componentsPage/static/images/empty/cart.jpg | Bin 0 -> 20320 bytes .../static/images/empty/comment.jpg | Bin 0 -> 19323 bytes componentsPage/static/images/empty/data.jpg | Bin 0 -> 19574 bytes .../static/images/empty/network.jpg | Bin 0 -> 21328 bytes componentsPage/static/images/empty/page.jpg | Bin 0 -> 21070 bytes .../static/images/empty/permission.jpg | Bin 0 -> 18967 bytes componentsPage/static/images/empty/search.jpg | Bin 0 -> 20234 bytes componentsPage/steps/steps.vue | 105 + componentsPage/sticky/sticky.vue | 67 + componentsPage/subsection/subsection.vue | 68 + componentsPage/swipe-action/swipe-action.vue | 244 ++ componentsPage/swiper/swiper.vue | 73 + componentsPage/switch/switch.vue | 96 + componentsPage/tabs/tabs.vue | 94 + componentsPage/time-line/time-line.vue | 223 ++ componentsPage/tips/tips.vue | 133 + componentsPage/toast/toast.vue | 139 + .../verification-code-input.vue | 91 + .../verification-code/verification-code.vue | 158 + index.html | 14 + 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 | 28 + manifest.json | 133 + mock/basic_page.js | 88 + mock/components_page.js | 266 ++ mock/template_page.js | 247 ++ mock/vip_page.js | 299 ++ pages.json | 667 ++++ pages/basic/basic.vue | 170 + pages/components/components.vue | 167 + pages/index/index.vue | 146 + pages/template/template.vue | 194 ++ pages/tuniao/tuniao.vue | 563 ++++ pages/vip/vip.vue | 508 +++ static/css/components/demo_page_common.scss | 193 ++ static/css/templatePage/custom_nav_bar.scss | 38 + static/favicon.ico | Bin 0 -> 67646 bytes store/$tn.mixin.js | 28 + store/index.js | 75 + takeOutPage/static/images/location.png | Bin 0 -> 5631 bytes takeOutPage/static/images/take_out_car.png | Bin 0 -> 9455 bytes takeOutPage/walking-route/walking-route.vue | 226 ++ template.h5.html | 38 + templatePage/animate/bubble/bubble.vue | 226 ++ templatePage/animate/hollow/hollow.vue | 147 + templatePage/animate/loading/loading.vue | 265 ++ templatePage/animate/particle/particle.vue | 149 + templatePage/animate/photo/photo.vue | 264 ++ templatePage/animate/suspended/suspended.vue | 214 ++ templatePage/animate/wave/wave.vue | 122 + templatePage/article/demo1/demo1.vue | 739 ++++ templatePage/article/demo2/demo2.vue | 739 ++++ templatePage/health/qrcode/qrcode.vue | 621 ++++ templatePage/home/course/course.vue | 732 ++++ templatePage/home/design/design.vue | 527 +++ templatePage/home/job/job.vue | 558 ++++ templatePage/home/music/music.vue | 704 ++++ templatePage/home/screen/screen.vue | 704 ++++ templatePage/home/wallpaper/wallpaper.vue | 614 ++++ templatePage/life/about/about.vue | 267 ++ templatePage/life/browser/browser.vue | 37 + templatePage/life/candle/candle.vue | 625 ++++ templatePage/life/cover/cover.vue | 22 + templatePage/life/cube/cube.vue | 22 + templatePage/life/fullpage/fullpage.vue | 159 + templatePage/life/outset/outset.vue | 477 +++ templatePage/life/pano/pano.vue | 24 + templatePage/life/plus/plus.vue | 303 ++ templatePage/life/share/share.vue | 54 + templatePage/login/demo1/demo1.vue | 414 +++ templatePage/login/demo2/demo2.vue | 495 +++ templatePage/login/demo3/demo3.vue | 401 +++ templatePage/login/demo4/demo4.vue | 420 +++ templatePage/my/demo1/demo1.vue | 430 +++ templatePage/my/demo2/demo2.vue | 803 +++++ templatePage/my/demo3/demo3.vue | 957 ++++++ templatePage/my/demo4/demo4.vue | 1089 ++++++ templatePage/time/clock/clock.vue | 874 +++++ thirdPage/short-video/short-video.vue | 456 +++ tuniao-ui/README.md | 4 + .../tn-action-sheet/tn-action-sheet.vue | 202 ++ .../tn-avatar-group/tn-avatar-group.vue | 103 + 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 | 302 ++ .../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 | 251 ++ .../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 | 114 + tuniao-ui/components/tn-grid/tn-grid.vue | 111 + .../tn-image-upload-drag.vue | 995 ++++++ .../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 | 427 +++ .../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 | 209 ++ .../tn-number-box/tn-number-box.vue | 401 +++ .../tn-number-keyboard/tn-number-keyboard.vue | 182 + tuniao-ui/components/tn-picker/tn-picker.vue | 723 ++++ tuniao-ui/components/tn-popup/tn-popup.vue | 491 +++ .../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 | 442 +++ .../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 | 410 +++ .../components/tn-swipe-action-item/index.wxs | 230 ++ .../tn-swipe-action-item.vue | 237 ++ .../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 | 576 ++++ 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 | 340 ++ 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 | 2969 +++++++++++++++++ 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 | 722 ++++ 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/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.scss | 7 + util/request/index.js | 13 + util/request/requestInterceptors.js | 15 + util/request/responseInterceptors.js | 28 + 283 files changed, 68347 insertions(+) create mode 100644 App.vue create mode 100644 basicPage/avatar/avatar.vue create mode 100644 basicPage/badge/badge.vue create mode 100644 basicPage/border/border.vue create mode 100644 basicPage/button/button.vue create mode 100644 basicPage/color/color.vue create mode 100644 basicPage/flex-layout/flex-layout.vue create mode 100644 basicPage/grid-layout/grid-layout.vue create mode 100644 basicPage/icon/icon.vue create mode 100644 basicPage/icon/iconfont.js create mode 100644 basicPage/shadow/shadow.vue create mode 100644 basicPage/tag/tag.vue create mode 100644 basicPage/test/test.vue create mode 100644 basicPage/utils/color/index.vue create mode 100644 basicPage/utils/message/index.vue create mode 100644 basicPage/utils/number/index.vue create mode 100644 basicPage/utils/string/index.vue create mode 100644 common/config.js create mode 100644 componentsPage/action-sheet/action-sheet.vue create mode 100644 componentsPage/calendar/calendar.vue create mode 100644 componentsPage/check-box/check-box.vue create mode 100644 componentsPage/collapse/collapse.vue create mode 100644 componentsPage/count-down/count-down.vue create mode 100644 componentsPage/count-scroll/count-scroll.vue create mode 100644 componentsPage/count-to/count-to.vue create mode 100644 componentsPage/empty/empty.vue create mode 100644 componentsPage/fab/fab.vue create mode 100644 componentsPage/form/form.vue create mode 100644 componentsPage/goods-nav/goods-nav.vue create mode 100644 componentsPage/image-upload/image-upload.vue create mode 100644 componentsPage/index-list/avatar/index-list.vue create mode 100644 componentsPage/index-list/base/index-list.vue create mode 100644 componentsPage/index-list/index-list.vue create mode 100644 componentsPage/input/input.vue create mode 100644 componentsPage/keyboard/keyboard.vue create mode 100644 componentsPage/landscape/landscape.vue create mode 100644 componentsPage/lazy-load/lazy-load.vue create mode 100644 componentsPage/list/list.vue create mode 100644 componentsPage/load-more/load-more.vue create mode 100644 componentsPage/loading/loading.vue create mode 100644 componentsPage/mock/index.list.js create mode 100644 componentsPage/modal/modal.vue create mode 100644 componentsPage/nav-bar/nav-bar.vue create mode 100644 componentsPage/notice-bar/notice-bar.vue create mode 100644 componentsPage/number-box/number-box.vue create mode 100644 componentsPage/picker/picker.vue create mode 100644 componentsPage/popup/popup.vue create mode 100644 componentsPage/progress/progress.vue create mode 100644 componentsPage/radio/radio.vue create mode 100644 componentsPage/rate/rate.vue create mode 100644 componentsPage/read-more/read-more.vue create mode 100644 componentsPage/scroll-list/scroll-list.vue create mode 100644 componentsPage/select/select.vue create mode 100644 componentsPage/sign-board/sign-board.vue create mode 100644 componentsPage/skeleton/skeleton.vue create mode 100644 componentsPage/slider/slider.vue create mode 100644 componentsPage/static/images/empty/cart.jpg create mode 100644 componentsPage/static/images/empty/comment.jpg create mode 100644 componentsPage/static/images/empty/data.jpg create mode 100644 componentsPage/static/images/empty/network.jpg create mode 100644 componentsPage/static/images/empty/page.jpg create mode 100644 componentsPage/static/images/empty/permission.jpg create mode 100644 componentsPage/static/images/empty/search.jpg create mode 100644 componentsPage/steps/steps.vue create mode 100644 componentsPage/sticky/sticky.vue create mode 100644 componentsPage/subsection/subsection.vue create mode 100644 componentsPage/swipe-action/swipe-action.vue create mode 100644 componentsPage/swiper/swiper.vue create mode 100644 componentsPage/switch/switch.vue create mode 100644 componentsPage/tabs/tabs.vue create mode 100644 componentsPage/time-line/time-line.vue create mode 100644 componentsPage/tips/tips.vue create mode 100644 componentsPage/toast/toast.vue create mode 100644 componentsPage/verification-code-input/verification-code-input.vue create mode 100644 componentsPage/verification-code/verification-code.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 mock/basic_page.js create mode 100644 mock/components_page.js create mode 100644 mock/template_page.js create mode 100644 mock/vip_page.js create mode 100644 pages.json create mode 100644 pages/basic/basic.vue create mode 100644 pages/components/components.vue create mode 100644 pages/index/index.vue create mode 100644 pages/template/template.vue create mode 100644 pages/tuniao/tuniao.vue create mode 100644 pages/vip/vip.vue create mode 100644 static/css/components/demo_page_common.scss create mode 100644 static/css/templatePage/custom_nav_bar.scss create mode 100644 static/favicon.ico create mode 100644 store/$tn.mixin.js create mode 100644 store/index.js create mode 100644 takeOutPage/static/images/location.png create mode 100644 takeOutPage/static/images/take_out_car.png create mode 100644 takeOutPage/walking-route/walking-route.vue create mode 100644 template.h5.html create mode 100644 templatePage/animate/bubble/bubble.vue create mode 100644 templatePage/animate/hollow/hollow.vue create mode 100644 templatePage/animate/loading/loading.vue create mode 100644 templatePage/animate/particle/particle.vue create mode 100644 templatePage/animate/photo/photo.vue create mode 100644 templatePage/animate/suspended/suspended.vue create mode 100644 templatePage/animate/wave/wave.vue create mode 100644 templatePage/article/demo1/demo1.vue create mode 100644 templatePage/article/demo2/demo2.vue create mode 100644 templatePage/health/qrcode/qrcode.vue create mode 100644 templatePage/home/course/course.vue create mode 100644 templatePage/home/design/design.vue create mode 100644 templatePage/home/job/job.vue create mode 100644 templatePage/home/music/music.vue create mode 100644 templatePage/home/screen/screen.vue create mode 100644 templatePage/home/wallpaper/wallpaper.vue create mode 100644 templatePage/life/about/about.vue create mode 100644 templatePage/life/browser/browser.vue create mode 100644 templatePage/life/candle/candle.vue create mode 100644 templatePage/life/cover/cover.vue create mode 100644 templatePage/life/cube/cube.vue create mode 100644 templatePage/life/fullpage/fullpage.vue create mode 100644 templatePage/life/outset/outset.vue create mode 100644 templatePage/life/pano/pano.vue create mode 100644 templatePage/life/plus/plus.vue create mode 100644 templatePage/life/share/share.vue create mode 100644 templatePage/login/demo1/demo1.vue create mode 100644 templatePage/login/demo2/demo2.vue create mode 100644 templatePage/login/demo3/demo3.vue create mode 100644 templatePage/login/demo4/demo4.vue create mode 100644 templatePage/my/demo1/demo1.vue create mode 100644 templatePage/my/demo2/demo2.vue create mode 100644 templatePage/my/demo3/demo3.vue create mode 100644 templatePage/my/demo4/demo4.vue create mode 100644 templatePage/time/clock/clock.vue create mode 100644 thirdPage/short-video/short-video.vue 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/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.scss create mode 100644 util/request/index.js create mode 100644 util/request/requestInterceptors.js create mode 100644 util/request/responseInterceptors.js diff --git a/.DS_Store b/.DS_Store index cbdd17749f8460f9ead097eca88be5fbbcc001c5..c0bd868f229f63d44e49293dacdfb873fd80a06e 100644 GIT binary patch literal 10244 zcmeHMJ7^S96uqGYLc_#hWm5H}9T1_sn^p+547=youJ- zIFV08MV!J858`4ugkPLpM^3k#hxHIowdwK6N?31nAzg!0z$xGqa0)mDoC14A0lc%t zQ5;a#U7Z3>0jEH$fLI@VoWcg$ww0Aj2QIP%fX$;>9{4;gKEV3g2HLijg$IYHLSa>? zr%Mb^g`?fqxIo*svMQWBU3_>tv!^Q*PiDvceF-NoP}W_Y0#1Q$1w`$hrxP?yv(#ku z`^ec<(^n5mrE)DSqpi5K_GW$a`1_08Kb7fk%ouwEqjHw+L*5xGQwzCkG(}ZfpgW8M z9EA~;jpuinmm7$r?GXo?xep4}V$2nNh=a@aibJ9_>OOu`}!!+D$( z`u9p6Ayy$iziDucdrc1hg_wg8Z}z?&!SbswI|EXMIn10ZSQDGpnM2_Za7jU$yzXwr zV=@(;sI)zr^IaBt4T578ye|0V<>wR$n6fN zfK$LJ;1qBQI0bg6K#vOd#s2@L^xyw?m&8Ro1)KtVS^+O#nk-F#qTXBYBAY{tkMjmj zaR^*nSs8+hfQWXv9gly+cKk8j7Jqq%KhSM$Wo0skjUlpbQIx z9z!}qCPPVXzKcszPJR+d*KEi8b57_SbwrgoVHlj8pIZRb!@wYMfMN0)0g1_T z1SW4xy}`1Wor6P=87#vfzzw8bK~CD3_?>w&zltNs%?yknrvL#H#L-}}&G9^Qm;vMV BD*FHc diff --git a/App.vue b/App.vue new file mode 100644 index 0000000..1329aa4 --- /dev/null +++ b/App.vue @@ -0,0 +1,91 @@ + + + diff --git a/basicPage/avatar/avatar.vue b/basicPage/avatar/avatar.vue new file mode 100644 index 0000000..89b2502 --- /dev/null +++ b/basicPage/avatar/avatar.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/basicPage/badge/badge.vue b/basicPage/badge/badge.vue new file mode 100644 index 0000000..b8f8e90 --- /dev/null +++ b/basicPage/badge/badge.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/basicPage/border/border.vue b/basicPage/border/border.vue new file mode 100644 index 0000000..a3c9e82 --- /dev/null +++ b/basicPage/border/border.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/basicPage/button/button.vue b/basicPage/button/button.vue new file mode 100644 index 0000000..45a6e43 --- /dev/null +++ b/basicPage/button/button.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/basicPage/color/color.vue b/basicPage/color/color.vue new file mode 100644 index 0000000..4ec0ced --- /dev/null +++ b/basicPage/color/color.vue @@ -0,0 +1,759 @@ + + + + + diff --git a/basicPage/flex-layout/flex-layout.vue b/basicPage/flex-layout/flex-layout.vue new file mode 100644 index 0000000..1960b64 --- /dev/null +++ b/basicPage/flex-layout/flex-layout.vue @@ -0,0 +1,456 @@ + + + + + diff --git a/basicPage/grid-layout/grid-layout.vue b/basicPage/grid-layout/grid-layout.vue new file mode 100644 index 0000000..b895307 --- /dev/null +++ b/basicPage/grid-layout/grid-layout.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/basicPage/icon/icon.vue b/basicPage/icon/icon.vue new file mode 100644 index 0000000..0fbc92a --- /dev/null +++ b/basicPage/icon/icon.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/basicPage/icon/iconfont.js b/basicPage/icon/iconfont.js new file mode 100644 index 0000000..5b15cb1 --- /dev/null +++ b/basicPage/icon/iconfont.js @@ -0,0 +1,3 @@ +export default { + data: [{"id":26,"name":"basics","title":"基础图标","icons":[{"id":97,"icon":"font","name":"字体文字"},{"id":153,"icon":"search","name":"搜索"},{"id":204,"icon":"scan","name":"扫描扫码扫一扫"},{"id":202,"icon":"qr-code","name":"二维码扫码"},{"id":621,"icon":"qr-code-circle","name":"小程序码扫码"},{"id":203,"icon":"qr-barcode","name":"条形码条码扫码"},{"id":201,"icon":"qr-beibei","name":"微信码扫码北北"},{"id":319,"icon":"circle-lack","name":"刷新加载圆"},{"id":320,"icon":"circle-arrow","name":"刷新箭头圆"},{"id":712,"icon":"refresh-simple","name":"刷新箭头圆"},{"id":608,"icon":"refresh","name":"刷新圆加载"},{"id":609,"icon":"refresh-square","name":"刷新方加载"},{"id":490,"icon":"loading","name":"加载"},{"id":703,"icon":"history","name":"历史记录"},{"id":398,"icon":"title","name":"标题竖线"},{"id":399,"icon":"sort","name":"排序排列"},{"id":206,"icon":"filter","name":"筛选过滤"},{"id":392,"icon":"sequence-vertical","name":"排序排列纵向"},{"id":393,"icon":"sequence","name":"排序排列横向"},{"id":709,"icon":"totop-simple","name":"返回顶部"},{"id":740,"icon":"cloud","name":"云"},{"id":741,"icon":"cloud-fill","name":"云"},{"id":207,"icon":"upload","name":"云上传"},{"id":208,"icon":"download","name":"云下载"},{"id":644,"icon":"upload-simple","name":"上传"},{"id":643,"icon":"download-simple","name":"下载"},{"id":109,"icon":"my-add","name":"人员增加添加"},{"id":553,"icon":"my-reduce","name":"人员减少删除"},{"id":316,"icon":"sex","name":"性别两性男女"},{"id":317,"icon":"sex-female","name":"女性"},{"id":318,"icon":"sex-male","name":"男性"},{"id":322,"icon":"circle","name":"圆形单选"},{"id":321,"icon":"circle-fill","name":"圆形单选选中"},{"id":325,"icon":"square","name":"方形多选"},{"id":555,"icon":"square-fill","name":"方形多选选中"},{"id":467,"icon":"install","name":"安装设置"},{"id":466,"icon":"install-fill","name":"安装设置"},{"id":337,"icon":"send","name":"发送分享转发"},{"id":336,"icon":"send-fill","name":"发送分享转发"},{"id":332,"icon":"share-triangle","name":"发送分享转发"},{"id":335,"icon":"share","name":"发送分享转发"},{"id":334,"icon":"share-circle","name":"发送分享转发"},{"id":333,"icon":"share-square","name":"发送分享转发"},{"id":142,"icon":"all","name":"全部"}]},{"id":10,"name":"internet","title":"社交电商","icons":[{"id":225,"icon":"wechat","name":"微信"},{"id":226,"icon":"wechat-fill","name":"微信"},{"id":606,"icon":"bookmark","name":"书签标签"},{"id":607,"icon":"bookmark-fill","name":"书签标签"},{"id":343,"icon":"star","name":"星星收藏"},{"id":342,"icon":"star-fill","name":"星星收藏"},{"id":711,"icon":"praise-simple","name":"点赞赞扬认可"},{"id":705,"icon":"praise-simple-fill","name":"点赞赞扬认可"},{"id":713,"icon":"tread-simple","name":"踩不认可"},{"id":715,"icon":"tread-simple-fill","name":"踩不认可"},{"id":341,"icon":"praise","name":"点赞赞扬认可"},{"id":340,"icon":"praise-fill","name":"点赞赞扬认可"},{"id":612,"icon":"tread","name":"踩不认可"},{"id":610,"icon":"tread-fill","name":"踩不认可"},{"id":351,"icon":"like-break","name":"心碎不喜欢"},{"id":352,"icon":"like-lack","name":"爱心喜欢心动"},{"id":353,"icon":"like","name":"爱心喜欢心动"},{"id":354,"icon":"like-fill","name":"爱心喜欢心动凶姐"},{"id":362,"icon":"flower","name":"花朵美好赞美"},{"id":361,"icon":"flower-fill","name":"花朵美好赞美"},{"id":697,"icon":"floral","name":"花朵美好赞美"},{"id":700,"icon":"floral-fill","name":"花朵美好赞美"},{"id":293,"icon":"image","name":"图片照片"},{"id":294,"icon":"image-fill","name":"图片照片"},{"id":500,"icon":"theme","name":"主题色板"},{"id":642,"icon":"theme-fill","name":"主题色板"},{"id":224,"icon":"moments","name":"时刻朋友圈"},{"id":270,"icon":"commissary","name":"杂货店小卖部商店"},{"id":551,"icon":"commissary-fill","name":"杂货店小卖部商店"},{"id":268,"icon":"shop","name":"商店商城商铺"},{"id":269,"icon":"shop-fill","name":"商店商城商铺"},{"id":521,"icon":"paperbag","name":"购物袋购买买买"},{"id":522,"icon":"paperbag-fill","name":"购物袋购买买买"},{"id":274,"icon":"shopbag","name":"购物袋购买买买"},{"id":273,"icon":"shopbag-fill","name":"购物袋购买买买"},{"id":559,"icon":"buy","name":"购物袋购买买买"},{"id":560,"icon":"buy-fill","name":"购物袋购买买买"},{"id":276,"icon":"basket","name":"购物车购买买买"},{"id":275,"icon":"basket-fill","name":"购物车购买买买"},{"id":278,"icon":"cart","name":"购物车购买买买"},{"id":277,"icon":"cart-fill","name":"购物车购买买买"},{"id":272,"icon":"coupon","name":"优惠券折扣"},{"id":271,"icon":"coupon-fill","name":"优惠券折扣"},{"id":619,"icon":"inventory","name":"库存清单"},{"id":616,"icon":"inventory-fill","name":"库存清单"},{"id":260,"icon":"tag","name":"标签折扣"},{"id":259,"icon":"tag-fill","name":"标签折扣"},{"id":192,"icon":"lucky-money","name":"红包福利"},{"id":193,"icon":"lucky-money-fill","name":"红包福利"},{"id":279,"icon":"ticket","name":"票据小票"},{"id":280,"icon":"ticket-fill","name":"票据小票"},{"id":281,"icon":"receipt","name":"收据回执"},{"id":282,"icon":"receipt-fill","name":"收据回执"},{"id":470,"icon":"first","name":"排名第一"},{"id":472,"icon":"second","name":"排名第二"},{"id":471,"icon":"third","name":"排名第三"},{"id":256,"icon":"trophy","name":"奖杯奖项"},{"id":255,"icon":"trophy-fill","name":"奖杯奖项"},{"id":154,"icon":"brand","name":"品牌商标"},{"id":461,"icon":"brand-fill","name":"品牌商标"},{"id":93,"icon":"sword","name":"剑战斗"},{"id":7,"icon":"sword-fill","name":"剑战斗"},{"id":346,"icon":"fire","name":"火热门"},{"id":347,"icon":"fire-fill","name":"火热门"},{"id":120,"icon":"vip","name":"会员"},{"id":121,"icon":"vip-fill","name":"会员"},{"id":266,"icon":"baby","name":"奶瓶娃娃宝宝"},{"id":267,"icon":"baby-fill","name":"奶瓶娃娃宝宝"},{"id":227,"icon":"service","name":"客服"},{"id":228,"icon":"service-fill","name":"客服"},{"id":633,"icon":"service-simple","name":"客服"},{"id":632,"icon":"service-simple-fill","name":"客服"},{"id":738,"icon":"fireworks","name":"烟花礼花火花"},{"id":541,"icon":"birthday","name":"生日蛋糕"},{"id":194,"icon":"prize","name":"奖品礼品礼盒"},{"id":195,"icon":"gift","name":"礼物礼品礼盒"},{"id":39,"icon":"vip-text","name":"会员"},{"id":556,"icon":"allday","name":"24小时全天"},{"id":2,"icon":"text-zgs","name":"掌柜说"},{"id":626,"icon":"text-xzx","name":"心之选"},{"id":628,"icon":"text-sale","name":"销售促销"},{"id":625,"icon":"text-free","name":"免费"},{"id":624,"icon":"text-best","name":"最好的"},{"id":627,"icon":"text-like","name":"喜欢"},{"id":629,"icon":"text-hot","name":"热门"}]},{"id":25,"name":"safe","title":"账号安全","icons":[{"id":287,"icon":"identity","name":"身份证卡片名片"},{"id":288,"icon":"identity-fill","name":"身份证卡片名片"},{"id":286,"icon":"bankcard","name":"卡片会员卡银行卡"},{"id":285,"icon":"bankcard-fill","name":"卡片会员卡银行卡"},{"id":283,"icon":"cardbag","name":"卡包"},{"id":284,"icon":"cardbag-fill","name":"卡包"},{"id":196,"icon":"pay","name":"钱包支付"},{"id":554,"icon":"pay-fill","name":"钱包支付"},{"id":529,"icon":"payment-wechat","name":"微信支付"},{"id":533,"icon":"payment-alipay","name":"支付宝支付"},{"id":197,"icon":"refund","name":"付款收款退款支付钱包"},{"id":198,"icon":"money","name":"付款收款退款支付钱包"},{"id":506,"icon":"money-fill","name":"付款收款退款支付钱包"},{"id":116,"icon":"funds","name":"资金支付钱包"},{"id":117,"icon":"funds-fill","name":"资金支付钱包"},{"id":302,"icon":"trusty","name":"保证认证"},{"id":301,"icon":"trusty-fill","name":"保证认证"},{"id":304,"icon":"safe","name":"安全防护"},{"id":303,"icon":"safe-fill","name":"安全防护"},{"id":314,"icon":"unlock","name":"安全解锁"},{"id":315,"icon":"lock","name":"安全上锁"},{"id":310,"icon":"eye-hide","name":"闭眼不可见"},{"id":311,"icon":"eye-close","name":"闭眼不可见"},{"id":312,"icon":"eye","name":"眼睛可见"},{"id":313,"icon":"eye-fill","name":"眼睛可见"},{"id":13,"icon":"login","name":"登录登入"},{"id":12,"icon":"logout","name":"退出登出"},{"id":200,"icon":"fingerprint","name":"指纹解锁"},{"id":199,"icon":"power","name":"关机关闭"},{"id":653,"icon":"password","name":"手势密码"}]},{"id":19,"name":"message","title":"消息提示","icons":[{"id":360,"icon":"message","name":"消息评论"},{"id":359,"icon":"message-fill","name":"消息评论"},{"id":358,"icon":"comment","name":"消息评论"},{"id":357,"icon":"comment-fill","name":"消息评论"},{"id":349,"icon":"topics","name":"话题讨论"},{"id":350,"icon":"topics-fill","name":"话题讨论"},{"id":355,"icon":"reply","name":"消息回复"},{"id":356,"icon":"reply-fill","name":"消息回复"},{"id":496,"icon":"email","name":"邮件信息"},{"id":502,"icon":"email-fill","name":"邮件信息"},{"id":96,"icon":"notice","name":"通知提示"},{"id":95,"icon":"notice-fill","name":"通知提示"},{"id":94,"icon":"notice-no","name":"关闭通知提示"},{"id":552,"icon":"notice-no-fill","name":"关闭通知提示"},{"id":254,"icon":"creative","name":"订阅灵感创意"},{"id":253,"icon":"creative-fill","name":"订阅灵感创意"},{"id":251,"icon":"creative-stop","name":"无订阅灵感创意"},{"id":252,"icon":"creative-stop-fill","name":"无订阅灵感创意"},{"id":237,"icon":"clock","name":"闹钟提醒"},{"id":238,"icon":"clock-fill","name":"闹钟提醒"},{"id":240,"icon":"time","name":"时间时钟"},{"id":239,"icon":"time-fill","name":"时间时钟"},{"id":734,"icon":"tip","name":"提示提醒"},{"id":421,"icon":"tip-fill","name":"提示提醒"},{"id":420,"icon":"tips","name":"提示提醒"},{"id":735,"icon":"tips-fill","name":"提示提醒"},{"id":404,"icon":"warning","name":"警告警示"},{"id":405,"icon":"warning-fill","name":"警告警示"},{"id":418,"icon":"help","name":"帮助中心"},{"id":419,"icon":"help-fill","name":"帮助中心"}]},{"id":9,"name":"edit","title":"文档操作","icons":[{"id":586,"icon":"folder","name":"文档文件"},{"id":587,"icon":"folder-fill","name":"文档文件"},{"id":720,"icon":"folder-add","name":"增加文档文件"},{"id":724,"icon":"folder-add-fill","name":"增加文档文件"},{"id":726,"icon":"folder-reduce","name":"减少文档文件"},{"id":725,"icon":"folder-reduce-fill","name":"减少文档文件"},{"id":590,"icon":"folder-upload","name":"文档文件上传"},{"id":592,"icon":"folder-upload-fill","name":"文档文件上传"},{"id":591,"icon":"folder-download","name":"文档文件下载"},{"id":588,"icon":"folder-download-fill","name":"文档文件下载"},{"id":291,"icon":"order","name":"订单列表"},{"id":292,"icon":"order-fill","name":"订单列表"},{"id":289,"icon":"calendar","name":"日历日期日签"},{"id":290,"icon":"calendar-fill","name":"日历日期日签"},{"id":295,"icon":"image-text","name":"图文详情"},{"id":296,"icon":"image-text-fill","name":"图文详情"},{"id":305,"icon":"edit","name":"编辑编写"},{"id":306,"icon":"edit-form","name":"编辑编写"},{"id":307,"icon":"edit-write","name":"编辑编写"},{"id":18,"icon":"edit-write-fill","name":"编辑编写"},{"id":309,"icon":"write","name":"编辑编写"},{"id":308,"icon":"write-fill","name":"编辑编写"},{"id":730,"icon":"write-feather","name":"编辑编写"},{"id":736,"icon":"write-feather-fill","name":"编辑编写"},{"id":710,"icon":"pushpin","name":"书签图钉"},{"id":716,"icon":"pushpin-fill","name":"书签图钉"},{"id":45,"icon":"shears","name":"剪刀剪掉"},{"id":578,"icon":"tailor","name":"裁剪剪掉"},{"id":538,"icon":"pin","name":"别针回形针"},{"id":155,"icon":"link","name":"链接跳转"},{"id":573,"icon":"move","name":"移动操作"},{"id":562,"icon":"expend","name":"全屏"},{"id":561,"icon":"compress","name":"全屏"},{"id":526,"icon":"fullscreen","name":"全屏"},{"id":527,"icon":"narrow","name":"全屏"},{"id":563,"icon":"fullscreen-all","name":"全屏"},{"id":572,"icon":"narrow-all","name":"全屏"},{"id":672,"icon":"bigscreen","name":"全屏"},{"id":528,"icon":"smallscreen","name":"全屏"},{"id":324,"icon":"copy","name":"复制粘贴"},{"id":323,"icon":"copy-fill","name":"复制粘贴"},{"id":623,"icon":"task","name":"复制粘贴"},{"id":622,"icon":"task-fill","name":"复制粘贴"},{"id":205,"icon":"revoke","name":"返回取消"},{"id":414,"icon":"success","name":"成功对的"},{"id":416,"icon":"close","name":"关闭错的"},{"id":412,"icon":"success-circle","name":"成功"},{"id":411,"icon":"success-circle-fill","name":"成功"},{"id":417,"icon":"close-circle","name":"关闭"},{"id":415,"icon":"close-fill","name":"关闭"},{"id":410,"icon":"success-square","name":"成功多选"},{"id":413,"icon":"success-square-fill","name":"成功多选"},{"id":549,"icon":"close-square","name":"关闭删除"},{"id":550,"icon":"close-square-fill","name":"关闭删除"},{"id":382,"icon":"backspace","name":"回退删除"},{"id":383,"icon":"backspace-fill","name":"回退删除"},{"id":242,"icon":"delete","name":"删除垃圾桶"},{"id":243,"icon":"delete-fill","name":"删除垃圾桶"},{"id":244,"icon":"clear","name":"清除打扫"},{"id":462,"icon":"clear-fill","name":"清除打扫"},{"id":447,"icon":"add","name":"添加增加"},{"id":449,"icon":"reduce","name":"减少删除"},{"id":446,"icon":"add-circle","name":"添加增加"},{"id":448,"icon":"add-fill","name":"添加增加"},{"id":452,"icon":"reduce-circle","name":"减少删除"},{"id":453,"icon":"reduce-circle-fill","name":"减少删除"},{"id":547,"icon":"add-square","name":"添加增加"},{"id":548,"icon":"add-square-fill","name":"添加增加"},{"id":451,"icon":"reduce-square","name":"减少删除"},{"id":450,"icon":"reduce-square-fill","name":"减少删除"},{"id":605,"icon":"add-rhombus","name":"添加增加"},{"id":604,"icon":"add-rhombus-fill","name":"添加增加"},{"id":676,"icon":"reduce-rhombus","name":"减少删除"},{"id":678,"icon":"reduce-rhombus-fill","name":"减少删除"},{"id":409,"icon":"zoom-in","name":"放大"},{"id":408,"icon":"zoom-in-fill","name":"放大"},{"id":406,"icon":"zoom-out","name":"缩小"},{"id":407,"icon":"zoom-out-fill","name":"缩小"},{"id":688,"icon":"norm","name":"规则规范"},{"id":689,"icon":"norm-fill","name":"规则规范"},{"id":402,"icon":"more-circle","name":"更多"},{"id":403,"icon":"more-circle-fill","name":"更多"},{"id":476,"icon":"circle-more","name":"更多组"},{"id":330,"icon":"group-circle","name":"更多组"},{"id":331,"icon":"group-null","name":"更多组"},{"id":401,"icon":"more-horizontal","name":"更多组"},{"id":400,"icon":"more-vertical","name":"更多组"},{"id":329,"icon":"group-triangle","name":"更多组"},{"id":328,"icon":"group-square","name":"更多组"},{"id":327,"icon":"group-double","name":"更多组"},{"id":396,"icon":"align-left","name":"左对齐"},{"id":394,"icon":"align-center","name":"居中对齐"},{"id":395,"icon":"align-right","name":"右对齐"},{"id":397,"icon":"align","name":"两端对齐"}]},{"id":8,"name":"direction","title":"箭头方向","icons":[{"id":442,"icon":"up-circle","name":"向上往上上面"},{"id":445,"icon":"up-fill","name":"向上往上上面"},{"id":439,"icon":"right-circle","name":"向右往右右边"},{"id":435,"icon":"right-fill","name":"向右往右右边"},{"id":430,"icon":"down-circle","name":"向下往下下面"},{"id":432,"icon":"down-fill","name":"向下往下下面"},{"id":426,"icon":"left-circle","name":"向左往左左边"},{"id":424,"icon":"left-fill","name":"向左往左左边"},{"id":441,"icon":"up-arrow","name":"向上往上上面"},{"id":436,"icon":"right-arrow","name":"向右往右右边"},{"id":429,"icon":"down-arrow","name":"向下往下下面"},{"id":427,"icon":"left-arrow","name":"向左往左左边"},{"id":440,"icon":"up","name":"向上往上上面"},{"id":434,"icon":"right","name":"向右往右右边"},{"id":428,"icon":"down","name":"向下往下下面"},{"id":422,"icon":"left","name":"向左往左左边"},{"id":444,"icon":"up-double","name":"向上往上上面"},{"id":437,"icon":"right-double","name":"向右往右右边"},{"id":431,"icon":"down-double","name":"向下往下下面"},{"id":425,"icon":"left-double","name":"向左往左左边"},{"id":443,"icon":"up-triangle","name":"向上往上上面"},{"id":438,"icon":"right-triangle","name":"向右往右右边"},{"id":433,"icon":"down-triangle","name":"向下往下下面"},{"id":423,"icon":"left-triangle","name":"向左往左左边"},{"id":645,"icon":"on","name":"打开"},{"id":646,"icon":"off","name":"关上关闭"}]},{"id":18,"name":"media","title":"媒体音乐","icons":[{"id":371,"icon":"sing","name":"唱歌音乐"},{"id":372,"icon":"music-fill","name":"播放音乐"},{"id":373,"icon":"music-stop","name":"停止播放音乐"},{"id":377,"icon":"voice","name":"话筒语音"},{"id":376,"icon":"voice-fill","name":"话筒语音"},{"id":375,"icon":"video","name":"视频播放"},{"id":374,"icon":"video-fill","name":"视频播放"},{"id":614,"icon":"video-square","name":"视频播放"},{"id":615,"icon":"video-square-fill","name":"视频播放"},{"id":613,"icon":"play","name":"播放"},{"id":380,"icon":"play-fill","name":"播放"},{"id":381,"icon":"stop","name":"停止播放"},{"id":687,"icon":"previous-song","name":"上一首上一曲"},{"id":691,"icon":"previous-song-fill","name":"上一首上一曲"},{"id":679,"icon":"next-song","name":"下一首下一曲"},{"id":685,"icon":"next-song-fill","name":"下一首下一曲"},{"id":378,"icon":"previous-fill","name":"快退上一首"},{"id":379,"icon":"next-fill","name":"快进下一首"},{"id":390,"icon":"sound-add","name":"音量增加"},{"id":391,"icon":"sound-add-fill","name":"音量增加"},{"id":389,"icon":"sound-reduce","name":"音量减少"},{"id":388,"icon":"sound-reduce-fill","name":"音量减少"},{"id":385,"icon":"sound-close","name":"静音音量"},{"id":384,"icon":"sound-close-fill","name":"静音音量"},{"id":387,"icon":"sound","name":"声音音量"},{"id":386,"icon":"sound-fill","name":"声音音量"},{"id":611,"icon":"audio","name":"音频语音"}]},{"id":5,"name":"electronics","title":"设备程序","icons":[{"id":161,"icon":"phone","name":"手机"},{"id":162,"icon":"phone-fill","name":"手机"},{"id":159,"icon":"ipad","name":"平板"},{"id":160,"icon":"ipad-fill","name":"平板"},{"id":44,"icon":"headset","name":"耳机"},{"id":677,"icon":"headset-fill","name":"耳机"},{"id":42,"icon":"mouse","name":"鼠标"},{"id":463,"icon":"mouse-fill","name":"鼠标"},{"id":46,"icon":"notebook","name":"笔记本"},{"id":43,"icon":"notebook-fill","name":"笔记本"},{"id":28,"icon":"platform","name":"电脑显示屏数据"},{"id":27,"icon":"platform-fill","name":"电脑显示屏数据"},{"id":157,"icon":"computer","name":"电脑显示屏"},{"id":158,"icon":"computer-fill","name":"电脑显示屏"},{"id":258,"icon":"game","name":"游戏机"},{"id":257,"icon":"game-fill","name":"游戏机"},{"id":367,"icon":"camera","name":"相机拍照拍摄"},{"id":368,"icon":"camera-fill","name":"相机拍照拍摄"},{"id":369,"icon":"live-stream","name":"直播录像"},{"id":370,"icon":"live-stream-fill","name":"直播录像"},{"id":544,"icon":"monitor","name":"监控摄像头"},{"id":464,"icon":"monitor-fill","name":"监控摄像头"},{"id":102,"icon":"server","name":"服务器"},{"id":33,"icon":"server-fill","name":"服务器"},{"id":163,"icon":"tel","name":"电话"},{"id":165,"icon":"tel-circle","name":"电话"},{"id":164,"icon":"tel-circle-fill","name":"电话"},{"id":248,"icon":"keyboard","name":"键盘"},{"id":247,"icon":"keyboard-circle","name":"键盘"},{"id":460,"icon":"keyboard-circle-fill","name":"键盘"},{"id":530,"icon":"cursor","name":"鼠标箭头光标"},{"id":531,"icon":"cursor-fill","name":"鼠标箭头光标"},{"id":474,"icon":"program","name":"小程序"},{"id":475,"icon":"program-fill","name":"小程序"},{"id":543,"icon":"iot","name":"物联网"},{"id":545,"icon":"iot-fill","name":"物联网"},{"id":156,"icon":"code","name":"代码编程"},{"id":492,"icon":"bigbug","name":"漏洞虫子爬虫"},{"id":15,"icon":"bug","name":"漏洞"},{"id":16,"icon":"bug-fill","name":"漏洞"},{"id":209,"icon":"fork","name":"分支"},{"id":211,"icon":"master","name":"主分支"},{"id":210,"icon":"relation","name":"关系连接"},{"id":250,"icon":"wifi","name":"有wifi"},{"id":249,"icon":"wifi-no","name":"无wifi"},{"id":52,"icon":"bluetooth","name":"蓝牙"},{"id":593,"icon":"hotspot","name":"热点"},{"id":47,"icon":"battery-empty","name":"没电"},{"id":48,"icon":"battery-low","name":"低电量"},{"id":49,"icon":"battery-mid","name":"电量中"},{"id":50,"icon":"battery-high","name":"电量高"},{"id":51,"icon":"battery-full","name":"满电"}]},{"id":6,"name":"health","title":"运动健康","icons":[{"id":170,"icon":"sport-jog","name":"慢跑"},{"id":171,"icon":"sport-run","name":"跑步"},{"id":172,"icon":"sport-swim","name":"游泳"},{"id":173,"icon":"sport-cycle","name":"骑车"},{"id":520,"icon":"heartbeat","name":"心跳"},{"id":107,"icon":"medical","name":"医疗"},{"id":99,"icon":"biology","name":"生物"},{"id":98,"icon":"chemistry","name":"化学"},{"id":166,"icon":"watercup","name":"水杯"},{"id":106,"icon":"pharmacy","name":"药物"},{"id":495,"icon":"chain","name":"分子"},{"id":494,"icon":"dna","name":"基因"},{"id":489,"icon":"cell","name":"细胞"},{"id":493,"icon":"dinosaur","name":"恐龙"},{"id":169,"icon":"covid-19","name":"病毒"},{"id":465,"icon":"covid-19-fill","name":"病毒"}]},{"id":7,"name":"living","title":"生活居家","icons":[{"id":455,"icon":"bed","name":"床"},{"id":454,"icon":"bed-fill","name":"床"},{"id":574,"icon":"pillow","name":"枕头"},{"id":576,"icon":"pillow-fill","name":"枕头"},{"id":542,"icon":"sofa","name":"沙发"},{"id":525,"icon":"sofa-fill","name":"沙发"},{"id":558,"icon":"bathtub","name":"浴缸"},{"id":557,"icon":"bathtub-fill","name":"浴缸"},{"id":575,"icon":"plant","name":"植物"},{"id":577,"icon":"plant-fill","name":"植物"},{"id":168,"icon":"gloves","name":"手套"},{"id":167,"icon":"gloves-fill","name":"手套"},{"id":594,"icon":"router","name":"路由器"},{"id":595,"icon":"router-fill","name":"路由器"},{"id":727,"icon":"food","name":"食物美食"},{"id":728,"icon":"food-fill","name":"食物美食"},{"id":719,"icon":"eat","name":"吃饭食物美食"},{"id":718,"icon":"eat-fill","name":"吃饭食物美食"},{"id":721,"icon":"eat-west","name":"吃饭食物美食"},{"id":722,"icon":"eat-west-fill","name":"吃饭食物美食"},{"id":717,"icon":"eat-other","name":"吃饭食物美食"},{"id":723,"icon":"eat-other-fill","name":"吃饭食物美食"}]},{"id":12,"name":"travel","title":"交通出行","icons":[{"id":35,"icon":"errands","name":"步行"},{"id":36,"icon":"errands-fill","name":"步行"},{"id":38,"icon":"delivery","name":"骑车"},{"id":37,"icon":"delivery-fill","name":"骑车"},{"id":263,"icon":"taxi","name":"出租车"},{"id":262,"icon":"taxi-fill","name":"出租车"},{"id":261,"icon":"logistics","name":"物流"},{"id":458,"icon":"logistics-fill","name":"物流"},{"id":364,"icon":"location","name":"位置"},{"id":363,"icon":"location-fill","name":"位置"},{"id":366,"icon":"map","name":"地图地点"},{"id":365,"icon":"map-fill","name":"地图地点"},{"id":118,"icon":"signpost","name":"指示牌"},{"id":119,"icon":"signpost-fill","name":"指示牌"},{"id":663,"icon":"route","name":"路线"},{"id":664,"icon":"route-fill","name":"路线"},{"id":583,"icon":"suitcase","name":"行李箱"},{"id":584,"icon":"suitcase-fill","name":"行李箱"},{"id":241,"icon":"footprint","name":"足迹"},{"id":674,"icon":"footprint-fill","name":"足迹"},{"id":178,"icon":"balancecar","name":"平衡车"},{"id":179,"icon":"electromobile","name":"小电瓶"},{"id":177,"icon":"bus","name":"公交车"},{"id":176,"icon":"steamship","name":"轮船"},{"id":175,"icon":"train","name":"train"},{"id":174,"icon":"airplane","name":"飞机"},{"id":743,"icon":"departures","name":"飞机起飞"},{"id":739,"icon":"arrivals","name":"飞机降落"},{"id":658,"icon":"global","name":"地球"},{"id":108,"icon":"wheelchair","name":"轮椅残疾人"},{"id":582,"icon":"escalator","name":"扶梯电梯"},{"id":468,"icon":"restroom-female","name":"女卫生间女洗手间女厕所"},{"id":469,"icon":"restroom-male","name":"男卫生间女洗手间男厕所"}]},{"id":22,"name":"gesture","title":"手势动作","icons":[{"id":566,"icon":"gesture-one","name":"手势一"},{"id":569,"icon":"gesture-two","name":"手势二"},{"id":568,"icon":"gesture-three","name":"手势三"},{"id":567,"icon":"gesture-four","name":"手势四"},{"id":565,"icon":"gesture-five","name":"手势五"},{"id":564,"icon":"gesture-dropdown","name":"手势下滑下拉"},{"id":326,"icon":"open","name":"打开展开"}]},{"id":23,"name":"data","title":"数据图表","icons":[{"id":299,"icon":"statistics","name":"数据统计"},{"id":300,"icon":"statistics-fill","name":"数据统计"},{"id":297,"icon":"data","name":"数据分享"},{"id":298,"icon":"data-fill","name":"数据分享"}]},{"id":20,"name":"menu","title":"菜单分类","icons":[{"id":132,"icon":"home","name":"首页"},{"id":133,"icon":"home-fill","name":"首页"},{"id":134,"icon":"home-vertical","name":"首页"},{"id":135,"icon":"home-vertical-fill","name":"首页"},{"id":136,"icon":"home-smile","name":"首页"},{"id":137,"icon":"home-smile-fill","name":"首页"},{"id":570,"icon":"home-love","name":"首页"},{"id":571,"icon":"home-love-fill","name":"首页"},{"id":486,"icon":"home-in","name":"首页"},{"id":485,"icon":"home-in-fill","name":"首页"},{"id":487,"icon":"home-loading","name":"首页"},{"id":488,"icon":"home-loading-fill","name":"首页"},{"id":516,"icon":"home-totop","name":"首页"},{"id":515,"icon":"home-totop-fill","name":"首页"},{"id":630,"icon":"home-leaf","name":"首页"},{"id":631,"icon":"home-leaf-fill","name":"首页"},{"id":138,"icon":"home-capsule","name":"首页"},{"id":139,"icon":"home-capsule-fill","name":"首页"},{"id":100,"icon":"level","name":"等级列表"},{"id":20,"icon":"level-fill","name":"等级列表"},{"id":101,"icon":"deploy","name":"分类调试"},{"id":23,"icon":"deploy-fill","name":"分类调试"},{"id":512,"icon":"block","name":"分类菜单"},{"id":511,"icon":"block-fill","name":"分类菜单"},{"id":150,"icon":"menu-circle","name":"分类菜单"},{"id":19,"icon":"menu-circle-fill","name":"分类菜单"},{"id":680,"icon":"menu-grille","name":"分类菜单"},{"id":684,"icon":"menu-grille-fill","name":"分类菜单"},{"id":523,"icon":"menu-match","name":"分类菜单"},{"id":524,"icon":"menu-match-fill","name":"分类菜单"},{"id":144,"icon":"assort","name":"分类菜单"},{"id":143,"icon":"assort-fill","name":"分类菜单"},{"id":149,"icon":"menu","name":"分类菜单"},{"id":21,"icon":"menu-fill","name":"分类菜单"},{"id":145,"icon":"menu-list","name":"分类菜单"},{"id":34,"icon":"menu-list-fill","name":"分类菜单"},{"id":146,"icon":"menu-sorts","name":"分类菜单"},{"id":32,"icon":"menu-sorts-fill","name":"分类菜单"},{"id":147,"icon":"menu-sort","name":"分类菜单"},{"id":30,"icon":"menu-sort-fill","name":"分类菜单"},{"id":148,"icon":"menu-more","name":"分类菜单"},{"id":24,"icon":"menu-more-fill","name":"分类菜单"},{"id":457,"icon":"menu-flex","name":"分类菜单"},{"id":456,"icon":"menu-flex-fill","name":"分类菜单"},{"id":513,"icon":"menu-classify","name":"分类菜单"},{"id":514,"icon":"menu-classify-fill","name":"分类菜单"},{"id":507,"icon":"menu-alone","name":"分类菜单"},{"id":508,"icon":"menu-alone-fill","name":"分类菜单"},{"id":596,"icon":"menu-rhombus","name":"分类菜单"},{"id":597,"icon":"menu-rhombus-fill","name":"分类菜单"},{"id":151,"icon":"search-menu","name":"菜单搜索"},{"id":25,"icon":"search-menu-fill","name":"菜单搜索"},{"id":152,"icon":"search-list","name":"搜索列表"},{"id":29,"icon":"search-list-fill","name":"搜索列表"},{"id":599,"icon":"plane","name":"菜单飞机"},{"id":598,"icon":"plane-fill","name":"菜单飞机"},{"id":659,"icon":"reload-home","name":"首页重载"},{"id":661,"icon":"reload-home-fill","name":"首页重载"},{"id":660,"icon":"reload-planet","name":"星球重载"},{"id":662,"icon":"reload-planet-fill","name":"星球重载"},{"id":635,"icon":"meteor","name":"流星"},{"id":634,"icon":"meteor-fill","name":"流星"},{"id":92,"icon":"rocket","name":"火箭"},{"id":9,"icon":"rocket-fill","name":"火箭"},{"id":10,"icon":"totop","name":"火箭返回顶部"},{"id":11,"icon":"totop-fill","name":"火箭返回顶部"},{"id":91,"icon":"job","name":"工作领带"},{"id":8,"icon":"job-fill","name":"工作领带"},{"id":53,"icon":"science","name":"科学"},{"id":22,"icon":"science-fill","name":"科学"},{"id":126,"icon":"count","name":"运算计算"},{"id":127,"icon":"count-fill","name":"运算计算"},{"id":696,"icon":"assign","name":"分配指派"},{"id":698,"icon":"assign-fill","name":"分配指派"},{"id":124,"icon":"honor","name":"荣誉证书"},{"id":125,"icon":"honor-fill","name":"荣誉证书"},{"id":128,"icon":"discover-planet","name":"行星发现"},{"id":129,"icon":"discover-planet-fill","name":"行星发现"},{"id":130,"icon":"discover","name":"发现"},{"id":131,"icon":"discover-fill","name":"发现"},{"id":535,"icon":"module","name":"模块"},{"id":539,"icon":"module-fill","name":"模块"},{"id":344,"icon":"caring","name":"关心"},{"id":345,"icon":"caring-fill","name":"关心"},{"id":682,"icon":"ai","name":"人工智能"},{"id":681,"icon":"ai-fill","name":"人工智能"},{"id":505,"icon":"ghost","name":"幽灵"},{"id":459,"icon":"ghost-fill","name":"幽灵"},{"id":110,"icon":"my","name":"我的个人中心"},{"id":111,"icon":"my-fill","name":"我的个人中心"},{"id":671,"icon":"my-lack","name":"我的个人中心"},{"id":670,"icon":"my-lack-fill","name":"我的个人中心"},{"id":647,"icon":"my-circle","name":"我的个人中心"},{"id":648,"icon":"my-circle-fill","name":"我的个人中心"},{"id":666,"icon":"my-simple","name":"我的个人中心"},{"id":665,"icon":"my-simple-fill","name":"我的个人中心"},{"id":707,"icon":"my-formal","name":"我的个人中心商务"},{"id":706,"icon":"my-formal-fill","name":"我的个人中心商务"},{"id":704,"icon":"my-job","name":"我的个人中心商务"},{"id":708,"icon":"my-job-fill","name":"我的个人中心商务"}]},{"id":14,"name":"system","title":"管理系统","icons":[{"id":702,"icon":"fold","name":"收起折叠"},{"id":714,"icon":"unfold","name":"展开展示"},{"id":534,"icon":"dashboard","name":"仪表盘"},{"id":540,"icon":"dashboard-fill","name":"仪表盘"},{"id":229,"icon":"team","name":"员工团队"},{"id":230,"icon":"team-fill","name":"员工团队"},{"id":104,"icon":"organizatio","name":"组织架构"},{"id":26,"icon":"organizatio-fill","name":"组织架构"},{"id":105,"icon":"company","name":"公司企业"},{"id":17,"icon":"company-fill","name":"公司企业"},{"id":264,"icon":"flag","name":"目标旗帜"},{"id":265,"icon":"flag-fill","name":"目标旗帜"},{"id":122,"icon":"hardware","name":"电子硬件"},{"id":123,"icon":"hardware-fill","name":"电子硬件"},{"id":112,"icon":"trust","name":"合作伙伴"},{"id":113,"icon":"trust-fill","name":"合作伙伴"},{"id":245,"icon":"set","name":"系统设置"},{"id":246,"icon":"set-fill","name":"系统设置"},{"id":14,"icon":"expand","name":"子菜单"}]},{"id":2,"name":"brand","title":"知名品牌","icons":[{"id":1,"icon":"nintendo-switch","name":"任天堂"},{"id":216,"icon":"logo-tuniao","name":"图鸟"},{"id":4,"icon":"huawei","name":"华为"},{"id":5,"icon":"iphone","name":"苹果"},{"id":222,"icon":"alipay","name":"支付宝"},{"id":218,"icon":"taobao","name":"淘宝"},{"id":223,"icon":"qq","name":"企鹅"},{"id":221,"icon":"dingtalk","name":"钉钉"},{"id":217,"icon":"sina","name":"新浪"},{"id":6,"icon":"tiktok","name":"抖音"},{"id":41,"icon":"logo-shangpu","name":"上铺"},{"id":692,"icon":"seafox","name":"海狐"},{"id":580,"icon":"windows","name":"微软"},{"id":732,"icon":"vscode","name":"代码编辑器"},{"id":219,"icon":"gitee","name":"码云"},{"id":220,"icon":"github","name":"章鱼猫"},{"id":214,"icon":"linkedin","name":"领英"},{"id":215,"icon":"twitter","name":"推特"},{"id":212,"icon":"facebook","name":"脸书"},{"id":213,"icon":"google","name":"谷歌"}]},{"id":24,"name":"idea","title":"创意logo","icons":[{"id":40,"icon":"panda","name":"熊猫"},{"id":695,"icon":"fish","name":"鱼"},{"id":484,"icon":"dragon","name":"龙"},{"id":510,"icon":"rabbit","name":"兔子"},{"id":478,"icon":"mammoth","name":"猛犸象"},{"id":483,"icon":"whale","name":"蓝鲸"},{"id":477,"icon":"windmill","name":"风车"},{"id":509,"icon":"tree","name":"树"},{"id":491,"icon":"orange","name":"橙子"},{"id":479,"icon":"alien","name":"外星人"}]},{"id":27,"name":"symbol","title":"表情符号","icons":[{"id":235,"icon":"emoji-good","name":"微笑好评"},{"id":236,"icon":"emoji-good-fill","name":"微笑好评"},{"id":233,"icon":"emoji-general","name":"平静中评"},{"id":234,"icon":"emoji-general-fill","name":"平静中评"},{"id":231,"icon":"emoji-sad","name":"悲伤差评"},{"id":232,"icon":"emoji-sad-fill","name":"悲伤差评"},{"id":694,"icon":"skull","name":"骨头骷髅"},{"id":693,"icon":"skull-fill","name":"骨头骷髅"},{"id":536,"icon":"at-sign","name":"圈人"},{"id":537,"icon":"copyright","name":"版权"},{"id":579,"icon":"trademark","name":"商标"},{"id":600,"icon":"spiral","name":"螺旋"},{"id":737,"icon":"prohibit","name":"禁止禁用"},{"id":141,"icon":"focus","name":"瞄准"},{"id":742,"icon":"parking","name":"停车停止"},{"id":618,"icon":"percent","name":"百分比"},{"id":617,"icon":"percent-fill","name":"百分比"},{"id":699,"icon":"equal","name":"等于相等"},{"id":701,"icon":"equal-fill","name":"等于相等"},{"id":348,"icon":"topic","name":"指令话题"},{"id":546,"icon":"cute","name":"可爱"}]},{"id":17,"name":"geometry","title":"抽象几何","icons":[{"id":589,"icon":"pyramid","name":"锥体金字塔"},{"id":504,"icon":"molecule","name":"分子"},{"id":67,"icon":"constellation","name":"星座星系"},{"id":620,"icon":"activity","name":"活动"},{"id":103,"icon":"cube","name":"立方体"},{"id":31,"icon":"cube-fill","name":"立方体"},{"id":729,"icon":"honeycomb","name":"honeycomb"},{"id":731,"icon":"honeycomb-fill","name":"honeycomb-fill"},{"id":668,"icon":"around","name":"围绕"},{"id":667,"icon":"around-fill","name":"围绕"},{"id":656,"icon":"unite","name":"团结"},{"id":657,"icon":"unite-fill","name":"团结"}]},{"id":28,"name":"culture","title":"文化元素","icons":[{"id":481,"icon":"knot","name":"中国结绳结"},{"id":473,"icon":"ninja","name":"忍者"},{"id":601,"icon":"lotus","name":"莲花"},{"id":517,"icon":"petal","name":"花瓣"},{"id":480,"icon":"taichi","name":"太极"},{"id":602,"icon":"koi","name":"锦鲤"},{"id":603,"icon":"koi-fill","name":"锦鲤"},{"id":519,"icon":"clover","name":"幸运草"},{"id":518,"icon":"clover-fill","name":"幸运草"},{"id":690,"icon":"piggy-bank","name":"存钱罐猪"},{"id":686,"icon":"piggy-bank-fill","name":"存钱罐猪"},{"id":637,"icon":"dice-one","name":"色子一"},{"id":641,"icon":"dice-two","name":"色子二"},{"id":638,"icon":"dice-three","name":"色子三"},{"id":640,"icon":"dice-four","name":"色子四"},{"id":636,"icon":"dice-five","name":"色子五"},{"id":639,"icon":"dice-six","name":"色子六"}]},{"id":4,"name":"zodiac","title":"生肖星座","icons":[{"id":191,"icon":"zodiac-shu","name":"生肖鼠"},{"id":190,"icon":"zodiac-niu","name":"生肖牛"},{"id":189,"icon":"zodiac-hu","name":"生肖虎"},{"id":188,"icon":"zodiac-tu","name":"生肖兔"},{"id":187,"icon":"zodiac-long","name":"生肖龙"},{"id":186,"icon":"zodiac-she","name":"生肖蛇"},{"id":185,"icon":"zodiac-ma","name":"生肖马"},{"id":184,"icon":"zodiac-yang","name":"生肖羊"},{"id":183,"icon":"zodiac-hou","name":"生肖猴"},{"id":182,"icon":"zodiac-ji","name":"生肖鸡"},{"id":181,"icon":"zodiac-gou","name":"生肖狗"},{"id":180,"icon":"zodiac-zhu","name":"生肖猪"},{"id":55,"icon":"con-aquarius","name":"星座水瓶座"},{"id":56,"icon":"con-pisces","name":"星座双鱼座"},{"id":57,"icon":"con-aries","name":"星座白羊座"},{"id":58,"icon":"con-taurus","name":"星座金牛座"},{"id":59,"icon":"con-gemini","name":"星座双子座"},{"id":60,"icon":"con-cancer","name":"星座巨蟹座"},{"id":61,"icon":"con-leo","name":"星座狮子座"},{"id":62,"icon":"con-virgo","name":"星座处女座"},{"id":63,"icon":"con-libra","name":"星座天秤座"},{"id":64,"icon":"con-scorpio","name":"星座天蝎座"},{"id":65,"icon":"con-sagittarius","name":"星座射手座"},{"id":66,"icon":"con-apricorn","name":"星座摩羯座"}]},{"id":3,"name":"weather","title":"气象天气","icons":[{"id":655,"icon":"umbrella","name":"雨伞"},{"id":675,"icon":"umbrella-fill","name":"雨伞"},{"id":114,"icon":"moon","name":"月亮黑夜"},{"id":115,"icon":"moon-fill","name":"月亮黑夜"},{"id":339,"icon":"light","name":"闪电雷电"},{"id":338,"icon":"light-fill","name":"闪电雷电"},{"id":482,"icon":"snowflake","name":"雪花"},{"id":733,"icon":"starry","name":"繁星流星"},{"id":69,"icon":"wea-cloud","name":"云"},{"id":68,"icon":"wea-cloud-more","name":"多云"},{"id":70,"icon":"wea-cloud-sun","name":"多云转晴"},{"id":71,"icon":"wea-rain","name":"小雨"},{"id":72,"icon":"wea-rain-middle","name":"中雨"},{"id":73,"icon":"wea-rain-heavy","name":"大雨"},{"id":74,"icon":"wea-snow","name":"下雪"},{"id":75,"icon":"wea-wind","name":"微风吹风"},{"id":76,"icon":"wea-sun","name":"太阳晴天"},{"id":651,"icon":"sunrise","name":"日出"},{"id":652,"icon":"sunset","name":"日落"},{"id":649,"icon":"temperature-f","name":"华氏度温度"},{"id":650,"icon":"temperature-c","name":"摄氏度温度"}]},{"id":13,"name":"blank","title":"空白缺省","icons":[{"id":84,"icon":"empty-search","name":"搜索空白缺省"},{"id":90,"icon":"empty-page","name":"内容空白缺省"},{"id":79,"icon":"empty-cart","name":"购物车空白缺省"},{"id":88,"icon":"empty-address","name":"地址空白缺省"},{"id":89,"icon":"empty-permission","name":"权限空白缺省"},{"id":80,"icon":"empty-history","name":"记录空白缺省"},{"id":78,"icon":"empty-message","name":"消息空白缺省"},{"id":86,"icon":"empty-comment","name":"评论空白缺省"},{"id":77,"icon":"empty-data","name":"数据空白缺省"},{"id":82,"icon":"empty-list","name":"列表空白缺省"},{"id":85,"icon":"empty-order","name":"订单空白缺省"},{"id":87,"icon":"empty-coupon","name":"优惠券空白缺省"},{"id":81,"icon":"empty-favor","name":"收藏空白缺省"},{"id":83,"icon":"empty-network","name":"网络空白缺省断网"}]},{"id":1,"name":"tuniao","title":"其他类别","icons":[{"id":54,"icon":"clip","name":"爱心碰撞"},{"id":501,"icon":"book","name":"书本教育学习"},{"id":497,"icon":"education","name":"教育毕业大学"},{"id":503,"icon":"maths","name":"数学几何"},{"id":498,"icon":"english","name":"英语翻译"},{"id":140,"icon":"cross-fill","name":"交叉"},{"id":499,"icon":"seal","name":"公章盖章印章"},{"id":532,"icon":"check","name":"勾选支付"},{"id":683,"icon":"cargoship","name":"货轮"},{"id":3,"icon":"tabs-smile","name":"微笑选中"}]}] +}; \ No newline at end of file diff --git a/basicPage/shadow/shadow.vue b/basicPage/shadow/shadow.vue new file mode 100644 index 0000000..0952b0e --- /dev/null +++ b/basicPage/shadow/shadow.vue @@ -0,0 +1,79 @@ + + + + + diff --git a/basicPage/tag/tag.vue b/basicPage/tag/tag.vue new file mode 100644 index 0000000..f34797a --- /dev/null +++ b/basicPage/tag/tag.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/basicPage/test/test.vue b/basicPage/test/test.vue new file mode 100644 index 0000000..12868f8 --- /dev/null +++ b/basicPage/test/test.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/basicPage/utils/color/index.vue b/basicPage/utils/color/index.vue new file mode 100644 index 0000000..be26836 --- /dev/null +++ b/basicPage/utils/color/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/basicPage/utils/message/index.vue b/basicPage/utils/message/index.vue new file mode 100644 index 0000000..6d62578 --- /dev/null +++ b/basicPage/utils/message/index.vue @@ -0,0 +1,176 @@ + + + + + diff --git a/basicPage/utils/number/index.vue b/basicPage/utils/number/index.vue new file mode 100644 index 0000000..d9d77eb --- /dev/null +++ b/basicPage/utils/number/index.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/basicPage/utils/string/index.vue b/basicPage/utils/string/index.vue new file mode 100644 index 0000000..6ecc657 --- /dev/null +++ b/basicPage/utils/string/index.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/common/config.js b/common/config.js new file mode 100644 index 0000000..ffcb1fb --- /dev/null +++ b/common/config.js @@ -0,0 +1,3 @@ +module.exports = { + baseUrl: 'http://api.youzixy.com' +} \ No newline at end of file diff --git a/componentsPage/action-sheet/action-sheet.vue b/componentsPage/action-sheet/action-sheet.vue new file mode 100644 index 0000000..1e96cba --- /dev/null +++ b/componentsPage/action-sheet/action-sheet.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/componentsPage/calendar/calendar.vue b/componentsPage/calendar/calendar.vue new file mode 100644 index 0000000..f61e250 --- /dev/null +++ b/componentsPage/calendar/calendar.vue @@ -0,0 +1,213 @@ + + + + + diff --git a/componentsPage/check-box/check-box.vue b/componentsPage/check-box/check-box.vue new file mode 100644 index 0000000..9525ecc --- /dev/null +++ b/componentsPage/check-box/check-box.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/componentsPage/collapse/collapse.vue b/componentsPage/collapse/collapse.vue new file mode 100644 index 0000000..2bf48d1 --- /dev/null +++ b/componentsPage/collapse/collapse.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/componentsPage/count-down/count-down.vue b/componentsPage/count-down/count-down.vue new file mode 100644 index 0000000..079c9d4 --- /dev/null +++ b/componentsPage/count-down/count-down.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/componentsPage/count-scroll/count-scroll.vue b/componentsPage/count-scroll/count-scroll.vue new file mode 100644 index 0000000..8a3ca84 --- /dev/null +++ b/componentsPage/count-scroll/count-scroll.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/componentsPage/count-to/count-to.vue b/componentsPage/count-to/count-to.vue new file mode 100644 index 0000000..dbfb106 --- /dev/null +++ b/componentsPage/count-to/count-to.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/componentsPage/empty/empty.vue b/componentsPage/empty/empty.vue new file mode 100644 index 0000000..a1be569 --- /dev/null +++ b/componentsPage/empty/empty.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/componentsPage/fab/fab.vue b/componentsPage/fab/fab.vue new file mode 100644 index 0000000..f7b4757 --- /dev/null +++ b/componentsPage/fab/fab.vue @@ -0,0 +1,196 @@ + + + + + diff --git a/componentsPage/form/form.vue b/componentsPage/form/form.vue new file mode 100644 index 0000000..af41dc1 --- /dev/null +++ b/componentsPage/form/form.vue @@ -0,0 +1,523 @@ + + + + + diff --git a/componentsPage/goods-nav/goods-nav.vue b/componentsPage/goods-nav/goods-nav.vue new file mode 100644 index 0000000..b8c42f5 --- /dev/null +++ b/componentsPage/goods-nav/goods-nav.vue @@ -0,0 +1,126 @@ + + + + + diff --git a/componentsPage/image-upload/image-upload.vue b/componentsPage/image-upload/image-upload.vue new file mode 100644 index 0000000..d15e8e5 --- /dev/null +++ b/componentsPage/image-upload/image-upload.vue @@ -0,0 +1,273 @@ + + + + + diff --git a/componentsPage/index-list/avatar/index-list.vue b/componentsPage/index-list/avatar/index-list.vue new file mode 100644 index 0000000..994ef44 --- /dev/null +++ b/componentsPage/index-list/avatar/index-list.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/componentsPage/index-list/base/index-list.vue b/componentsPage/index-list/base/index-list.vue new file mode 100644 index 0000000..dfde1f4 --- /dev/null +++ b/componentsPage/index-list/base/index-list.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/componentsPage/index-list/index-list.vue b/componentsPage/index-list/index-list.vue new file mode 100644 index 0000000..099c5f0 --- /dev/null +++ b/componentsPage/index-list/index-list.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/componentsPage/input/input.vue b/componentsPage/input/input.vue new file mode 100644 index 0000000..98dee7d --- /dev/null +++ b/componentsPage/input/input.vue @@ -0,0 +1,231 @@ + + + + + diff --git a/componentsPage/keyboard/keyboard.vue b/componentsPage/keyboard/keyboard.vue new file mode 100644 index 0000000..c6328f5 --- /dev/null +++ b/componentsPage/keyboard/keyboard.vue @@ -0,0 +1,317 @@ + + + + + \ No newline at end of file diff --git a/componentsPage/landscape/landscape.vue b/componentsPage/landscape/landscape.vue new file mode 100644 index 0000000..6ec5b3c --- /dev/null +++ b/componentsPage/landscape/landscape.vue @@ -0,0 +1,185 @@ + + + + + diff --git a/componentsPage/lazy-load/lazy-load.vue b/componentsPage/lazy-load/lazy-load.vue new file mode 100644 index 0000000..ac55432 --- /dev/null +++ b/componentsPage/lazy-load/lazy-load.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/componentsPage/list/list.vue b/componentsPage/list/list.vue new file mode 100644 index 0000000..66a4cab --- /dev/null +++ b/componentsPage/list/list.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/componentsPage/load-more/load-more.vue b/componentsPage/load-more/load-more.vue new file mode 100644 index 0000000..2a603a7 --- /dev/null +++ b/componentsPage/load-more/load-more.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/componentsPage/loading/loading.vue b/componentsPage/loading/loading.vue new file mode 100644 index 0000000..80bea5a --- /dev/null +++ b/componentsPage/loading/loading.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/componentsPage/mock/index.list.js b/componentsPage/mock/index.list.js new file mode 100644 index 0000000..7e0f5ed --- /dev/null +++ b/componentsPage/mock/index.list.js @@ -0,0 +1,585 @@ +module.exports = { + list: [{ + "letter": "A", + "data": [{ + "name": "阿拉斯加", + "mobile": "13588889999", + "keyword": "阿拉斯加ABA13588889999" + }, + { + "name": "阿克苏", + "mobile": "0551-4386721", + "keyword": "阿克苏AKESU0551-4386721" + }, + { + "name": "阿拉善", + "mobile": "4008009100", + "keyword": "阿拉善ALASHAN4008009100" + }, + { + "name": "阿勒泰", + "mobile": "13588889999", + "keyword": "阿勒泰ALETAI13588889999" + }, + { + "name": "阿里", + "mobile": "13588889999", + "keyword": "阿里ALI13588889999" + }, + { + "name": "安阳", + "mobile": "13588889999", + "keyword": "13588889999安阳ANYANG" + } + ] + }, + { + "letter": "B", + "data": [{ + "name": "白城", + "mobile": "该主子没有留电话~", + "keyword": "白城BAICHENG" + }, + { + "name": "白山", + "mobile": "13588889999", + "keyword": "白山BAISHAN13588889999" + }, + { + "name": "白银", + "mobile": "13588889999", + "keyword": "白银BAIYIN13588889999" + }, + { + "name": "保定", + "mobile": "13588889999", + "keyword": "保定BAODING13588889999" + } + ] + }, + { + "letter": "C", + "data": [{ + "name": "沧州", + "mobile": "13588889999", + "keyword": "沧州CANGZHOU13588889999" + }, + { + "name": "长春", + "mobile": "13588889999", + "keyword": "长春CHANGCHUN13588889999" + } + ] + }, + { + "letter": "D", + "data": [{ + "name": "大理", + "mobile": "13588889999", + "keyword": "大理DALI13588889999" + }, + { + "name": "大连", + "mobile": "13588889999", + "keyword": "大连DALIAN13588889999" + } + ] + }, + { + "letter": "E", + "data": [{ + "name": "鄂尔多斯", + "mobile": "13588889999", + "keyword": "鄂尔多斯EERDUOSI13588889999" + }, + { + "name": "恩施", + "mobile": "13588889999", + "keyword": "恩施ENSHI13588889999" + }, + { + "name": "鄂州", + "mobile": "13588889999", + "keyword": "鄂州EZHOU13588889999" + } + ] + }, + { + "letter": "F", + "data": [{ + "name": "防城港", + "mobile": "该主子没有留电话~", + "keyword": "防城港FANGCHENGGANG" + }, + { + "name": "抚顺", + "mobile": "13588889999", + "keyword": "抚顺FUSHUN13588889999" + }, + { + "name": "阜新", + "mobile": "13588889999", + "keyword": "阜新FUXIN13588889999" + }, + { + "name": "阜阳", + "mobile": "13588889999", + "keyword": "阜阳FUYANG13588889999" + }, + { + "name": "抚州", + "mobile": "13588889999", + "keyword": "抚州FUZHOU13588889999" + }, + { + "name": "福州", + "mobile": "13588889999", + "keyword": "福州FUZHOU13588889999" + } + ] + }, + { + "letter": "G", + "data": [{ + "name": "甘南", + "mobile": "13588889999", + "keyword": "甘南GANNAN13588889999" + }, + { + "name": "赣州", + "mobile": "13588889999", + "keyword": "赣州GANZHOU13588889999" + }, + { + "name": "甘孜", + "mobile": "13588889999", + "keyword": "甘孜GANZI13588889999" + } + ] + }, + { + "letter": "H", + "data": [{ + "name": "哈尔滨", + "mobile": "13588889999", + "keyword": "哈尔滨HAERBIN13588889999" + }, + { + "name": "海北", + "mobile": "13588889999", + "keyword": "海北HAIBEI13588889999" + }, + { + "name": "海东", + "mobile": "13588889999", + "keyword": "海东HAIDONG13588889999" + }, + { + "name": "海口", + "mobile": "13588889999", + "keyword": "海口HAIKOU13588889999" + } + ] + }, + { + "letter": "I", + "data": [{ + "name": "ice", + "mobile": "13588889999", + "keyword": "佳木斯JIAMUSI13588889999" + }] + }, + { + "letter": "J", + "data": [{ + "name": "佳木斯", + "mobile": "13588889999", + "keyword": "佳木斯JIAMUSI13588889999" + }, + { + "name": "吉安", + "mobile": "13588889999", + "keyword": "吉安JIAN13588889999" + }, + { + "name": "江门", + "mobile": "13588889999", + "keyword": "江门JIANGMEN13588889999" + } + ] + }, + { + "letter": "K", + "data": [{ + "name": "开封", + "mobile": "13588889999", + "keyword": "开封KAIFENG13588889999" + }, + { + "name": "喀什", + "mobile": "13588889999", + "keyword": "喀什KASHI13588889999" + }, + { + "name": "克拉玛依", + "mobile": "13588889999", + "keyword": "克拉玛依KELAMAYI13588889999" + } + ] + }, + { + "letter": "L", + "data": [{ + "name": "来宾", + "mobile": "13588889999", + "keyword": "来宾LAIBIN13588889999" + }, + { + "name": "兰州", + "mobile": "13588889999", + "keyword": "兰州LANZHOU13588889999" + }, + { + "name": "拉萨", + "mobile": "13588889999", + "keyword": "拉萨LASA13588889999" + }, + { + "name": "乐山", + "mobile": "13588889999", + "keyword": "乐山LESHAN13588889999" + }, + { + "name": "凉山", + "mobile": "13588889999", + "keyword": "凉山LIANGSHAN13588889999" + }, + { + "name": "连云港", + "mobile": "13588889999", + "keyword": "连云港LIANYUNGANG13588889999" + }, + { + "name": "聊城", + "mobile": "18322223333", + "keyword": "聊城LIAOCHENG18322223333" + }, + { + "name": "辽阳", + "mobile": "18322223333", + "keyword": "辽阳LIAOYANG18322223333" + }, + { + "name": "辽源", + "mobile": "18322223333", + "keyword": "辽源LIAOYUAN18322223333" + }, + { + "name": "丽江", + "mobile": "18322223333", + "keyword": "丽江LIJIANG18322223333" + }, + { + "name": "临沧", + "mobile": "18322223333", + "keyword": "临沧LINCANG18322223333" + }, + { + "name": "临汾", + "mobile": "18322223333", + "keyword": "临汾LINFEN18322223333" + }, + { + "name": "临夏", + "mobile": "18322223333", + "keyword": "临夏LINXIA18322223333" + }, + { + "name": "临沂", + "mobile": "18322223333", + "keyword": "临沂LINYI18322223333" + }, + { + "name": "林芝", + "mobile": "18322223333", + "keyword": "林芝LINZHI18322223333" + }, + { + "name": "丽水", + "mobile": "18322223333", + "keyword": "丽水LISHUI18322223333" + } + ] + }, + { + "letter": "M", + "data": [{ + "name": "眉山", + "mobile": "15544448888", + "keyword": "眉山MEISHAN15544448888" + }, + { + "name": "梅州", + "mobile": "15544448888", + "keyword": "梅州MEIZHOU15544448888" + }, + { + "name": "绵阳", + "mobile": "15544448888", + "keyword": "绵阳MIANYANG15544448888" + }, + { + "name": "牡丹江", + "mobile": "15544448888", + "keyword": "牡丹江MUDANJIANG15544448888" + } + ] + }, + { + "letter": "N", + "data": [{ + "name": "南昌", + "mobile": "15544448888", + "keyword": "南昌NANCHANG15544448888" + }, + { + "name": "南充", + "mobile": "15544448888", + "keyword": "南充NANCHONG15544448888" + }, + { + "name": "南京", + "mobile": "15544448888", + "keyword": "南京NANJING15544448888" + }, + { + "name": "南宁", + "mobile": "15544448888", + "keyword": "南宁NANNING15544448888" + }, + { + "name": "南平", + "mobile": "15544448888", + "keyword": "南平NANPING15544448888" + } + ] + }, + { + "letter": "O", + "data": [{ + "name": "欧阳", + "mobile": "15544448888", + "keyword": "欧阳ouyang15544448888" + }] + }, + { + "letter": "P", + "data": [{ + "name": "盘锦", + "mobile": "15544448888", + "keyword": "盘锦PANJIN15544448888" + }, + { + "name": "攀枝花", + "mobile": "15544448888", + "keyword": "攀枝花PANZHIHUA15544448888" + }, + { + "name": "平顶山", + "mobile": "15544448888", + "keyword": "平顶山PINGDINGSHAN15544448888" + }, + { + "name": "平凉", + "mobile": "15544448888", + "keyword": "平凉PINGLIANG15544448888" + }, + { + "name": "萍乡", + "mobile": "15544448888", + "keyword": "萍乡PINGXIANG15544448888" + }, + { + "name": "普洱", + "mobile": "15544448888", + "keyword": "普洱PUER15544448888" + }, + { + "name": "莆田", + "mobile": "15544448888", + "keyword": "莆田PUTIAN15544448888" + }, + { + "name": "濮阳", + "mobile": "15544448888", + "keyword": "濮阳PUYANG15544448888" + } + ] + }, + { + "letter": "Q", + "data": [{ + "name": "黔东南", + "mobile": "15544448888", + "keyword": "黔东南QIANDONGNAN15544448888" + }, + { + "name": "黔南", + "mobile": "15544448888", + "keyword": "黔南QIANNAN15544448888" + }, + { + "name": "黔西南", + "mobile": "15544448888", + "keyword": "黔西南QIANXINAN15544448888" + } + ] + }, + { + "letter": "R", + "data": [{ + "name": "日喀则", + "mobile": "15544448888", + "keyword": "日喀则RIKAZE15544448888" + }, + { + "name": "日照", + "mobile": "15544448888", + "keyword": "日照RIZHAO15544448888" + } + ] + }, + { + "letter": "S", + "data": [{ + "name": "三门峡", + "mobile": "15544448888", + "keyword": "三门峡SANMENXIA15544448888" + }, + { + "name": "三明", + "mobile": "15544448888", + "keyword": "三明SANMING15544448888" + }, + { + "name": "三沙", + "mobile": "15544448888", + "keyword": "三沙SANSHA15544448888" + } + ] + }, + { + "letter": "T", + "data": [{ + "name": "塔城", + "mobile": "15544448888", + "keyword": "塔城TACHENG15544448888" + }, + { + "name": "漯河", + "mobile": "15544448888", + "keyword": "漯河TAHE15544448888" + }, + { + "name": "泰安", + "mobile": "15544448888", + "keyword": "泰安TAIAN15544448888" + } + ] + }, + { + "letter": "W", + "data": [{ + "name": "潍坊", + "mobile": "15544448888", + "keyword": "潍坊WEIFANG15544448888" + }, + { + "name": "威海", + "mobile": "15544448888", + "keyword": "威海WEIHAI15544448888" + }, + { + "name": "渭南", + "mobile": "15544448888", + "keyword": "渭南WEINAN15544448888" + }, + { + "name": "文山", + "mobile": "15544448888", + "keyword": "文山WENSHAN15544448888" + } + ] + }, + { + "letter": "X", + "data": [{ + "name": "厦门", + "mobile": "15544448888", + "keyword": "厦门XIAMEN15544448888" + }, + { + "name": "西安", + "mobile": "15544448888", + "keyword": "西安XIAN15544448888" + }, + { + "name": "湘潭", + "mobile": "15544448888", + "keyword": "湘潭XIANGTAN15544448888" + } + ] + }, + { + "letter": "Y", + "data": [{ + "name": "雅安", + "mobile": "15544448888", + "keyword": "雅安YAAN15544448888" + }, + { + "name": "延安", + "mobile": "15544448888", + "keyword": "延安YANAN15544448888" + }, + { + "name": "延边", + "mobile": "15544448888", + "keyword": "延边YANBIAN15544448888" + }, + { + "name": "盐城", + "mobile": "15544448888", + "keyword": "盐城YANCHENG15544448888" + } + ] + }, + { + "letter": "Z", + "data": [{ + "name": "枣庄", + "mobile": "15544448888", + "keyword": "枣庄ZAOZHUANG15544448888" + }, + { + "name": "张家界", + "mobile": "15544448888", + "keyword": "张家界ZHANGJIAJIE15544448888" + }, + { + "name": "张家口", + "mobile": "15544448888", + "keyword": "张家口ZHANGJIAKOU15544448888" + } + ] + }, + { + "letter": "#", + "data": [{ + "name": "其他.", + "mobile": "16666666666", + "keyword": "echo16666666666" + }] + } + ] +} diff --git a/componentsPage/modal/modal.vue b/componentsPage/modal/modal.vue new file mode 100644 index 0000000..66fe440 --- /dev/null +++ b/componentsPage/modal/modal.vue @@ -0,0 +1,277 @@ + + + + + + + diff --git a/componentsPage/nav-bar/nav-bar.vue b/componentsPage/nav-bar/nav-bar.vue new file mode 100644 index 0000000..2862615 --- /dev/null +++ b/componentsPage/nav-bar/nav-bar.vue @@ -0,0 +1,188 @@ + + + + + diff --git a/componentsPage/notice-bar/notice-bar.vue b/componentsPage/notice-bar/notice-bar.vue new file mode 100644 index 0000000..580a666 --- /dev/null +++ b/componentsPage/notice-bar/notice-bar.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/componentsPage/number-box/number-box.vue b/componentsPage/number-box/number-box.vue new file mode 100644 index 0000000..f65d6ae --- /dev/null +++ b/componentsPage/number-box/number-box.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/componentsPage/picker/picker.vue b/componentsPage/picker/picker.vue new file mode 100644 index 0000000..c1b0eeb --- /dev/null +++ b/componentsPage/picker/picker.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/componentsPage/popup/popup.vue b/componentsPage/popup/popup.vue new file mode 100644 index 0000000..04cd8ee --- /dev/null +++ b/componentsPage/popup/popup.vue @@ -0,0 +1,240 @@ + + + + + diff --git a/componentsPage/progress/progress.vue b/componentsPage/progress/progress.vue new file mode 100644 index 0000000..1622a74 --- /dev/null +++ b/componentsPage/progress/progress.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/componentsPage/radio/radio.vue b/componentsPage/radio/radio.vue new file mode 100644 index 0000000..092f43d --- /dev/null +++ b/componentsPage/radio/radio.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/componentsPage/rate/rate.vue b/componentsPage/rate/rate.vue new file mode 100644 index 0000000..6eae1ff --- /dev/null +++ b/componentsPage/rate/rate.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/componentsPage/read-more/read-more.vue b/componentsPage/read-more/read-more.vue new file mode 100644 index 0000000..c1c1f2c --- /dev/null +++ b/componentsPage/read-more/read-more.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/componentsPage/scroll-list/scroll-list.vue b/componentsPage/scroll-list/scroll-list.vue new file mode 100644 index 0000000..a891cf5 --- /dev/null +++ b/componentsPage/scroll-list/scroll-list.vue @@ -0,0 +1,135 @@ + + + + + diff --git a/componentsPage/select/select.vue b/componentsPage/select/select.vue new file mode 100644 index 0000000..f77449d --- /dev/null +++ b/componentsPage/select/select.vue @@ -0,0 +1,381 @@ + + + + + diff --git a/componentsPage/sign-board/sign-board.vue b/componentsPage/sign-board/sign-board.vue new file mode 100644 index 0000000..1af1900 --- /dev/null +++ b/componentsPage/sign-board/sign-board.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/componentsPage/skeleton/skeleton.vue b/componentsPage/skeleton/skeleton.vue new file mode 100644 index 0000000..b8da4bb --- /dev/null +++ b/componentsPage/skeleton/skeleton.vue @@ -0,0 +1,236 @@ + + + + + diff --git a/componentsPage/slider/slider.vue b/componentsPage/slider/slider.vue new file mode 100644 index 0000000..3471590 --- /dev/null +++ b/componentsPage/slider/slider.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/componentsPage/static/images/empty/cart.jpg b/componentsPage/static/images/empty/cart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3b5bfac84fefb45f467fc5fea8d8cc52163f5b9d GIT binary patch literal 20320 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 literal 0 HcmV?d00001 diff --git a/componentsPage/static/images/empty/comment.jpg b/componentsPage/static/images/empty/comment.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4848ca118bf2ba9398af3513d816e22d07fc4d67 GIT binary patch literal 19323 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 Bj_CjZ literal 0 HcmV?d00001 diff --git a/componentsPage/static/images/empty/network.jpg b/componentsPage/static/images/empty/network.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4585316bc42b993ae1debe32b33069c1209a6c6 GIT binary patch literal 21328 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 L4FILQ@$mlur#xms literal 0 HcmV?d00001 diff --git a/componentsPage/static/images/empty/page.jpg b/componentsPage/static/images/empty/page.jpg new file mode 100644 index 0000000000000000000000000000000000000000..939e1c88f72063307dae1b9603da340a57796f0b GIT binary patch literal 21070 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 literal 0 HcmV?d00001 diff --git a/componentsPage/static/images/empty/permission.jpg b/componentsPage/static/images/empty/permission.jpg new file mode 100644 index 0000000000000000000000000000000000000000..709782b75d4f1fe92c92bc40763c905794c92815 GIT binary patch literal 18967 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 Tk{1y8YbA+wjfduyR{H-Bb#Mf^ literal 0 HcmV?d00001 diff --git a/componentsPage/static/images/empty/search.jpg b/componentsPage/static/images/empty/search.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f735294727eb16bc583741c06f17a0857ea98687 GIT binary patch literal 20234 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 literal 0 HcmV?d00001 diff --git a/componentsPage/steps/steps.vue b/componentsPage/steps/steps.vue new file mode 100644 index 0000000..e0a8bb8 --- /dev/null +++ b/componentsPage/steps/steps.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/componentsPage/sticky/sticky.vue b/componentsPage/sticky/sticky.vue new file mode 100644 index 0000000..d4c1fed --- /dev/null +++ b/componentsPage/sticky/sticky.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/componentsPage/subsection/subsection.vue b/componentsPage/subsection/subsection.vue new file mode 100644 index 0000000..6c10be0 --- /dev/null +++ b/componentsPage/subsection/subsection.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/componentsPage/swipe-action/swipe-action.vue b/componentsPage/swipe-action/swipe-action.vue new file mode 100644 index 0000000..3b9b477 --- /dev/null +++ b/componentsPage/swipe-action/swipe-action.vue @@ -0,0 +1,244 @@ + + + + + diff --git a/componentsPage/swiper/swiper.vue b/componentsPage/swiper/swiper.vue new file mode 100644 index 0000000..c77e782 --- /dev/null +++ b/componentsPage/swiper/swiper.vue @@ -0,0 +1,73 @@ + + + + + diff --git a/componentsPage/switch/switch.vue b/componentsPage/switch/switch.vue new file mode 100644 index 0000000..cfdfd26 --- /dev/null +++ b/componentsPage/switch/switch.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/componentsPage/tabs/tabs.vue b/componentsPage/tabs/tabs.vue new file mode 100644 index 0000000..8181a51 --- /dev/null +++ b/componentsPage/tabs/tabs.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/componentsPage/time-line/time-line.vue b/componentsPage/time-line/time-line.vue new file mode 100644 index 0000000..8f58f9a --- /dev/null +++ b/componentsPage/time-line/time-line.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/componentsPage/tips/tips.vue b/componentsPage/tips/tips.vue new file mode 100644 index 0000000..75d730b --- /dev/null +++ b/componentsPage/tips/tips.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/componentsPage/toast/toast.vue b/componentsPage/toast/toast.vue new file mode 100644 index 0000000..e16d2b9 --- /dev/null +++ b/componentsPage/toast/toast.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/componentsPage/verification-code-input/verification-code-input.vue b/componentsPage/verification-code-input/verification-code-input.vue new file mode 100644 index 0000000..10db42f --- /dev/null +++ b/componentsPage/verification-code-input/verification-code-input.vue @@ -0,0 +1,91 @@ + + + + + diff --git a/componentsPage/verification-code/verification-code.vue b/componentsPage/verification-code/verification-code.vue new file mode 100644 index 0000000..072bd69 --- /dev/null +++ b/componentsPage/verification-code/verification-code.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..b61f63e --- /dev/null +++ b/index.html @@ -0,0 +1,14 @@ + + + + + + + + + + +
+ + + 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..1a7fba6 --- /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..34d386f --- /dev/null +++ b/main.js @@ -0,0 +1,28 @@ +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) + +const app = new Vue({ + store, + ...App +}) + +// 引入请求封装 +require('./util/request/index')(app) + +app.$mount() \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..3fbd98c --- /dev/null +++ b/manifest.json @@ -0,0 +1,133 @@ +{ + "name" : "TuniaoUI_UniApp", + "appid" : "__UNI__C82400B", + "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" : {}, + "splashscreen" : { + "androidStyle" : "common" + }, + "icons" : { + "android" : { + "hdpi" : "unpackage/res/icons/72x72.png", + "xhdpi" : "unpackage/res/icons/96x96.png", + "xxhdpi" : "unpackage/res/icons/144x144.png", + "xxxhdpi" : "unpackage/res/icons/192x192.png" + }, + "ios" : { + "appstore" : "unpackage/res/icons/1024x1024.png", + "ipad" : { + "app" : "unpackage/res/icons/76x76.png", + "app@2x" : "unpackage/res/icons/152x152.png", + "notification" : "unpackage/res/icons/20x20.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "proapp@2x" : "unpackage/res/icons/167x167.png", + "settings" : "unpackage/res/icons/29x29.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "spotlight" : "unpackage/res/icons/40x40.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png" + }, + "iphone" : { + "app@2x" : "unpackage/res/icons/120x120.png", + "app@3x" : "unpackage/res/icons/180x180.png", + "notification@2x" : "unpackage/res/icons/40x40.png", + "notification@3x" : "unpackage/res/icons/60x60.png", + "settings@2x" : "unpackage/res/icons/58x58.png", + "settings@3x" : "unpackage/res/icons/87x87.png", + "spotlight@2x" : "unpackage/res/icons/80x80.png", + "spotlight@3x" : "unpackage/res/icons/120x120.png" + } + } + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wxf3d81a452b88ff4b", + "setting" : { + "urlCheck" : false, + "es6" : true, + "minified" : true, + "postcss" : true + }, + "usingComponents" : true, + "optimization" : { + "subPackages" : true + }, + "permission" : { + "scope.userLocation" : { + "desc" : "获取您的位置信息方便为您提供服务" + } + } + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "2", + "h5" : { + "title" : "Tuniao UI", + "template" : "template.h5.html", + "router" : { + "mode" : "hash", + "base" : "./" + }, + "sdkConfigs" : { + "maps" : { + "qqmap" : { + "key" : "IXBBZ-HHSK3-UWW3K-3DB6K-M7Y5K-F4FM5" + } + } + } + } +} diff --git a/mock/basic_page.js b/mock/basic_page.js new file mode 100644 index 0000000..1646dc8 --- /dev/null +++ b/mock/basic_page.js @@ -0,0 +1,88 @@ +/** + * 页面展示列表数据 + */ +export default { + data: [ + { + title: '基础元素', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'menu-more', + title: 'Flex布局', + url: '/basicPage/flex-layout/flex-layout' + }, + { + icon: 'menu-circle', + title: 'Grid布局', + url: '/basicPage/grid-layout/grid-layout' + }, + { + icon: 'gloves', + title: '配色', + url: '/basicPage/color/color' + }, + { + icon: 'font', + title: '图标', + url: '/basicPage/icon/icon' + }, + { + icon: 'circle-fill', + title: '按钮', + url: '/basicPage/button/button' + }, + { + icon: 'tag', + title: '标签', + url: '/basicPage/tag/tag' + }, + { + icon: 'square', + title: '边框', + url: '/basicPage/border/border' + }, + { + icon: 'copy-fill', + title: '阴影', + url: '/basicPage/shadow/shadow' + }, + { + icon: 'moon', + title: '微标', + url: '/basicPage/badge/badge' + }, + { + icon: 'emoji-good', + title: '头像', + url: '/basicPage/avatar/avatar' + } + ] + }, { + title: '常用工具', + backgroundColor: 'tn-cool-bg-color-2', + list: [ + { + icon: 'code', + title: 'String工具', + url: '/basicPage/utils/string/index' + }, + { + icon: 'code', + title: 'Number工具', + url: '/basicPage/utils/number/index' + }, + { + icon: 'code', + title: 'Message工具', + url: '/basicPage/utils/message/index' + }, + { + icon: 'code', + title: 'Color工具', + url: '/basicPage/utils/color/index' + } + ] + } + ] +} \ No newline at end of file diff --git a/mock/components_page.js b/mock/components_page.js new file mode 100644 index 0000000..c460682 --- /dev/null +++ b/mock/components_page.js @@ -0,0 +1,266 @@ +/** + * 页面展示列表数据 + */ +export default { + data: [ + { + title: '基础组件', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'signpost', + title: '列表', + url: '/componentsPage/list/list' + }, + { + icon: 'circle-arrow', + title: 'Loading加载', + url: '/componentsPage/loading/loading' + }, + { + icon: 'tag', + title: 'tabs标签', + url: '/componentsPage/tabs/tabs' + }, + { + icon: 'receipt', + title: 'sticky吸顶', + url: '/componentsPage/sticky/sticky' + }, + { + icon: 'all', + title: 'navBar导航栏', + url: '/componentsPage/nav-bar/nav-bar' + }, + { + icon: 'sound', + title: 'noticeBar通知栏', + url: '/componentsPage/notice-bar/notice-bar' + }, + { + icon: 'image', + title: 'swiper轮播图', + url: '/componentsPage/swiper/swiper' + }, + { + icon: 'server', + title: 'collapse折叠面板', + url: '/componentsPage/collapse/collapse' + }, + { + icon: 'more-circle', + title: 'readMore查看更多', + url: '/componentsPage/read-more/read-more' + }, + { + icon: 'success-square', + title: 'steps步骤条', + url: '/componentsPage/steps/steps' + }, + { + icon: 'clock', + title: 'timeLine时间轴', + url: '/componentsPage/time-line/time-line' + }, + { + icon: 'level', + title: 'indexList索引列表', + url: '/componentsPage/index-list/index-list' + }, + { + icon: 'group-square', + title: 'scrollList横向滚动', + url: '/componentsPage/scroll-list/scroll-list' + }, + { + icon: 'brand', + title: 'swipeAction滑动菜单', + url: '/componentsPage/swipe-action/swipe-action' + }, + { + icon: 'pharmacy', + title: 'fab悬浮按钮', + url: '/componentsPage/fab/fab' + }, + { + icon: 'cardbag', + title: '懒加载', + url: '/componentsPage/lazy-load/lazy-load' + }, + { + icon: 'down-double', + title: '加载更多', + url: '/componentsPage/load-more/load-more' + }, + { + icon: 'menu-more', + title: '骨架屏', + url: '/componentsPage/skeleton/skeleton' + }, + { + icon: 'empty-search', + title: '空页面', + url: '/componentsPage/empty/empty' + }, + { + icon: 'share', + title: '商品导航', + url: '/componentsPage/goods-nav/goods-nav' + } + ] + }, + { + title: '弹框组件', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'prize', + title: '弹出层', + url: '/componentsPage/popup/popup' + }, + { + icon: 'bankcard', + title: '模态框', + url: '/componentsPage/modal/modal' + }, + { + icon: 'comment', + title: 'Toast', + url: '/componentsPage/toast/toast' + }, + { + icon: 'creative', + title: '提示信息框', + url: '/componentsPage/tips/tips' + }, + { + icon: 'reply', + title: '压屏窗', + url: '/componentsPage/landscape/landscape' + } + ] + }, + { + title: '表单组件', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'image-text', + title: 'Form表单', + url: '/componentsPage/form/form' + }, + { + icon: 'square', + title: 'Input输入框', + url: '/componentsPage/input/input' + }, + { + icon: 'circle-fill', + title: 'Radio单选框', + url: '/componentsPage/radio/radio' + }, + { + icon: 'copy', + title: 'Checkbox复选框', + url: '/componentsPage/check-box/check-box' + }, + { + icon: 'ticket', + title: 'ActionSheet操作菜单', + url: '/componentsPage/action-sheet/action-sheet' + }, + { + icon: 'deploy', + title: 'Picker选择器', + url: '/componentsPage/picker/picker' + }, + { + icon: 'organizatio', + title: 'Select列选择器', + url: '/componentsPage/select/select' + }, + { + icon: 'data', + title: '验证码倒计时', + url: '/componentsPage/verification-code/verification-code' + }, + { + icon: 'power', + title: 'Switch开关', + url: '/componentsPage/switch/switch' + }, + { + icon: 'upload', + title: '图片上传', + url: '/componentsPage/image-upload/image-upload' + }, + { + icon: 'calendar', + title: '日历', + url: '/componentsPage/calendar/calendar' + }, + { + icon: 'edit-write', + title: '签名板', + url: '/componentsPage/sign-board/sign-board' + }, + { + icon: 'safe', + title: '验证码输入', + url: '/componentsPage/verification-code-input/verification-code-input' + }, + { + icon: 'expand', + title: '分段器', + url: '/componentsPage/subsection/subsection' + } + ] + }, + { + title: '数据组件', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'watercup', + title: 'Progress进度条', + url: '/componentsPage/progress/progress' + }, + { + icon: 'star', + title: 'rate评分', + url: '/componentsPage/rate/rate' + }, + { + icon: 'light', + title: 'slider滑动条', + url: '/componentsPage/slider/slider' + }, + { + icon: 'statistics', + title: 'numberBox步进输入', + url: '/componentsPage/number-box/number-box' + }, + { + icon: 'keyboard-circle', + title: 'keyboard键盘', + url: '/componentsPage/keyboard/keyboard' + }, + { + icon: 'time', + title: 'countDown倒计时', + url: '/componentsPage/count-down/count-down' + }, + { + icon: 'group-circle', + title: 'countTo数字跳转', + url: '/componentsPage/count-to/count-to' + }, + { + icon: 'sequence-vertical', + title: 'countScroll数字滚动', + url: '/componentsPage/count-scroll/count-scroll' + } + ] + } + ] +} \ No newline at end of file diff --git a/mock/template_page.js b/mock/template_page.js new file mode 100644 index 0000000..5081169 --- /dev/null +++ b/mock/template_page.js @@ -0,0 +1,247 @@ +/** + * 页面展示列表数据 + */ +export default { + data: [ + { + title: '登录注册', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '火箭登录', + author: '图鸟北北', + url: '/templatePage/login/demo1/demo1' + }, + { + icon: 'send', + title: '粒子登录', + author: '图鸟北北', + url: '/templatePage/login/demo2/demo2' + }, + { + icon: 'send', + title: '背景登录', + author: '图鸟北北', + url: '/templatePage/login/demo3/demo3' + }, + { + icon: 'send', + title: '简约登录', + author: '图鸟北北', + url: '/templatePage/login/demo4/demo4' + } + ] + }, + { + title: '个人中心', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '夏天个人', + author: '图鸟北北', + url: '/templatePage/my/demo1/demo1' + }, + { + icon: 'send', + title: '图鸟个人', + author: '图鸟北北', + url: '/templatePage/my/demo2/demo2' + }, + { + icon: 'send', + title: '外卖个人', + author: '图鸟北北', + url: '/templatePage/my/demo3/demo3' + }, + { + icon: 'send', + title: '高端个人', + author: '图鸟北北', + url: '/templatePage/my/demo4/demo4' + } + ] + }, + { + title: '常用首页', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '音乐首页', + author: '图鸟北北', + url: '/templatePage/home/music/music' + }, + { + icon: 'send', + title: '课程首页', + author: '图鸟北北', + url: '/templatePage/home/course/course' + }, + { + icon: 'send', + title: '设计首页', + author: '图鸟北北', + url: '/templatePage/home/design/design' + }, + { + icon: 'send', + title: '招聘首页', + author: '图鸟北北', + url: '/templatePage/home/job/job' + }, + { + icon: 'send', + title: '投屏首页', + author: '图鸟北北', + url: '/templatePage/home/screen/screen' + }, + { + icon: 'send', + title: '壁纸首页', + author: '图鸟北北', + url: '/templatePage/home/wallpaper/wallpaper' + }, + ] + }, + { + title: '骚气页面', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '健康码', + author: '图鸟北北', + url: '/templatePage/health/qrcode/qrcode' + }, + { + icon: 'send', + title: '关于我们', + author: 'Jaylen', + url: '/templatePage/life/about/about' + }, + { + icon: 'send', + title: '全新出发', + author: '你的小可爱', + url: '/templatePage/life/outset/outset' + }, + { + icon: 'send', + title: '资讯左图', + author: '图鸟北北', + url: '/templatePage/article/demo1/demo1' + }, + { + icon: 'send', + title: '资讯右图', + author: '图鸟北北', + url: '/templatePage/article/demo2/demo2' + }, + { + icon: 'send', + title: '全屏轮播', + author: '图鸟北北', + url: '/templatePage/life/fullpage/fullpage' + }, + { + icon: 'rocket', + title: '浏览器', + author: '图鸟北北', + url: '/templatePage/life/browser/browser' + }, + { + icon: 'rocket', + title: '时钟', + author: '图鸟北北', + url: '/templatePage/time/clock/clock' + } + ] + }, + { + title: '动效元素', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '加载动画', + author: '图鸟北北', + url: '/templatePage/animate/loading/loading' + }, + { + icon: 'send', + title: '流星悬浮', + author: '图鸟北北', + url: '/templatePage/animate/suspended/suspended' + }, + { + icon: 'send', + title: '随机粒子', + author: 'Jaylen', + url: '/templatePage/animate/particle/particle' + }, + { + icon: 'send', + title: '相册图集', + author: '你的小可爱', + url: '/templatePage/animate/photo/photo' + }, + { + icon: 'send', + title: '镂空效果', + author: '你的小可爱', + url: '/templatePage/animate/hollow/hollow' + }, + { + icon: 'send', + title: '泡泡飘出', + author: 'Jaylen', + url: '/templatePage/animate/bubble/bubble' + }, + { + icon: 'send', + title: 'css波浪', + author: '图鸟北北', + url: '/templatePage/animate/wave/wave' + } + ] + }, + { + title: '群友力献', + backgroundColor: 'tn-cool-bg-color-1', + list: [ + { + icon: 'send', + title: '3D全景(第三方,约120¥一年)', + author: '图鸟北北 & 芊云全景', + url: '/templatePage/life/pano/pano' + }, + { + icon: 'rocket', + title: 'Ucharts图表(第三方,免费开源)', + author: '图鸟北北 & Ucharts秋云', + url: '/templatePage/life/candle/candle' + }, + { + icon: 'rocket', + title: '阿凡提·污克西西(第三方,免费开源)', + author: '阿凡提·污克西西', + url: '/templatePage/life/candle/candle' + }, + { + icon: 'rocket', + title: '微信红包封面', + author: '微信红包封面', + url: '/templatePage/life/cover/cover' + }, + { + icon: 'rocket', + title: '营销小游戏-魔方', + author: '最帅的你', + url: '/templatePage/life/cube/cube' + }, + ] + } + ] +} \ No newline at end of file diff --git a/mock/vip_page.js b/mock/vip_page.js new file mode 100644 index 0000000..34a6a34 --- /dev/null +++ b/mock/vip_page.js @@ -0,0 +1,299 @@ +/** + * 页面展示列表数据 + */ +export default { + data: [{ + title: '圈子博客', + backgroundColor: 'tn-cool-bg-color-1', + list: [{ + icon: 'order', + title: '操作指引', + author: '图鸟科技', + url: '/vipPage/life/guide/guide' + },{ + icon: 'order', + title: '首次指引', + author: '图鸟科技', + url: '/vipPage/life/start/start' + }, + { + icon: 'order', + title: '圈子首页', + author: '图鸟科技', + url: '/vipPage/blog/blog/blog' + }, + { + icon: 'order', + title: '社交圈子', + author: '图鸟科技', + url: '/vipPage/blog/socialize/socialize' + }, + { + icon: 'order', + title: '简约圈子(旧)', + author: '图鸟科技', + url: '/vipPage/blog/circle/circle' + }, + { + icon: 'order', + title: '圈子个人', + author: '图鸟科技', + url: '/vipPage/blog/myblog/myblog' + }, + { + icon: 'order', + title: '消息通知', + author: '图鸟科技', + url: '/vipPage/blog/message/message' + }, + { + icon: 'order', + title: '商品优选', + author: '图鸟科技', + url: '/vipPage/blog/prefer/prefer' + }, + { + icon: 'order', + title: '优选详情', + author: '图鸟科技', + url: '/vipPage/blog/product/product' + }, + { + icon: 'order', + title: '博客博主', + author: '图鸟科技', + url: '/vipPage/blog/blogger/blogger' + }, + { + icon: 'order', + title: '酷炫功能', + author: '图鸟科技', + url: '/vipPage/home/cool/cool' + }, + { + icon: 'order', + title: '友情链接', + author: '图鸟科技', + url: '/vipPage/home/link/link' + }, + { + icon: 'order', + title: '祝福页面', + author: '图鸟科技', + url: '/vipPage/life/bless/bless' + } + ] + }, + { + title: '酷炫首页', + backgroundColor: 'tn-cool-bg-color-1', + list: [{ + icon: 'order', + title: '图鸟首页', + author: '图鸟科技', + url: '/vipPage/home/tuniao/tuniao' + }, + { + icon: 'order', + title: '奶茶首页', + author: '图鸟科技', + url: '/vipPage/home/tea/tea' + }, + { + icon: 'order', + title: '阅读首页', + author: '图鸟科技', + url: '/vipPage/home/read/read' + }, + { + icon: 'order', + title: '月亮首页', + author: '图鸟科技', + url: '/vipPage/home/moon/moon' + }, + { + icon: 'order', + title: '计划首页', + author: '图鸟科技', + url: '/vipPage/home/plan/plan' + }, + { + icon: 'order', + title: '新年首页', + author: '图鸟科技', + url: '/vipPage/home/year/year' + }, + { + icon: 'order', + title: '电影首页', + author: '图鸟科技', + url: '/vipPage/home/movie/movie' + }, + { + icon: 'order', + title: '食物首页', + author: '图鸟科技', + url: '/vipPage/home/food/food' + }, + { + icon: 'order', + title: '拟态首页', + author: '图鸟科技', + url: '/vipPage/home/mimicry/mimicry' + }, + { + icon: 'order', + title: '充电首页', + author: '图鸟科技', + url: '/vipPage/life/power/power' + }, + { + icon: 'order', + title: '卡片首页', + author: '图鸟科技', + url: '/vipPage/home/card/card' + }, + { + icon: 'order', + title: '健康首页', + author: '图鸟科技', + url: '/vipPage/home/health/health' + }, + { + icon: 'order', + title: '全景首页', + author: '图鸟科技', + url: '/vipPage/home/panoramic/panoramic' + }, + { + icon: 'order', + title: 'uCharts首页', + author: '图鸟科技', + url: '/vipPage/home/ucharts/ucharts' + }, + ] + }, + { + title: '商城店铺', + backgroundColor: 'tn-cool-bg-color-1', + list: [{ + icon: 'order', + title: '店铺商品', + author: '图鸟科技', + url: '/vipPage/shop/store/store' + }, + { + icon: 'order', + title: '商品订单', + author: '图鸟科技', + url: '/vipPage/shop/order/order' + }, + { + icon: 'order', + title: '商品分类', + author: '图鸟科技', + url: '/vipPage/shop/classify/classify' + }, + { + icon: 'order', + title: '积分活动', + author: '图鸟科技', + url: '/vipPage/shop/money/money' + } + ] + }, + { + title: '会员需求', + backgroundColor: 'tn-cool-bg-color-1', + list: [{ + icon: 'order', + title: 'Drag长按拖拽随机固定', + author: '图鸟科技', + url: '/vipPage/components/drag/basic-drag/basic-drag' + }, + { + icon: 'order', + title: '图片上传长按拖拽', + author: '图鸟科技', + url: '/vipPage/components/drag/upload-image-drag/upload-image-drag' + }, + { + icon: 'order', + title: 'Cropper图片裁剪', + author: '图鸟科技', + url: '/vipPage/components/cropper/cropper' + }, + { + icon: 'order', + title: 'StackSwiper堆叠轮播', + author: '图鸟科技', + url: '/vipPage/components/stack-swiper/stack-swiper' + }, + { + icon: 'order', + title: '重力效果', + author: '图鸟科技', + url: '/vipPage/home/gravity/page1/page1' + }, + { + icon: 'order', + title: '下拉刷新', + author: '图鸟科技', + url: '/vipPage/components/scroll-view/index' + }, + { + icon: 'order', + title: '级联选择', + author: '图鸟科技', + url: '/vipPage/components/cascade-selection/cascade-selection' + }, + { + icon: 'order', + title: '瀑布流', + author: '图鸟科技', + url: '/vipPage/components/waterfall/waterfall' + }, + { + icon: 'order', + title: '树形菜单', + author: '图鸟科技', + url: '/vipPage/components/tree-view/tree-view' + }, + { + icon: 'order', + title: '表格', + author: '图鸟科技', + url: '/vipPage/components/table/index' + }, + { + icon: 'order', + title: '图鸟轮播(实验)', + author: '图鸟科技', + url: '/vipPage/components/custom-swiper/index' + } + ] + }, + { + title: '生态支持', + backgroundColor: 'tn-cool-bg-color-1', + list: [{ + icon: 'order', + title: '短视频', + author: '图鸟 & 第三方', + url: '/thirdPage/short-video/short-video' + },{ + icon: 'order', + title: '外卖模板', + author: '图鸟 & 第三方', + url: '/takeOutPage/walking-route/walking-route' + }, + { + icon: 'order', + title: '期待你的加入', + author: '图鸟 & 第三方', + url: '/templatePage/life/candle/candle' + } + ] + } + ] +} diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..b7fd57f --- /dev/null +++ b/pages.json @@ -0,0 +1,667 @@ +{ + "easycom": { + "^tn-(.*)": "@/tuniao-ui/components/tn-$1/tn-$1.vue" + }, + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "mp-weixin": { + "disableScroll": true + }, + "app-plus": { + "bounce": "none" + }, + "mp-alipay": { + "allowsBounceVertical": "NO" + }, + "mp-baidu": { + "disableScroll": true + } + } + } + ], + "subPackages": [{ + "root": "basicPage", + "pages": [{ + "path": "test/test", + "style": { + "navigationStyle": "default", + "navigationBarTitleText": "测试页面", + "enablePullDownRefresh": false + } + }, + { + "path": "flex-layout/flex-layout", + "style": { + "navigationBarTitleText": "Flex布局", + "enablePullDownRefresh": false + } + }, { + "path": "grid-layout/grid-layout", + "style": { + "navigationBarTitleText": "Grid布局", + "enablePullDownRefresh": false + } + }, { + "path": "color/color", + "style": { + "navigationBarTitleText": "配色", + "enablePullDownRefresh": false + } + }, { + "path": "icon/icon", + "style": { + "navigationBarTitleText": "图标", + "enablePullDownRefresh": false + } + }, { + "path": "button/button", + "style": { + "navigationBarTitleText": "按钮", + "enablePullDownRefresh": false + } + }, { + "path": "tag/tag", + "style": { + "navigationBarTitleText": "标签", + "enablePullDownRefresh": false + } + }, { + "path": "border/border", + "style": { + "navigationBarTitleText": "边框", + "enablePullDownRefresh": false + } + }, { + "path": "shadow/shadow", + "style": { + "navigationBarTitleText": "阴影", + "enablePullDownRefresh": false + } + }, { + "path": "badge/badge", + "style": { + "navigationBarTitleText": "微标", + "enablePullDownRefresh": false + } + }, { + "path": "avatar/avatar", + "style": { + "navigationBarTitleText": "头像", + "enablePullDownRefresh": false + } + }, { + "path": "utils/string/index", + "style": { + "navigationBarTitleText": "String工具", + "enablePullDownRefresh": false + } + }, { + "path": "utils/number/index", + "style": { + "navigationBarTitleText": "Number工具", + "enablePullDownRefresh": false + } + }, { + "path": "utils/message/index", + "style": { + "navigationBarTitleText": "Message工具", + "enablePullDownRefresh": false + } + }, { + "path": "utils/color/index", + "style": { + "navigationBarTitleText": "Color工具", + "enablePullDownRefresh": false + } + } + ] + }, { + "root": "componentsPage", + "pages": [{ + "path": "list/list", + "style": { + "navigationBarTitleText": "列表", + "enablePullDownRefresh": false + } + }, { + "path": "popup/popup", + "style": { + "navigationBarTitleText": "弹出层", + "enablePullDownRefresh": false + } + }, { + "path": "modal/modal", + "style": { + "navigationBarTitleText": "模态框", + "enablePullDownRefresh": false + } + }, { + "path": "toast/toast", + "style": { + "navigationBarTitleText": "Toast", + "enablePullDownRefresh": false + } + }, { + "path": "tips/tips", + "style": { + "navigationBarTitleText": "提示信息", + "enablePullDownRefresh": false + } + }, { + "path": "form/form", + "style": { + "navigationBarTitleText": "Form表单", + "enablePullDownRefresh": false + } + }, { + "path": "action-sheet/action-sheet", + "style": { + "navigationBarTitleText": "操作菜单", + "enablePullDownRefresh": false + } + }, { + "path": "picker/picker", + "style": { + "navigationBarTitleText": "Picker选择器", + "enablePullDownRefresh": false + } + }, { + "path": "select/select", + "style": { + "navigationBarTitleText": "Select列选择器", + "enablePullDownRefresh": false + } + }, { + "path": "verification-code/verification-code", + "style": { + "navigationBarTitleText": "验证码倒计时", + "enablePullDownRefresh": false + } + }, { + "path": "loading/loading", + "style": { + "navigationBarTitleText": "Loading加载", + "enablePullDownRefresh": false + } + }, { + "path": "switch/switch", + "style": { + "navigationBarTitleText": "Switch开关", + "enablePullDownRefresh": false + } + }, { + "path": "progress/progress", + "style": { + "navigationBarTitleText": "Progress进度条", + "enablePullDownRefresh": false + } + }, { + "path": "image-upload/image-upload", + "style": { + "navigationBarTitleText": "图片上传", + "enablePullDownRefresh": false + } + }, { + "path": "rate/rate", + "style": { + "navigationBarTitleText": "rate评分", + "enablePullDownRefresh": false + } + }, { + "path": "slider/slider", + "style": { + "navigationBarTitleText": "slider滑动条", + "enablePullDownRefresh": false + } + }, { + "path": "number-box/number-box", + "style": { + "navigationBarTitleText": "numberBox步进输入", + "enablePullDownRefresh": false + } + }, { + "path": "keyboard/keyboard", + "style": { + "navigationBarTitleText": "keyboard键盘", + "enablePullDownRefresh": false + } + }, { + "path": "tabs/tabs", + "style": { + "navigationBarTitleText": "tabs标签", + "enablePullDownRefresh": false + } + }, { + "path": "count-down/count-down", + "style": { + "navigationBarTitleText": "countDown倒计时", + "enablePullDownRefresh": false + } + }, { + "path": "count-to/count-to", + "style": { + "navigationBarTitleText": "countTo数字跳转", + "enablePullDownRefresh": false + } + }, { + "path": "count-scroll/count-scroll", + "style": { + "navigationBarTitleText": "countTo数字滚动", + "enablePullDownRefresh": false + } + }, { + "path": "sticky/sticky", + "style": { + "navigationBarTitleText": "sticky吸顶", + "enablePullDownRefresh": false + } + }, { + "path": "nav-bar/nav-bar", + "style": { + "navigationBarTitleText": "navBar导航栏", + "enablePullDownRefresh": false + } + }, { + "path": "notice-bar/notice-bar", + "style": { + "navigationBarTitleText": "noticeBar通知栏", + "enablePullDownRefresh": false + } + }, { + "path": "swiper/swiper", + "style": { + "navigationBarTitleText": "swiper轮播图", + "enablePullDownRefresh": false + } + }, { + "path": "collapse/collapse", + "style": { + "navigationBarTitleText": "collapse折叠面板", + "enablePullDownRefresh": false + } + }, { + "path": "read-more/read-more", + "style": { + "navigationBarTitleText": "readMore查看更多", + "enablePullDownRefresh": false + } + }, { + "path": "steps/steps", + "style": { + "navigationBarTitleText": "steps步骤条", + "enablePullDownRefresh": false + } + }, { + "path": "time-line/time-line", + "style": { + "navigationBarTitleText": "timeLine时间轴", + "enablePullDownRefresh": false + } + }, { + "path": "index-list/index-list", + "style": { + "navigationBarTitleText": "indexList索引列表", + "enablePullDownRefresh": false + } + }, { + "path": "index-list/base/index-list", + "style": { + "navigationBarTitleText": "indexList索引列表", + "enablePullDownRefresh": false + } + }, { + "path": "index-list/avatar/index-list", + "style": { + "navigationBarTitleText": "indexList索引列表", + "enablePullDownRefresh": false + } + }, { + "path": "calendar/calendar", + "style": { + "navigationBarTitleText": "calendar日历", + "enablePullDownRefresh": false + } + }, { + "path": "scroll-list/scroll-list", + "style": { + "navigationBarTitleText": "scrollList横向滚动", + "enablePullDownRefresh": false + } + }, { + "path": "swipe-action/swipe-action", + "style": { + "navigationBarTitleText": "swipeAction滑动菜单", + "enablePullDownRefresh": false + } + }, { + "path": "sign-board/sign-board", + "style": { + "navigationBarTitleText": "signBoard签名板", + "enablePullDownRefresh": false + // "pageOrientation": "landscape" + } + }, { + "path": "fab/fab", + "style": { + "navigationBarTitleText": "fab悬浮按钮", + "enablePullDownRefresh": false + } + }, { + "path": "input/input", + "style": { + "navigationBarTitleText": "输入框", + "enablePullDownRefresh": false + } + }, { + "path": "radio/radio", + "style": { + "navigationBarTitleText": "单选框", + "enablePullDownRefresh": false + } + }, { + "path": "check-box/check-box", + "style": { + "navigationBarTitleText": "复选框", + "enablePullDownRefresh": false + } + }, { + "path": "lazy-load/lazy-load", + "style": { + "navigationBarTitleText": "懒加载", + "enablePullDownRefresh": false + } + }, { + "path": "load-more/load-more", + "style": { + "navigationBarTitleText": "加载更多", + "enablePullDownRefresh": false + } + }, { + "path": "skeleton/skeleton", + "style": { + "navigationBarTitleText": "骨架屏", + "enablePullDownRefresh": false + } + }, { + "path": "empty/empty", + "style": { + "navigationBarTitleText": "空页面", + "enablePullDownRefresh": false + } + + }, { + "path": "landscape/landscape", + "style": { + "navigationBarTitleText": "压屏窗", + "enablePullDownRefresh": false + } + }, { + "path": "verification-code-input/verification-code-input", + "style": { + "navigationBarTitleText": "验证码输入", + "enablePullDownRefresh": false + } + }, { + "path": "subsection/subsection", + "style": { + "navigationBarTitleText": "分段器", + "enablePullDownRefresh": false + } + }, { + "path": "goods-nav/goods-nav", + "style": { + "navigationBarTitleText": "商品导航", + "enablePullDownRefresh": false + } + }] + }, { + "root": "templatePage", + "pages": [{ + "path": "login/demo1/demo1", + "style": { + "navigationBarTitleText": "火箭登录", + "enablePullDownRefresh": false + } + }, { + "path": "login/demo2/demo2", + "style": { + "navigationBarTitleText": "粒子登录", + "enablePullDownRefresh": false + } + }, { + "path": "login/demo3/demo3", + "style": { + "navigationBarTitleText": "背景登录", + "enablePullDownRefresh": false + } + }, { + "path": "login/demo4/demo4", + "style": { + "navigationBarTitleText": "简约登录", + "enablePullDownRefresh": false + } + }, { + "path": "health/qrcode/qrcode", + "style": { + "navigationBarTitleText": "健康码", + "enablePullDownRefresh": false + } + }, { + "path": "home/course/course", + "style": { + "navigationBarTitleText": "课程首页", + "enablePullDownRefresh": false + } + }, { + "path": "home/music/music", + "style": { + "navigationBarTitleText": "音乐首页", + "enablePullDownRefresh": false + } + }, { + "path": "home/design/design", + "style": { + "navigationBarTitleText": "设计首页", + "enablePullDownRefresh": false + } + }, { + "path": "home/job/job", + "style": { + "navigationBarTitleText": "招聘首页", + "enablePullDownRefresh": false + } + }, { + "path": "home/screen/screen", + "style": { + "navigationBarTitleText": "投屏首页", + "enablePullDownRefresh": false + } + }, { + "path": "home/wallpaper/wallpaper", + "style": { + "navigationBarTitleText": "壁纸首页", + "enablePullDownRefresh": false + } + }, { + "path": "life/fullpage/fullpage", + "style": { + "navigationBarTitleText": "全屏轮播", + "enablePullDownRefresh": false + } + }, { + "path": "life/pano/pano", + "style": { + "navigationBarTitleText": "3D全景", + "enablePullDownRefresh": false + } + }, { + "path": "life/plus/plus", + "style": { + "navigationBarTitleText": "会员协议", + "enablePullDownRefresh": false + } + }, { + "path": "life/browser/browser", + "style": { + "navigationBarTitleText": "浏览器", + "enablePullDownRefresh": false + } + }, { + "path": "life/share/share", + "style": { + "navigationBarTitleText": "", + // 图鸟公众号 + "enablePullDownRefresh": false + } + }, { + "path": "life/candle/candle", + "style": { + "navigationBarTitleText": "敬请期待", + "enablePullDownRefresh": false + } + }, { + "path": "life/cover/cover", + "style": { + "navigationBarTitleText": "红包封面", + "enablePullDownRefresh": false + } + },{ + "path": "life/cube/cube", + "style": { + "navigationBarTitleText": "魔方游戏", + "enablePullDownRefresh": false + } + }, { + "path": "time/clock/clock", + "style": { + "navigationBarTitleText": "时钟", + "enablePullDownRefresh": false + } + }, { + "path": "animate/loading/loading", + "style": { + "navigationBarTitleText": "加载动画", + "enablePullDownRefresh": false + } + }, { + "path": "animate/particle/particle", + "style": { + "navigationBarTitleText": "随机粒子", + "enablePullDownRefresh": false + } + }, { + "path": "animate/photo/photo", + "style": { + "navigationBarTitleText": "相册图集", + "enablePullDownRefresh": false + } + }, { + "path": "animate/hollow/hollow", + "style": { + "navigationBarTitleText": "镂空效果", + "enablePullDownRefresh": false + } + }, { + "path": "my/demo1/demo1", + "style": { + "navigationBarTitleText": "夏天个人", + "enablePullDownRefresh": false + } + }, { + "path": "my/demo2/demo2", + "style": { + "navigationBarTitleText": "图鸟个人", + "enablePullDownRefresh": false + } + }, { + "path": "my/demo3/demo3", + "style": { + "navigationBarTitleText": "外卖个人", + "enablePullDownRefresh": false + } + }, { + "path": "my/demo4/demo4", + "style": { + "navigationBarTitleText": "高端个人", + "enablePullDownRefresh": false + } + }, { + "path": "animate/suspended/suspended", + "style": { + "navigationBarTitleText": "流星悬浮", + "enablePullDownRefresh": false + } + }, { + "path": "animate/bubble/bubble", + "style": { + "navigationBarTitleText": "泡泡飘出", + "enablePullDownRefresh": false + } + }, { + "path": "article/demo1/demo1", + "style": { + "navigationBarTitleText": "资讯左图", + "enablePullDownRefresh": false + } + }, { + "path": "article/demo2/demo2", + "style": { + "navigationBarTitleText": "资讯右图", + "enablePullDownRefresh": false + } + }, { + "path": "life/about/about", + "style": { + "navigationBarTitleText": "关于我们", + "enablePullDownRefresh": false + } + }, { + "path": "animate/wave/wave", + "style": { + "navigationBarTitleText": "css波浪", + "enablePullDownRefresh": false + } + }, { + "path": "life/outset/outset", + "style": { + "navigationBarTitleText": "全新出发", + "enablePullDownRefresh": false + } + }] + }, + { + "root": "thirdPage", + "pages": [{ + "path": "short-video/short-video", + "style": { + "navigationBarTitleText": "短视频", + "enablePullDownRefresh": false + } + + }] + },{ + "root":"takeOutPage", + "pages": [{ + "path": "walking-route/walking-route", + "style": { + "navigationBarTitleText": "路线轨迹", + "enablePullDownRefresh": false + } + }] + }], + "preloadRule": { + "pages/index/index": { + "network": "all", + "packages": ["basicPage", "componentsPage", "templatePage", "vipPage", "thirdPage"] + } + }, + "globalStyle": { + "navigationStyle": "custom", + "navigationBarTextStyle": "black", + "navigationBarTitleText": "Tuniao UI", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + } +} diff --git a/pages/basic/basic.vue b/pages/basic/basic.vue new file mode 100644 index 0000000..c70c594 --- /dev/null +++ b/pages/basic/basic.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/pages/components/components.vue b/pages/components/components.vue new file mode 100644 index 0000000..a36dff4 --- /dev/null +++ b/pages/components/components.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/pages/index/index.vue b/pages/index/index.vue new file mode 100644 index 0000000..026f68e --- /dev/null +++ b/pages/index/index.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/pages/template/template.vue b/pages/template/template.vue new file mode 100644 index 0000000..12482d3 --- /dev/null +++ b/pages/template/template.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/pages/tuniao/tuniao.vue b/pages/tuniao/tuniao.vue new file mode 100644 index 0000000..92713be --- /dev/null +++ b/pages/tuniao/tuniao.vue @@ -0,0 +1,563 @@ + + + + + diff --git a/pages/vip/vip.vue b/pages/vip/vip.vue new file mode 100644 index 0000000..e60e532 --- /dev/null +++ b/pages/vip/vip.vue @@ -0,0 +1,508 @@ + + + + + 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/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/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7bf90375f6b3c53badd9cb1536841e207889f098 GIT binary patch literal 67646 zcmeI52Y4Lina4%)3cY=Xn4w4YyfB*p!j^Y3b;Sxe1gpwEngc6zy z#x@vtEO#3h*~UdKvSeG5Wm(0t+k7M7FP zpM~6qv_(EaDv(Xce#Aq9tzjCF&ZIl(P`Z>(rCaG(x|YtJ{*MjChJQQ!yPso!D$)w+ zk1R%ZApzDX;W%y5?QTT6md>SnVIV9T4rBwrq2EAGK)#Q(MoJO2(O~;*G$7pz17RUd zgiQlct>57~FLE;SN2DA%gali1Xy7oHAxwmgFsdJ@^*BoBLe#EWAel&D?WAoih+@oVk!?t@rIrSS*>i}?6RIPe z_#M9EWB(F=S0TZcni>#x!m!?LfMb2mSKA4&M+qsu2}5C7r!U|bVK0&I2sj@lG?7hM z3R8z~P0a6q#=Zp-#Cj;9iEYAE*w)wv!tbBLek2lXO;ZEHRv5=nfL@11^@AY4M+r@I z6Sl%Qh6BQ{&tN|X3AU!K0bwkx9S3M1me%Z#Ai>tOH6V%efGem9zJU)ET^(irCv=EDAdWLIOHu-TvEK$ThX z5VNkgnzaGwCJ{fOPW)f5*Hz|4hc)681sf|7nof zjp|1JIRW2;eLt`t2=+t4ehi$jIq%c_%JKe=un)%TH&n~}cbjFsLSBd6yZAne?=#^0 z{@*hj{9W@t2Ky1;G;j9r%?^_rB;OWb-%w1B95O5T5Zo^&z6W|OPo zn)p5w?8kiFylis8wSBSsgLR)bI3oEqpnjX;uGleiRrJw*Av^To)aD4`+PqEzhClOMo{%+1{OTgvjz1Z zjvYuYu&{IDa|fR!w+8mZ`xD9EdXdlj^&CIGkMKQtU@_CA#y&?ra5X+cbw7^Rahdpo z1@r|5TWV@x!9cSN^1Oc7v8(6!@xAySY^S#*AAEt&sqd=x+a2sV*5!Yn;18yJ9e>ax zHSfK-U-holW}|Nb&+i_s=Zqw`8%=IEPQISca=^apPsj&V?D7xo?pN{2$}{t__XjaeU8b)BY1b{{!<@g7>^$ ztj_p5c!4_5Alk+#{Kb^h%(hNSsatRM7kg+YKK@R8JvKcR?5DGz^9%C4J3_IbVgdPr z0`OmWo7sZ))cpQLUl4gf26?~YMfr?uzE?*5cmJwpuhNuKz}8&za=#CEgWn8txKhS$ z%zOyGhx5l12e^6;wZO%HHOqY&+^PHYpyo3G?Bx?CVE4Jo`%f|3*pXWghS#JF{)*L> zz6^fwdLA+xTd(*Hn4WK5mbifUe;z))>`m%Ct;qeU>-9c8R2LjgekgyTHdD-TYiS>c zcc#p(2N#M44sOEUuQM;79M0u&x5D!`fh+br>vZ@Yp3kNqr`vUAA5!C|FUXDW^Z9-z zZDt;RU~_lId@w#R*iuUa+b6@@)a{E-GH>pgl!`Cp{JhFpHx!*BsP;CyQQv)-c42k*a6 zjlVa2fJ3qSakP)Tmb8&a@$-!D*taAY=arJ6hcEibVR(BQxg0jX=%?nbAr4qXt!Lu% zW?ipgEC*wKhh1wn{ub(gcbesad%+*@4;-I=FaF^!xF3GlHl7m_M+94HX+ZOM20uZp zkMG_w+iZJ2c27<}j@&-$8TOCE|Kx##eoX%^K7Jq^Ff5$sParnTCPtV6cPyq~=txy+ z-FtAgjMFVJYe(JwogZT7*!`MPv-R}Zj{*N4(qh*6+{;-r?`gjO)t(fOgPX>^bhT4oJVWy9*%DV_7ctI)|}ps^!H?w*HyHqFX$Wuu2+4i z0Gn5?P;oACV^6T(mzwt;Ts67dPPqNSkj=LZW8V(^wQi4F%i$9Efi_S%47`6yf50W= zg;$2g_EeRi!64pG>1MQR1OA>lU2U*`;qGJqF8Fugy$(4+2PSuW%Duf*=b zTDWTs7umhA*E&8L)2})Hoz5l?pcb?;C+f?=pDC|_^5NhOzx%k?guT}BdS7xDb)dVc z53NY~+YW9Ztbtj?@9n|X$KCOL*zSe9!=66>4-l>E)P**X^LL(pxHnK?Q_w(eTkwb5 zeZF^`@8d3;kHTJSeS8T1z2J)_qnpCrH}88ma*#fr7qNYCjrR3E-^=Em-3xa_>wRcV zzpjk=8Hpd*UD>?#m+E(a5Dp*nB(@K(it}pZdmnpn*P0&^t^d%2eQ6go5cKz_Y%|!u z%WU|=*ghEhHeZeJ!#3}5_pulL^a*_YGh)G|DSP|P{=)ZdXDr`6q1;aKeIma1vF{<= zk)HGgYHd%g0aNl`zyYb+kgB#YcK7GlK6V|6@8kHsdz8&b8HU4wtO~e7KQ&j`a z`?~jRWE>|PuDo8kor~`i@V$?_Z}(aQNb5Rh&?Xl4Z{B)L#=Aevx@$Yv(Qh*cp`T{k z3hMT8Is5MQ;CCIi5B|~deI&+<=ld|{3wzD?*V=D=(#o`-y{9r7M=U1vC57aqc_L*y7T{-?7Ox?3rz+Z8lY+G@=cw1xm2J_x3>UX== zf*;3r1#92tW8!<>SB&rTz0diwdttA2;GCR>4`A%)LGsC9JH8q?gkRqdZk1*9#pQux z0o+@`oO@z<_08(JTNC~k%IW;)Fo?s2oxdjgV8(J4KF)a-gCF>J<8y~QZKO`VkHUTc z_zy@&z<(rTg|^K-zW3go&%TRTz2sxY=TfihaT|7x-|pN3UPpRgix0ljY{sjM+r5IKG@4nV$__136E3j`MM^lkdZJFYE_`y@d1H5Z+%l zs5v8a{O)}Pm}Wf07%k$gcktix>l&A%aT%)DsZUNd`R>^GfFI)D-(W81DCX?n#P`5Q zSVh+3$M#2QjyCqXg*b7@^|U9x=WwU3)Q9hV><4jfVb8e@PO;(_gKM!v>I~!XA&Fg%J>66nl z7W}P}c&;NpTF+F|^ET8^r&_&yyC2udc7?t0QapxTdV`stGoCqoWiNpXb9po2e9hU= zx-AnmZv&fM+n@d)>c3jsRp0mHJRf@(--plX+k7G6`cxi+w~5VWFz$XGb(_80SZm>3cpko1Kb`nqHm`h5FvXF0Y3tsKPSb2MotBK{GWDRxVzS-T0 z>ELv&y{34*XV_k4tKxgvrStLNF&r%Xb^AWS-m`eG^g-rm{)u^dtnV?6bsF-%WVYh3 zw5_MGd%o-2d~|MC8{Z52kHgrjt-0TXQ&tSnodsK68rZOinEeSb2luz(b@_JptXz0r z9Pj$$uyd`Yt!JlZ65me)uW96VV~7U^Ujg6K2KuA(f#4t??4Gv-_P(EY>$ipZehNOn z^bYWOjWPUJ!3QUrx9ooA@wUe9(?hXjy=2iAa(;{LKFZ&>nKy>{7$dN2@qH#f zUeDmrdYxLkPjfUiS8pnFceEyN*^kZJ@S%CjA2M&rjrfLFk7DoFbLzwQ4)?I#3wy2q zGlJhP_%&k#_tbv>&H2-|V84*}U>G#bkb5 z@B8>jd?%gD-q~ld7T>g%%*A~GKmVk8i~o+iz#46jg7+=Fe<^D-!4b1*6SLv|@^tDy zeW@Mh6LVe?_9MKf-%y;V+%7u4uZi!YvDdnQdgj+y+R@q(7HlxEwoAnK z(bzkihxcWd!bEt;$NTY}bUsEprwwR*wk)un1kX=}`xWOEU(H;-d(B(%EcN2HeX!3F(-GIZarWeJ8hfEJ)iv_Huul)g^%0wgbER|XTI(_DISg8NPdWW$@K}cQ4((^bRm6S&3-(W&r?t9v7ZXc7jNN}HWb?`)6ie0=-^<>k zZ9W=%wL^*WjVbWSjVT$c(AZgoGsnU-ehO!+1Wh0)_i>D=fPbup4MNS?)!RhF9iSDw1YB^ol8tG z|1#n}V#d|vl^fs1SLaiEcniA+{|57Y*ybJX!k)IM>r(7FpE)AU`T1|E>uCJV+)wBm zZ3D-WyN!FEH8t9Y=20$#ch?re#YNQWN3*Wt`^>S$UuQqUaX)AL#*fJP@Y$K?!>_Ej zH5%;3V4GuU3*%`ES+s>oNH%{{%kyUNc>%}GVxE5Sh4}ZD*gCP`l6$cC2h3aXpm{4F z3GJ5<4}^KZ)>CI%%5M+jd#V#VyH|TdhD$iVZ}Tu#44+kx?*>&fTI1+)JI{G?fxL#iOlJ_O9Rk40sr~9aKrSAuzT>GaR#{^ej*RM%ZK~r?`MhkPXceGgta<~iTO+U zY!NuGexCMmJNY6$qlotx-T-%yJ8F%WXzZ2KN85Zf_KH0sd@q}i!d^Z}&j3a6R;!DA%0s{UHlbjG67@#u6Swlx{- zvhnv?tJ%eRU|WEnFGPxD=d^(m+CYi$XFm@=vg!$J9x0{Gxc0&OY9Hm;{QReBZ?rl6 zW+Izc%vmGf`!>(@`Pi%Oq_{*eX$f`59r(JYyjI9&c&_h*V1I#G8?cYA<*L6fQC%lt zZjbFn;{33ExmXXqx_Tb?Ywb0y!KJmBg#9dVpAGKCKJH+vm~X{z%vRwq=3@J^IKD`@ zM;%iJZp$8}J>3NUVC>s`jq!Z~zSp%m?1eirSpxRDR@I>LsX490ukBma^xDC`U5tNv zwt8JB!uRT{O;Fc~$?f5A#azxF6U_*`DkCgxc|jI$$;oM^i>iFIU(2f_9D`*zrVqPmXyYU||tXq!jZ33GdN>1-a( zcYH5Q!Lx*Y#o6Hg5cd88xc>^=@h2`G;4{Y!99K%aSw?KS8w@;ZlKxh;hPDL_xhhz08CQ$}Yeret|ta#duq6z5HHucs|EqU(#>2cmVwo-@7$B4{fU7tyQh! zx3D=q11#F+)t~HQJodsp9{Xs%S69y4Hu{Dj!RLw+dZ0eb7 zQ~7&3?-yd@bI{!aV!5TnYKxvhm-m75<=7XW=g79irR)pXNAf?}3HGwErJ3~9&|2)S z1)S^7P`>Hoo+!SL=X>=xyXQjO35LW*d%=R|i1rOO?BLPw9UMi>EnHf zdhe}_twr}k$$N&-CWa7?4@)PvhMN>)k4DB4?~P|ai8wq5yUza+w!(PbGB~~B5ikeq ziYLL5+O3|&!kAreGMFo$a`7~Km;a$}acG3^v3YUfsy|={#8aPkt6GUKeuCd5hRmW( zs_qbP^AYU17B|iS{w@0-vkmA%@qJU?l=rQKZ;A&~zlW0)3#^2P*5s4pOb(5~U&Ln% z;I4{}%#mwDZTB_C+`P!~FYq_}xwMx#t?_Z-JPTgTzaM+P9gJxU6Nrb#f15pAEB(8g zPuQ>4nEzq(s`F9nvCX})w>`(M{llDNLndty-p-{yq?}&QfKwaPbKcYr_0PNo9d&NqnV6pr@_=r5JvEyE~ zgB?X?l^L|_SBXKM#*gEVRwxFC<9C&s>6oUzslK22Jh}c=wb%OGoSZX>1<3i_{0icL zKEwfi)2Z`*mpU(gAX4WA_j=WQu)FE_c|D&k!uPUyu&==8l>_}tp11CW{J8Vw{M}r( zvqNB`SK3xUa%hp_VIPzTKS$FPr0%3 zd7jnea-ravJM}>@(J^%s*v3WJ^4-<@bL%x`SJ{WKu#_t$!;V!cs+4PpP8@xAI|2xB>{@+In;3%TSYwO)4c zVZAgU>^IkXc#iOc&>hr-Ivp!yp~*XZ#i+-p;|9D z_^?455cYEuenau?#MkQAx1+hUk@4E;_2+x}dcUts{bO$ICbnM4`xV!it)phJZ$W^2 zLXeK>g9^SqCgB-07klW#^y!{MjECK8PF_rWPhGE3;(Ks+HGcL*)O;4VqSj4LeXx>C z3wS;uKF9unuy332G@7rI`FpdDJqZM9c*9iaX$V zV!A!lQG$3rAta6bfv~?Hp^%$kD<4Qbk8vHU=hQYwV^Dg6dJgsav8v^P^8_%TOpLGb z+J#q`H~$ghIche$RXf|s1=O92B)H1p?S^YWmgW`4!{Af?|T1s_r=G$5>nxsSj0t&t$vLJ3WL z6UM^YVV}kp{`>pv=ODq>v^5}%&p-sd+w^x>9%C=x5Nu6T1H$%?NW}Kz+Q7+tHnM5n zdT>`^Y)@hD!yeh|y|A=kpST{thryPT8W5(!wwmqxjllnm{r$)`B-omU285+BO^AJ5 z8~6gpK8MixA8aYE0bwXCg{cp7t$Q7Zs5bNx60`x7kfNKg6NawNS1agoAMzc)4KT<# z@CE1~)i!ayuxl{(epBGPY6Id8`3}Vo!Il~t5LUvh-kk4a9>3=tY6B-AbO5^CFsKip zh$P*Fjq-P4CCuXC{M4^?E=2VK)elrdVsJ>XC5Z-vg)k8|!st`uT-z6QUPSFmwc^%@ z`Vsab!S>l`K)M$O!a|rds?8^A3;d4S!RL@~BljYG5cwR9DG3JgpoHVJNw?CmbS<4r z_rgF}B!cU>zOUa!zKEQO+=sM5G_G(ivI*Ib1Z@H(G;ov7q&w+Qx|B|(Tj^N3md=kE zTeDY=oKQaDwPVDEOev(?^@89BI$NR&0e;MyjqusUhw=oxhKaRNo{B_I^;LoE^fV=*GeD`5> literal 0 HcmV?d00001 diff --git a/store/$tn.mixin.js b/store/$tn.mixin.js new file mode 100644 index 0000000..ab7689b --- /dev/null +++ b/store/$tn.mixin.js @@ -0,0 +1,28 @@ +import { mapState } from 'vuex' +import store from '@/store' + +// 尝试将用户在根目录中的store/index.js的vuex的state变量加载到全局变量中 +let $tStoreKey = [] +try { + $tStoreKey = store.state ? Object.keys(store.state) : [] +} catch(e) { + +} + +module.exports = { + beforeCreate() { + // 将vuex方法挂在在$t中 + // 使用方法: + // 修改vuex的state中的user.name变量为图鸟小菜 => 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..828212c --- /dev/null +++ b/store/index.js @@ -0,0 +1,75 @@ +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.0", + // 是否使用自定义导航栏 + vuex_custom_nav_bar: true, + // 状态栏高度 + vuex_status_bar_height: 0, + // 自定义导航栏的高度 + vuex_custom_bar_height: 0 + }, + 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/takeOutPage/static/images/location.png b/takeOutPage/static/images/location.png new file mode 100644 index 0000000000000000000000000000000000000000..338d999d71bba1c783265de8a570ac5d994c9430 GIT binary patch literal 5631 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 literal 0 HcmV?d00001 diff --git a/takeOutPage/walking-route/walking-route.vue b/takeOutPage/walking-route/walking-route.vue new file mode 100644 index 0000000..65ee873 --- /dev/null +++ b/takeOutPage/walking-route/walking-route.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/template.h5.html b/template.h5.html new file mode 100644 index 0000000..974e4db --- /dev/null +++ b/template.h5.html @@ -0,0 +1,38 @@ + + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + + + + + + + + + +
+ + + + diff --git a/templatePage/animate/bubble/bubble.vue b/templatePage/animate/bubble/bubble.vue new file mode 100644 index 0000000..5b95d53 --- /dev/null +++ b/templatePage/animate/bubble/bubble.vue @@ -0,0 +1,226 @@ + + + + + diff --git a/templatePage/animate/hollow/hollow.vue b/templatePage/animate/hollow/hollow.vue new file mode 100644 index 0000000..5b54527 --- /dev/null +++ b/templatePage/animate/hollow/hollow.vue @@ -0,0 +1,147 @@ + + + + + diff --git a/templatePage/animate/loading/loading.vue b/templatePage/animate/loading/loading.vue new file mode 100644 index 0000000..73893da --- /dev/null +++ b/templatePage/animate/loading/loading.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/templatePage/animate/particle/particle.vue b/templatePage/animate/particle/particle.vue new file mode 100644 index 0000000..5a261b4 --- /dev/null +++ b/templatePage/animate/particle/particle.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/templatePage/animate/photo/photo.vue b/templatePage/animate/photo/photo.vue new file mode 100644 index 0000000..1676e52 --- /dev/null +++ b/templatePage/animate/photo/photo.vue @@ -0,0 +1,264 @@ + + + + + diff --git a/templatePage/animate/suspended/suspended.vue b/templatePage/animate/suspended/suspended.vue new file mode 100644 index 0000000..3bb2907 --- /dev/null +++ b/templatePage/animate/suspended/suspended.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/templatePage/animate/wave/wave.vue b/templatePage/animate/wave/wave.vue new file mode 100644 index 0000000..31b6e9c --- /dev/null +++ b/templatePage/animate/wave/wave.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/templatePage/article/demo1/demo1.vue b/templatePage/article/demo1/demo1.vue new file mode 100644 index 0000000..0551396 --- /dev/null +++ b/templatePage/article/demo1/demo1.vue @@ -0,0 +1,739 @@ + + + + + diff --git a/templatePage/article/demo2/demo2.vue b/templatePage/article/demo2/demo2.vue new file mode 100644 index 0000000..c0da17e --- /dev/null +++ b/templatePage/article/demo2/demo2.vue @@ -0,0 +1,739 @@ + + + + + diff --git a/templatePage/health/qrcode/qrcode.vue b/templatePage/health/qrcode/qrcode.vue new file mode 100644 index 0000000..6d561f6 --- /dev/null +++ b/templatePage/health/qrcode/qrcode.vue @@ -0,0 +1,621 @@ + + + + + diff --git a/templatePage/home/course/course.vue b/templatePage/home/course/course.vue new file mode 100644 index 0000000..27b7cb5 --- /dev/null +++ b/templatePage/home/course/course.vue @@ -0,0 +1,732 @@ + + + + + diff --git a/templatePage/home/design/design.vue b/templatePage/home/design/design.vue new file mode 100644 index 0000000..09ca707 --- /dev/null +++ b/templatePage/home/design/design.vue @@ -0,0 +1,527 @@ + + + + + diff --git a/templatePage/home/job/job.vue b/templatePage/home/job/job.vue new file mode 100644 index 0000000..1816041 --- /dev/null +++ b/templatePage/home/job/job.vue @@ -0,0 +1,558 @@ + + + + + diff --git a/templatePage/home/music/music.vue b/templatePage/home/music/music.vue new file mode 100644 index 0000000..1232af3 --- /dev/null +++ b/templatePage/home/music/music.vue @@ -0,0 +1,704 @@ + + + + + diff --git a/templatePage/home/screen/screen.vue b/templatePage/home/screen/screen.vue new file mode 100644 index 0000000..f35e3bf --- /dev/null +++ b/templatePage/home/screen/screen.vue @@ -0,0 +1,704 @@ + + + + + diff --git a/templatePage/home/wallpaper/wallpaper.vue b/templatePage/home/wallpaper/wallpaper.vue new file mode 100644 index 0000000..df3614b --- /dev/null +++ b/templatePage/home/wallpaper/wallpaper.vue @@ -0,0 +1,614 @@ + + + + + diff --git a/templatePage/life/about/about.vue b/templatePage/life/about/about.vue new file mode 100644 index 0000000..26e108c --- /dev/null +++ b/templatePage/life/about/about.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/templatePage/life/browser/browser.vue b/templatePage/life/browser/browser.vue new file mode 100644 index 0000000..5541955 --- /dev/null +++ b/templatePage/life/browser/browser.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/templatePage/life/candle/candle.vue b/templatePage/life/candle/candle.vue new file mode 100644 index 0000000..ea883b1 --- /dev/null +++ b/templatePage/life/candle/candle.vue @@ -0,0 +1,625 @@ + + + + + diff --git a/templatePage/life/cover/cover.vue b/templatePage/life/cover/cover.vue new file mode 100644 index 0000000..f92f3dd --- /dev/null +++ b/templatePage/life/cover/cover.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/templatePage/life/cube/cube.vue b/templatePage/life/cube/cube.vue new file mode 100644 index 0000000..ddb1d6b --- /dev/null +++ b/templatePage/life/cube/cube.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/templatePage/life/fullpage/fullpage.vue b/templatePage/life/fullpage/fullpage.vue new file mode 100644 index 0000000..b999414 --- /dev/null +++ b/templatePage/life/fullpage/fullpage.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/templatePage/life/outset/outset.vue b/templatePage/life/outset/outset.vue new file mode 100644 index 0000000..fac48f0 --- /dev/null +++ b/templatePage/life/outset/outset.vue @@ -0,0 +1,477 @@ + + + + + diff --git a/templatePage/life/pano/pano.vue b/templatePage/life/pano/pano.vue new file mode 100644 index 0000000..0b8f549 --- /dev/null +++ b/templatePage/life/pano/pano.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/templatePage/life/plus/plus.vue b/templatePage/life/plus/plus.vue new file mode 100644 index 0000000..4418f8a --- /dev/null +++ b/templatePage/life/plus/plus.vue @@ -0,0 +1,303 @@ + + + + + diff --git a/templatePage/life/share/share.vue b/templatePage/life/share/share.vue new file mode 100644 index 0000000..660d766 --- /dev/null +++ b/templatePage/life/share/share.vue @@ -0,0 +1,54 @@ + + + + + + + diff --git a/templatePage/login/demo1/demo1.vue b/templatePage/login/demo1/demo1.vue new file mode 100644 index 0000000..d2dc896 --- /dev/null +++ b/templatePage/login/demo1/demo1.vue @@ -0,0 +1,414 @@ + + + + + diff --git a/templatePage/login/demo2/demo2.vue b/templatePage/login/demo2/demo2.vue new file mode 100644 index 0000000..0071d32 --- /dev/null +++ b/templatePage/login/demo2/demo2.vue @@ -0,0 +1,495 @@ + + + + + diff --git a/templatePage/login/demo3/demo3.vue b/templatePage/login/demo3/demo3.vue new file mode 100644 index 0000000..8c2de27 --- /dev/null +++ b/templatePage/login/demo3/demo3.vue @@ -0,0 +1,401 @@ + + + + + diff --git a/templatePage/login/demo4/demo4.vue b/templatePage/login/demo4/demo4.vue new file mode 100644 index 0000000..e03a0eb --- /dev/null +++ b/templatePage/login/demo4/demo4.vue @@ -0,0 +1,420 @@ + + + + + diff --git a/templatePage/my/demo1/demo1.vue b/templatePage/my/demo1/demo1.vue new file mode 100644 index 0000000..6994c96 --- /dev/null +++ b/templatePage/my/demo1/demo1.vue @@ -0,0 +1,430 @@ + + + + + diff --git a/templatePage/my/demo2/demo2.vue b/templatePage/my/demo2/demo2.vue new file mode 100644 index 0000000..50a2a2b --- /dev/null +++ b/templatePage/my/demo2/demo2.vue @@ -0,0 +1,803 @@ + + + + + diff --git a/templatePage/my/demo3/demo3.vue b/templatePage/my/demo3/demo3.vue new file mode 100644 index 0000000..cd2a12b --- /dev/null +++ b/templatePage/my/demo3/demo3.vue @@ -0,0 +1,957 @@ + + + + + diff --git a/templatePage/my/demo4/demo4.vue b/templatePage/my/demo4/demo4.vue new file mode 100644 index 0000000..1c1cc5a --- /dev/null +++ b/templatePage/my/demo4/demo4.vue @@ -0,0 +1,1089 @@ + + + + + diff --git a/templatePage/time/clock/clock.vue b/templatePage/time/clock/clock.vue new file mode 100644 index 0000000..dd31b79 --- /dev/null +++ b/templatePage/time/clock/clock.vue @@ -0,0 +1,874 @@ + + + + + diff --git a/thirdPage/short-video/short-video.vue b/thirdPage/short-video/short-video.vue new file mode 100644 index 0000000..f207a29 --- /dev/null +++ b/thirdPage/short-video/short-video.vue @@ -0,0 +1,456 @@ + + + + + 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..eed4999 --- /dev/null +++ b/tuniao-ui/components/tn-action-sheet/tn-action-sheet.vue @@ -0,0 +1,202 @@ + + + + + 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..4a7f11c --- /dev/null +++ b/tuniao-ui/components/tn-avatar-group/tn-avatar-group.vue @@ -0,0 +1,103 @@ + + + + + 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..820ce2f --- /dev/null +++ b/tuniao-ui/components/tn-button/tn-button.vue @@ -0,0 +1,302 @@ + + + + + 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..d5d795b --- /dev/null +++ b/tuniao-ui/components/tn-column-notice/tn-column-notice.vue @@ -0,0 +1,251 @@ + + + + + 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..2837bc2 --- /dev/null +++ b/tuniao-ui/components/tn-grid-item/tn-grid-item.vue @@ -0,0 +1,114 @@ + + + + + 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..3a96b98 --- /dev/null +++ b/tuniao-ui/components/tn-image-upload-drag/tn-image-upload-drag.vue @@ -0,0 +1,995 @@ + + + + + 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..2ec73b0 --- /dev/null +++ b/tuniao-ui/components/tn-input/tn-input.vue @@ -0,0 +1,427 @@ +