From 45112b28811b5a0ac7442c19e7cf087104c46cc7 Mon Sep 17 00:00:00 2001 From: Eudemon Date: Mon, 10 Mar 2025 15:44:49 +0800 Subject: [PATCH] init --- .env | 16 + .env.development | 8 + .env.production | 2 + .gitignore | 33 + .hbuilderx/launch.json | 9 + LICENSE | 21 + README.md | 35 + deploy/file.js | 51 + deploy/index.js | 54 + index.html | 106 + jsconfig.json | 24 + .../android/gaidutil-release.aar | Bin 0 -> 4286 bytes .../Tidu-GaidUtil/android/libs/getGAID.jar | Bin 0 -> 430302 bytes nativeplugins/Tidu-GaidUtil/package.json | 20 + package.json | 3320 +++++++++++++++++ shims-uni.d.ts | 10 + src/App.vue | 485 +++ src/api/account.js | 168 + src/api/app.js | 66 + src/api/deposit.js | 73 + src/api/earn.js | 106 + src/api/game.js | 116 + src/api/home.js | 49 + src/api/login.js | 100 + src/api/mail.js | 49 + src/api/promo.js | 353 ++ src/api/sms.js | 0 src/api/user.js | 36 + src/api/vip.js | 16 + src/api/withdraw.js | 62 + src/components/LoginHeader/LoginHeader.vue | 114 + src/components/LotteryWheel/LotteryWheel.vue | 189 + .../components/RoundTurntable.vue | 150 + src/components/badge/BadgeTR.vue | 38 + src/components/common/CardSlider.vue | 330 ++ .../custom-tab-bar/CustomTabBar.vue | 246 ++ src/components/emptyHold/EmptyHold.vue | 22 + src/components/footer/MobileFooter.vue | 105 + src/components/footer/PcFooter.vue | 21 + src/components/header/MobileGameHeader.vue | 107 + src/components/header/MobileHeader.vue | 94 + src/components/header/MobileSubHeader.vue | 101 + src/components/header/PcHeader.vue | 65 + src/components/header/TransparentHeader.vue | 95 + src/components/image/ThemeImage.vue | 37 + src/components/input/MoneyInput.vue | 112 + src/components/input/NormalInput.vue | 105 + src/components/input/SearchInput.vue | 95 + src/components/layout/CommonLayout.vue | 161 + src/components/layout/MainLayout.vue | 40 + src/components/layout/MobileCustomLayout.vue | 33 + src/components/layout/MobileLayout.vue | 40 + src/components/layout/MobileSubLayout.vue | 49 + src/components/list/RewardsList.vue | 83 + src/components/loading/StartLoading.vue | 47 + src/components/menu/SideMenu.vue | 76 + src/components/nodata/NoDataSearch.vue | 51 + src/components/pageable/Pageable.vue | 77 + src/components/popup/BindPhonePop.vue | 300 ++ src/components/popup/BindPromoPop.vue | 68 + src/components/popup/ConDepositPop.vue | 279 ++ src/components/popup/ConfirmPopup.vue | 124 + src/components/popup/Congratulation.vue | 131 + src/components/popup/DepositBonus.vue | 320 ++ src/components/popup/Download.vue | 96 + src/components/popup/FirstRechargePop.vue | 224 ++ src/components/popup/NormalPopup.vue | 68 + src/components/popup/NormalPopupView.vue | 89 + src/components/popup/RankHisPop.vue | 266 ++ src/components/popup/RankRewardPop.vue | 252 ++ src/components/popup/TipsPopup.vue | 104 + src/components/popup/WheelPop.vue | 93 + src/components/radio/Radio.vue | 8 + .../segment/RoundSegmentControl.vue | 67 + src/components/segment/SegmentControl.vue | 123 + src/components/siderbar/PcSiderBar.vue | 38 + src/components/tabs/NormalTabs.vue | 98 + src/components/tabs/NormalTabsItem.vue | 118 + src/components/tabs/SmallTabsItem.vue | 100 + src/components/vipSign/VipSign.vue | 42 + src/config/global.config.js | 19 + src/config/ip.config.js | 8 + src/locales/index.js | 27 + src/locales/lang/en-US.js | 27 + src/locales/lang/en-US/app.js | 67 + src/locales/lang/en-US/constants.js | 188 + src/locales/lang/en-US/deposit.js | 131 + src/locales/lang/en-US/earn.js | 98 + src/locales/lang/en-US/home.js | 15 + src/locales/lang/en-US/login.js | 52 + src/locales/lang/en-US/mail.js | 30 + src/locales/lang/en-US/promo.js | 288 ++ src/locales/lang/en-US/redeposit.js | 21 + src/locales/lang/en-US/search.js | 22 + src/locales/lang/en-US/vip.js | 22 + src/locales/lang/en-US/withdraw.js | 98 + src/locales/lang/ind-IND.js | 25 + src/locales/lang/ind-IND/app.js | 65 + src/locales/lang/ind-IND/constants.js | 183 + src/locales/lang/ind-IND/deposit.js | 123 + src/locales/lang/ind-IND/earn.js | 38 + src/locales/lang/ind-IND/home.js | 14 + src/locales/lang/ind-IND/login.js | 52 + src/locales/lang/ind-IND/mail.js | 13 + src/locales/lang/ind-IND/promo.js | 184 + src/locales/lang/ind-IND/search.js | 22 + src/locales/lang/ind-IND/vip.js | 22 + src/locales/lang/ind-IND/withdraw.js | 86 + src/locales/lang/ja-JP.js | 11 + src/locales/lang/ja-JP/app.js | 3 + src/locales/lang/ja-JP/constants.js | 3 + src/locales/lang/ja-JP/home.js | 3 + src/locales/lang/ja-JP/login.js | 3 + src/locales/lang/zh-CN.js | 5 + src/locales/lang/zh-CN/app.js | 9 + src/main.js | 62 + src/manifest.json | 172 + src/module/app/app.js | 20 + src/module/formatter/data-formatter.js | 121 + src/module/formatter/date-formatter.js | 124 + src/module/fullscreen/fullscreen-handler.js | 44 + src/module/request/http-client.js | 54 + src/module/request/http-constant.js | 93 + src/module/request/http-request.js | 113 + src/module/request/http-upload.js | 106 + src/module/router/interceptor.js | 50 + src/module/storage/local-storage.js | 20 + src/module/third/adjust.js | 67 + src/module/third/fbsdk.js | 14 + src/module/third/googlesdk.js | 71 + src/module/third/okspin.js | 45 + src/module/third/openinstall.js | 19 + src/module/toast/toast.js | 42 + src/module/utils/conversionTime.js | 27 + src/module/utils/convertBirthday.js | 16 + src/module/utils/encipherPhone.js | 15 + src/module/utils/errorHandler.js | 20 + src/module/utils/htmlparser.js | 352 ++ src/module/utils/isEmpty.js | 19 + src/module/utils/openUrl.js | 40 + src/module/utils/require.js | 10 + src/module/utils/sortArray.js | 7 + src/module/utils/system.js | 74 + src/module/utils/util.js | 150 + src/module/verify/verify.js | 40 + src/pages.json | 419 +++ src/pages/Login/ForgetPassword.vue | 376 ++ src/pages/Login/Login.vue | 362 ++ src/pages/Login/LoginV2.vue | 442 +++ src/pages/Login/Register.vue | 540 +++ src/pages/Login/components/LoginFotter.vue | 165 + src/pages/account/Account.vue | 528 +++ .../account/BalanceRecords/BalanceRecords.vue | 373 ++ src/pages/account/BankCard/BankCard.vue | 527 +++ src/pages/account/BankCard/BankCardList.vue | 195 + src/pages/account/FeedBack/FeedBack.vue | 313 ++ src/pages/account/GameRecords/GameRecords.vue | 452 +++ src/pages/account/Language.vue | 53 + .../account/PhoneBinding/PhoneBinding.vue | 387 ++ src/pages/account/Profile/Profile.vue | 220 ++ .../WithdrawalPassword/WithdrawalPassword.vue | 377 ++ .../components/EditProfile/EditProfile.vue | 363 ++ .../account/components/Header/Header.vue | 45 + .../account/components/VipItem/VipItem.vue | 144 + src/pages/account/constants/balanceRecords.js | 33 + src/pages/account/constants/birthday.js | 17 + src/pages/account/constants/gameRecords.js | 17 + src/pages/account/constants/index.js | 131 + .../account/constants/withdrawPassword.js | 17 + src/pages/activity/Activity.vue | 759 ++++ src/pages/activity/Poster.vue | 89 + .../activity/components/LotteryWheel2.vue | 259 ++ src/pages/earn/Earn.vue | 29 + src/pages/earn/components/EarnFooter.vue | 108 + src/pages/earn/components/EarnHeader.vue | 52 + src/pages/earn/components/EarnOld.vue | 85 + src/pages/earn/components/EarnV2.vue | 102 + .../components/EarnV2CommissionTablePopup.vue | 104 + src/pages/earn/components/EarnV2Home.vue | 376 ++ src/pages/earn/components/EarnV2Reward.vue | 225 ++ src/pages/earn/components/EarnV2Rules.vue | 99 + src/pages/earn/components/EarnV2Teams.vue | 206 + src/pages/earn/components/MyRewards.vue | 282 ++ src/pages/earn/components/Rule.vue | 176 + src/pages/home/Home.vue | 993 +++++ .../home/components/HomeDownloadAppItem.vue | 118 + src/pages/home/components/HomeGamesAll.vue | 221 ++ src/pages/home/components/HomeGamesItem.vue | 159 + src/pages/home/components/HomeHeader.vue | 133 + src/pages/home/components/HomeNotice.vue | 134 + src/pages/home/components/HomeUserInfo.vue | 213 ++ .../home/components/PromoPopup/Community.vue | 128 + .../components/PromoPopup/FirstDeposit.vue | 207 + src/pages/home/components/PromoPopup/Jili.vue | 159 + src/pages/home/components/PromoPopup/Rank.vue | 192 + .../home/components/PromoPopup/Signin.vue | 116 + .../home/components/PromoPopup/UpRebate.vue | 96 + src/pages/home/components/SearchGamesItem.vue | 161 + src/pages/home/components/UserInfo.vue | 235 ++ src/pages/index/index.vue | 198 + src/pages/mail/Mail.vue | 227 ++ src/pages/mail/MailDetail.vue | 263 ++ src/pages/mail/components/MailDetailPopup.vue | 165 + .../promo/CashbackRecord/CashbackRecord.vue | 209 ++ src/pages/promo/FirstDeposit/FirstDeposit.vue | 101 + src/pages/promo/InvitationalRanks.vue | 104 + src/pages/promo/Jili.vue | 315 ++ src/pages/promo/Promo.vue | 263 ++ src/pages/promo/Ranking/Ranking.vue | 172 + src/pages/promo/RebatePromo/RebatePromo.vue | 138 + src/pages/promo/Signin/Signin.vue | 343 ++ src/pages/promo/SignupBonus.vue | 392 ++ src/pages/promo/TgExchange.vue | 199 + src/pages/promo/components/Community.vue | 188 + .../components/InvitationRankHistoryPopup.vue | 129 + .../promo/components/InvitationRanksHome.vue | 302 ++ .../promo/components/InvitationRanksRank.vue | 229 ++ .../promo/components/InvitationRanksRuls.vue | 134 + .../promo/components/InvitationRanksTeams.vue | 400 ++ src/pages/promo/components/Leaderboard.vue | 1037 +++++ src/pages/promo/components/LotteryWheel.vue | 239 ++ src/pages/promo/components/MyReward.vue | 152 + src/pages/promo/components/NoData.vue | 47 + src/pages/promo/components/NumberScroll.vue | 73 + src/pages/promo/components/PromoHeader.vue | 47 + src/pages/promo/components/PromoList.vue | 110 + src/pages/promo/components/RankRules.vue | 177 + src/pages/promo/components/Rules.vue | 52 + src/pages/promo/components/TurnplateGame.vue | 642 ++++ src/pages/promo/constants/PageEnum.js | 111 + src/pages/promo/constants/index.js | 91 + src/pages/redeposit/ReDeposit.vue | 964 +++++ src/pages/redeposit/WheelHistory.vue | 121 + src/pages/redeposit/WheelRules.vue | 93 + src/pages/redeposit/components/Boardcast.vue | 165 + src/pages/search/Search.vue | 218 ++ src/pages/search/SearchResult.vue | 126 + src/pages/search/components/SearchInput.vue | 86 + src/pages/search/components/SearchSegment.vue | 61 + src/pages/vip/Vip.vue | 686 ++++ src/pages/wallet/BindWallet.vue | 103 + src/pages/wallet/Deposit.vue | 139 + src/pages/wallet/DepositHistory.vue | 228 ++ src/pages/wallet/DepositImpsDetail.vue | 231 ++ src/pages/wallet/DepositOrderDetail.vue | 257 ++ src/pages/wallet/DepositUpiDetail.vue | 245 ++ src/pages/wallet/SelfUtrInfo.vue | 59 + src/pages/wallet/TransferInstructions.vue | 24 + src/pages/wallet/Withdraw.vue | 1039 ++++++ src/pages/wallet/WithdrawHistory.vue | 184 + src/pages/wallet/WithdrawWait.vue | 247 ++ src/pages/wallet/components/AgencyDeposit.vue | 95 + src/pages/wallet/components/CryptoDeposit.vue | 213 ++ .../wallet/components/DepositChannel.vue | 89 + .../wallet/components/DepositClosePopup.vue | 84 + .../wallet/components/DepositConfirmPopup.vue | 79 + .../wallet/components/DepositServiceItem.vue | 38 + .../wallet/components/DepositSuccessPopup.vue | 82 + .../wallet/components/DepositTabsItem.vue | 68 + src/pages/wallet/components/OnlineDeposit.vue | 447 +++ .../wallet/components/OnlineDepositOld.vue | 213 ++ .../wallet/components/PaymentMethods.vue | 82 + .../wallet/components/PaymentMethodsOld.vue | 82 + .../components/SelfServiceUtrFinishItem.vue | 48 + .../wallet/components/SelfServiceUtrItem.vue | 65 + .../wallet/components/TransferDeposit.vue | 254 ++ .../wallet/components/TransferDepositOld.vue | 241 ++ src/pages/webview/GameWeb.vue | 249 ++ src/pages/webview/serviceWeb.vue | 14 + src/plugins/fb-pixiel.js | 24 + src/shime-uni.d.ts | 6 + src/static/images/check-2.png | Bin 0 -> 960 bytes src/static/images/icon-deposit.png | Bin 0 -> 2096 bytes src/static/images/logo.png | Bin 0 -> 35492 bytes src/static/images/pointer.png | Bin 0 -> 1466 bytes src/static/images/pop-close.png | Bin 0 -> 1519 bytes src/static/logo1.png | Bin 0 -> 39890 bytes src/static/tabbar/spinz.json | 1 + src/static/tabbar/tabbar_1.png | Bin 0 -> 437 bytes src/static/tabbar/tabbar_2.png | Bin 0 -> 607 bytes src/static/tabbar/tabbar_3.png | Bin 0 -> 6887 bytes src/static/tabbar/tabbar_4.png | Bin 0 -> 435 bytes src/static/tabbar/tabbar_5.png | Bin 0 -> 530 bytes src/static/tabbar/tabbar_bg.png | Bin 0 -> 9831 bytes src/static/tabbar/tabbar_select_1.png | Bin 0 -> 2834 bytes src/static/tabbar/tabbar_select_2.png | Bin 0 -> 2711 bytes src/static/tabbar/tabbar_select_4.png | Bin 0 -> 2266 bytes src/static/tabbar/tabbar_select_5.png | Bin 0 -> 2104 bytes src/store/index.js | 27 + src/store/useAppStore.js | 353 ++ src/store/useDepositStore.js | 327 ++ src/store/useGameStore.js | 46 + src/store/useLangStore.js | 103 + src/store/useMailStore.js | 29 + src/store/usePromoStore.js | 301 ++ src/store/useThemeStore.js | 54 + src/store/useUserStore.js | 362 ++ src/theme/blue.js | 529 +++ src/theme/green.js | 470 +++ src/theme/image.js | 63 + src/theme/red.js | 592 +++ src/theme/white.js | 472 +++ src/uni.promisify.adaptor.js | 10 + src/uni.scss | 767 ++++ src/uni_modules/c-lottie/changelog.md | 20 + .../c-lottie/components/c-lottie/c-lottie.vue | 269 ++ .../components/c-lottie/js/getfile.js | 67 + .../c-lottie/components/c-lottie/js/render.js | 79 + .../c-lottie/components/c-lottie/js/uuid.js | 23 + src/uni_modules/c-lottie/package.json | 87 + src/uni_modules/c-lottie/readme.md | 220 ++ src/uni_modules/uni-badge/changelog.md | 33 + .../components/uni-badge/uni-badge.vue | 268 ++ src/uni_modules/uni-badge/package.json | 85 + src/uni_modules/uni-badge/readme.md | 10 + src/uni_modules/uni-breadcrumb/changelog.md | 6 + .../uni-breadcrumb-item.vue | 121 + .../uni-breadcrumb/uni-breadcrumb.vue | 41 + src/uni_modules/uni-breadcrumb/package.json | 88 + src/uni_modules/uni-breadcrumb/readme.md | 66 + src/uni_modules/uni-calendar/changelog.md | 30 + .../components/uni-calendar/calendar.js | 544 +++ .../components/uni-calendar/i18n/en.json | 12 + .../components/uni-calendar/i18n/index.js | 8 + .../components/uni-calendar/i18n/zh-Hans.json | 12 + .../components/uni-calendar/i18n/zh-Hant.json | 12 + .../uni-calendar/uni-calendar-item.vue | 187 + .../components/uni-calendar/uni-calendar.vue | 567 +++ .../components/uni-calendar/util.js | 360 ++ src/uni_modules/uni-calendar/package.json | 86 + src/uni_modules/uni-calendar/readme.md | 103 + src/uni_modules/uni-card/changelog.md | 26 + .../uni-card/components/uni-card/uni-card.vue | 270 ++ src/uni_modules/uni-card/package.json | 90 + src/uni_modules/uni-card/readme.md | 12 + src/uni_modules/uni-collapse/changelog.md | 38 + .../uni-collapse-item/uni-collapse-item.vue | 402 ++ .../components/uni-collapse/uni-collapse.vue | 147 + src/uni_modules/uni-collapse/package.json | 86 + src/uni_modules/uni-collapse/readme.md | 12 + src/uni_modules/uni-combox/changelog.md | 17 + .../components/uni-combox/uni-combox.vue | 284 ++ src/uni_modules/uni-combox/package.json | 88 + src/uni_modules/uni-combox/readme.md | 11 + src/uni_modules/uni-countdown/changelog.md | 28 + .../components/uni-countdown/i18n/en.json | 6 + .../components/uni-countdown/i18n/index.js | 8 + .../uni-countdown/i18n/zh-Hans.json | 6 + .../uni-countdown/i18n/zh-Hant.json | 6 + .../uni-countdown/uni-countdown.vue | 276 ++ src/uni_modules/uni-countdown/package.json | 84 + src/uni_modules/uni-countdown/readme.md | 10 + .../uni-data-checkbox/changelog.md | 51 + .../components/uni-data-checkbox/clientdb.js | 316 ++ .../uni-data-checkbox/uni-data-checkbox.vue | 853 +++++ .../uni-data-checkbox/package.json | 87 + src/uni_modules/uni-data-checkbox/readme.md | 18 + src/uni_modules/uni-data-picker/changelog.md | 79 + .../components/uni-data-picker/keypress.js | 45 + .../uni-data-picker/uni-data-picker.uvue | 381 ++ .../uni-data-picker/uni-data-picker.vue | 551 +++ .../uni-data-pickerview/uni-data-picker.js | 622 +++ .../uni-data-pickerview/uni-data-picker.uts | 692 ++++ .../uni-data-pickerview.css | 76 + .../uni-data-pickerview.uvue | 69 + .../uni-data-pickerview.vue | 323 ++ src/uni_modules/uni-data-picker/package.json | 91 + src/uni_modules/uni-data-picker/readme.md | 22 + src/uni_modules/uni-data-select/changelog.md | 39 + .../uni-data-select/uni-data-select.vue | 562 +++ src/uni_modules/uni-data-select/package.json | 86 + src/uni_modules/uni-data-select/readme.md | 8 + src/uni_modules/uni-dateformat/changelog.md | 10 + .../components/uni-dateformat/date-format.js | 200 + .../uni-dateformat/uni-dateformat.vue | 88 + src/uni_modules/uni-dateformat/package.json | 88 + src/uni_modules/uni-dateformat/readme.md | 11 + .../uni-datetime-picker/changelog.md | 168 + .../uni-datetime-picker/calendar-item.vue | 177 + .../uni-datetime-picker/calendar.vue | 947 +++++ .../uni-datetime-picker/i18n/en.json | 22 + .../uni-datetime-picker/i18n/index.js | 8 + .../uni-datetime-picker/i18n/zh-Hans.json | 22 + .../uni-datetime-picker/i18n/zh-Hant.json | 22 + .../uni-datetime-picker/time-picker.vue | 940 +++++ .../uni-datetime-picker.vue | 1064 ++++++ .../components/uni-datetime-picker/util.js | 421 +++ .../uni-datetime-picker/package.json | 88 + src/uni_modules/uni-datetime-picker/readme.md | 21 + src/uni_modules/uni-drawer/changelog.md | 13 + .../components/uni-drawer/keypress.js | 45 + .../components/uni-drawer/uni-drawer.vue | 183 + src/uni_modules/uni-drawer/package.json | 87 + src/uni_modules/uni-drawer/readme.md | 10 + src/uni_modules/uni-easyinput/changelog.md | 115 + .../components/uni-easyinput/common.js | 54 + .../uni-easyinput/uni-easyinput.vue | 676 ++++ src/uni_modules/uni-easyinput/package.json | 88 + src/uni_modules/uni-easyinput/readme.md | 11 + src/uni_modules/uni-fab/changelog.md | 25 + .../uni-fab/components/uni-fab/uni-fab.vue | 491 +++ src/uni_modules/uni-fab/package.json | 85 + src/uni_modules/uni-fab/readme.md | 9 + src/uni_modules/uni-fav/changelog.md | 19 + .../uni-fav/components/uni-fav/i18n/en.json | 4 + .../uni-fav/components/uni-fav/i18n/index.js | 8 + .../components/uni-fav/i18n/zh-Hans.json | 4 + .../components/uni-fav/i18n/zh-Hant.json | 4 + .../uni-fav/components/uni-fav/uni-fav.vue | 161 + src/uni_modules/uni-fav/package.json | 89 + src/uni_modules/uni-fav/readme.md | 10 + src/uni_modules/uni-file-picker/changelog.md | 81 + .../uni-file-picker/choose-and-upload-file.js | 287 ++ .../uni-file-picker/uni-file-picker.vue | 668 ++++ .../uni-file-picker/upload-file.vue | 325 ++ .../uni-file-picker/upload-image.vue | 292 ++ .../components/uni-file-picker/utils.js | 110 + src/uni_modules/uni-file-picker/package.json | 84 + src/uni_modules/uni-file-picker/readme.md | 11 + src/uni_modules/uni-forms/changelog.md | 100 + .../uni-forms-item/uni-forms-item.vue | 632 ++++ .../components/uni-forms/uni-forms.vue | 404 ++ .../uni-forms/components/uni-forms/utils.js | 293 ++ .../components/uni-forms/validate.js | 486 +++ src/uni_modules/uni-forms/package.json | 89 + src/uni_modules/uni-forms/readme.md | 23 + src/uni_modules/uni-goods-nav/changelog.md | 18 + .../components/uni-goods-nav/i18n/en.json | 6 + .../components/uni-goods-nav/i18n/index.js | 8 + .../uni-goods-nav/i18n/zh-Hans.json | 6 + .../uni-goods-nav/i18n/zh-Hant.json | 6 + .../uni-goods-nav/uni-goods-nav.vue | 229 ++ src/uni_modules/uni-goods-nav/package.json | 88 + src/uni_modules/uni-goods-nav/readme.md | 10 + src/uni_modules/uni-grid/changelog.md | 13 + .../uni-grid-item/uni-grid-item.vue | 127 + .../uni-grid/components/uni-grid/uni-grid.vue | 142 + src/uni_modules/uni-grid/package.json | 86 + src/uni_modules/uni-grid/readme.md | 11 + src/uni_modules/uni-group/changelog.md | 16 + .../components/uni-group/uni-group.vue | 134 + src/uni_modules/uni-group/package.json | 87 + src/uni_modules/uni-group/readme.md | 9 + src/uni_modules/uni-icons/changelog.md | 42 + .../uni-icons/components/uni-icons/icons.js | 1169 ++++++ .../components/uni-icons/uni-icons.uvue | 91 + .../components/uni-icons/uni-icons.vue | 110 + .../components/uni-icons/uniicons.css | 664 ++++ .../components/uni-icons/uniicons.ttf | Bin 0 -> 35824 bytes .../components/uni-icons/uniicons_file.ts | 664 ++++ .../components/uni-icons/uniicons_file_vue.js | 649 ++++ src/uni_modules/uni-icons/package.json | 89 + src/uni_modules/uni-icons/readme.md | 8 + src/uni_modules/uni-indexed-list/changelog.md | 17 + .../uni-indexed-list-item.vue | 144 + .../uni-indexed-list/uni-indexed-list.vue | 367 ++ src/uni_modules/uni-indexed-list/package.json | 89 + src/uni_modules/uni-indexed-list/readme.md | 11 + src/uni_modules/uni-link/changelog.md | 17 + .../uni-link/components/uni-link/uni-link.vue | 128 + src/uni_modules/uni-link/package.json | 87 + src/uni_modules/uni-link/readme.md | 11 + src/uni_modules/uni-list/changelog.md | 46 + .../components/uni-list-ad/uni-list-ad.vue | 107 + .../uni-list-chat/uni-list-chat.scss | 58 + .../uni-list-chat/uni-list-chat.vue | 593 +++ .../uni-list-item/uni-list-item.vue | 534 +++ .../uni-list/components/uni-list/uni-list.vue | 123 + .../components/uni-list/uni-refresh.vue | 65 + .../components/uni-list/uni-refresh.wxs | 87 + src/uni_modules/uni-list/package.json | 88 + src/uni_modules/uni-list/readme.md | 346 ++ src/uni_modules/uni-load-more/changelog.md | 25 + .../components/uni-load-more/i18n/en.json | 5 + .../components/uni-load-more/i18n/index.js | 8 + .../uni-load-more/i18n/zh-Hans.json | 5 + .../uni-load-more/i18n/zh-Hant.json | 5 + .../uni-load-more/uni-load-more.vue | 404 ++ src/uni_modules/uni-load-more/package.json | 84 + src/uni_modules/uni-load-more/readme.md | 14 + src/uni_modules/uni-nav-bar/changelog.md | 57 + .../components/uni-nav-bar/uni-nav-bar.vue | 357 ++ .../components/uni-nav-bar/uni-status-bar.vue | 30 + src/uni_modules/uni-nav-bar/package.json | 87 + src/uni_modules/uni-nav-bar/readme.md | 15 + src/uni_modules/uni-notice-bar/changelog.md | 20 + .../uni-notice-bar/uni-notice-bar.vue | 431 +++ src/uni_modules/uni-notice-bar/package.json | 87 + src/uni_modules/uni-notice-bar/readme.md | 13 + src/uni_modules/uni-number-box/changelog.md | 39 + .../uni-number-box/uni-number-box.vue | 232 ++ src/uni_modules/uni-number-box/package.json | 83 + src/uni_modules/uni-number-box/readme.md | 13 + src/uni_modules/uni-pagination/changelog.md | 27 + .../components/uni-pagination/i18n/en.json | 5 + .../components/uni-pagination/i18n/es.json | 5 + .../components/uni-pagination/i18n/fr.json | 5 + .../components/uni-pagination/i18n/index.js | 12 + .../uni-pagination/i18n/zh-Hans.json | 5 + .../uni-pagination/i18n/zh-Hant.json | 5 + .../uni-pagination/uni-pagination.vue | 465 +++ src/uni_modules/uni-pagination/package.json | 83 + src/uni_modules/uni-pagination/readme.md | 11 + src/uni_modules/uni-popup/changelog.md | 92 + .../components/uni-popup-dialog/keypress.js | 45 + .../uni-popup-dialog/uni-popup-dialog.vue | 316 ++ .../uni-popup-message/uni-popup-message.vue | 143 + .../uni-popup-share/uni-popup-share.vue | 187 + .../components/uni-popup/i18n/en.json | 7 + .../components/uni-popup/i18n/index.js | 8 + .../components/uni-popup/i18n/zh-Hans.json | 7 + .../components/uni-popup/i18n/zh-Hant.json | 7 + .../components/uni-popup/keypress.js | 45 + .../uni-popup/components/uni-popup/popup.js | 26 + .../components/uni-popup/uni-popup.uvue | 90 + .../components/uni-popup/uni-popup.vue | 518 +++ src/uni_modules/uni-popup/package.json | 88 + src/uni_modules/uni-popup/readme.md | 17 + src/uni_modules/uni-rate/changelog.md | 25 + .../uni-rate/components/uni-rate/uni-rate.vue | 361 ++ src/uni_modules/uni-rate/package.json | 88 + src/uni_modules/uni-rate/readme.md | 12 + src/uni_modules/uni-row/changelog.md | 10 + .../uni-row/components/uni-col/uni-col.vue | 317 ++ .../uni-row/components/uni-row/uni-row.vue | 190 + src/uni_modules/uni-row/package.json | 87 + src/uni_modules/uni-row/readme.md | 10 + src/uni_modules/uni-scss/changelog.md | 8 + src/uni_modules/uni-scss/index.scss | 1 + src/uni_modules/uni-scss/package.json | 82 + src/uni_modules/uni-scss/readme.md | 4 + src/uni_modules/uni-scss/styles/index.scss | 7 + .../uni-scss/styles/setting/_border.scss | 3 + .../uni-scss/styles/setting/_color.scss | 66 + .../uni-scss/styles/setting/_radius.scss | 55 + .../uni-scss/styles/setting/_space.scss | 56 + .../uni-scss/styles/setting/_styles.scss | 167 + .../uni-scss/styles/setting/_text.scss | 24 + .../uni-scss/styles/setting/_variables.scss | 146 + .../uni-scss/styles/tools/functions.scss | 19 + src/uni_modules/uni-scss/theme.scss | 31 + src/uni_modules/uni-scss/variables.scss | 62 + src/uni_modules/uni-search-bar/changelog.md | 47 + .../components/uni-search-bar/i18n/en.json | 4 + .../components/uni-search-bar/i18n/index.js | 8 + .../uni-search-bar/i18n/zh-Hans.json | 4 + .../uni-search-bar/i18n/zh-Hant.json | 4 + .../uni-search-bar/uni-search-bar.vue | 309 ++ src/uni_modules/uni-search-bar/package.json | 87 + src/uni_modules/uni-search-bar/readme.md | 14 + src/uni_modules/uni-section/changelog.md | 2 + .../components/uni-section/uni-section.vue | 167 + src/uni_modules/uni-section/package.json | 87 + src/uni_modules/uni-section/readme.md | 8 + .../uni-segmented-control/changelog.md | 15 + .../uni-segmented-control.vue | 146 + .../uni-segmented-control/package.json | 85 + .../uni-segmented-control/readme.md | 13 + src/uni_modules/uni-steps/changelog.md | 18 + .../components/uni-steps/uni-steps.vue | 280 ++ src/uni_modules/uni-steps/package.json | 87 + src/uni_modules/uni-steps/readme.md | 13 + src/uni_modules/uni-swipe-action/changelog.md | 47 + .../uni-swipe-action-item/bindingx.js | 302 ++ .../components/uni-swipe-action-item/isPC.js | 12 + .../uni-swipe-action-item/mpalipay.js | 195 + .../uni-swipe-action-item/mpother.js | 260 ++ .../components/uni-swipe-action-item/mpwxs.js | 84 + .../uni-swipe-action-item/render.js | 270 ++ .../uni-swipe-action-item.vue | 348 ++ .../components/uni-swipe-action-item/wx.wxs | 341 ++ .../uni-swipe-action/uni-swipe-action.vue | 60 + src/uni_modules/uni-swipe-action/package.json | 84 + src/uni_modules/uni-swipe-action/readme.md | 11 + src/uni_modules/uni-swiper-dot/changelog.md | 12 + .../uni-swiper-dot/uni-swiper-dot.vue | 218 ++ src/uni_modules/uni-swiper-dot/package.json | 87 + src/uni_modules/uni-swiper-dot/readme.md | 11 + src/uni_modules/uni-table/changelog.md | 33 + .../components/uni-table/uni-table.vue | 460 +++ .../components/uni-tbody/uni-tbody.vue | 34 + .../uni-table/components/uni-td/uni-td.vue | 95 + .../components/uni-th/filter-dropdown.vue | 511 +++ .../uni-table/components/uni-th/uni-th.vue | 295 ++ .../components/uni-thead/uni-thead.vue | 137 + .../components/uni-tr/table-checkbox.vue | 179 + .../uni-table/components/uni-tr/uni-tr.vue | 184 + src/uni_modules/uni-table/i18n/en.json | 9 + src/uni_modules/uni-table/i18n/es.json | 9 + src/uni_modules/uni-table/i18n/fr.json | 9 + src/uni_modules/uni-table/i18n/index.js | 12 + src/uni_modules/uni-table/i18n/zh-Hans.json | 9 + src/uni_modules/uni-table/i18n/zh-Hant.json | 9 + src/uni_modules/uni-table/package.json | 84 + src/uni_modules/uni-table/readme.md | 13 + src/uni_modules/uni-tag/changelog.md | 23 + .../uni-tag/components/uni-tag/uni-tag.vue | 252 ++ src/uni_modules/uni-tag/package.json | 84 + src/uni_modules/uni-tag/readme.md | 13 + src/uni_modules/uni-title/changelog.md | 10 + .../components/uni-title/uni-title.vue | 171 + src/uni_modules/uni-title/package.json | 88 + src/uni_modules/uni-title/readme.md | 14 + src/uni_modules/uni-tooltip/changelog.md | 16 + .../components/uni-tooltip/uni-tooltip.vue | 108 + src/uni_modules/uni-tooltip/package.json | 86 + src/uni_modules/uni-tooltip/readme.md | 8 + src/uni_modules/uni-transition/changelog.md | 24 + .../uni-transition/createAnimation.js | 131 + .../uni-transition/uni-transition.vue | 286 ++ src/uni_modules/uni-transition/package.json | 85 + src/uni_modules/uni-transition/readme.md | 11 + src/uni_modules/uni-ui/changelog.md | 593 +++ .../uni-ui/components/uni-ui/uni-ui.vue | 7 + src/uni_modules/uni-ui/package.json | 132 + src/uni_modules/uni-ui/readme.md | 247 ++ src/uni_modules/uv-parse/changelog.md | 13 + .../components/uv-parse/node/node.vue | 576 +++ .../uv-parse/components/uv-parse/parser.js | 1335 +++++++ .../uv-parse/components/uv-parse/uv-parse.vue | 498 +++ src/uni_modules/uv-parse/package.json | 87 + src/uni_modules/uv-parse/readme.md | 21 + .../static/app-plus/uv-parse/js/handler.js | 224 ++ .../app-plus/uv-parse/js/uni.webview.min.js | 19 + .../static/app-plus/uv-parse/local.html | 1 + src/uni_modules/uv-ui-tools/changelog.md | 76 + .../components/uv-ui-tools/uv-ui-tools.vue | 6 + src/uni_modules/uv-ui-tools/index.js | 79 + src/uni_modules/uv-ui-tools/index.scss | 7 + .../uv-ui-tools/libs/config/config.js | 34 + .../uv-ui-tools/libs/css/color.scss | 32 + .../uv-ui-tools/libs/css/common.scss | 100 + .../uv-ui-tools/libs/css/components.scss | 23 + .../uv-ui-tools/libs/css/variable.scss | 111 + src/uni_modules/uv-ui-tools/libs/css/vue.scss | 40 + .../libs/function/colorGradient.js | 134 + .../uv-ui-tools/libs/function/debounce.js | 29 + .../uv-ui-tools/libs/function/digit.js | 167 + .../uv-ui-tools/libs/function/index.js | 734 ++++ .../uv-ui-tools/libs/function/platform.js | 75 + .../uv-ui-tools/libs/function/test.js | 287 ++ .../uv-ui-tools/libs/function/throttle.js | 30 + .../libs/luch-request/adapters/index.js | 132 + .../luch-request/core/InterceptorManager.js | 51 + .../libs/luch-request/core/Request.js | 201 + .../libs/luch-request/core/buildFullPath.js | 20 + .../libs/luch-request/core/defaults.js | 33 + .../libs/luch-request/core/dispatchRequest.js | 6 + .../libs/luch-request/core/mergeConfig.js | 126 + .../libs/luch-request/core/settle.js | 16 + .../libs/luch-request/helpers/buildURL.js | 64 + .../libs/luch-request/helpers/combineURLs.js | 14 + .../luch-request/helpers/isAbsoluteURL.js | 14 + .../uv-ui-tools/libs/luch-request/index.d.ts | 197 + .../uv-ui-tools/libs/luch-request/index.js | 2 + .../uv-ui-tools/libs/luch-request/utils.js | 135 + .../libs/luch-request/utils/clone.js | 264 ++ .../uv-ui-tools/libs/mixin/button.js | 13 + .../uv-ui-tools/libs/mixin/mixin.js | 172 + .../uv-ui-tools/libs/mixin/mpMixin.js | 8 + .../uv-ui-tools/libs/mixin/mpShare.js | 13 + .../uv-ui-tools/libs/mixin/openType.js | 47 + .../uv-ui-tools/libs/mixin/touch.js | 59 + .../uv-ui-tools/libs/util/dayjs.js | 216 ++ .../uv-ui-tools/libs/util/route.js | 126 + src/uni_modules/uv-ui-tools/package.json | 81 + src/uni_modules/uv-ui-tools/readme.md | 23 + src/uni_modules/uv-ui-tools/theme.scss | 43 + src/uni_modules/x-getgadid/changelog.md | 0 src/uni_modules/x-getgadid/package.json | 83 + src/uni_modules/x-getgadid/readme.md | 7 + .../x-getgadid/utssdk/app-android/config.json | 4 + .../x-getgadid/utssdk/app-android/index.uts | 112 + .../x-getgadid/utssdk/app-ios/config.json | 3 + .../x-getgadid/utssdk/app-ios/index.uts | 85 + .../x-getgadid/utssdk/interface.uts | 52 + .../x-getgadid/utssdk/unierror.uts | 39 + src/uni_modules/x-uniq-id/changelog.md | 0 src/uni_modules/x-uniq-id/package.json | 83 + src/uni_modules/x-uniq-id/readme.md | 7 + .../x-uniq-id/utssdk/app-android/config.json | 3 + .../x-uniq-id/utssdk/app-android/index.uts | 164 + .../x-uniq-id/utssdk/app-ios/config.json | 3 + .../x-uniq-id/utssdk/app-ios/index.uts | 85 + .../x-uniq-id/utssdk/interface.uts | 51 + src/uni_modules/x-uniq-id/utssdk/unierror.uts | 39 + vite.config.js | 52 + 687 files changed, 97295 insertions(+) create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 LICENSE create mode 100644 README.md create mode 100644 deploy/file.js create mode 100644 deploy/index.js create mode 100644 index.html create mode 100644 jsconfig.json create mode 100644 nativeplugins/Tidu-GaidUtil/android/gaidutil-release.aar create mode 100644 nativeplugins/Tidu-GaidUtil/android/libs/getGAID.jar create mode 100644 nativeplugins/Tidu-GaidUtil/package.json create mode 100644 package.json create mode 100644 shims-uni.d.ts create mode 100644 src/App.vue create mode 100644 src/api/account.js create mode 100644 src/api/app.js create mode 100644 src/api/deposit.js create mode 100644 src/api/earn.js create mode 100644 src/api/game.js create mode 100644 src/api/home.js create mode 100644 src/api/login.js create mode 100644 src/api/mail.js create mode 100644 src/api/promo.js create mode 100644 src/api/sms.js create mode 100644 src/api/user.js create mode 100644 src/api/vip.js create mode 100644 src/api/withdraw.js create mode 100644 src/components/LoginHeader/LoginHeader.vue create mode 100644 src/components/LotteryWheel/LotteryWheel.vue create mode 100644 src/components/LotteryWheel/components/RoundTurntable.vue create mode 100644 src/components/badge/BadgeTR.vue create mode 100644 src/components/common/CardSlider.vue create mode 100644 src/components/custom-tab-bar/CustomTabBar.vue create mode 100644 src/components/emptyHold/EmptyHold.vue create mode 100644 src/components/footer/MobileFooter.vue create mode 100644 src/components/footer/PcFooter.vue create mode 100644 src/components/header/MobileGameHeader.vue create mode 100644 src/components/header/MobileHeader.vue create mode 100644 src/components/header/MobileSubHeader.vue create mode 100644 src/components/header/PcHeader.vue create mode 100644 src/components/header/TransparentHeader.vue create mode 100644 src/components/image/ThemeImage.vue create mode 100644 src/components/input/MoneyInput.vue create mode 100644 src/components/input/NormalInput.vue create mode 100644 src/components/input/SearchInput.vue create mode 100644 src/components/layout/CommonLayout.vue create mode 100644 src/components/layout/MainLayout.vue create mode 100644 src/components/layout/MobileCustomLayout.vue create mode 100644 src/components/layout/MobileLayout.vue create mode 100644 src/components/layout/MobileSubLayout.vue create mode 100644 src/components/list/RewardsList.vue create mode 100644 src/components/loading/StartLoading.vue create mode 100644 src/components/menu/SideMenu.vue create mode 100644 src/components/nodata/NoDataSearch.vue create mode 100644 src/components/pageable/Pageable.vue create mode 100644 src/components/popup/BindPhonePop.vue create mode 100644 src/components/popup/BindPromoPop.vue create mode 100644 src/components/popup/ConDepositPop.vue create mode 100644 src/components/popup/ConfirmPopup.vue create mode 100644 src/components/popup/Congratulation.vue create mode 100644 src/components/popup/DepositBonus.vue create mode 100644 src/components/popup/Download.vue create mode 100644 src/components/popup/FirstRechargePop.vue create mode 100644 src/components/popup/NormalPopup.vue create mode 100644 src/components/popup/NormalPopupView.vue create mode 100644 src/components/popup/RankHisPop.vue create mode 100644 src/components/popup/RankRewardPop.vue create mode 100644 src/components/popup/TipsPopup.vue create mode 100644 src/components/popup/WheelPop.vue create mode 100644 src/components/radio/Radio.vue create mode 100644 src/components/segment/RoundSegmentControl.vue create mode 100644 src/components/segment/SegmentControl.vue create mode 100644 src/components/siderbar/PcSiderBar.vue create mode 100644 src/components/tabs/NormalTabs.vue create mode 100644 src/components/tabs/NormalTabsItem.vue create mode 100644 src/components/tabs/SmallTabsItem.vue create mode 100644 src/components/vipSign/VipSign.vue create mode 100644 src/config/global.config.js create mode 100644 src/config/ip.config.js create mode 100644 src/locales/index.js create mode 100644 src/locales/lang/en-US.js create mode 100644 src/locales/lang/en-US/app.js create mode 100644 src/locales/lang/en-US/constants.js create mode 100644 src/locales/lang/en-US/deposit.js create mode 100644 src/locales/lang/en-US/earn.js create mode 100644 src/locales/lang/en-US/home.js create mode 100644 src/locales/lang/en-US/login.js create mode 100644 src/locales/lang/en-US/mail.js create mode 100644 src/locales/lang/en-US/promo.js create mode 100644 src/locales/lang/en-US/redeposit.js create mode 100644 src/locales/lang/en-US/search.js create mode 100644 src/locales/lang/en-US/vip.js create mode 100644 src/locales/lang/en-US/withdraw.js create mode 100644 src/locales/lang/ind-IND.js create mode 100644 src/locales/lang/ind-IND/app.js create mode 100644 src/locales/lang/ind-IND/constants.js create mode 100644 src/locales/lang/ind-IND/deposit.js create mode 100644 src/locales/lang/ind-IND/earn.js create mode 100644 src/locales/lang/ind-IND/home.js create mode 100644 src/locales/lang/ind-IND/login.js create mode 100644 src/locales/lang/ind-IND/mail.js create mode 100644 src/locales/lang/ind-IND/promo.js create mode 100644 src/locales/lang/ind-IND/search.js create mode 100644 src/locales/lang/ind-IND/vip.js create mode 100644 src/locales/lang/ind-IND/withdraw.js create mode 100644 src/locales/lang/ja-JP.js create mode 100644 src/locales/lang/ja-JP/app.js create mode 100644 src/locales/lang/ja-JP/constants.js create mode 100644 src/locales/lang/ja-JP/home.js create mode 100644 src/locales/lang/ja-JP/login.js create mode 100644 src/locales/lang/zh-CN.js create mode 100644 src/locales/lang/zh-CN/app.js create mode 100644 src/main.js create mode 100644 src/manifest.json create mode 100644 src/module/app/app.js create mode 100644 src/module/formatter/data-formatter.js create mode 100644 src/module/formatter/date-formatter.js create mode 100644 src/module/fullscreen/fullscreen-handler.js create mode 100644 src/module/request/http-client.js create mode 100644 src/module/request/http-constant.js create mode 100644 src/module/request/http-request.js create mode 100644 src/module/request/http-upload.js create mode 100644 src/module/router/interceptor.js create mode 100644 src/module/storage/local-storage.js create mode 100644 src/module/third/adjust.js create mode 100644 src/module/third/fbsdk.js create mode 100644 src/module/third/googlesdk.js create mode 100644 src/module/third/okspin.js create mode 100644 src/module/third/openinstall.js create mode 100644 src/module/toast/toast.js create mode 100644 src/module/utils/conversionTime.js create mode 100644 src/module/utils/convertBirthday.js create mode 100644 src/module/utils/encipherPhone.js create mode 100644 src/module/utils/errorHandler.js create mode 100644 src/module/utils/htmlparser.js create mode 100644 src/module/utils/isEmpty.js create mode 100644 src/module/utils/openUrl.js create mode 100644 src/module/utils/require.js create mode 100644 src/module/utils/sortArray.js create mode 100644 src/module/utils/system.js create mode 100644 src/module/utils/util.js create mode 100644 src/module/verify/verify.js create mode 100644 src/pages.json create mode 100644 src/pages/Login/ForgetPassword.vue create mode 100644 src/pages/Login/Login.vue create mode 100644 src/pages/Login/LoginV2.vue create mode 100644 src/pages/Login/Register.vue create mode 100644 src/pages/Login/components/LoginFotter.vue create mode 100644 src/pages/account/Account.vue create mode 100644 src/pages/account/BalanceRecords/BalanceRecords.vue create mode 100644 src/pages/account/BankCard/BankCard.vue create mode 100644 src/pages/account/BankCard/BankCardList.vue create mode 100644 src/pages/account/FeedBack/FeedBack.vue create mode 100644 src/pages/account/GameRecords/GameRecords.vue create mode 100644 src/pages/account/Language.vue create mode 100644 src/pages/account/PhoneBinding/PhoneBinding.vue create mode 100644 src/pages/account/Profile/Profile.vue create mode 100644 src/pages/account/WithdrawalPassword/WithdrawalPassword.vue create mode 100644 src/pages/account/components/EditProfile/EditProfile.vue create mode 100644 src/pages/account/components/Header/Header.vue create mode 100644 src/pages/account/components/VipItem/VipItem.vue create mode 100644 src/pages/account/constants/balanceRecords.js create mode 100644 src/pages/account/constants/birthday.js create mode 100644 src/pages/account/constants/gameRecords.js create mode 100644 src/pages/account/constants/index.js create mode 100644 src/pages/account/constants/withdrawPassword.js create mode 100644 src/pages/activity/Activity.vue create mode 100644 src/pages/activity/Poster.vue create mode 100644 src/pages/activity/components/LotteryWheel2.vue create mode 100644 src/pages/earn/Earn.vue create mode 100644 src/pages/earn/components/EarnFooter.vue create mode 100644 src/pages/earn/components/EarnHeader.vue create mode 100644 src/pages/earn/components/EarnOld.vue create mode 100644 src/pages/earn/components/EarnV2.vue create mode 100644 src/pages/earn/components/EarnV2CommissionTablePopup.vue create mode 100644 src/pages/earn/components/EarnV2Home.vue create mode 100644 src/pages/earn/components/EarnV2Reward.vue create mode 100644 src/pages/earn/components/EarnV2Rules.vue create mode 100644 src/pages/earn/components/EarnV2Teams.vue create mode 100644 src/pages/earn/components/MyRewards.vue create mode 100644 src/pages/earn/components/Rule.vue create mode 100644 src/pages/home/Home.vue create mode 100644 src/pages/home/components/HomeDownloadAppItem.vue create mode 100644 src/pages/home/components/HomeGamesAll.vue create mode 100644 src/pages/home/components/HomeGamesItem.vue create mode 100644 src/pages/home/components/HomeHeader.vue create mode 100644 src/pages/home/components/HomeNotice.vue create mode 100644 src/pages/home/components/HomeUserInfo.vue create mode 100644 src/pages/home/components/PromoPopup/Community.vue create mode 100644 src/pages/home/components/PromoPopup/FirstDeposit.vue create mode 100644 src/pages/home/components/PromoPopup/Jili.vue create mode 100644 src/pages/home/components/PromoPopup/Rank.vue create mode 100644 src/pages/home/components/PromoPopup/Signin.vue create mode 100644 src/pages/home/components/PromoPopup/UpRebate.vue create mode 100644 src/pages/home/components/SearchGamesItem.vue create mode 100644 src/pages/home/components/UserInfo.vue create mode 100644 src/pages/index/index.vue create mode 100644 src/pages/mail/Mail.vue create mode 100644 src/pages/mail/MailDetail.vue create mode 100644 src/pages/mail/components/MailDetailPopup.vue create mode 100644 src/pages/promo/CashbackRecord/CashbackRecord.vue create mode 100644 src/pages/promo/FirstDeposit/FirstDeposit.vue create mode 100644 src/pages/promo/InvitationalRanks.vue create mode 100644 src/pages/promo/Jili.vue create mode 100644 src/pages/promo/Promo.vue create mode 100644 src/pages/promo/Ranking/Ranking.vue create mode 100644 src/pages/promo/RebatePromo/RebatePromo.vue create mode 100644 src/pages/promo/Signin/Signin.vue create mode 100644 src/pages/promo/SignupBonus.vue create mode 100644 src/pages/promo/TgExchange.vue create mode 100644 src/pages/promo/components/Community.vue create mode 100644 src/pages/promo/components/InvitationRankHistoryPopup.vue create mode 100644 src/pages/promo/components/InvitationRanksHome.vue create mode 100644 src/pages/promo/components/InvitationRanksRank.vue create mode 100644 src/pages/promo/components/InvitationRanksRuls.vue create mode 100644 src/pages/promo/components/InvitationRanksTeams.vue create mode 100644 src/pages/promo/components/Leaderboard.vue create mode 100644 src/pages/promo/components/LotteryWheel.vue create mode 100644 src/pages/promo/components/MyReward.vue create mode 100644 src/pages/promo/components/NoData.vue create mode 100644 src/pages/promo/components/NumberScroll.vue create mode 100644 src/pages/promo/components/PromoHeader.vue create mode 100644 src/pages/promo/components/PromoList.vue create mode 100644 src/pages/promo/components/RankRules.vue create mode 100644 src/pages/promo/components/Rules.vue create mode 100644 src/pages/promo/components/TurnplateGame.vue create mode 100644 src/pages/promo/constants/PageEnum.js create mode 100644 src/pages/promo/constants/index.js create mode 100644 src/pages/redeposit/ReDeposit.vue create mode 100644 src/pages/redeposit/WheelHistory.vue create mode 100644 src/pages/redeposit/WheelRules.vue create mode 100644 src/pages/redeposit/components/Boardcast.vue create mode 100644 src/pages/search/Search.vue create mode 100644 src/pages/search/SearchResult.vue create mode 100644 src/pages/search/components/SearchInput.vue create mode 100644 src/pages/search/components/SearchSegment.vue create mode 100644 src/pages/vip/Vip.vue create mode 100644 src/pages/wallet/BindWallet.vue create mode 100644 src/pages/wallet/Deposit.vue create mode 100644 src/pages/wallet/DepositHistory.vue create mode 100644 src/pages/wallet/DepositImpsDetail.vue create mode 100644 src/pages/wallet/DepositOrderDetail.vue create mode 100644 src/pages/wallet/DepositUpiDetail.vue create mode 100644 src/pages/wallet/SelfUtrInfo.vue create mode 100644 src/pages/wallet/TransferInstructions.vue create mode 100644 src/pages/wallet/Withdraw.vue create mode 100644 src/pages/wallet/WithdrawHistory.vue create mode 100644 src/pages/wallet/WithdrawWait.vue create mode 100644 src/pages/wallet/components/AgencyDeposit.vue create mode 100644 src/pages/wallet/components/CryptoDeposit.vue create mode 100644 src/pages/wallet/components/DepositChannel.vue create mode 100644 src/pages/wallet/components/DepositClosePopup.vue create mode 100644 src/pages/wallet/components/DepositConfirmPopup.vue create mode 100644 src/pages/wallet/components/DepositServiceItem.vue create mode 100644 src/pages/wallet/components/DepositSuccessPopup.vue create mode 100644 src/pages/wallet/components/DepositTabsItem.vue create mode 100644 src/pages/wallet/components/OnlineDeposit.vue create mode 100644 src/pages/wallet/components/OnlineDepositOld.vue create mode 100644 src/pages/wallet/components/PaymentMethods.vue create mode 100644 src/pages/wallet/components/PaymentMethodsOld.vue create mode 100644 src/pages/wallet/components/SelfServiceUtrFinishItem.vue create mode 100644 src/pages/wallet/components/SelfServiceUtrItem.vue create mode 100644 src/pages/wallet/components/TransferDeposit.vue create mode 100644 src/pages/wallet/components/TransferDepositOld.vue create mode 100644 src/pages/webview/GameWeb.vue create mode 100644 src/pages/webview/serviceWeb.vue create mode 100644 src/plugins/fb-pixiel.js create mode 100644 src/shime-uni.d.ts create mode 100644 src/static/images/check-2.png create mode 100644 src/static/images/icon-deposit.png create mode 100644 src/static/images/logo.png create mode 100644 src/static/images/pointer.png create mode 100644 src/static/images/pop-close.png create mode 100644 src/static/logo1.png create mode 100644 src/static/tabbar/spinz.json create mode 100644 src/static/tabbar/tabbar_1.png create mode 100644 src/static/tabbar/tabbar_2.png create mode 100644 src/static/tabbar/tabbar_3.png create mode 100644 src/static/tabbar/tabbar_4.png create mode 100644 src/static/tabbar/tabbar_5.png create mode 100644 src/static/tabbar/tabbar_bg.png create mode 100644 src/static/tabbar/tabbar_select_1.png create mode 100644 src/static/tabbar/tabbar_select_2.png create mode 100644 src/static/tabbar/tabbar_select_4.png create mode 100644 src/static/tabbar/tabbar_select_5.png create mode 100644 src/store/index.js create mode 100644 src/store/useAppStore.js create mode 100644 src/store/useDepositStore.js create mode 100644 src/store/useGameStore.js create mode 100644 src/store/useLangStore.js create mode 100644 src/store/useMailStore.js create mode 100644 src/store/usePromoStore.js create mode 100644 src/store/useThemeStore.js create mode 100644 src/store/useUserStore.js create mode 100644 src/theme/blue.js create mode 100644 src/theme/green.js create mode 100644 src/theme/image.js create mode 100644 src/theme/red.js create mode 100644 src/theme/white.js create mode 100644 src/uni.promisify.adaptor.js create mode 100644 src/uni.scss create mode 100644 src/uni_modules/c-lottie/changelog.md create mode 100644 src/uni_modules/c-lottie/components/c-lottie/c-lottie.vue create mode 100644 src/uni_modules/c-lottie/components/c-lottie/js/getfile.js create mode 100644 src/uni_modules/c-lottie/components/c-lottie/js/render.js create mode 100644 src/uni_modules/c-lottie/components/c-lottie/js/uuid.js create mode 100644 src/uni_modules/c-lottie/package.json create mode 100644 src/uni_modules/c-lottie/readme.md create mode 100644 src/uni_modules/uni-badge/changelog.md create mode 100644 src/uni_modules/uni-badge/components/uni-badge/uni-badge.vue create mode 100644 src/uni_modules/uni-badge/package.json create mode 100644 src/uni_modules/uni-badge/readme.md create mode 100644 src/uni_modules/uni-breadcrumb/changelog.md create mode 100644 src/uni_modules/uni-breadcrumb/components/uni-breadcrumb-item/uni-breadcrumb-item.vue create mode 100644 src/uni_modules/uni-breadcrumb/components/uni-breadcrumb/uni-breadcrumb.vue create mode 100644 src/uni_modules/uni-breadcrumb/package.json create mode 100644 src/uni_modules/uni-breadcrumb/readme.md create mode 100644 src/uni_modules/uni-calendar/changelog.md create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/calendar.js create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/en.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/index.js create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar-item.vue create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/uni-calendar.vue create mode 100644 src/uni_modules/uni-calendar/components/uni-calendar/util.js create mode 100644 src/uni_modules/uni-calendar/package.json create mode 100644 src/uni_modules/uni-calendar/readme.md create mode 100644 src/uni_modules/uni-card/changelog.md create mode 100644 src/uni_modules/uni-card/components/uni-card/uni-card.vue create mode 100644 src/uni_modules/uni-card/package.json create mode 100644 src/uni_modules/uni-card/readme.md create mode 100644 src/uni_modules/uni-collapse/changelog.md create mode 100644 src/uni_modules/uni-collapse/components/uni-collapse-item/uni-collapse-item.vue create mode 100644 src/uni_modules/uni-collapse/components/uni-collapse/uni-collapse.vue create mode 100644 src/uni_modules/uni-collapse/package.json create mode 100644 src/uni_modules/uni-collapse/readme.md create mode 100644 src/uni_modules/uni-combox/changelog.md create mode 100644 src/uni_modules/uni-combox/components/uni-combox/uni-combox.vue create mode 100644 src/uni_modules/uni-combox/package.json create mode 100644 src/uni_modules/uni-combox/readme.md create mode 100644 src/uni_modules/uni-countdown/changelog.md create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/en.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/index.js create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-countdown/components/uni-countdown/uni-countdown.vue create mode 100644 src/uni_modules/uni-countdown/package.json create mode 100644 src/uni_modules/uni-countdown/readme.md create mode 100644 src/uni_modules/uni-data-checkbox/changelog.md create mode 100644 src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/clientdb.js create mode 100644 src/uni_modules/uni-data-checkbox/components/uni-data-checkbox/uni-data-checkbox.vue create mode 100644 src/uni_modules/uni-data-checkbox/package.json create mode 100644 src/uni_modules/uni-data-checkbox/readme.md create mode 100644 src/uni_modules/uni-data-picker/changelog.md create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-picker/keypress.js create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.uvue create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-picker/uni-data-picker.vue create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.js create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-picker.uts create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.css create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.uvue create mode 100644 src/uni_modules/uni-data-picker/components/uni-data-pickerview/uni-data-pickerview.vue create mode 100644 src/uni_modules/uni-data-picker/package.json create mode 100644 src/uni_modules/uni-data-picker/readme.md create mode 100644 src/uni_modules/uni-data-select/changelog.md create mode 100644 src/uni_modules/uni-data-select/components/uni-data-select/uni-data-select.vue create mode 100644 src/uni_modules/uni-data-select/package.json create mode 100644 src/uni_modules/uni-data-select/readme.md create mode 100644 src/uni_modules/uni-dateformat/changelog.md create mode 100644 src/uni_modules/uni-dateformat/components/uni-dateformat/date-format.js create mode 100644 src/uni_modules/uni-dateformat/components/uni-dateformat/uni-dateformat.vue create mode 100644 src/uni_modules/uni-dateformat/package.json create mode 100644 src/uni_modules/uni-dateformat/readme.md create mode 100644 src/uni_modules/uni-datetime-picker/changelog.md create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar-item.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/calendar.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/en.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/index.js create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/time-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/uni-datetime-picker.vue create mode 100644 src/uni_modules/uni-datetime-picker/components/uni-datetime-picker/util.js create mode 100644 src/uni_modules/uni-datetime-picker/package.json create mode 100644 src/uni_modules/uni-datetime-picker/readme.md create mode 100644 src/uni_modules/uni-drawer/changelog.md create mode 100644 src/uni_modules/uni-drawer/components/uni-drawer/keypress.js create mode 100644 src/uni_modules/uni-drawer/components/uni-drawer/uni-drawer.vue create mode 100644 src/uni_modules/uni-drawer/package.json create mode 100644 src/uni_modules/uni-drawer/readme.md create mode 100644 src/uni_modules/uni-easyinput/changelog.md create mode 100644 src/uni_modules/uni-easyinput/components/uni-easyinput/common.js create mode 100644 src/uni_modules/uni-easyinput/components/uni-easyinput/uni-easyinput.vue create mode 100644 src/uni_modules/uni-easyinput/package.json create mode 100644 src/uni_modules/uni-easyinput/readme.md create mode 100644 src/uni_modules/uni-fab/changelog.md create mode 100644 src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue create mode 100644 src/uni_modules/uni-fab/package.json create mode 100644 src/uni_modules/uni-fab/readme.md create mode 100644 src/uni_modules/uni-fav/changelog.md create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/en.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/index.js create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue create mode 100644 src/uni_modules/uni-fav/package.json create mode 100644 src/uni_modules/uni-fav/readme.md create mode 100644 src/uni_modules/uni-file-picker/changelog.md create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue create mode 100644 src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js create mode 100644 src/uni_modules/uni-file-picker/package.json create mode 100644 src/uni_modules/uni-file-picker/readme.md create mode 100644 src/uni_modules/uni-forms/changelog.md create mode 100644 src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue create mode 100644 src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue create mode 100644 src/uni_modules/uni-forms/components/uni-forms/utils.js create mode 100644 src/uni_modules/uni-forms/components/uni-forms/validate.js create mode 100644 src/uni_modules/uni-forms/package.json create mode 100644 src/uni_modules/uni-forms/readme.md create mode 100644 src/uni_modules/uni-goods-nav/changelog.md create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue create mode 100644 src/uni_modules/uni-goods-nav/package.json create mode 100644 src/uni_modules/uni-goods-nav/readme.md create mode 100644 src/uni_modules/uni-grid/changelog.md create mode 100644 src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue create mode 100644 src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue create mode 100644 src/uni_modules/uni-grid/package.json create mode 100644 src/uni_modules/uni-grid/readme.md create mode 100644 src/uni_modules/uni-group/changelog.md create mode 100644 src/uni_modules/uni-group/components/uni-group/uni-group.vue create mode 100644 src/uni_modules/uni-group/package.json create mode 100644 src/uni_modules/uni-group/readme.md create mode 100644 src/uni_modules/uni-icons/changelog.md create mode 100644 src/uni_modules/uni-icons/components/uni-icons/icons.js create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts create mode 100644 src/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js create mode 100644 src/uni_modules/uni-icons/package.json create mode 100644 src/uni_modules/uni-icons/readme.md create mode 100644 src/uni_modules/uni-indexed-list/changelog.md create mode 100644 src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue create mode 100644 src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue create mode 100644 src/uni_modules/uni-indexed-list/package.json create mode 100644 src/uni_modules/uni-indexed-list/readme.md create mode 100644 src/uni_modules/uni-link/changelog.md create mode 100644 src/uni_modules/uni-link/components/uni-link/uni-link.vue create mode 100644 src/uni_modules/uni-link/package.json create mode 100644 src/uni_modules/uni-link/readme.md create mode 100644 src/uni_modules/uni-list/changelog.md create mode 100644 src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue create mode 100644 src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss create mode 100644 src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue create mode 100644 src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-list.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-refresh.vue create mode 100644 src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs create mode 100644 src/uni_modules/uni-list/package.json create mode 100644 src/uni_modules/uni-list/readme.md create mode 100644 src/uni_modules/uni-load-more/changelog.md create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue create mode 100644 src/uni_modules/uni-load-more/package.json create mode 100644 src/uni_modules/uni-load-more/readme.md create mode 100644 src/uni_modules/uni-nav-bar/changelog.md create mode 100644 src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue create mode 100644 src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue create mode 100644 src/uni_modules/uni-nav-bar/package.json create mode 100644 src/uni_modules/uni-nav-bar/readme.md create mode 100644 src/uni_modules/uni-notice-bar/changelog.md create mode 100644 src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue create mode 100644 src/uni_modules/uni-notice-bar/package.json create mode 100644 src/uni_modules/uni-notice-bar/readme.md create mode 100644 src/uni_modules/uni-number-box/changelog.md create mode 100644 src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue create mode 100644 src/uni_modules/uni-number-box/package.json create mode 100644 src/uni_modules/uni-number-box/readme.md create mode 100644 src/uni_modules/uni-pagination/changelog.md create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue create mode 100644 src/uni_modules/uni-pagination/package.json create mode 100644 src/uni_modules/uni-pagination/readme.md create mode 100644 src/uni_modules/uni-popup/changelog.md create mode 100644 src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/en.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/index.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-popup/components/uni-popup/keypress.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/popup.js create mode 100644 src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue create mode 100644 src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue create mode 100644 src/uni_modules/uni-popup/package.json create mode 100644 src/uni_modules/uni-popup/readme.md create mode 100644 src/uni_modules/uni-rate/changelog.md create mode 100644 src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue create mode 100644 src/uni_modules/uni-rate/package.json create mode 100644 src/uni_modules/uni-rate/readme.md create mode 100644 src/uni_modules/uni-row/changelog.md create mode 100644 src/uni_modules/uni-row/components/uni-col/uni-col.vue create mode 100644 src/uni_modules/uni-row/components/uni-row/uni-row.vue create mode 100644 src/uni_modules/uni-row/package.json create mode 100644 src/uni_modules/uni-row/readme.md create mode 100644 src/uni_modules/uni-scss/changelog.md create mode 100644 src/uni_modules/uni-scss/index.scss create mode 100644 src/uni_modules/uni-scss/package.json create mode 100644 src/uni_modules/uni-scss/readme.md create mode 100644 src/uni_modules/uni-scss/styles/index.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 src/uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 src/uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 src/uni_modules/uni-scss/theme.scss create mode 100644 src/uni_modules/uni-scss/variables.scss create mode 100644 src/uni_modules/uni-search-bar/changelog.md create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue create mode 100644 src/uni_modules/uni-search-bar/package.json create mode 100644 src/uni_modules/uni-search-bar/readme.md create mode 100644 src/uni_modules/uni-section/changelog.md create mode 100644 src/uni_modules/uni-section/components/uni-section/uni-section.vue create mode 100644 src/uni_modules/uni-section/package.json create mode 100644 src/uni_modules/uni-section/readme.md create mode 100644 src/uni_modules/uni-segmented-control/changelog.md create mode 100644 src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue create mode 100644 src/uni_modules/uni-segmented-control/package.json create mode 100644 src/uni_modules/uni-segmented-control/readme.md create mode 100644 src/uni_modules/uni-steps/changelog.md create mode 100644 src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue create mode 100644 src/uni_modules/uni-steps/package.json create mode 100644 src/uni_modules/uni-steps/readme.md create mode 100644 src/uni_modules/uni-swipe-action/changelog.md create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs create mode 100644 src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue create mode 100644 src/uni_modules/uni-swipe-action/package.json create mode 100644 src/uni_modules/uni-swipe-action/readme.md create mode 100644 src/uni_modules/uni-swiper-dot/changelog.md create mode 100644 src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue create mode 100644 src/uni_modules/uni-swiper-dot/package.json create mode 100644 src/uni_modules/uni-swiper-dot/readme.md create mode 100644 src/uni_modules/uni-table/changelog.md create mode 100644 src/uni_modules/uni-table/components/uni-table/uni-table.vue create mode 100644 src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue create mode 100644 src/uni_modules/uni-table/components/uni-td/uni-td.vue create mode 100644 src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue create mode 100644 src/uni_modules/uni-table/components/uni-th/uni-th.vue create mode 100644 src/uni_modules/uni-table/components/uni-thead/uni-thead.vue create mode 100644 src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue create mode 100644 src/uni_modules/uni-table/components/uni-tr/uni-tr.vue create mode 100644 src/uni_modules/uni-table/i18n/en.json create mode 100644 src/uni_modules/uni-table/i18n/es.json create mode 100644 src/uni_modules/uni-table/i18n/fr.json create mode 100644 src/uni_modules/uni-table/i18n/index.js create mode 100644 src/uni_modules/uni-table/i18n/zh-Hans.json create mode 100644 src/uni_modules/uni-table/i18n/zh-Hant.json create mode 100644 src/uni_modules/uni-table/package.json create mode 100644 src/uni_modules/uni-table/readme.md create mode 100644 src/uni_modules/uni-tag/changelog.md create mode 100644 src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue create mode 100644 src/uni_modules/uni-tag/package.json create mode 100644 src/uni_modules/uni-tag/readme.md create mode 100644 src/uni_modules/uni-title/changelog.md create mode 100644 src/uni_modules/uni-title/components/uni-title/uni-title.vue create mode 100644 src/uni_modules/uni-title/package.json create mode 100644 src/uni_modules/uni-title/readme.md create mode 100644 src/uni_modules/uni-tooltip/changelog.md create mode 100644 src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue create mode 100644 src/uni_modules/uni-tooltip/package.json create mode 100644 src/uni_modules/uni-tooltip/readme.md create mode 100644 src/uni_modules/uni-transition/changelog.md create mode 100644 src/uni_modules/uni-transition/components/uni-transition/createAnimation.js create mode 100644 src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue create mode 100644 src/uni_modules/uni-transition/package.json create mode 100644 src/uni_modules/uni-transition/readme.md create mode 100644 src/uni_modules/uni-ui/changelog.md create mode 100644 src/uni_modules/uni-ui/components/uni-ui/uni-ui.vue create mode 100644 src/uni_modules/uni-ui/package.json create mode 100644 src/uni_modules/uni-ui/readme.md create mode 100644 src/uni_modules/uv-parse/changelog.md create mode 100644 src/uni_modules/uv-parse/components/uv-parse/node/node.vue create mode 100644 src/uni_modules/uv-parse/components/uv-parse/parser.js create mode 100644 src/uni_modules/uv-parse/components/uv-parse/uv-parse.vue create mode 100644 src/uni_modules/uv-parse/package.json create mode 100644 src/uni_modules/uv-parse/readme.md create mode 100644 src/uni_modules/uv-parse/static/app-plus/uv-parse/js/handler.js create mode 100644 src/uni_modules/uv-parse/static/app-plus/uv-parse/js/uni.webview.min.js create mode 100644 src/uni_modules/uv-parse/static/app-plus/uv-parse/local.html create mode 100644 src/uni_modules/uv-ui-tools/changelog.md create mode 100644 src/uni_modules/uv-ui-tools/components/uv-ui-tools/uv-ui-tools.vue create mode 100644 src/uni_modules/uv-ui-tools/index.js create mode 100644 src/uni_modules/uv-ui-tools/index.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/config/config.js create mode 100644 src/uni_modules/uv-ui-tools/libs/css/color.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/css/common.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/css/components.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/css/variable.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/css/vue.scss create mode 100644 src/uni_modules/uv-ui-tools/libs/function/colorGradient.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/debounce.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/digit.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/index.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/platform.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/test.js create mode 100644 src/uni_modules/uv-ui-tools/libs/function/throttle.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/adapters/index.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/InterceptorManager.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/Request.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/buildFullPath.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/defaults.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/dispatchRequest.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/mergeConfig.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/core/settle.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/helpers/buildURL.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/helpers/combineURLs.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/helpers/isAbsoluteURL.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/index.d.ts create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/index.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/utils.js create mode 100644 src/uni_modules/uv-ui-tools/libs/luch-request/utils/clone.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/button.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/mixin.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/mpMixin.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/mpShare.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/openType.js create mode 100644 src/uni_modules/uv-ui-tools/libs/mixin/touch.js create mode 100644 src/uni_modules/uv-ui-tools/libs/util/dayjs.js create mode 100644 src/uni_modules/uv-ui-tools/libs/util/route.js create mode 100644 src/uni_modules/uv-ui-tools/package.json create mode 100644 src/uni_modules/uv-ui-tools/readme.md create mode 100644 src/uni_modules/uv-ui-tools/theme.scss create mode 100644 src/uni_modules/x-getgadid/changelog.md create mode 100644 src/uni_modules/x-getgadid/package.json create mode 100644 src/uni_modules/x-getgadid/readme.md create mode 100644 src/uni_modules/x-getgadid/utssdk/app-android/config.json create mode 100644 src/uni_modules/x-getgadid/utssdk/app-android/index.uts create mode 100644 src/uni_modules/x-getgadid/utssdk/app-ios/config.json create mode 100644 src/uni_modules/x-getgadid/utssdk/app-ios/index.uts create mode 100644 src/uni_modules/x-getgadid/utssdk/interface.uts create mode 100644 src/uni_modules/x-getgadid/utssdk/unierror.uts create mode 100644 src/uni_modules/x-uniq-id/changelog.md create mode 100644 src/uni_modules/x-uniq-id/package.json create mode 100644 src/uni_modules/x-uniq-id/readme.md create mode 100644 src/uni_modules/x-uniq-id/utssdk/app-android/config.json create mode 100644 src/uni_modules/x-uniq-id/utssdk/app-android/index.uts create mode 100644 src/uni_modules/x-uniq-id/utssdk/app-ios/config.json create mode 100644 src/uni_modules/x-uniq-id/utssdk/app-ios/index.uts create mode 100644 src/uni_modules/x-uniq-id/utssdk/interface.uts create mode 100644 src/uni_modules/x-uniq-id/utssdk/unierror.uts create mode 100644 vite.config.js diff --git a/.env b/.env new file mode 100644 index 0000000..7292e75 --- /dev/null +++ b/.env @@ -0,0 +1,16 @@ +VITE_APP_H5_NO=1 +VITE_CHANNEL_ID="" +VITE_APP_NAME=Spinz777 +# VITE_APP_NAME=Winzz777 +VITE_APP_THEME=red +VITE_APP_ID=101 +# VITE_APP_ID=103 +VITE_APP_DOWNLOAD_URL="https://www.777spinz.com/spinz777_101_1.0.0.apk" +# VITE_APP_DOWNLOAD_URL="https://www.777spinz.com/Winzz777_103_100.apk" +VITE_APP_LOCALE=en +VITE_APP_IMAGE_URL="https://img1.sp77.in/frontimg" +VITE_WALLET_URL="https://inrchain.in/#/?inviteCode=m5ncrxv0" +VITE_NAME_UPPER=SPINZ777 +# VITE_NAME_UPPER=WINZZ777 +VITE_CURRENCY=INR +VITE_CURRENCY_SYMBOL=₹ \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..cd89805 --- /dev/null +++ b/.env.development @@ -0,0 +1,8 @@ +NODE_ENV = development +VITE_APP_BASE_URL = https://game.777spinz.com +# VITE_APP_BASE_URL=https://game-api.777spinz.com +# VITE_APP_BASE_URL=http://192.168.1.24:8093 +VITE_APP_ID = 101 + +VITE_APP_H5_NO = 1 +VITE_CHANNEL_ID = "" diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..30d91f7 --- /dev/null +++ b/.env.production @@ -0,0 +1,2 @@ +NODE_ENV=production +VITE_APP_BASE_URL=https://game-api.777spinz.com \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..502498b --- /dev/null +++ b/.gitignore @@ -0,0 +1,33 @@ +.DS_Store +node_modules +/dist +/config/server.config.js +/unpackage +.svn + +# lock files +yarn.lock +package.lock +package-lock.json +pnpm-lock.yaml + +# local env files +.env.local +.env.*.local +*.npmrc + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local +*.sw* diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..1b8d0f6 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,9 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "playground" : "custom", + "type" : "uni-app:app-android" + } + ] +} diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8b23445 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2f9ade5 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ +# Unilucky 777 + +This project is initialized with Mario. Follow is the quick guide for how to use. + +## Environment Prepare + +Install `node_modules`: + +```bash +npm install +``` + +or + +```bash +yarn install +``` + +## Provided Scripts + +Scripts provided in `package.json`. It's safe to modify or add additional script: + +### Start project + +```bash +npm run dev:h5 +``` + +### Build project + +```bash +npm run build:h5:all +``` + +## More diff --git a/deploy/file.js b/deploy/file.js new file mode 100644 index 0000000..31c6d00 --- /dev/null +++ b/deploy/file.js @@ -0,0 +1,51 @@ +const fs = require('fs').promises +const path = require('path') + +// 复制文件夹到指定目录 +async function copyDirectory (source, destination) { + const entries = await fs.readdir(source, { withFileTypes: true }); + await fs.mkdir(destination, { recursive: true }); + for (let entry of entries) { + const srcPath = path.join(source, entry.name); + const destPath = path.join(destination, entry.name); + + if (entry.isDirectory()) { + await copyDirectory(srcPath, destPath); + } else { + await fs.copyFile(srcPath, destPath); + } + } +} + +// 删除文件夹 +async function deleteDirectory (dir) { + const isExist = await fileExists(dir) + if (!isExist) { + return true + } + const entries = await fs.readdir(dir, { withFileTypes: true }) + for (let entry of entries) { + const fullPath = path.join(dir, entry.name) + if (entry.isDirectory()) { + await deleteDirectory(fullPath) + } else { + await fs.unlink(fullPath) + } + } + await fs.rmdir(dir) +} + +// 判断文件是否存在 +async function fileExists(filePath) { + try { + await fs.access(filePath); + return true; // 文件存在 + } catch { + return false; // 文件不存在 + } +} + +module.exports = { + copyDirectory, + deleteDirectory +} \ No newline at end of file diff --git a/deploy/index.js b/deploy/index.js new file mode 100644 index 0000000..c770f1e --- /dev/null +++ b/deploy/index.js @@ -0,0 +1,54 @@ +const path = require('path') +const { exec } = require('child_process') + +const fileHandler = require('./file') + +const packages = ['h5101', 'h5103', 'h5106'] +let currentIndex = 0 + +const startPackage = (package) => { + console.log('开始打包:', package) + const packagePath = path.resolve(__dirname, '../') + exec(`cd ${packagePath} && npm run build:${package}`, (error, stdout, stderr) => { + if (error) { + console.error(`打包出错:${package} ${error}`) + return + } + + if (stderr) { + console.error('std error', stderr) + return + } + // console.log('std out', stdout) + + console.log('打包成功:', package) + + const sourceDir = path.resolve(__dirname, '../dist/build/h5') + const destinationDir = path.resolve(__dirname, `../dist/package/${package}`) + + console.log('复制文件:', sourceDir) + console.log('目标目录:', destinationDir) + + fileHandler.deleteDirectory(destinationDir) + .then(() => { + fileHandler.copyDirectory(sourceDir, destinationDir) + .then(() => { + console.log('复制完成', package) + + if (currentIndex < packages.length - 1) { + currentIndex++ + startPackage(packages[currentIndex]) + } else { + console.log('全部打包完成') + } + }) + .catch(err => { + console.error('复制过程中发生错误:', err) + }) + }).catch(error => { + console.error('删除文件夹时发生错误:', error) + }) + }) +} + +startPackage(packages[currentIndex]) diff --git a/index.html b/index.html new file mode 100644 index 0000000..34f485c --- /dev/null +++ b/index.html @@ -0,0 +1,106 @@ + + + + + + + + + + + + + Spinz777 + + + + + + +
+ + + + + + + + + + + \ No newline at end of file diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..0fc621a --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": [ + "src/*" + ], + "~": [ + "./*" + ] + }, + "types": [ + "@dcloudio/types", + "@uni-helper/uni-app-types" + ] + }, + "resolveExtensions": [ + ".js", + ".vue" + ], + "exclude": [ + "node_modules" + ] +} \ No newline at end of file diff --git a/nativeplugins/Tidu-GaidUtil/android/gaidutil-release.aar b/nativeplugins/Tidu-GaidUtil/android/gaidutil-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..cae376b195815b3e4f0d80cb90daf3b9a26e6b26 GIT binary patch literal 4286 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 eO^vO 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

DXcD4|O;aG@cbYOVb{WQm{_rgNz~i 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%0DJdX$TP|Bc0;Xg@o; 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 literal 0 HcmV?d00001 diff --git a/nativeplugins/Tidu-GaidUtil/package.json b/nativeplugins/Tidu-GaidUtil/package.json new file mode 100644 index 0000000..268ef3f --- /dev/null +++ b/nativeplugins/Tidu-GaidUtil/package.json @@ -0,0 +1,20 @@ +{ + "name": "GaidUtil", + "id": "Tidu-GaidUtil", + "version": "0.0.1", + "description": "获取gaid插件", + "_dp_type":"nativeplugin", + "_dp_nativeplugin":{ + "android": { + "plugins": [ + { + "type": "module", + "name": "Tidu-GaidUtil", + "class": "com.tidu.util.gaid.GaidUtilModule" + } + ], + "integrateType": "aar", + "minSdkVersion" : 16 + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..65b1aec --- /dev/null +++ b/package.json @@ -0,0 +1,3320 @@ +{ + "name": "uni-preset-vue", + "version": "0.0.0", + "scripts": { + "dev:h5101": "uni -p h5dev101 --mode development", + "dev:h5102": "uni -p h5dev102 --mode development", + "dev:h5103": "uni -p h5dev103 --mode development", + "dev:h5prod101": "uni -p h5dev101 --mode production", + "dev:h5prod102": "uni -p h5dev102 --mode production", + "dev:h5prod103": "uni -p h5dev103 --mode production", + "dev:h5l": "uni -p h5dev101 --mode local", + "dev:h5106": "uni -p h5dev106", + "dev:h5111": "uni -p h5dev111", + "dev:go": "uni -p h5prod1116", + "build:h5:test": "uni build -p h5dev101", + "build:dev:h5101": "uni build -p h5dev101 --mode development", + "build:dev:h5102": "uni build -p h5dev102 --mode development", + "build:dev:h5103": "uni build -p h5dev103 --mode development", + "build:h5101": "uni build -p h5prod101 --mode production", + "build:h5102": "uni build -p h5prod102 --mode production", + "build:h5103": "uni build -p h5prod103 --mode production", + "build:h5:test103": "uni build -p h5dev103", + "build:h5:bjsttest": "uni build -p h5dev101bjst", + "build:h5:knytest": "uni build -p h5knydev1101", + "build:h5:mjltest": "uni build -p h5mjldev1101", + "build:h5:all": "node ./deploy", + "build:h5106": "uni build -p h5prod106", + "build:h5190": "uni build -p h5prod190", + "build:h5191": "uni build -p h5prod191", + "build:h5192": "uni build -p h5prod192", + "build:h5193": "uni build -p h5prod193", + "build:h5194": "uni build -p h5prod194", + "build:h5195": "uni build -p h5prod195", + "build:h51101": "uni build -p h5prod1101", + "build:h51102": "uni build -p h5prod1102", + "build:h51103": "uni build -p h5prod1103", + "build:h51104": "uni build -p h5prod1104", + "build:h51105": "uni build -p h5prod1105", + "build:h51106": "uni build -p h5prod1106", + "build:h51107": "uni build -p h5prod1107", + "build:h51108": "uni build -p h5prod1108", + "build:h51109": "uni build -p h5prod1109", + "build:h51110": "uni build -p h5prod1110", + "build:h51111": "uni build -p h5prod1111", + "build:h51112": "uni build -p h5prod1112", + "build:h51113": "uni build -p h5prod1113", + "build:h51114": "uni build -p h5prod1114", + "build:h51115": "uni build -p h5prod1115", + "build:h51116": "uni build -p h5prod1116", + "build:h51117": "uni build -p h5prod1117", + "build:h51118": "uni build -p h5prod1118", + "build:h51119": "uni build -p h5prod1119", + "build:h51120": "uni build -p h5prod1120", + "build:h51121": "uni build -p h5prod1121", + "build:h51122": "uni build -p h5prod1122", + "build:h51123": "uni build -p h5prod1123", + "build:h51124": "uni build -p h5prod1124", + "build:h51125": "uni build -p h5prod1125", + "build:h51126": "uni build -p h5prod1126", + "build:h51127": "uni build -p h5prod1127", + "build:h51128": "uni build -p h5prod1128", + "build:h51129": "uni build -p h5prod1129", + "build:h51130": "uni build -p h5prod1130", + "build:h51901": "uni build -p h5prod1901", + "build:h51902": "uni build -p h5prod1902", + "build:h51131": "uni build -p h5prod1131", + "build:h51132": "uni build -p h5prod1132", + "build:h51133": "uni build -p h5prod1133", + "build:h51134": "uni build -p h5prod1134", + "build:h51135": "uni build -p h5prod1135", + "build:h51136": "uni build -p h5prod1136", + "build:h51137": "uni build -p h5prod1137", + "build:h51138": "uni build -p h5prod1138", + "build:h51139": "uni build -p h5prod1139", + "build:h51140": "uni build -p h5prod1140", + "build:h51141": "uni build -p h5prod1141", + "build:h51142": "uni build -p h5prod1142", + "build:h51143": "uni build -p h5prod1143", + "build:h51144": "uni build -p h5prod1144", + "build:h51145": "uni build -p h5prod1145", + "build:h51146": "uni build -p h5prod1146", + "build:h51147": "uni build -p h5prod1147", + "build:h51148": "uni build -p h5prod1148", + "build:h51149": "uni build -p h5prod1149", + "build:h51150": "uni build -p h5prod1150", + "build:h51151": "uni build -p h5prod1151", + "build:h51152": "uni build -p h5prod1152", + "build:h51153": "uni build -p h5prod1153", + "build:h51154": "uni build -p h5prod1154", + "build:h51155": "uni build -p h5prod1155", + "build:h51156": "uni build -p h5prod1156", + "build:h51157": "uni build -p h5prod1157", + "build:h51158": "uni build -p h5prod1158", + "build:h51159": "uni build -p h5prod1159", + "build:h51160": "uni build -p h5prod1160", + "build:h51161": "uni build -p h5prod1161", + "build:h51162": "uni build -p h5prod1162", + "build:h51163": "uni build -p h5prod1163", + "build:h51164": "uni build -p h5prod1164", + "build:h51165": "uni build -p h5prod1165", + "build:h51166": "uni build -p h5prod1166", + "build:h51167": "uni build -p h5prod1167", + "build:h51168": "uni build -p h5prod1168", + "build:h51169": "uni build -p h5prod1169", + "build:h51170": "uni build -p h5prod1170", + "build:h51171": "uni build -p h5prod1171", + "build:h51172": "uni build -p h5prod1172", + "build:h51173": "uni build -p h5prod1173", + "build:h51174": "uni build -p h5prod1174", + "build:h51175": "uni build -p h5prod1175", + "build:h51176": "uni build -p h5prod1176", + "build:h51177": "uni build -p h5prod1177", + "build:h51178": "uni build -p h5prod1178", + "build:h51179": "uni build -p h5prod1179", + "build:h51180": "uni build -p h5prod1180", + "build:h5bjst1101": "uni build -p h5bjstprod1101", + "build:h5bjst1102": "uni build -p h5bjstprod1102", + "build:h5bjst1103": "uni build -p h5bjstprod1103", + "build:h5bjst1104": "uni build -p h5bjstprod1104", + "build:h5bjst1105": "uni build -p h5bjstprod1105", + "build:h5bjst1106": "uni build -p h5bjstprod1106", + "build:h5bjst1107": "uni build -p h5bjstprod1107", + "build:h5bjst1108": "uni build -p h5bjstprod1108", + "build:h5bjst1109": "uni build -p h5bjstprod1109", + "build:h5bjst1110": "uni build -p h5bjstprod1110", + "build:h5bjst1111": "uni build -p h5bjstprod1111", + "build:h5bjst1112": "uni build -p h5bjstprod1112", + "build:h5bjst1113": "uni build -p h5bjstprod1113", + "build:h5bjst1114": "uni build -p h5bjstprod1114", + "build:h5bjst1115": "uni build -p h5bjstprod1115", + "build:h5bjst1116": "uni build -p h5bjstprod1116", + "build:h5bjst1117": "uni build -p h5bjstprod1117", + "build:h5bjst1118": "uni build -p h5bjstprod1118", + "build:h5bjst1119": "uni build -p h5bjstprod1119", + "build:h5bjst1120": "uni build -p h5bjstprod1120", + "build:h5bjst1121": "uni build -p h5bjstprod1121", + "build:h5bjst1122": "uni build -p h5bjstprod1122", + "build:h5bjst1123": "uni build -p h5bjstprod1123", + "build:h5bjst1124": "uni build -p h5bjstprod1124", + "build:h5bjst1125": "uni build -p h5bjstprod1125", + "build:h5bjst1126": "uni build -p h5bjstprod1126", + "build:h5bjst1127": "uni build -p h5bjstprod1127", + "build:h5bjst1128": "uni build -p h5bjstprod1128", + "build:h5bjst1129": "uni build -p h5bjstprod1129", + "build:h5bjst1130": "uni build -p h5bjstprod1130", + "build:h5bjst1131": "uni build -p h5bjstprod1131", + "build:h5bjst1132": "uni build -p h5bjstprod1132", + "build:h5bjst1133": "uni build -p h5bjstprod1133", + "build:h5bjst1134": "uni build -p h5bjstprod1134", + "build:h5bjst1135": "uni build -p h5bjstprod1135", + "build:h5bjst1136": "uni build -p h5bjstprod1136", + "build:h5bjst1137": "uni build -p h5bjstprod1137", + "build:h5bjst1138": "uni build -p h5bjstprod1138", + "build:h5bjst1139": "uni build -p h5bjstprod1139", + "build:h5bjst1140": "uni build -p h5bjstprod1140", + "build:h5mjl2101": "uni build -p h5mjlprod2101", + "build:h55101": "uni build -p h5prod5101", + "build:h55102": "uni build -p h5prod5102", + "dev:h5idntest": "uni build -p h5dev101idn", + "build:h5idn1101": "uni build -p h5idnprod1101", + "build:h5:test1": "uni build -p h5dev120", + "build:h5:test2": "uni build -p h5dev121", + "build:h5bjst1501": "uni build -p h5prod1501pk", + "build:h5bjst1502": "uni build -p h5prod1502pk", + "build:h5bjst1503": "uni build -p h5prod1503pk", + "build:h5bjst1504": "uni build -p h5prod1504pk", + "build:h5bjst1505": "uni build -p h5prod1505pk", + "build:h5bjst1506": "uni build -p h5prod1506pk", + "build:h5bjst1511": "uni build -p h5prod1511pk", + "build:h5bjst1526": "uni build -p h5prod1526pk", + "build:h5700000": "uni build -p h5prod700000", + "build:h5913001": "uni build -p h5prod913001", + "build:h5912101": "uni build -p h5prod912101", + "build:h5912102": "uni build -p h5prod912102", + "build:h5912103": "uni build -p h5prod912103", + "build:h5911171": "uni build -p h5prod911171", + "build:h5911172": "uni build -p h5prod911172", + "build:h5911173": "uni build -p h5prod911173", + "build:android101": "uni build -p android101" + }, + "dependencies": { + "@adjustcom/adjust-web-sdk": "^5.7.1", + "@dcloudio/uni-app": "3.0.0-4040520250104002", + "@dcloudio/uni-app-harmony": "3.0.0-4040520250104002", + "@dcloudio/uni-app-plus": "3.0.0-4040520250104002", + "@dcloudio/uni-components": "3.0.0-4040520250104002", + "@dcloudio/uni-h5": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-alipay": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-baidu": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-jd": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-kuaishou": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-lark": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-qq": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-toutiao": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-weixin": "3.0.0-4040520250104002", + "@dcloudio/uni-mp-xhs": "3.0.0-4040520250104002", + "@dcloudio/uni-quickapp-webview": "3.0.0-4040520250104002", + "crypto-js": "^4.2.0", + "lodash": "^4.17.21", + "md5": "^2.3.0", + "moment": "^2.30.1", + "pinia": "2.1.0", + "swiper": "^11.1.15", + "vue": "3.4.21", + "vue-i18n": "9.1.9" + }, + "devDependencies": { + "@dcloudio/types": "3.4.14", + "@dcloudio/uni-automator": "3.0.0-4040520250104002", + "@dcloudio/uni-cli-shared": "3.0.0-4040520250104002", + "@dcloudio/uni-stacktracey": "3.0.0-4040520250104002", + "@dcloudio/uni-uts-v1": "3.0.0-4040520250104002", + "@dcloudio/vite-plugin-uni": "3.0.0-4040520250104002", + "@types/crypto-js": "^4.2.2", + "@uni-helper/uni-app-types": "1.0.0-alpha.6", + "@vue/runtime-core": "3.4.21", + "cross-env": "^7.0.3", + "fs-extra": "^11.2.0", + "iconv-lite": "^0.6.3", + "inquirer": "^9.3.7", + "sass": "1.77.6", + "sass-embedded": "^1.83.0", + "sass-loader": "10.1.1", + "vite": "5.2.8", + "vite-plugin-compression": "^0.5.1" + }, + "uni-app": { + "scripts": { + "h5loc101": { + "title": "test loc 101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "http://192.168.1.24:8093", + "APP_ID": 101, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7oree1pwcneo", + "APP_CURRENCY_SIGN": "TK", + "APP_PHONE_NUMBER_PREFIX": "+880" + }, + "define": { + "H5-1101": true + } + }, + "h5dev101": { + "title": "test 101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 101, + "APP_NAME": "Test101", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "7oree1pwcneo", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-101": true + } + }, + "h5dev102": { + "title": "test 102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 102, + "APP_NAME": "Test102", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "7oree1pwcneo", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-102": true + } + }, + "h5dev103": { + "title": "test 103", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 103, + "APP_NAME": "Test103", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-102": true + } + }, + "h5dev105": { + "title": "test 105", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 105, + "APP_NAME": "Test105", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "", + "COAT_VER": "0", + "COAT_URL": "" + }, + "define": { + "H5-503": true + } + }, + "h5dev111": { + "title": "test 111", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 111, + "APP_NAME": "Test111", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "7oree1pwcneo", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-101": true + } + }, + "h5dev1003": { + "title": "test 1003", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1003, + "APP_NAME": "Test1003", + "APP_THEME": "white", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7oree1pwcneo" + }, + "define": { + "H5-103": true + } + }, + "h5dev101bjst": { + "title": "test 101 bjst", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://www.bengaltsa.top", + "APP_ID": 1101, + "APP_NAME": "TestBJST1101", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7oree1pwcneo", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-101-BJ": true + } + }, + "h5knydev1101": { + "title": "test 1101 kny", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://www.jakartatest.cloud", + "APP_ID": 1101, + "APP_NAME": "TestKNY1101", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7oree1pwcneo", + "APP_CURRENCY_SIGN": "Ksh", + "APP_PHONE_NUMBER_PREFIX": "+254" + }, + "define": { + "H5-1101": true + } + }, + "h5mjldev1101": { + "title": "test 1101 mjl", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://www.bengaltsa.top", + "APP_ID": 1101, + "APP_NAME": "TestMJL1101", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7oree1pwcneo", + "APP_CURRENCY_SIGN": "TK", + "APP_PHONE_NUMBER_PREFIX": "+880" + }, + "define": { + "H5-1101": true + } + }, + "h5prod106": { + "title": "prod 106", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 106, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "" + }, + "define": { + "H5-106": true + } + }, + "h5prod190": { + "title": "prod 190", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game-api.777spinz.com", + "APP_ID": 101, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "7oree1pwcneo" + }, + "define": { + "H5-190": true + } + }, + "h5prod101": { + "title": "prod 101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game-api.777spinz.com", + "APP_ID": 101, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "" + }, + "define": { + "H5-101": true + } + }, + "h5prod102": { + "title": "prod 102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game-api.777spinz.com", + "APP_ID": 102, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "" + }, + "define": { + "H5-102": true + } + }, + "h5prod103": { + "title": "prod 103", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game-api.777spinz.com", + "APP_ID": 103, + "APP_NAME": "Winzz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "" + }, + "define": { + "H5-103": true + } + }, + "h5prod191": { + "title": "prod 191", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 191, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "bbuot09ufz0g" + }, + "define": { + "H5-191": true + } + }, + "h5prod192": { + "title": "prod 192", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 192, + "APP_NAME": "Dream11", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9yivi85abqbk" + }, + "define": { + "H5-192": true + } + }, + "h5prod193": { + "title": "prod 193", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 193, + "APP_NAME": "Adda52", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "zaukep7xayv4" + }, + "define": { + "H5-193": true + } + }, + "h5prod194": { + "title": "prod 194", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 194, + "APP_NAME": "My11Circle", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "slbj7jobdc74" + }, + "define": { + "H5-194": true + } + }, + "h5prod195": { + "title": "prod 195", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 195, + "APP_NAME": "RajaSpin99", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "qlf5l4vknb40" + }, + "define": { + "H5-195": true + } + }, + "h5prod1101": { + "title": "prod 1101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1101, + "APP_NAME": "Book768", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ql19qutwpq0w" + }, + "define": { + "H5-1101": true + } + }, + "h5prod1102": { + "title": "prod 1102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1102, + "APP_NAME": "Book100", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "2msjx6gpi3wg" + }, + "define": { + "H5-1102": true + } + }, + "h5prod1103": { + "title": "prod 1103", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1103, + "APP_NAME": "Book777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jcrize0e3mdc" + }, + "define": { + "H5-1103": true + } + }, + "h5prod1104": { + "title": "prod 1104", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1104, + "APP_NAME": "Lucky365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "zmxqrxngj11c" + }, + "define": { + "H5-1104": true + } + }, + "h5prod1105": { + "title": "prod 1105", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1105, + "APP_NAME": "Indialucky", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dqs9plvt66m8" + }, + "define": { + "H5-1105": true + } + }, + "h5prod1106": { + "title": "prod 1106", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1106, + "APP_NAME": "Luckyroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "wps2ziistdz4" + }, + "define": { + "H5-1106": true + } + }, + "h5prod1107": { + "title": "prod 1107", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1107, + "APP_NAME": "Crash777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "80z8c6h1kcqo" + }, + "define": { + "H5-1107": true + } + }, + "h5prod1108": { + "title": "prod 1108", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1108, + "APP_NAME": "Aviator777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "m0n5gqfn77r4" + }, + "define": { + "H5-1108": true + } + }, + "h5prod1109": { + "title": "prod 1109", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1109, + "APP_NAME": "1xbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "gv7nxaljxm2o" + }, + "define": { + "H5-1109": true + } + }, + "h5prod1110": { + "title": "prod 1110", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1110, + "APP_NAME": "Parimatch", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "efuzzuaj8bnk" + }, + "define": { + "H5-1110": true + } + }, + "h5prod1111": { + "title": "prod 1111", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1111, + "APP_NAME": "Lplwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "hfzyd1lxn7y8" + }, + "define": { + "H5-1111": true + } + }, + "h5prod1112": { + "title": "prod 1112", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1112, + "APP_NAME": "777winnerbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "bisg3eayvabk" + }, + "define": { + "H5-1112": true + } + }, + "h5prod1113": { + "title": "prod 1113", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1113, + "APP_NAME": "777clubin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "w7ten7uv5fr4" + }, + "define": { + "H5-1113": true + } + }, + "h5prod1114": { + "title": "prod 1114", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1114, + "APP_NAME": "Indluckybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x6z4t4vgsef4" + }, + "define": { + "H5-1114": true + } + }, + "h5prod1115": { + "title": "prod 1115", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1115, + "APP_NAME": "Spinbetwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9cj946q7xhxc" + }, + "define": { + "H5-1115": true + } + }, + "h5prod1116": { + "title": "prod 1116", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1116, + "APP_NAME": "Indspinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jbn777z89qf4" + }, + "define": { + "H5-1116": true + } + }, + "h5prod1117": { + "title": "prod 1117", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1117, + "APP_NAME": "Pokerlegbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "icu16ggfadxc" + }, + "define": { + "H5-1117": true + } + }, + "h5prod1118": { + "title": "prod 1118", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1118, + "APP_NAME": "Kuberabet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "94m513uki1og" + }, + "define": { + "H5-1118": true + } + }, + "h5prod1119": { + "title": "prod 1119", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1119, + "APP_NAME": "Ouletteinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "puak1bvd1l34" + }, + "define": { + "H5-1119": true + } + }, + "h5prod1120": { + "title": "prod 1120", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1120, + "APP_NAME": "Spinbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x1ce146yi2o0" + }, + "define": { + "H5-1120": true + } + }, + "h5prod1121": { + "title": "prod 1121", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1121, + "APP_NAME": "101betx", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ewzfb79jb4zk" + }, + "define": { + "H5-1121": true + } + }, + "h5prod1122": { + "title": "prod 1122", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1122, + "APP_NAME": "365xwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3j3rw72unchs" + }, + "define": { + "H5-1122": true + } + }, + "h5prod1123": { + "title": "prod 1123", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1123, + "APP_NAME": "7xbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "frrxa8cy26tc" + }, + "define": { + "H5-1123": true + } + }, + "h5prod1124": { + "title": "prod 1124", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1124, + "APP_NAME": "Luckyflybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "lfuzj704k83k" + }, + "define": { + "H5-1124": true + } + }, + "h5prod1125": { + "title": "prod 1125", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1125, + "APP_NAME": "Bet007in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "rl1fcf1ob8jk" + }, + "define": { + "H5-1125": true + } + }, + "h5prod1126": { + "title": "prod 1126", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1126, + "APP_NAME": "Bet777in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9re1b981n4lc" + }, + "define": { + "H5-1126": true + } + }, + "h5prod1127": { + "title": "prod 1127", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1127, + "APP_NAME": "Betbuzzin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "2u6pqin6f4sg" + }, + "define": { + "H5-1127": true + } + }, + "h5prod1128": { + "title": "prod 1128", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1128, + "APP_NAME": "Book365bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "8fir6rump3eo" + }, + "define": { + "H5-1128": true + } + }, + "h5prod1129": { + "title": "prod 1129", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1129, + "APP_NAME": "Inroyalcasino", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "27pxq6goulog" + }, + "define": { + "H5-1129": true + } + }, + "h5prod1130": { + "title": "prod 1130", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1130, + "APP_NAME": "Inwinner365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dqgs20qugjr4" + }, + "define": { + "H5-1130": true + } + }, + "h5prod1901": { + "title": "prod 1901", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1901, + "APP_NAME": "IOS1", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "46cekh6oekg0" + }, + "define": { + "H5-1901": true + } + }, + "h5prod1902": { + "title": "prod 1902", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1902, + "APP_NAME": "IOS2", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "e2v6l9enyj28" + }, + "define": { + "H5-1902": true + } + }, + "h5prod1131": { + "title": "prod 1131", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1131, + "APP_NAME": "Rocket777bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "t794c2q94buo" + }, + "define": { + "H5-1131": true + } + }, + "h5prod1132": { + "title": "prod 1132", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1132, + "APP_NAME": "Roulettemast", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "w2ki7rofulmo" + }, + "define": { + "H5-1132": true + } + }, + "h5prod1133": { + "title": "prod 1133", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1133, + "APP_NAME": "Spinstarbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3wpo8jvosglc" + }, + "define": { + "H5-1133": true + } + }, + "h5prod1134": { + "title": "prod 1134", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1134, + "APP_NAME": "Teenpattimaxin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x28hw8lgf8qo" + }, + "define": { + "H5-1134": true + } + }, + "h5prod1135": { + "title": "prod 1135", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1135, + "APP_NAME": "Win100bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ui1uah05x98g" + }, + "define": { + "H5-1135": true + } + }, + "h5prod1136": { + "title": "prod 1136", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1136, + "APP_NAME": "Rouletteroyal", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "n5ggm331sx6o" + }, + "define": { + "H5-1136": true + } + }, + "h5prod1137": { + "title": "prod 1137", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1137, + "APP_NAME": "Spingreat", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dg63qx7y90jk" + }, + "define": { + "H5-1137": true + } + }, + "h5prod1138": { + "title": "prod 1138", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1138, + "APP_NAME": "Luckycasinobet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jtxmzc9ix0qo" + }, + "define": { + "H5-1138": true + } + }, + "h5prod1139": { + "title": "prod 1139", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1139, + "APP_NAME": "Indroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "r2m7lur2w9vk" + }, + "define": { + "H5-1139": true + } + }, + "h5prod1140": { + "title": "prod 1140", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1140, + "APP_NAME": "Gobetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "fx7sodtieolc" + }, + "define": { + "H5-1140": true + } + }, + "h5bjstprod1101": { + "title": "bjstprod 1101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1101, + "APP_NAME": "Book768", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "5sq6gx1b19q8", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92", + "ADVERTISER_APP_ID": "" + }, + "define": { + "H5-1101-BJ": true + } + }, + "h5bjstprod1102": { + "title": "bjstprod 1102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1102, + "APP_NAME": "book100", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3mg72c3qmrk0", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1102-BJ": true + } + }, + "h5bjstprod1103": { + "title": "bjstprod 1103", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1103, + "APP_NAME": "book777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "rygnpbdy7o5c", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1103-BJ": true + } + }, + "h5bjstprod1104": { + "title": "bjstprod 1104", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1104, + "APP_NAME": "lucky365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "eb6b9xduidxc", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1104-BJ": true + } + }, + "h5bjstprod1105": { + "title": "bjstprod 1105", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1105, + "APP_NAME": "Indialucky", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "htn9fky9gyyo", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1105-BJ": true + } + }, + "h5bjstprod1106": { + "title": "bjstprod 1106", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1106, + "APP_NAME": "luckyroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "q1kcepuxwc1s", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1106-BJ": true + } + }, + "h5bjstprod1107": { + "title": "bjstprod 1107", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1107, + "APP_NAME": "crash777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "f518ut2opxq8", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1107-BJ": true + } + }, + "h5bjstprod1108": { + "title": "bjstprod 1108", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1108, + "APP_NAME": "aviator777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "w6uvhqqhxvcw", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1108-BJ": true + } + }, + "h5bjstprod1109": { + "title": "bjstprod 1109", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1109, + "APP_NAME": "1xbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "57nf2hcoiio0", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1109-BJ": true + } + }, + "h5bjstprod1110": { + "title": "bjstprod 1110", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1110, + "APP_NAME": "parimatch", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9wl636grk64g", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92", + "ADVERTISER_APP_ID": 9681 + }, + "define": { + "H5-1110-BJ": true + } + }, + "h5bjstprod1111": { + "title": "bjstprod 1111", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1111, + "APP_NAME": "lplwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "rgw7ts1gt24g", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1111-BJ": true + } + }, + "h5bjstprod1112": { + "title": "bjstprod 1112", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1112, + "APP_NAME": "777winnerbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "yiktkwlytvr4", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1112-BJ": true + } + }, + "h5bjstprod1113": { + "title": "bjstprod 1113", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1113, + "APP_NAME": "777clubin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "tv4uboa0hmgw", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1113-BJ": true + } + }, + "h5bjstprod1114": { + "title": "bjstprod 1114", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1114, + "APP_NAME": "indluckybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "icdhcsyqqpz4", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1114-BJ": true + } + }, + "h5bjstprod1115": { + "title": "bjstprod 1115", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1115, + "APP_NAME": "spinbetwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "sgy3wfgig2rk", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1115-BJ": true + } + }, + "h5bjstprod1116": { + "title": "bjstprod 1116", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1116, + "APP_NAME": "indspinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3bgnepfw4w8w", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1116-BJ": true + } + }, + "h5bjstprod1117": { + "title": "bjstprod 1117", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1117, + "APP_NAME": "pokerlegbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "95bs525i7a4g", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1117-BJ": true + } + }, + "h5bjstprod1118": { + "title": "bjstprod 1118", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1118, + "APP_NAME": "kuberabet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "uaag6bg63y80", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1118-BJ": true + } + }, + "h5bjstprod1119": { + "title": "bjstprod 1119", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1119, + "APP_NAME": "ouletteinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "56m9r4g373sw", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1119-BJ": true + } + }, + "h5bjstprod1120": { + "title": "bjstprod 1120", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1120, + "APP_NAME": "spinbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "j925crb2jsao", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1120-BJ": true + } + }, + "h5bjstprod1121": { + "title": "bjstprod 1121", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1121, + "APP_NAME": "101betx", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "sefzc1dzj7k0", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1121-BJ": true + } + }, + "h5bjstprod1122": { + "title": "bjstprod 1122", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1122, + "APP_NAME": "365xwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "85ytc6ams83k", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1122-BJ": true + } + }, + "h5bjstprod1123": { + "title": "bjstprod 1123", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1123, + "APP_NAME": "7xbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "62mjbe3c96yo", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1123-BJ": true + } + }, + "h5bjstprod1124": { + "title": "bjstprod 1124", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1124, + "APP_NAME": "luckyflybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dccgtg9676kg", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1124-BJ": true + } + }, + "h5bjstprod1125": { + "title": "bjstprod 1125", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1125, + "APP_NAME": "bet007in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "5r76x7hshgcg", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1125-BJ": true + } + }, + "h5bjstprod1126": { + "title": "bjstprod 1126", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1126, + "APP_NAME": "bet777in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "vmq7d6lixk3k", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1126-BJ": true + } + }, + "h5bjstprod1127": { + "title": "bjstprod 1127", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1127, + "APP_NAME": "betbuzzin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "i81t4czowz5s", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1127-BJ": true + } + }, + "h5bjstprod1128": { + "title": "bjstprod 1128", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1128, + "APP_NAME": "book365bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "82r4cl6hs8sg", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1128-BJ": true + } + }, + "h5bjstprod1129": { + "title": "bjstprod 1129", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1129, + "APP_NAME": "inroyalcasino", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7smb07p63aio", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1129-BJ": true + } + }, + "h5bjstprod1130": { + "title": "bjstprod 1130", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1130, + "APP_NAME": "inwinner365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "8z5jpvai4ge8", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1130-BJ": true + } + }, + "h5bjstprod1131": { + "title": "bjstprod 1131", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1131, + "APP_NAME": "rocket777bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3uzro2712gow", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1131-BJ": true + } + }, + "h5bjstprod1132": { + "title": "bjstprod 1132", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1132, + "APP_NAME": "roulettemast", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jsixbilhzncw", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1132-BJ": true + } + }, + "h5bjstprod1133": { + "title": "bjstprod 1133", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1133, + "APP_NAME": "spinstarbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "oi16vtxc62gw", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1133-BJ": true + } + }, + "h5bjstprod1134": { + "title": "bjstprod 1134", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1134, + "APP_NAME": "teenpattimaxin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "po5o1u31tdds", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1134-BJ": true + } + }, + "h5bjstprod1135": { + "title": "bjstprod 1135", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1135, + "APP_NAME": "win100bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "kgj4hhq3gfls", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1135-BJ": true + } + }, + "h5bjstprod1136": { + "title": "bjstprod 1136", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1136, + "APP_NAME": "rouletteroyal", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "6h09wteue8zk", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1136-BJ": true + } + }, + "h5bjstprod1137": { + "title": "bjstprod 1137", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1137, + "APP_NAME": "spingreat", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "i8wi6ur3eosg", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1137-BJ": true + } + }, + "h5bjstprod1138": { + "title": "bjstprod 1138", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1138, + "APP_NAME": "luckycasinobet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ck8r376pdlog", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1138-BJ": true + } + }, + "h5bjstprod1139": { + "title": "bjstprod 1139", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1139, + "APP_NAME": "indroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7mn0hzl6i51c", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1139-BJ": true + } + }, + "h5bjstprod1140": { + "title": "bjstprod 1140", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1140, + "APP_NAME": "gobetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "vgaafcuhb75s", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1140-BJ": true + } + }, + "h5prod1141": { + "title": "prod 1141", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1141, + "APP_NAME": "Book768", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ql19qutwpq0w" + }, + "define": { + "H5-1141": true + } + }, + "h5prod1142": { + "title": "prod 1142", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1142, + "APP_NAME": "Book100", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "2msjx6gpi3wg" + }, + "define": { + "H5-1142": true + } + }, + "h5prod1143": { + "title": "prod 1143", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1143, + "APP_NAME": "Book777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jcrize0e3mdc" + }, + "define": { + "H5-1143": true + } + }, + "h5prod1144": { + "title": "prod 1144", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1144, + "APP_NAME": "Lucky365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "zmxqrxngj11c" + }, + "define": { + "H5-1144": true + } + }, + "h5prod1145": { + "title": "prod 1145", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1145, + "APP_NAME": "Indialucky", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dqs9plvt66m8" + }, + "define": { + "H5-1145": true + } + }, + "h5prod1146": { + "title": "prod 1146", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1146, + "APP_NAME": "Luckyroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "wps2ziistdz4" + }, + "define": { + "H5-1146": true + } + }, + "h5prod1147": { + "title": "prod 1147", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1147, + "APP_NAME": "Crash777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "80z8c6h1kcqo" + }, + "define": { + "H5-1147": true + } + }, + "h5prod1148": { + "title": "prod 1148", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1148, + "APP_NAME": "Aviator777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "m0n5gqfn77r4" + }, + "define": { + "H5-1148": true + } + }, + "h5prod1149": { + "title": "prod 1149", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1149, + "APP_NAME": "1xbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "gv7nxaljxm2o" + }, + "define": { + "H5-1149": true + } + }, + "h5prod1150": { + "title": "prod 1150", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1150, + "APP_NAME": "Parimatch", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "efuzzuaj8bnk" + }, + "define": { + "H5-1150": true + } + }, + "h5prod1151": { + "title": "prod 1151", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1151, + "APP_NAME": "Lplwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "hfzyd1lxn7y8" + }, + "define": { + "H5-1151": true + } + }, + "h5prod1152": { + "title": "prod 1152", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1152, + "APP_NAME": "777winnerbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "bisg3eayvabk" + }, + "define": { + "H5-1152": true + } + }, + "h5prod1153": { + "title": "prod 1153", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1153, + "APP_NAME": "777clubin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "w7ten7uv5fr4" + }, + "define": { + "H5-1153": true + } + }, + "h5prod1154": { + "title": "prod 1154", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1154, + "APP_NAME": "Indluckybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x6z4t4vgsef4" + }, + "define": { + "H5-1154": true + } + }, + "h5prod1155": { + "title": "prod 1155", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1155, + "APP_NAME": "Spinbetwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9cj946q7xhxc" + }, + "define": { + "H5-1155": true + } + }, + "h5prod1156": { + "title": "prod 1156", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1156, + "APP_NAME": "Indspinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jbn777z89qf4" + }, + "define": { + "H5-1156": true + } + }, + "h5prod1157": { + "title": "prod 1157", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1157, + "APP_NAME": "Pokerlegbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "icu16ggfadxc" + }, + "define": { + "H5-1157": true + } + }, + "h5prod1158": { + "title": "prod 1158", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1158, + "APP_NAME": "Kuberabet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "94m513uki1og" + }, + "define": { + "H5-1158": true + } + }, + "h5prod1159": { + "title": "prod 1159", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1159, + "APP_NAME": "Ouletteinbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "puak1bvd1l34" + }, + "define": { + "H5-1159": true + } + }, + "h5prod1160": { + "title": "prod 1160", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1160, + "APP_NAME": "Spinbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x1ce146yi2o0" + }, + "define": { + "H5-1160": true + } + }, + "h5prod1161": { + "title": "prod 1161", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1161, + "APP_NAME": "101betx", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ewzfb79jb4zk" + }, + "define": { + "H5-1161": true + } + }, + "h5prod1162": { + "title": "prod 1162", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1162, + "APP_NAME": "365xwinner", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3j3rw72unchs" + }, + "define": { + "H5-1162": true + } + }, + "h5prod1163": { + "title": "prod 1163", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1163, + "APP_NAME": "7xbetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "frrxa8cy26tc" + }, + "define": { + "H5-1163": true + } + }, + "h5prod1164": { + "title": "prod 1164", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1164, + "APP_NAME": "Luckyflybet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "lfuzj704k83k" + }, + "define": { + "H5-1164": true + } + }, + "h5prod1165": { + "title": "prod 1165", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1165, + "APP_NAME": "Bet007in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "rl1fcf1ob8jk" + }, + "define": { + "H5-1165": true + } + }, + "h5prod1166": { + "title": "prod 1166", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1166, + "APP_NAME": "Bet777in", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "9re1b981n4lc" + }, + "define": { + "H5-1166": true + } + }, + "h5prod1167": { + "title": "prod 1167", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1167, + "APP_NAME": "Betbuzzin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "2u6pqin6f4sg" + }, + "define": { + "H5-1167": true + } + }, + "h5prod1168": { + "title": "prod 1168", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1168, + "APP_NAME": "Book365bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "8fir6rump3eo" + }, + "define": { + "H5-1168": true + } + }, + "h5prod1169": { + "title": "prod 1169", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1169, + "APP_NAME": "Inroyalcasino", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "27pxq6goulog" + }, + "define": { + "H5-1169": true + } + }, + "h5prod1170": { + "title": "prod 1170", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1170, + "APP_NAME": "Inwinner365", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dqgs20qugjr4" + }, + "define": { + "H5-1170": true + } + }, + "h5prod1171": { + "title": "prod 1171", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1171, + "APP_NAME": "Rocket777bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "t794c2q94buo" + }, + "define": { + "H5-1171": true + } + }, + "h5prod1172": { + "title": "prod 1172", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1172, + "APP_NAME": "Roulettemast", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "w2ki7rofulmo" + }, + "define": { + "H5-1172": true + } + }, + "h5prod1173": { + "title": "prod 1173", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1173, + "APP_NAME": "Spinstarbet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3wpo8jvosglc" + }, + "define": { + "H5-1173": true + } + }, + "h5prod1174": { + "title": "prod 1174", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1174, + "APP_NAME": "Teenpattimaxin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "x28hw8lgf8qo" + }, + "define": { + "H5-1174": true + } + }, + "h5prod1175": { + "title": "prod 1175", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1175, + "APP_NAME": "Win100bet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "ui1uah05x98g" + }, + "define": { + "H5-1175": true + } + }, + "h5prod1176": { + "title": "prod 1176", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1176, + "APP_NAME": "Rouletteroyal", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "n5ggm331sx6o" + }, + "define": { + "H5-1176": true + } + }, + "h5prod1177": { + "title": "prod 1177", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1177, + "APP_NAME": "Spingreat", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dg63qx7y90jk" + }, + "define": { + "H5-1177": true + } + }, + "h5prod1178": { + "title": "prod 1178", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1178, + "APP_NAME": "Luckycasinobet", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jtxmzc9ix0qo" + }, + "define": { + "H5-1178": true + } + }, + "h5prod1179": { + "title": "prod 1179", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1179, + "APP_NAME": "Indroulette", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "r2m7lur2w9vk" + }, + "define": { + "H5-1179": true + } + }, + "h5prod1180": { + "title": "prod 1180", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 1180, + "APP_NAME": "Gobetin", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "fx7sodtieolc" + }, + "define": { + "H5-1180": true + } + }, + "h5mjlprod2101": { + "title": "mjlprod 2101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 2101, + "APP_NAME": "book768", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "", + "APP_CURRENCY_SIGN": "TK", + "APP_PHONE_NUMBER_PREFIX": "+880" + }, + "define": { + "H5-2101-mjl": true + } + }, + "h5prod5101": { + "title": "prod 5101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 5101, + "APP_NAME": "lucky777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "5hjxnt0cd8n4" + }, + "define": { + "H5-5101": true + } + }, + "h5prod5102": { + "title": "prod 5102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 5102, + "APP_NAME": "bet007", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "qj91pfmas6ww" + }, + "define": { + "H5-5102": true + } + }, + "h5dev101idn": { + "title": "test 101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://www.jakartatest.cloud", + "APP_ID": 106, + "APP_NAME": "Test101", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "7oree1pwcneo", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-101": true + } + }, + "h5idnprod1101": { + "title": "prod 1101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "www.wingoladgop-api.com", + "APP_ID": 1101, + "APP_NAME": "book768", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "000000" + }, + "define": { + "H5-1101": true + } + }, + "h5dev121": { + "title": "test 121", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "development", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 121, + "APP_NAME": "roulettemast", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 1, + "ADJUST_KEY": "", + "COAT_VER": "0", + "COAT_URL": "https://www.google.com/" + }, + "define": { + "H5-121": true + } + }, + "h5prod1501pk": { + "title": "bjstprod 1501", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1501, + "APP_NAME": "GoaLucky", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "4xqrwbb3mw3k", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1501": true + } + }, + "h5prod1502pk": { + "title": "bjstprod 1502", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1502, + "APP_NAME": "My11Circle", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dd6tq60escg0", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1502": true + } + }, + "h5prod1503pk": { + "title": "bjstprod 1503", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1503, + "APP_NAME": "Acepulse86", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "6987h6xieosg", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1503": true + } + }, + "h5prod1504pk": { + "title": "bjstprod 1504", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1504, + "APP_NAME": "777winnerbet", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "8rn0w0263m68", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1504": true + } + }, + "h5prod1505pk": { + "title": "bjstprod 1505", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1505, + "APP_NAME": "777clubin", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "7vtwv9p9k77k", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1505": true + } + }, + "h5prod1506pk": { + "title": "bjstprod 1506", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1506, + "APP_NAME": "Gobetin", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "mllweqb0ba4g", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1506": true + } + }, + "h5prod1511pk": { + "title": "bjstprod 1511", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1511, + "APP_NAME": "SlotsEndlessSpin", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "chjm1fzk2c5c", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1511": true + } + }, + "h5prod1526pk": { + "title": "bjstprod 1526", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://www.bdlucky777.com", + "APP_ID": 1526, + "APP_NAME": "luckylottery", + "APP_THEME": "green", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "93pb259c3ri8", + "APP_CURRENCY_SIGN": "Rs", + "APP_PHONE_NUMBER_PREFIX": "+92" + }, + "define": { + "H5-1526": true + } + }, + "h5prod700000": { + "title": "prod 700000", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 700000, + "APP_NAME": "lucky777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "jrdv2sd10ef4" + }, + "define": { + "H5-700000": true + } + }, + "h5prod913001": { + "title": "prod 913001", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 913001, + "APP_NAME": "lucky777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "hnv44g8a92ps" + }, + "define": { + "H5-913001": true + } + }, + "h5prod912101": { + "title": "prod 912101", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 912101, + "APP_NAME": "lucky777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "dkov4hslcphc" + }, + "define": { + "H5-912101": true + } + }, + "h5prod912102": { + "title": "prod 912102", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 912102, + "APP_NAME": "Jhandi Munda King", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "96n5vb570rgg" + }, + "define": { + "H5-912102": true + } + }, + "h5prod912103": { + "title": "prod 912103", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 912103, + "APP_NAME": "Aviator Game", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "qzxbd7h12gao" + }, + "define": { + "H5-912103": true + } + }, + "h5prod911171": { + "title": "prod 911171", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 911171, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "3s3cag03beps" + }, + "define": { + "H5-911171": true + } + }, + "h5prod911172": { + "title": "prod 911172", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 911172, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "rqg5dnop3ojk" + }, + "define": { + "H5-911172": true + } + }, + "h5prod911173": { + "title": "prod 911173", + "browser": "", + "env": { + "UNI_PLATFORM": "h5", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game.777spinz.com", + "APP_ID": 911173, + "APP_NAME": "Spinz777", + "APP_THEME": "red", + "APP_DOWNLOAD_URL": "", + "APP_H5_NO": 0, + "ADJUST_KEY": "xzao9w7ekfls" + }, + "define": { + "H5-911173": true + } + }, + "android101": { + "title": "prod app 101", + "env": { + "UNI_PLATFORM": "app-android", + "NODE_ENV": "production", + "VUE_APP_BASE_URL": "https://game-api.777spinz.com", + "APP_ID": 101, + "APP_NAME": "Spinz777", + "APP_H5_NO": 1, + "APP_THEME": "red" + }, + "define": { + "ANDROID-101": true + } + } + } + } +} diff --git a/shims-uni.d.ts b/shims-uni.d.ts new file mode 100644 index 0000000..ed4adcf --- /dev/null +++ b/shims-uni.d.ts @@ -0,0 +1,10 @@ +/// +import 'vue' + +declare module '@vue/runtime-core' { + type Hooks = App.AppInstance & Page.PageInstance; + + interface ComponentCustomOptions extends Hooks { + + } +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..5e87f66 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,485 @@ + + + \ No newline at end of file diff --git a/src/api/account.js b/src/api/account.js new file mode 100644 index 0000000..39dceb2 --- /dev/null +++ b/src/api/account.js @@ -0,0 +1,168 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getAccountUrl: ipConfig.api_app + '/user/getUserInfo', + getVipUrl: ipConfig.api_app + '/vip/getVipInfo', + getProfileUrl: ipConfig.api_app + '/user/profile', + editNickNameUrl: ipConfig.api_app + "/user/rename", + editProfileUrl: ipConfig.api_app + "/user/editprofile", + bindPhoneUrl: ipConfig.api_app + "/user/bind-phone", + bankCardUrl: ipConfig.api_app + "/user/bank", + setWithdrawalPasswordUrl: ipConfig.api_app + "/withdraw/setPwd", + updateFeedbackUrl: ipConfig.api_app + "/service/feedback", + getBalanceTypeUrl: ipConfig.api_app + "/balance/getBalanceType", + getBalanceListUrl: ipConfig.api_app + "/balance/getBalanceList", + getGameListUrl: ipConfig.api_app + "/balance/getGameRecord", + getFAQListUrl: ipConfig.api_app + "/faq/list", + bindWithdrawAccountUrl: ipConfig.api_app + "/user/bindwithdrawaccount", + saveUinfo: ipConfig.api_app + "/fbclick/saveInfo", + getFbInfo: ipConfig.api_app + "/fbclick/getFbInfo", +} + +export const getFbInfoApi = () => { + return httpRequest.get({ + url: api.getFbInfo, + data: {} + }) +} +export const saveUinfoApi = (params) => { + return httpRequest.post({ + url: api.saveUinfo, + data: params + }) +} +/** + * 获取个人中心数据 + */ +export const getAccountApi = (params) => { + return httpRequest.post({ + url: api.getAccountUrl, + data: params + }) +} + +/** + * 获取用户详细信息 + */ +export const getProfileApi = (params) => { + return httpRequest.post({ + url: api.getProfileUrl, + data: params + }) +} + +/** + * 修改用户名 + */ +export const editNickNameApi = (params) => { + return httpRequest.post({ + url: api.editNickNameUrl, + data: params + }) +} + +/** + * 修改用户详细信息 + */ +export const editProfileApi = (params) => { + return httpRequest.post({ + url: api.editProfileUrl, + data: params + }) +} + + +/** + * 绑定手机号 + */ +export const bindPhoneApi = (params) => { + return httpRequest.post({ + url: api.bindPhoneUrl, + data: params + }) +} + + +/** + * 绑定银行卡 + */ +export const bankCardApi = (params) => { + return httpRequest.post({ + url: api.bankCardUrl, + data: params + }) +} + +/** + * 绑定提现账号 + */ +export const bindWithdrawAccountApi = (params) => { + return httpRequest.post({ + url: api.bindWithdrawAccountUrl, + data: params + }) +} + + +/** + * 设置提现密码 + */ + +export const setWithdrawalPasswordApi = (params) => { + return httpRequest.post({ + url: api.setWithdrawalPasswordUrl, + data: params + }) +} + +/** + * 获取Feedback 更新时间 + */ +export const updateFeedbackApi = (params) => { + return httpRequest.post({ + url: api.updateFeedbackUrl, + data: params + }) +} + +/** + * 获取余额类型 + */ +export const getBalanceTypeApi = (params) => { + return httpRequest.post({ + url: api.getBalanceTypeUrl, + data: params + }) +} + +/** + * 获取余额记录 + */ +export const getBalanceListApi = (params) => { + return httpRequest.post({ + url: api.getBalanceListUrl, + data: params + }) +} + + +/** + * 获取游戏记录 + */ +export const getGameListApi = (params) => { + return httpRequest.post({ + url: api.getGameListUrl, + data: params + }) +} + +/** + * 获取FAQ列表 + */ +export const getFAQListApi = (params) => { + return httpRequest.post({ + url: api.getFAQListUrl, + data: params + }) +} \ No newline at end of file diff --git a/src/api/app.js b/src/api/app.js new file mode 100644 index 0000000..c9c460c --- /dev/null +++ b/src/api/app.js @@ -0,0 +1,66 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + appStackUpload: ipConfig.api_app + '/u/appStackUpload', + appEventUpload: ipConfig.api_app + '/u/transferEventUpload', + appConfig: ipConfig.api_app + '/u/gconfig', + appLanguages: ipConfig.api_app + '/language/languages', + appFbparams: ipConfig.api_app + '/fbclick/saveInfo', + appUpdate: ipConfig.api_app + '/user/appVersion' +} + +export const requestAppUpdate = (params) => { + return httpRequest.post({ + url: api.appUpdate, + data: params + }) +} +/** + * app异常日志上报 + */ +export const requestAppStackUpload = (params) => { + return httpRequest.post({ + url: api.appStackUpload, + data: params + }) +} + +/** + * app埋点上报 + */ +export const requestAppEventUpload = (params) => { + return httpRequest.post({ + url: api.appEventUpload, + data: params + }) +} + +/** + * app全局配置 + */ +export const requestAppConfig = (params) => { + return httpRequest.post({ + url: api.appConfig, + data: params + }) +} + +/** + * app国际化语言查询 + */ +export const requestAppLanguages = (params) => { + return httpRequest.get({ + url: api.appLanguages, + data: params + }) +} +/** + * appfbparams + */ +export const requestAppFbparams = (params) => { + return httpRequest.post({ + url: api.appFbparams, + data: params + }) +} \ No newline at end of file diff --git a/src/api/deposit.js b/src/api/deposit.js new file mode 100644 index 0000000..d6d0393 --- /dev/null +++ b/src/api/deposit.js @@ -0,0 +1,73 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' +import { okSpin } from '@/module/third/okspin.js' + +const api = { + getChargeInfo: ipConfig.api_app + '/recharge/getChargeInfo', + createTransferOrder: ipConfig.api_app + '/recharge/createTransferOrder', + createRechargeOrder: ipConfig.api_app + '/recharge/createRechargeOrder', + getRecordList: ipConfig.api_app + '/recharge/record', + orderDetail: ipConfig.api_app + '/recharge/orderDetail', + getPayChannel: ipConfig.api_app + '/recharge/getPayChannel' +} + +/** + * 获取充值页信息 + */ +export const requestChargeInfo = (params) => { + return httpRequest.post({ + url: api.getChargeInfo, + data: params + }) +} + +/** + * 创建转账订单 + */ +export const requestCreateTransferOrder = (params) => { + return httpRequest.post({ + url: api.createTransferOrder, + data: params + }) +} + +/** + * 创建充值订单 + */ +export const requestCreateRechargeOrder = (params) => { + okSpin.purchase() + return httpRequest.post({ + url: api.createRechargeOrder, + data: params + }) +} + +/** + * 获取充值记录 + */ +export const requestRecordList = (params) => { + return httpRequest.post({ + url: api.getRecordList, + data: params + }) +} + +/** + * 订单详情 + */ +export const requestOrderDetail = (params) => { + return httpRequest.post({ + url: api.orderDetail, + data: params + }) +} + +/** + * 充值渠道 + */ +export const requestGetPayChannel = (params) => { + return httpRequest.post({ + url: api.getPayChannel, + data: params + }) +} diff --git a/src/api/earn.js b/src/api/earn.js new file mode 100644 index 0000000..713b0a2 --- /dev/null +++ b/src/api/earn.js @@ -0,0 +1,106 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getAgentInfoUrl: ipConfig.api_app + '/invite/agent/info', + receiveRebateUrl: ipConfig.api_app + '/invite/agent/receiveRebate', + agentV2Home: ipConfig.api_app + '/agentV2/home', + agentV2MyRewardBaseInfo: ipConfig.api_app + '/agentV2/myRewardBaseInfo', + agentV2MyRewardList: ipConfig.api_app + '/agentV2/myRewardList', + agentV2MyTeamsBaseInfo: ipConfig.api_app + '/agentV2/myTeamsBaseInfo', + agentV2MyTeamsList: ipConfig.api_app + '/agentV2/myTeamsList', + agentV2ClaimAward: ipConfig.api_app + '/agentV2/claimAward', + agentV2LevelConfig: ipConfig.api_app + '/agentV2/levelConfig', +} + +/** + * 获取分销等级规则 + */ +export const getAgentV2LevelConfig = (params) => { + return httpRequest.post({ + url: api.agentV2LevelConfig, + data: params + }) +} + +/** + * 获取分销home + */ +export const getAgentV2Home = (params) => { + return httpRequest.post({ + url: api.agentV2Home, + data: params + }) +} + +/** + * 获取分销奖励 + */ +export const agentV2ClaimAward = (params) => { + return httpRequest.post({ + url: api.agentV2ClaimAward, + data: params + }) +} + +/** + * 获取分销reward + */ +export const getAgentV2MyRewardBaseInfo = (params) => { + return httpRequest.post({ + url: api.agentV2MyRewardBaseInfo, + data: params + }) +} + +/** + * 获取分销reward list + */ +export const getAgentV2MyRewardList = (params) => { + return httpRequest.post({ + url: api.agentV2MyRewardList, + data: params + }) +} + +/** + * 获取分销teams + */ +export const getAgentV2MyTeamsBaseInfo = (params) => { + return httpRequest.post({ + url: api.agentV2MyTeamsBaseInfo, + data: params + }) +} + +/** + * 获取分销teams list + */ +export const getAgentV2MyTeamsList = (params) => { + return httpRequest.post({ + url: api.agentV2MyTeamsList, + data: params + }) +} + + +/** + * 获取分销员信息 + */ +export const getAgentInfoApi = (params) => { + return httpRequest.post({ + url: api.getAgentInfoUrl, + data: params + }) +} + + +/** + * 领取返利 + */ +export const receiveRebateApi = (params) => { + return httpRequest.post({ + url: api.receiveRebateUrl, + data: params + }) +} diff --git a/src/api/game.js b/src/api/game.js new file mode 100644 index 0000000..202f376 --- /dev/null +++ b/src/api/game.js @@ -0,0 +1,116 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getGameCategoryList: ipConfig.api_app + '/labelGame/list', + getGameAndCategoryByLabel: ipConfig.api_app + '/labelGame/getGameAndCategoryByLabel', + getRecentGames: ipConfig.api_app + '/labelGame/getRecentGames', + getFavoriteGames: ipConfig.api_app + '/labelGame/getFavoriteGames', + favoriteGame: ipConfig.api_app + '/labelGame/favoriteGame', + getGameUrlByGame: ipConfig.api_app + '/labelGame/getGameUrlByGame', + openGameSearch: ipConfig.api_app + '/labelGame/openGameSearch', + getGameByCategoryAndPage: ipConfig.api_app + '/labelGame/getGameByCategoryAndPage', + getSearchResults: ipConfig.api_app + '/labelGame/getSearchResults', + jiliLogout: ipConfig.api_app + '/jili/transfer/logout' +} + +/** + * 获取标签 + */ +export const requestGameCategoryList = (params) => { + return httpRequest.post({ + url: api.getGameCategoryList, + data: params + }) +} + +/** + * 根据标签获取游戏和分类 + */ +export const requestGetGameAndCategoryByLabel = (params) => { + return httpRequest.post({ + url: api.getGameAndCategoryByLabel, + data: params + }) +} + +/** + * 获取最近游戏 + */ +export const requestRecentGameList = (params) => { + return httpRequest.post({ + url: api.getRecentGames, + data: params + }) +} + +/** + * 获取收藏游戏 + */ +export const requestFavoriteGameList = (params) => { + return httpRequest.post({ + url: api.getFavoriteGames, + data: params + }) +} + +/** + * 收藏游戏 + */ +export const requestFavoriteGame = (params) => { + return httpRequest.post({ + url: api.favoriteGame, + data: params + }) +} + +/** + * 根据游戏id获取游戏进入url + */ +export const requestGetGameUrlByGame = (params) => { + return httpRequest.post({ + url: api.getGameUrlByGame, + data: params + }) +} + +/** + * 打开游戏搜索 + */ +export const requestOpenGameSearch = (params) => { + return httpRequest.post({ + url: api.openGameSearch, + data: params + }) +} + +/** + * 获取游戏分页 + */ +export const requestGetGameByCategoryAndPage = (params) => { + return httpRequest.post({ + url: api.getGameByCategoryAndPage, + data: params + }) +} + +/** + * 搜索游戏结果 + */ +export const requestSearchResults = (params) => { + return httpRequest.post({ + url: api.getSearchResults, + data: params + }) +} + +/** + * jili游戏退出调用 + */ +export const requestJiliLogout = (params) => { + return httpRequest.post({ + url: api.jiliLogout, + data: params + }) +} + diff --git a/src/api/home.js b/src/api/home.js new file mode 100644 index 0000000..f6bbdb4 --- /dev/null +++ b/src/api/home.js @@ -0,0 +1,49 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + rechargeButtonStatus: ipConfig.api_app + '/home/rechargeButtonStatus', + rollMsg: ipConfig.api_app + '/home/rollMsg', + bannerList: ipConfig.api_app + '/banner/list', + getService: ipConfig.api_app + '/service/index', +} + +/** + * 获取重置按钮状态 + */ +export const requestRechargeButtonStatus = (params) => { + return httpRequest.post({ + url: api.rechargeButtonStatus, + data: params + }) +} + +/** + * 获取跑马灯消息 + */ +export const requestRollMsg = (params) => { + return httpRequest.post({ + url: api.rollMsg, + data: params + }) +} + +/** + * 获取banner列表 + */ +export const requestBannerList = (params) => { + return httpRequest.post({ + url: api.bannerList, + data: params + }) +} + +/** + * 获取客服信息 + */ +export const requestServiceList = (params) => { + return httpRequest.post({ + url: api.getService, + data: params + }) +} \ No newline at end of file diff --git a/src/api/login.js b/src/api/login.js new file mode 100644 index 0000000..73ea0fe --- /dev/null +++ b/src/api/login.js @@ -0,0 +1,100 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + login: ipConfig.api_app + '/sso/v2/login', + guestLogin: ipConfig.api_app + '/sso/guest', + getOtp: ipConfig.api_app + '/sms/send', + passwordLoginApi: ipConfig.api_app + '/sso/login', + idPasswordLogin: ipConfig.api_app + '/sso/idlogin', + loginConfigApi: ipConfig.api_app + "/threeLogin/channel", + registerApiUrl: ipConfig.api_app + "/sso/register", + changePasswordUrl: ipConfig.api_app + "/sso/modify", + googleLogin: ipConfig.api_app + '/sso/googleLogin' +} +/** + * 修改Miami + */ +export const changePasswordApi = (params) => { + return httpRequest.post({ + url: api.changePasswordUrl, + data: params + }) +} +/** + * 手机号+密码 注册 + */ +export const registerApi = (params) => { + return httpRequest.post({ + url: api.registerApiUrl, + data: params + }) +} +/** + * 获取三方登录配置 + */ +export const getLoginConfigApi = (params) => { + return httpRequest.get({ + url: api.loginConfigApi, + data: params + }) +} + +/** + * 登录获取sign uid和用户信息 + */ +export const requestLogin = (params) => { + return httpRequest.post({ + url: api.login, + data: params + }) +} +/** + * 登陆 手机号+密码 + */ +export const passwordLogin = (params) => { + return httpRequest.post({ + url: api.passwordLoginApi, + data: params + }) +} +/** + * 游客登录获取sign uid和用户信息 + */ +export const requestGuestLogin = (params) => { + return httpRequest.post({ + url: api.guestLogin, + data: params + }) +} + + +/** + * 获取Otp + */ +export const requestGetOtp = (params) => { + return httpRequest.post({ + url: api.getOtp, + data: params + }) +} + +/** + * google登录 + */ +export const requestGoogleLogin = (params) => { + return httpRequest.post({ + url: api.googleLogin, + data: params + }) +} + +/** + * id + password登录 + */ +export const requestIdPasswordLogin = (params) => { + return httpRequest.post({ + url: api.idPasswordLogin, + data: params + }) +} diff --git a/src/api/mail.js b/src/api/mail.js new file mode 100644 index 0000000..f19169f --- /dev/null +++ b/src/api/mail.js @@ -0,0 +1,49 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + mailList: ipConfig.api_app + '/mail/list', + mailDel: ipConfig.api_app + '/mail/del', + mailRead: ipConfig.api_app + '/mail/read', + mailReceive: ipConfig.api_app + '/mail/receive', +} + +/** + * 获取邮件列表 + */ +export const requestMailList = (params) => { + return httpRequest.post({ + url: api.mailList, + data: params + }) +} + +/** + * 删除 + */ +export const requestMailDel = (params) => { + return httpRequest.post({ + url: api.mailDel, + data: params + }) +} + +/** + * 已读 + */ +export const requestMailRead = (params) => { + return httpRequest.post({ + url: api.mailRead, + data: params + }) +} + +/** + * 领取 + */ +export const requestMailReceive = (params) => { + return httpRequest.post({ + url: api.mailReceive, + data: params + }) +} diff --git a/src/api/promo.js b/src/api/promo.js new file mode 100644 index 0000000..bbc36e2 --- /dev/null +++ b/src/api/promo.js @@ -0,0 +1,353 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getPromoListUrl: ipConfig.api_app + '/activity/list', + exchangeUrl: ipConfig.api_app + "/activity/exchange", + getBetRankDataUrl: ipConfig.api_app + "/activity/betRankData", + getSigninInfoUrl: ipConfig.api_app + "/signin/getSigninInfo", + recvRewardUrl: ipConfig.api_app + "/signin/recvReward", + canGiftCode: ipConfig.api_app + '/activity/giftCode', + registerActivityData: ipConfig.api_app + '/activity/registerActivityData', + registerActivityReward: ipConfig.api_app + '/activity/registerActivityReward', + inviteRechageRankData: ipConfig.api_app + '/activity/inviteRechageRankData', + inviteRechageRankHeadAwardList: ipConfig.api_app + '/activity/inviteRechageRankHeadAwardList', + inviteRechageRankBelowData: ipConfig.api_app + '/activity/inviteRechageRankBelowData', + inviteRechageRankBelowList: ipConfig.api_app + '/activity/inviteRechageRankBelowList', + inviteRechageRankHeadAwardReceive: ipConfig.api_app + '/activity/inviteRechageRankHeadAwardReceive', + getSpinBigAward: ipConfig.api_app + '/activity/getSpinBigAward', + inviteRechageRankHistroyData: ipConfig.api_app + '/activity/inviteRechageRankHistroyData', + getSpinResult: ipConfig.api_app + '/activity/invite/lottery', + getLotteryRecord: ipConfig.api_app + '/activity/invite/lotteryRecord/', + getActivity: ipConfig.api_app + '/activity/invite/joinAct', // 参与活动 + getPrize: ipConfig.api_app + '/activity/invite/getPrize', + getJoinAct: ipConfig.api_app + '/activity/invite/getJoinAct', + exchange2Tg: ipConfig.api_app + '/unioncode/check', + getTypeDetail: ipConfig.api_app + '/activity/getByType/', + checkRechargeAct: ipConfig.api_app + '/activity/recharge/checkAct', + createRecharge: ipConfig.api_app + '/activity/recharge/createRecharge', + getBonusAmount: ipConfig.api_app + '/activity/recharge/getAmount/', + checkRedeposit: ipConfig.api_app + '/activity/recharge/lottery/checkAct', + getRepositLottery: ipConfig.api_app + '/activity/recharge/lottery/lottery/', + getSpinRecord: ipConfig.api_app + '/activity/recharge/lottery/record', + getLotteryMsg: ipConfig.api_app + '/activity/recharge/lottery/rollMsg', +} +export const getLotteryMsgApi = () => { + return httpRequest.post({ + url: api.getLotteryMsg, + data: {} + }) +} +export const getSpinRecordApi = () => { + return httpRequest.post({ + url: api.getSpinRecord, + data: {} + }) +} +export const checkRedepositApi = () => { + return httpRequest.post({ + url: api.checkRedeposit, + data: {} + }) +} +export const getRepositLotteryApi = (params) => { + return httpRequest.post({ + url: api.getRepositLottery + params.id, + data: {} + }) +} +export const createRechargeApi = (params) => { + return httpRequest.post({ + url: api.createRecharge, + data: params + }) +} +export const getBonusAmountApi = (params) => { + return httpRequest.post({ + url: api.getBonusAmount + params.id, + data: {} + }) +} +export const checkRechargeActApi = (params) => { + return httpRequest.post({ + url: api.checkRechargeAct, + data: params + }) +} +export const getTypeDetailApi = (params) => { + return httpRequest.post({ + url: api.getTypeDetail + params.type, + }) +} +export const getPrizeByTgApi = (params) => { + return httpRequest.post({ + url: api.exchange2Tg + '/' + params.code, + }) +} +/** + * 领取现金 + * @param {*} params + * @returns + */ +export const getPrizeApi = (params) => { + return httpRequest.post({ + url: api.getPrize, + data: params + }) +} +/** + * 获取活动信息 + * @param {*} params + * @returns + */ +export const getJoinActApi = (params) => { + return httpRequest.post({ + url: api.getJoinAct, + data: params + }) +} +/** + * 获取奖励 + * @param {*} params + * @returns + */ +export const getPrizeListApi = (params) => { + return httpRequest.post({ + url: api.getPrizeList, + data: params + }) +} +/** + * 参与活动 + * @param {*} params + * @returns + */ +export const getActivity = (params) => { + return httpRequest.post({ + url: api.getActivity, + data: params + }) +} +/** + * 抽奖记录 + * @param {*} params + * @returns + */ +export const getLotteryRecord = (params) => { + const { id, page, size } = params + return httpRequest.post({ + url: api.getLotteryRecord + id + '?page=' + page + '&size=' + size, + }) +} +/** + * 转盘列表 + */ +export const getSpinList = (params) => { + return httpRequest.post({ + url: api.getSpinList, + data: params + }) +} +/** + * 转盘结果 + */ +export const getSpinResult = (params) => { + return httpRequest.post({ + url: api.getSpinResult, + data: params + }) +} +/** + * 邀请活动历史 + */ +export const getInviteRechageRankHistroyData = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankHistroyData, + data: params + }) +} + + +/** + * 转盘大奖 + */ +export const getSpinBigAward = (params) => { + return httpRequest.post({ + url: api.getSpinBigAward, + data: params + }) +} + +/** + * 获取活动列表 + */ +export const getPromoListApi = (params) => { + return httpRequest.post({ + url: api.getPromoListUrl, + data: params + }) +} + + +/** + * 兑换 + */ +export const exchangeApi = (params) => { + return httpRequest.post({ + url: api.exchangeUrl, + data: params + }) +} + +/** + * 获取排行榜数据 + */ +export const getBetRankDataApi = (params) => { + return httpRequest.post({ + url: api.getBetRankDataUrl, + data: params + }) +} + +/** + * 获取签到数据 + */ +export const getSigninInfoApi = (params) => { + return httpRequest.post({ + url: api.getSigninInfoUrl, + data: params + }) +} + + +/** + * 获取签到数据 + */ +export const recvRewardUrlApi = (params) => { + return httpRequest.post({ + url: api.recvRewardUrl, + data: params + }) +} + +/** + * jili活动code + */ +export const requestCanGiftCode = (params) => { + return httpRequest.post({ + url: api.canGiftCode, + data: params + }) +} + +/** + * 注册活动 + */ +export const requestRegisterActivityData = (params) => { + return httpRequest.post({ + url: api.registerActivityData, + data: params + }) +} + +/** + * 注册活动领取 + */ +export const requestRegisterActivityReward = (params) => { + return httpRequest.post({ + url: api.registerActivityReward, + data: params + }) +} + +/** + * 获取邀请充值排行榜数据 + */ +export const requestInviteRechageRankData = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankData, + data: params + }) +} + +/** + * 获取邀请充值排行榜人头奖记录 + */ +export const requestInviteRechageRankHeadAwardList = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankHeadAwardList, + data: params + }) +} + +/** + * 获取邀请充值排行榜下级数据 + */ +export const requestInviteRechageRankBelowData = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankBelowData, + data: params + }) +} + + +/** + * 获取邀请充值排行榜下级数据 + */ +export const requestInviteRechageRankBelowList = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankBelowList, + data: params + }) +} + + +/** + * 获取邀请充值排行榜下级数据 + */ +export const requestInviteRechageRankHeadAwardReceive = (params) => { + return httpRequest.post({ + url: api.inviteRechageRankHeadAwardReceive, + data: params + }) +} + +/** + * 获取转盘结果 + */ +export const requestGetSpinReward = (params) => { + return httpRequest.post({ + url: ipConfig.api_app + '/activity/getSpinReward', + data: params + }) +} + +/** + * 获取转盘结果记录 + */ +export const requestGetSpinRewardLog = (params) => { + return httpRequest.post({ + url: ipConfig.api_app + '/activity/getSpinAwardLog', + data: params + }) +} + +/** + * 获取转盘剩余次数 + */ +export const requestGetSpinActivityData = (params) => { + return httpRequest.post({ + url: ipConfig.api_app + '/activity/getSpinActivityData', + data: params + }) +} + +/** + * 获取转盘领奖 + */ +export const requestClaimSpinAward = (params) => { + return httpRequest.post({ + url: ipConfig.api_app + '/activity/claimSpinAward', + data: params + }) +} diff --git a/src/api/sms.js b/src/api/sms.js new file mode 100644 index 0000000..e69de29 diff --git a/src/api/user.js b/src/api/user.js new file mode 100644 index 0000000..5046a98 --- /dev/null +++ b/src/api/user.js @@ -0,0 +1,36 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getUserInfo: ipConfig.api_app + '/user/getUserInfo', + reportOnline: ipConfig.api_app+ '/user/reportOnline', + userAdid: ipConfig.api_app + '/user/adid' +} + +/** + * 登录获取用户信息 + */ +export const requestUserInfo = (params) => { + return httpRequest.post({ + url: api.getUserInfo, + data: params + }) +} + +/** + * 上报在线 { placeId } 大厅:1 游戏内:gameid + */ +export const requestReportOnline = (params) => { + return httpRequest.post({ + url: api.reportOnline, + data: params + }) +} + +// adid +export const requestUserAdid = (params) => { + return httpRequest.post({ + url: api.userAdid, + data: params + }) +} diff --git a/src/api/vip.js b/src/api/vip.js new file mode 100644 index 0000000..d88db3d --- /dev/null +++ b/src/api/vip.js @@ -0,0 +1,16 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + VipInfo: ipConfig.api_app + '/vip/getVipInfo', +} + +/** + * 获取重置按钮状态 + */ +export const getVipInfo = (params) => { + return httpRequest.post({ + url: api.VipInfo, + data: params + }) +} diff --git a/src/api/withdraw.js b/src/api/withdraw.js new file mode 100644 index 0000000..71ef273 --- /dev/null +++ b/src/api/withdraw.js @@ -0,0 +1,62 @@ +import httpRequest from '@/module/request/http-request.js' +import ipConfig from '@/config/ip.config.js' + +const api = { + getWithdrawInfoUrl: ipConfig.api_app + '/withdraw/getWithdrawInfo', + getIsSetWithdrawalPasswordUrl: ipConfig.api_app + '/withdraw/hasSetPwd', + createWithdrawOrderUrl: ipConfig.api_app + '/withdraw/createWithdrawOrder', + getWithdrawContentUrl: ipConfig.api_app + '/withdraw/getWithdrawContent', + getWithdrawListUrl: ipConfig.api_app + '/withdraw/list' +} + +/** + * 获取提现页面信息 + */ + +export const getWithdrawInfoApi = (params) => { + return httpRequest.post({ + url: api.getWithdrawInfoUrl, + data: params + }) +} + +/** + * 获取用户是否设置提现密码 + */ + +export const getIsSetWithdrawalPasswordApi = (params) => { + return httpRequest.post({ + url: api.getIsSetWithdrawalPasswordUrl, + data: params + }) +} + + +/** + * 创建提现订单 + */ + +export const createWithdrawOrderApi = (params) => { + return httpRequest.post({ + url: api.createWithdrawOrderUrl, + data: params + }) +} +/** + * 提现前 界面详情 + */ +export const getWithdrawContentApi = (params) => { + return httpRequest.post({ + url: api.getWithdrawContentUrl, + data: params + }) +} +/** + * 获取提现列表 + */ +export const getWithdrawListApi = (params) => { + return httpRequest.post({ + url: api.getWithdrawListUrl, + data: params + }) +} \ No newline at end of file diff --git a/src/components/LoginHeader/LoginHeader.vue b/src/components/LoginHeader/LoginHeader.vue new file mode 100644 index 0000000..fb2cfca --- /dev/null +++ b/src/components/LoginHeader/LoginHeader.vue @@ -0,0 +1,114 @@ + + + + + diff --git a/src/components/LotteryWheel/LotteryWheel.vue b/src/components/LotteryWheel/LotteryWheel.vue new file mode 100644 index 0000000..d54093c --- /dev/null +++ b/src/components/LotteryWheel/LotteryWheel.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/src/components/LotteryWheel/components/RoundTurntable.vue b/src/components/LotteryWheel/components/RoundTurntable.vue new file mode 100644 index 0000000..9dba692 --- /dev/null +++ b/src/components/LotteryWheel/components/RoundTurntable.vue @@ -0,0 +1,150 @@ + + + + + + \ No newline at end of file diff --git a/src/components/badge/BadgeTR.vue b/src/components/badge/BadgeTR.vue new file mode 100644 index 0000000..f0a1b7d --- /dev/null +++ b/src/components/badge/BadgeTR.vue @@ -0,0 +1,38 @@ + \ No newline at end of file diff --git a/src/components/common/CardSlider.vue b/src/components/common/CardSlider.vue new file mode 100644 index 0000000..479d0bf --- /dev/null +++ b/src/components/common/CardSlider.vue @@ -0,0 +1,330 @@ + + + + + \ No newline at end of file diff --git a/src/components/custom-tab-bar/CustomTabBar.vue b/src/components/custom-tab-bar/CustomTabBar.vue new file mode 100644 index 0000000..e89f2c8 --- /dev/null +++ b/src/components/custom-tab-bar/CustomTabBar.vue @@ -0,0 +1,246 @@ + + + + + \ No newline at end of file diff --git a/src/components/emptyHold/EmptyHold.vue b/src/components/emptyHold/EmptyHold.vue new file mode 100644 index 0000000..b00d34d --- /dev/null +++ b/src/components/emptyHold/EmptyHold.vue @@ -0,0 +1,22 @@ + + \ No newline at end of file diff --git a/src/components/footer/MobileFooter.vue b/src/components/footer/MobileFooter.vue new file mode 100644 index 0000000..6150428 --- /dev/null +++ b/src/components/footer/MobileFooter.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/src/components/footer/PcFooter.vue b/src/components/footer/PcFooter.vue new file mode 100644 index 0000000..3828c06 --- /dev/null +++ b/src/components/footer/PcFooter.vue @@ -0,0 +1,21 @@ + + + + + \ No newline at end of file diff --git a/src/components/header/MobileGameHeader.vue b/src/components/header/MobileGameHeader.vue new file mode 100644 index 0000000..933ef2a --- /dev/null +++ b/src/components/header/MobileGameHeader.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/src/components/header/MobileHeader.vue b/src/components/header/MobileHeader.vue new file mode 100644 index 0000000..f08366d --- /dev/null +++ b/src/components/header/MobileHeader.vue @@ -0,0 +1,94 @@ + + + + + \ No newline at end of file diff --git a/src/components/header/MobileSubHeader.vue b/src/components/header/MobileSubHeader.vue new file mode 100644 index 0000000..87950e8 --- /dev/null +++ b/src/components/header/MobileSubHeader.vue @@ -0,0 +1,101 @@ + + + + + \ No newline at end of file diff --git a/src/components/header/PcHeader.vue b/src/components/header/PcHeader.vue new file mode 100644 index 0000000..73768fc --- /dev/null +++ b/src/components/header/PcHeader.vue @@ -0,0 +1,65 @@ + + + + + \ No newline at end of file diff --git a/src/components/header/TransparentHeader.vue b/src/components/header/TransparentHeader.vue new file mode 100644 index 0000000..bc0ded4 --- /dev/null +++ b/src/components/header/TransparentHeader.vue @@ -0,0 +1,95 @@ + + + + + \ No newline at end of file diff --git a/src/components/image/ThemeImage.vue b/src/components/image/ThemeImage.vue new file mode 100644 index 0000000..49698fd --- /dev/null +++ b/src/components/image/ThemeImage.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/input/MoneyInput.vue b/src/components/input/MoneyInput.vue new file mode 100644 index 0000000..0150811 --- /dev/null +++ b/src/components/input/MoneyInput.vue @@ -0,0 +1,112 @@ + + + + + \ No newline at end of file diff --git a/src/components/input/NormalInput.vue b/src/components/input/NormalInput.vue new file mode 100644 index 0000000..6791280 --- /dev/null +++ b/src/components/input/NormalInput.vue @@ -0,0 +1,105 @@ + + + + + \ No newline at end of file diff --git a/src/components/input/SearchInput.vue b/src/components/input/SearchInput.vue new file mode 100644 index 0000000..59a36cf --- /dev/null +++ b/src/components/input/SearchInput.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/components/layout/CommonLayout.vue b/src/components/layout/CommonLayout.vue new file mode 100644 index 0000000..9bf8d60 --- /dev/null +++ b/src/components/layout/CommonLayout.vue @@ -0,0 +1,161 @@ + + + + + + + diff --git a/src/components/layout/MainLayout.vue b/src/components/layout/MainLayout.vue new file mode 100644 index 0000000..168197a --- /dev/null +++ b/src/components/layout/MainLayout.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/src/components/layout/MobileCustomLayout.vue b/src/components/layout/MobileCustomLayout.vue new file mode 100644 index 0000000..ffcc74b --- /dev/null +++ b/src/components/layout/MobileCustomLayout.vue @@ -0,0 +1,33 @@ + + \ No newline at end of file diff --git a/src/components/layout/MobileLayout.vue b/src/components/layout/MobileLayout.vue new file mode 100644 index 0000000..168197a --- /dev/null +++ b/src/components/layout/MobileLayout.vue @@ -0,0 +1,40 @@ + + + + + \ No newline at end of file diff --git a/src/components/layout/MobileSubLayout.vue b/src/components/layout/MobileSubLayout.vue new file mode 100644 index 0000000..66f1724 --- /dev/null +++ b/src/components/layout/MobileSubLayout.vue @@ -0,0 +1,49 @@ + + + + + \ No newline at end of file diff --git a/src/components/list/RewardsList.vue b/src/components/list/RewardsList.vue new file mode 100644 index 0000000..bce73ea --- /dev/null +++ b/src/components/list/RewardsList.vue @@ -0,0 +1,83 @@ + + + + + \ No newline at end of file diff --git a/src/components/loading/StartLoading.vue b/src/components/loading/StartLoading.vue new file mode 100644 index 0000000..26cd1b1 --- /dev/null +++ b/src/components/loading/StartLoading.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/components/menu/SideMenu.vue b/src/components/menu/SideMenu.vue new file mode 100644 index 0000000..a77eda5 --- /dev/null +++ b/src/components/menu/SideMenu.vue @@ -0,0 +1,76 @@ + + + + + + + diff --git a/src/components/nodata/NoDataSearch.vue b/src/components/nodata/NoDataSearch.vue new file mode 100644 index 0000000..bd6fb7b --- /dev/null +++ b/src/components/nodata/NoDataSearch.vue @@ -0,0 +1,51 @@ + + + + + \ No newline at end of file diff --git a/src/components/pageable/Pageable.vue b/src/components/pageable/Pageable.vue new file mode 100644 index 0000000..cea12b0 --- /dev/null +++ b/src/components/pageable/Pageable.vue @@ -0,0 +1,77 @@ + + + + + \ No newline at end of file diff --git a/src/components/popup/BindPhonePop.vue b/src/components/popup/BindPhonePop.vue new file mode 100644 index 0000000..6b00c1e --- /dev/null +++ b/src/components/popup/BindPhonePop.vue @@ -0,0 +1,300 @@ + + + \ No newline at end of file diff --git a/src/components/popup/BindPromoPop.vue b/src/components/popup/BindPromoPop.vue new file mode 100644 index 0000000..775f713 --- /dev/null +++ b/src/components/popup/BindPromoPop.vue @@ -0,0 +1,68 @@ + + + \ No newline at end of file diff --git a/src/components/popup/ConDepositPop.vue b/src/components/popup/ConDepositPop.vue new file mode 100644 index 0000000..5c6e702 --- /dev/null +++ b/src/components/popup/ConDepositPop.vue @@ -0,0 +1,279 @@ + + + \ No newline at end of file diff --git a/src/components/popup/ConfirmPopup.vue b/src/components/popup/ConfirmPopup.vue new file mode 100644 index 0000000..3fc2769 --- /dev/null +++ b/src/components/popup/ConfirmPopup.vue @@ -0,0 +1,124 @@ + + + + + \ No newline at end of file diff --git a/src/components/popup/Congratulation.vue b/src/components/popup/Congratulation.vue new file mode 100644 index 0000000..e40656b --- /dev/null +++ b/src/components/popup/Congratulation.vue @@ -0,0 +1,131 @@ + + + + \ No newline at end of file diff --git a/src/components/popup/DepositBonus.vue b/src/components/popup/DepositBonus.vue new file mode 100644 index 0000000..d3e6d2d --- /dev/null +++ b/src/components/popup/DepositBonus.vue @@ -0,0 +1,320 @@ + + + \ No newline at end of file diff --git a/src/components/popup/Download.vue b/src/components/popup/Download.vue new file mode 100644 index 0000000..67fdbc0 --- /dev/null +++ b/src/components/popup/Download.vue @@ -0,0 +1,96 @@ + + + \ No newline at end of file diff --git a/src/components/popup/FirstRechargePop.vue b/src/components/popup/FirstRechargePop.vue new file mode 100644 index 0000000..a9ab5a4 --- /dev/null +++ b/src/components/popup/FirstRechargePop.vue @@ -0,0 +1,224 @@ + + + \ No newline at end of file diff --git a/src/components/popup/NormalPopup.vue b/src/components/popup/NormalPopup.vue new file mode 100644 index 0000000..21dd85c --- /dev/null +++ b/src/components/popup/NormalPopup.vue @@ -0,0 +1,68 @@ + + + + + + + \ No newline at end of file diff --git a/src/components/popup/NormalPopupView.vue b/src/components/popup/NormalPopupView.vue new file mode 100644 index 0000000..53e58d2 --- /dev/null +++ b/src/components/popup/NormalPopupView.vue @@ -0,0 +1,89 @@ + + + + + \ No newline at end of file diff --git a/src/components/popup/RankHisPop.vue b/src/components/popup/RankHisPop.vue new file mode 100644 index 0000000..2c47fcf --- /dev/null +++ b/src/components/popup/RankHisPop.vue @@ -0,0 +1,266 @@ + + + \ No newline at end of file diff --git a/src/components/popup/RankRewardPop.vue b/src/components/popup/RankRewardPop.vue new file mode 100644 index 0000000..31716ff --- /dev/null +++ b/src/components/popup/RankRewardPop.vue @@ -0,0 +1,252 @@ + + + \ No newline at end of file diff --git a/src/components/popup/TipsPopup.vue b/src/components/popup/TipsPopup.vue new file mode 100644 index 0000000..35b0fa6 --- /dev/null +++ b/src/components/popup/TipsPopup.vue @@ -0,0 +1,104 @@ + + + + + \ No newline at end of file diff --git a/src/components/popup/WheelPop.vue b/src/components/popup/WheelPop.vue new file mode 100644 index 0000000..2c3185b --- /dev/null +++ b/src/components/popup/WheelPop.vue @@ -0,0 +1,93 @@ + + + \ No newline at end of file diff --git a/src/components/radio/Radio.vue b/src/components/radio/Radio.vue new file mode 100644 index 0000000..02409e3 --- /dev/null +++ b/src/components/radio/Radio.vue @@ -0,0 +1,8 @@ + + + + + \ No newline at end of file diff --git a/src/components/segment/RoundSegmentControl.vue b/src/components/segment/RoundSegmentControl.vue new file mode 100644 index 0000000..987e0c9 --- /dev/null +++ b/src/components/segment/RoundSegmentControl.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/src/components/segment/SegmentControl.vue b/src/components/segment/SegmentControl.vue new file mode 100644 index 0000000..101e867 --- /dev/null +++ b/src/components/segment/SegmentControl.vue @@ -0,0 +1,123 @@ + + + + + \ No newline at end of file diff --git a/src/components/siderbar/PcSiderBar.vue b/src/components/siderbar/PcSiderBar.vue new file mode 100644 index 0000000..cfac032 --- /dev/null +++ b/src/components/siderbar/PcSiderBar.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/components/tabs/NormalTabs.vue b/src/components/tabs/NormalTabs.vue new file mode 100644 index 0000000..05a55c0 --- /dev/null +++ b/src/components/tabs/NormalTabs.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/src/components/tabs/NormalTabsItem.vue b/src/components/tabs/NormalTabsItem.vue new file mode 100644 index 0000000..e837622 --- /dev/null +++ b/src/components/tabs/NormalTabsItem.vue @@ -0,0 +1,118 @@ + + + + + \ No newline at end of file diff --git a/src/components/tabs/SmallTabsItem.vue b/src/components/tabs/SmallTabsItem.vue new file mode 100644 index 0000000..32fd4f9 --- /dev/null +++ b/src/components/tabs/SmallTabsItem.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/src/components/vipSign/VipSign.vue b/src/components/vipSign/VipSign.vue new file mode 100644 index 0000000..dc1fc5f --- /dev/null +++ b/src/components/vipSign/VipSign.vue @@ -0,0 +1,42 @@ + + + \ No newline at end of file diff --git a/src/config/global.config.js b/src/config/global.config.js new file mode 100644 index 0000000..df6e31f --- /dev/null +++ b/src/config/global.config.js @@ -0,0 +1,19 @@ +const arr = ['https://img0.sp77.in/frontimg','https://img1.sp77.in/frontimg', 'https://img2.sp77.in/frontimg', 'https://img3.sp77.in/frontimg'] +const config = { + appName: import.meta.env.VITE_APP_NAME, + appVersion: '1.0.0', + appId: process.env.APP_ID || import.meta.env.VITE_APP_ID || 101, + appDescription: '', + appDownloadUrl: import.meta.env.VITE_APP_DOWNLOAD_URL, + // appImagePrefix: 'https://storage.googleapis.com/baowang-static/h5-images/v2/' + process.env.APP_THEME, + // appImageStartPrefix: 'https://storage.googleapis.com/baowang-static/h5-images/app/' + process.env.APP_ID, + // appImagePrefix: import.meta.env.VITE_APP_IMAGE_URL + '/images/' + (import.meta.env.VITE_APP_THEME || 'red'), + appImagePrefix: () => { + return arr[Math.floor(Math.random() * arr.length)] + '/images/' + (import.meta.env.VITE_APP_THEME || 'red') + }, + canvasImage: import.meta.env.VITE_APP_IMAGE_URL + '/images/' + (import.meta.env.VITE_APP_THEME || 'red'), + appImageStartPrefix: import.meta.env.VITE_APP_IMAGE_URL + '/images/' + (process.env.APP_ID || import.meta.env.VITE_APP_ID || 101), + defaultUrl: import.meta.env.VITE_APP_IMAGE_URL +} + +export default config diff --git a/src/config/ip.config.js b/src/config/ip.config.js new file mode 100644 index 0000000..6409956 --- /dev/null +++ b/src/config/ip.config.js @@ -0,0 +1,8 @@ + +// import globalConfig from '@/config/global.config.js' + +const ipConfig = { + api_app: import.meta.env.VITE_APP_BASE_URL +} + +export default ipConfig diff --git a/src/locales/index.js b/src/locales/index.js new file mode 100644 index 0000000..3727299 --- /dev/null +++ b/src/locales/index.js @@ -0,0 +1,27 @@ +import { createI18n } from 'vue-i18n' +import { useAppStore } from '@/store/useAppStore.js' + +import enUS from './lang/en-US.js' +import zhCN from './lang/zh-CN.js' +import jaJP from './lang/ja-JP.js' +import indIND from "./lang/ind-IND/" + +const messages = { + 'en': enUS, + 'zh': zhCN, + 'ja': jaJP, + 'ind': indIND +} + +const i18n = createI18n({ + locale: uni.getStorageSync('LANGUAGE_STORE_KEY') || process.env.APP_LOCALE || 'en', + legacy: false, + globalInjection: true, + messages: messages +}) + +export const setupLocales = (app) => { + app.use(i18n) +} + +export default i18n diff --git a/src/locales/lang/en-US.js b/src/locales/lang/en-US.js new file mode 100644 index 0000000..674dd78 --- /dev/null +++ b/src/locales/lang/en-US.js @@ -0,0 +1,27 @@ +import app from './en-US/app.js' +import login from './en-US/login.js' +import constants from './en-US/constants.js' +import home from './en-US/home.js' +import mail from './en-US/mail.js' +import deposit from './en-US/deposit.js' +import withdraw from './en-US/withdraw.js' +import earn from './en-US/earn.js'; +import vip from './en-US/vip.js'; +import promo from './en-US/promo.js'; +import search from './en-US/search.js'; +import redeposit from './en-US/redeposit.js' + +export default { + ...app, + ...login, + ...constants, + ...home, + ...mail, + ...deposit, + ...withdraw, + ...earn, + ...vip, + ...promo, + ...search, + ...redeposit +} \ No newline at end of file diff --git a/src/locales/lang/en-US/app.js b/src/locales/lang/en-US/app.js new file mode 100644 index 0000000..6c3dd1f --- /dev/null +++ b/src/locales/lang/en-US/app.js @@ -0,0 +1,67 @@ +export default { + app: { + language: 'Language', + languageChange: 'Change Language', + notification: 'Notification', + english: 'English', + chinese: 'Chinese', + tabbar: { + home: 'HOME', + promo: 'PROMO', + vip: 'VIP', + earnMoney: 'EARN', + account: 'ACCOUNT' + }, + popup: { + confirm: 'Confirm', + cancel: 'Cancel', + tips: 'Tips' + } + }, + 'pages/home/Home': 'Home', + 'pages/Login/Login': 'Login', + 'pages/Login/Register': 'Register', + 'pages/promo/Promo': 'Promo', + 'pages/vip/Vip': 'Vip', + 'pages/earn/Earn': 'Earn Money', + 'pages/account/Account': 'Account', + 'pages/mail/Mail': 'Mail', + 'pages/search/Search': 'Search', + 'pages/search/SearchResult': 'Search Result', + 'pages/wallet/Deposit': 'Deposit', + 'pages/wallet/DepositHistory': 'Deposit History', + 'pages/wallet/DepositOrderDetail': 'Order Detail', + 'pages/wallet/DepositUpiDetail': 'UPI', + 'pages/wallet/DepositImpsDetail': 'IMPS', + 'pages/wallet/Withdraw': 'Withdraw', + 'pages/wallet/WithdrawHistory': 'Withdraw History', + 'pages/wallet/TransferInstructions': 'Transfer Instructions', + 'pages/webview/GameWeb': 'Game', + 'pages/account/Profile/Profile': 'Profile', + 'pages/account/components/EditProfile/EditProfile': 'Edit Profile', + 'pages/account/Language': 'Language', + + + 'pages/account/BalanceRecords/BalanceRecords': 'Balance Records', + 'pages/account/GameRecords/GameRecords': 'Game Records', + 'pages/account/BankCard/BankCard': 'Withdraw Account', + 'pages/account/BankCard/BankCardList': 'Withdraw Account', + 'pages/account/PhoneBinding/PhoneBinding': 'Phone Binding', + 'pages/account/WithdrawalPassword/WithdrawalPassword': 'Withdraw Password', + 'pages/account/FeedBack/FeedBack': 'Feedback', + 'pages/account/FAQ/FAQ': 'FAQ', + 'pages/account/FAQInfo/FAQInfo': 'FAQ Info', + 'pages/promo/FirstDeposit/FirstDeposit': 'First Deposit', + 'pages/promo/Ranking/Ranking': 'Ranking', + 'pages/promo/RebatePromo/RebatePromo': 'Rebate Promo', + 'pages/promo/CashbackRecord/CashbackRecord': 'Cashback Record', + 'pages/promo/Signin/Signin': 'Signin', + 'pages/promo/SignupBonus': 'Sign-up Bonus', + 'pages/promo/InvitationalRanks': 'Invitational Ranks', + 'pages/promo/Jili': 'Jili', + 'pages/wallet/WithdrawWait': "Withdraw", + 'pages/Login/LoginV2': "Login", + 'pages/Login/Register': "Register", + "pages/Login/ForgetPassword": "Forget Password", + 'pages/activity/Activity': 'Activity', +} \ No newline at end of file diff --git a/src/locales/lang/en-US/constants.js b/src/locales/lang/en-US/constants.js new file mode 100644 index 0000000..3ce4295 --- /dev/null +++ b/src/locales/lang/en-US/constants.js @@ -0,0 +1,188 @@ +export default { + account: { + header: { + bankCardTitle: "Account", + faqTitle: "FAQ", + balanceRecordsTitle: "Balance Records", + feedbackTitle: "Feedback", + withdrawalPasswordTitle: "Set withdrawal password", + gameRecordsTitle: 'Game Records', + phoneBindingTitle: "Binding", + withdrawalBankTitle: "Withdraw Account" + }, + bindPhone: { + title: 'Bind Phone No.', + placeholder: 'Enter your phone no.', + send: 'Send', + verifyPlaceholder: 'Enter the received verification code', + bindTip: 'To ensure the security of your funds, please link your mobile number.', + confirm: 'Confirm', + binded: 'You have already binded this phone number!' + }, + button: { + save: "Save", + submit: "submit", + switchAccount: "SWITCH ACCOUNT", + confirm: "Confirm", + otp: "OTP", + confirmCapital: "CONFIRM" + }, + toast: { + copySuccess: "Copied successfully", + loading: "Loading。。。。" + }, + noData: { + text: "you have no balance records during this period." + }, + config: { + deposit: "Deposit", + withdraw: "Withdraw", + balanceRecords: "Balance Records", + gameRecords: "Game Records", + firstTitle: 'Profile & Security', + helpTitle: "Help & Setting", + profile: "Profile", + phoneBinding: "Phone Binding", + bankCard: "Withdraw Account", + withdrawPassword: "Withdraw password", + faq: "FAQ", + feedback: "Feedback", + version: "Version", + gift: 'Gifts', + service: 'Service' + }, + profileItem: { + id: "ID", + avatar: "Avatar", + nickname: "Nickname", + phoneNumber: "Phonenumber", + birthday: "Birthday", + eamil: "Email", + whatsApp: "WhatsApp", + facebook: "Facebook", + telegram: "Telegram", + twitter: "Twitter", + setUp: 'set up' + }, + balanceRecordsStatus: { + all: "All", + bet: "Bet", + deposit: "Deposit", + withdrawal: "Withdrawal", + win: "Win", + giftMoney: "Gift money", + vipBonus: "VIP Bonus", + dailyRebate: "Daily Rebate", + depositBonus: "Deposit Bonus", + dailyBonus: "Daily Bonus" + }, + month: { + January: "January", + February: "February", + March: "March", + April: "April", + May: "May", + June: "June", + July: "July", + August: "August", + September: "September", + October: "October", + November: "November", + December: "December" + }, + + bankCard: { + placeholder: { + accountName: "Please enter account holder name", + accountNumber: "Please enter Account Number", + accountIfsc: "Please enter IFSC", + }, + tips: { + title: "Tips", + text: "cards", + tipsMain: "will not be supported for cash withdrawals Please confirm your withdraw account information carefully to avoid withdrawal errors.", + ifscTips: "IFSC fifth digit must be 0", + accountName: "Please enter correct account holder name", + accountNumber: "Please enter correct account number", + }, + button: { + submit: "SAVE & CONTINUE" + }, + labels: { + accountName: "Account Holder Name", + accountNumber: "Account Number", + accountIfsc: "IFSC", + accountType: "Account Type" + }, + text: { + accNo: "Acc No.", + addBankCardText: "Add New Account", + add: "Add", + edit: "Edit", + delAccount: "Delete Account" + } + }, + balanceRecords: { + searchFormTitle: "Verification Sent" + }, + feedBack: { + label: { + yourId: "Your ID", + phoneNumber: "Phone number", + email: "Email", + suggestion: "Suggestion", + emailPlaceholder: "Enter Your Email.", + phonePlaceholder: "Enter Your Phone.", + suggestionPlaceholder: "Your opinion is very important to us, we will listen toall suggestions, and as long as your suggestions are effective, you will receive a cashreward!", + }, + screen: { + game: "Game", + deposit: "Deposit", + withdraw: "Withdraw", + vip: "Vip", + invite: "Invite", + account: "Account", + other: "Other", + }, + upto: "Up to", + bonus: 'bonus' + + }, + withdrawalPassword: { + label: { + password: "Please set your withdraw password", + repeatPassword: "Repeat withdraw password", + phone: "Please enter your bind phone number", + otpPlaceholder: "6-digit OTP" + }, + toast: { + phone: "The phone number cannot be empty", + withdrawPasswd: "The withdraw passwd cannot be empty", + withdrawPasswdRepeat: "Two passwords do not match", + verificationCode: "The verification code cannot be empty", + }, + }, + gameRecords: { + status: { + all: "All Status", + settled: "Settled", + unsettled: "Unsettled", + cancel: "Cancel" + }, + time: { + today: "Today", + yesterday: "Yesterday", + lastDay: "last 3 days" + }, + betId: "Bet id", + vaildBet: "Vaild Bet", + wl: "W/L", + }, + phoneBinding: { + toast: { + phone: "The phone number cannot be empty" + } + } + }, + +} \ No newline at end of file diff --git a/src/locales/lang/en-US/deposit.js b/src/locales/lang/en-US/deposit.js new file mode 100644 index 0000000..1672da7 --- /dev/null +++ b/src/locales/lang/en-US/deposit.js @@ -0,0 +1,131 @@ +export default { + deposit: { + title: 'Deposit', + title2: 'Order Detail', + title3: 'Deposit History', + title4: 'UPI', + title5: 'IMPS', + titleSelfUtr: 'Self-service UTR', + onlinePayment: 'E-wallet', + transferDeposit: 'Transfer Deposit', + crypto: 'Crypto', + paymentMethods: 'Payment Methods', + depositChannel: 'Deposit Channel', + depositEvent: 'Deposit Event', + bonus: 'Bonus', + depositAmount: 'Deposit Amount', + depositTips: 'Deposit Tips', + agencyDeposit: 'Agency Deposit', + channel: 'Channel', + depositService: 'Deposit Service', + cryptoCurrency: 'Crypto Currency', + getAmount: 'Get Amount', + online: 'Online', + supportAmount: 'Support Amount', + onlineTime: 'Online Time', + total: 'Total', + orderId: 'OrderId', + depositType: 'Deposit Type', + creationTime: 'Creation Time', + arrivalTime: 'Arrival Time', + orderNo: 'Order No', + transferAmount: 'Transfer Amount', + utr: 'UTR', + bankAccountInfo: 'Bank Account Info', + accountHolderName: 'Account Holder Name', + bankName: 'Bank Name', + IFSCCode: 'IFSC Code', + accountNo: 'Account No', + remark: 'Remark', + transferInstructions: 'Transfer instructions', + name: 'Name', + upi: 'UPI', + orderConfirmation: 'Order Confirmation', + howtouse: 'How to use?', + history: 'History', + tab: { + bank: 'Bank Payment', + wallet: 'Wallet Payment', + crypto: 'Crypto' + }, + button: { + depositNow: 'Deposit Now', + confirm: 'Confirm', + transferCompleted: 'Transfer Completed', + copy: 'Copy', + gotoDepositHistory: 'Go to Deposit History', + selfUtrCheck: 'Self-service order only' + }, + + status: { + succeeded: 'Succeeded', + success: 'Success', + pending: 'Pending' + }, + payType: { + bank: 'Bank Payment', + wallet: 'Wallet Payment' + }, + tabs: { + tab1: 'Today', + tab2: '7 Days', + tab3: '30 Days' + }, + + message: { + nodata: 'No record!', + tips1: '1、Each deposit will be credited within 1-5 minutes.', + tips2: '2、You can contact customer service at any timeto resolve deposit issues.', + tips3: 'After participating in this event, you will need 3 times the stake required to withdraw money', + tips4: '7*24 Online Customer Service > ', + tips5: 'If you have any deposit problem, you can contact us', + tips6: 'Your deposit order has been submitted successfully and will arrive within 1-5 minutes. Please wait patiently..', + tips7: 'You can alse check the results in the deposit history or contact customer service.', + + tipsUtr1: 'Self-service UTR', + tipsUtr2: 'up to 30% bonus', + tipsUtr3: 'Upload your UTR and we will confrm your order', + tipsUtr4: 'This order has applied for self-service', + tipsUtr5: 'Details', + + history1: 'This order will be processed within 2-24 hours', + + tipsDetail1: 'Deposit has not arrived?', + + tipsImps1: 'In order to improve your deposit experience, it is recommended that you', + tipsImps2: 'You can long press the input box to paste the UTR', + tipsImps3: '1、Enter the remark in the Comments field when you make a deposit. lf you do not enter the remark, your payment may not be identified orcredited to your account.', + tipsImps4: '2、You can contact customer service at any time to resolve deposit issues.', + tipsImps5: 'Please enter a 12~sigit UTR', + + popupTip: 'If your transfer amount is inconsistent with the submitted amount, it will not arrive in time. If you have any questions, please contact customer service' + }, + + utrPage: { + text1: 'In order to process your deposit order faster, we provide a self-service entrance.', + text2: 'If your order has not yet arrived, you can directly provide the UTR and payment screenshot.', + title1: 'Self Service Bonus', + title2: 'Operating procedures', + text3: 'Every 6 hours until the UTR and screenshot are successfully submitted, 1% of the deposit amount will be given, up to 30%, and the reward will be issued together with the deposit.', + text4: '1. Find your order in the deposit history and click on the order to enter the details page.', + text5: '2. Click the self-service entrance at the bottom of the details page.', + text6: '3. Upload your UTR and payment screenshot on the web page, We will deal with your problem as soon as possible.', + text7: '4. You can check the processing progress at any time by clicking on the self-service entrance of this order.', + text8: '5. We will notify you of the order processing results via inbox.', + }, + + toast: { + text1: 'Please input deposit amount!', + text2: 'Deposit amount must during', + text3: 'Please input UTR!', + text4: 'Copy Success', + text5: 'You still have', + text6: 'orders being processed. Please try again later.', + }, + + closePopup: { + text: 'Your deposit function has been closed, please contact customer service', + confirm: 'Contact Customer Service' + } + } +} diff --git a/src/locales/lang/en-US/earn.js b/src/locales/lang/en-US/earn.js new file mode 100644 index 0000000..3be4a11 --- /dev/null +++ b/src/locales/lang/en-US/earn.js @@ -0,0 +1,98 @@ +export default { + earn: { + header: { + myRewards: "My rewards", + rules: "Rules" + }, + toast: { + loading: "Loading...." + }, + footer: { + myLink: "MY LINK", + copy: "COPY", + share: "SHARE" + }, + rule: { + cashBonus: "Cash Bonus", + cashBalance: "Cash Balance", + text: "of his bet to your ", + tipOneProblem: "1. How to develop my downline?", + tipOneText: "Download the game through the link you shared, register an account, and participate in any game, you can successfully become a lower-level user and get rewards.", + tipTwoProblem: "2. How to claim my reward?", + tipTwoText: "On the My Reward page, click claim to get the reward, which will be issued in real time.", + tipThreeProblem: "3. How can you make more money?", + tipThreeText: "Develop more downline users and encourage your downline users to develop more downline users. You will get a lot of money every moment!", + + }, + myRewards: { + rewardToday: "Reward Today", + totalRewards: "Total Rewards", + numberOfInviters: "Number of Inviters", + amountAvailable: "Amount available", + data: "Data", + rewards: "Rewards", + claim: "Claim" + }, + "tab1": "Home", + "tab2": "My Reward", + "tab3": "My Teams", + "tab4": "Rules", + home: { + topDes: "Invite friends to participate in the game or participate in distribution, you will get rewards. The bigger your team is, the more rewards you will get.", + myAgentLevel: 'My Agent Level', + level: "Level", + myTeam: "My Team", + today: "Today", + myRebateRatio: "My Rebate Radio", + myDirect: "My Direct", + claim: "Claim", + date: "Date", + reward: "Reward", + userId: "ID", + team: "Team", + direct: "Direct", + allDirect: "All Direct", + placeholder1: "User ID to search", + teamPerformance: "Team performance", + directPerformance: "Direct performance", + item1Des: "Today's team performance", + item2Des: "Today's direct performance", + item3Des: "Reward Total", + item4Des: "Reward Today", + item5Des: "Commissions Avilable", + relation: "Relation", + commission: "Commission", + commissionTable: "Commission Table", + rules: "Rules", + commission1: "1. A's Valid bets * Your Commission Rate.", + commission2: "2. A's Performance *(Your Commission Rate- A's Commission Rate.", + rules1: "1. Share your link with your friends, and you can get commissions after they participate in the game and place bets.", + rules2: "2. The commission for the day will be issued at 1:30 the next day, and you can claim it on my rewards page.", + rules3: "3. The agent level is reset at 0:00 every day, and the commission calculated when issuing rewards is the level before the reset.", + rules4: "4. The commissions for different agent levels are different, please check the commission details for details.", + rules5: "5. The performance is the sum of the valid bets of all subordinates.", + tableTitle1: "Agent Level", + tableTitle2: "Performance range", + tableTitle3: "Commission Rate", + + levelTip1: "1. The agent level is calculated in real time based on the team performance of the day. The rules are shown in the commission table.", + levelTip2: "2. The agent level is reset at 00:00 every day.", + levelTip3: "3. The commission for the day will be calculated based on the commission ratio corresponding to the agent level.", + + teamTodayTip1: "1. My team refers to my subordinates, and my subordinates' subordinates... the total number of all people.", + teamTodayTip2: "2. (Today) means the number of people added to the team today.", + + directTodayTip1: "1. My direct subordinates refer to my direct subordinates", + directTodayTip2: "2. (Today) refers to the number of direct subordinates added today", + + teamPerformanceTip1: "Today's team performance means the total valid bets of all members of the team (excluding yourself) today.", + + directPerformanceTip1: "Today's direct performance means the total valid bets of all direct subordinates in the team today (excluding yourself)", + + rewardTotalTip1: "Rewards total refer to the sum of all distribution rewards, including unclaimed rewards", + + rewardTodayTip1: "Rewards today refer to the total of today's distribution rewards, including unclaimed rewards" + } + } + +} \ No newline at end of file diff --git a/src/locales/lang/en-US/home.js b/src/locales/lang/en-US/home.js new file mode 100644 index 0000000..6c278c1 --- /dev/null +++ b/src/locales/lang/en-US/home.js @@ -0,0 +1,15 @@ +export default { + home: { + allgames: 'All Games', + recent: 'Recent', + favorite: 'Favorite', + withdraw: 'Withdraw', + deposit: 'Deposit', + download: 'Download', + login: 'Login', + register: 'Register', + award: 'Get', + downloadSlogan: 'Download the App and bind your phone', + popTip: 'Don\'t show today again' + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/login.js b/src/locales/lang/en-US/login.js new file mode 100644 index 0000000..8e08b8e --- /dev/null +++ b/src/locales/lang/en-US/login.js @@ -0,0 +1,52 @@ +export default { + login: { + header: { + title: "Login", + text: "Sign in to continue.", + Password: "Password", + OTP: "OTP", + or: "OR", + phone: "Phone", + oneClick: "One Click", + register: "Register", + registerSuccess: "Registration success!", + changePassword: "Change Password", + forgetPassword: "Forget Password" + }, + placeholder: { + phone: "Enter Your Phone Number", + otp: "6-digit OTP", + password: "Password", + passwordLogin: "Phone,ID", + loginOtp: "6-digit OTP" + }, + button: { + submit: "LOGIN", + otp: "OTP", + send: 'SEND', + register: "Register", + forgetPassword: "Forget password?", + share: "Share", + copy: "Copy", + clickSubmit: "SUBMIT" + }, + tips: { + checkText: "I agree all statements in Terms and Conditions", + rgisterTipText: "I certify that l am at least 18 years old and agree to theterms and conditions outlined in the ", + termsAndConditions: "“Terms & Conditions”", + oneClickTips: "Click the button below to quickly register. You can add your mobile phone number, email and password in the personal center.", + changePasswordTipTitle:"Tips:", + changePasswordTipText: "For the security of your data, you need to bind a mobile phone number to set a password" + }, + toast: { + phone: "The phone number cannot be empty", + oth: "The OTP cannot be empty", + idOrPhone: "The phone number or ID cannot be empty", + password: "The Password cannot be empty", + }, + label: { + userId: "Your User ID:", + password: "Your Password:", + } + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/mail.js b/src/locales/lang/en-US/mail.js new file mode 100644 index 0000000..a3f32b5 --- /dev/null +++ b/src/locales/lang/en-US/mail.js @@ -0,0 +1,30 @@ +export default { + mail: { + title: 'InBox', + title2: 'Mail details', + dearPlayer: 'Dear player', + message: { + nodata: 'There are currently no messages for you.', + noMail: 'No mail', + }, + button: { + delete: 'Delete', + confirm: 'Confirm', + receive: 'Receive', + }, + detailTitle: 'Mail details', + deleteRead: 'Delete read', + receiveAll: 'Receive all', + modal: { + title: 'Tip', + content: "Confirm whether to delete all mails", + confirm: 'Confirm', + cancel: 'Cancel' + }, + tipPre: 'Send you', + tipEnd: 'free bonus!', + mailDetail: { + title: 'Mail details' + } + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/promo.js b/src/locales/lang/en-US/promo.js new file mode 100644 index 0000000..9c1dbcb --- /dev/null +++ b/src/locales/lang/en-US/promo.js @@ -0,0 +1,288 @@ +export default { + promo: { + header: { + promo: "Promo", + community: "Community", + promoCode: "Promo Code", + firstDeposit: "First deposit", + ranking: "Ranking", + rules: "Rules", + myReward: "My reward", + siginTitle: "Daily Check In", + luckySpin: "Lucky Spin", + }, + activity: { + btnTip: "Choose your reward", + inviteText: 'Invite Friends to Earn Money!', + endTime: 'End Time', + recordTitle: 'Record', + playerName: 'Player', + awardTitle: 'Congratulations!', + ok: 'OK', + prev: 'Prev', + next: 'Next', + noChance: 'No more chances to spin', + tips: 'Tips', + cashout: 'Cash Out', + noPrize: 'The amount does not meet the conditions for collection.' + }, + pop: { + title: 'History', + lastDay: 'Last Day', + lastWeek: 'Last Week', + lastMonth: 'Last Month', + columnRank: 'Rank', + columnPhone: 'Phone No.', + columnBet: 'Total Bet', + columnReward: 'Rewards', + eventAward: 'Event Award:', + dailyList: 'Daily List', + weeklyList: 'Weekly List', + monthlyList: 'Monthly List', + }, + public: { + rank: "Rank", + bonus: "Bonus", + bet: "Bet", + activityAward: "Activity Award", + depoistAmoout: "Depoist amount", + rewardAmoout: "Reward amount", + requiredDeposit: "Required deposit", + requiredBets: "Required bets", + day: "Day", + bonusContent: "Bonus Content", + checkText: "Don't show again today", + }, + button: { + confirm: "Confirm", + joinNow: "Join now", + contatToClaim: "Contat To Claim", + claim: "Claim", + claimAll: "Claim All", + betNow: "Place bet now", + despiteNow: "Despite Now", + details: "Details", + eventDetails: "Event Details" + }, + toast: { + loading: "Loading....", + receiveSuccessfully: "Receive successfully" + }, + noData: { + myRewardText: "You haven't received any ranking rewards yet, so go bet and participate inthe event.", + leaderboardText: "There is no ranking information for the previous issue." + }, + rebatePromo: { + title: "35% deposit cashback", + ninmiumDeposit: "ninmium deposit", + bonus: "bonus", + tumover: "Tumover" + }, + leaderboard: { + dailyList: "Daily list", + weeklyList: "Weekly list", + monthlyList: "Monthly list", + phone: "Phone number", + totalBet: "Total Bet", + history: "History", + lastDay: "Last day", + lastWeekly: "Last Weekly", + lastMonthly: "Last Monthly", + phoneNo: "Phone No", + award: "Award", + betRate: 'of total bets by all players', + myBets: 'My Bets', + myReward: 'My Reward', + noRank: 'No ranked', + left: 'Rank Left', + noRankDesc: 'You haven\'t received any ranking rewards yet, so go bet and participate in the event.' + }, + community: { + oneTitle: "Lots of rewards", + oneContent: "The community will hold red envelope rain events from time to time.If you join the community you can participate in events for freeA single reward can be up to a maximum of", + twoTitle: "More event information", + twoContent: "The latest activities and consultations will be pushed to the community as soon as possible.Join the community, get the latest information, and be the first to participate in events", + threeTitle: "More community events", + threeContent: "We will hold exclusive community activities, such as community game rankings, community task activities, etc. There are many free activities waiting for you to participate", + foreTitle: "More services", + foreContent: "Join the community to get more service support, and community managers can better answer your questions.", + }, + firstDeposit: { + activityConditions: "Activity Conditions", + activityConditionsText: "For the first deposit into an account, the accountmust be b ound to a mobile phone number.", + rewardDistribution: "Reward distribution", + rewardDistributionText: "The bonus will be distributed through the InBox. lfthe mobile phone number is not bound, please goto the InBox after binding the mobile phonenumber to claim the reward.", + activityTerms: "Activity Terms", + activityTermsText1: "1. The bonus given in this event (capital + bonus)must be wagered {0} times to be withdrawn.", + activityTermsText2: "2. Players opening multiple or fraudulent accounts will disqualified from the promotion. In addition,the remaining amount could be forfeited, and the report shall be frozen.", + activityTermsText3: "3. This promotion cannot be used with any promotional offer. Draw, refunded, void bets on two opposite sides and bets on non-participating products will not count as valid turnover.", + activityTermsText4: "4. This event is only for the account owner'snormal manual operations, renting, using cheatingsoftware, bots, gambling between differentaccounts, mutual manipulation, arbitrage, APIsprotocols, exploiting vulnerabilities, group control,or other technical means are prohibited, otherwiserewards may be canceled or deducted, or accountsmay be frozen or evenblacklisted;", + activityTermsText5: "5. In order to avoid differences in text understanding, the platform will retain the final interpretation of this event.", + }, + rankRule: { + activityRules: "Activity Rules", + activityRulesText1: "1. The bonus given in this event (capital + bonus)must be wagered {0} times to be withdrawn.", + activityRulesText2: "2. Players opening multiple or fraudulent accounts will disqualified from the promotion. In addition,the remaining amount could be forfeited, and the report shall be frozen.", + activityRulesText3: "3. This promotion cannot be used with any promotional offer. Draw, refunded, void bets on two opposite sides and bets on non-participating products will not count as valid turnover.", + activityRulesText4: "4. This event is only for the account owner'snormal manual operations, renting, using cheatingsoftware, bots, gambling between differentaccounts, mutual manipulation, arbitrage, APIsprotocols, exploiting vulnerabilities, group control,or other technical means are prohibited, otherwiserewards may be canceled or deducted, or accountsmay be frozen or evenblacklisted;", + activityRulesText5: "5. In order to avoid differences in text understanding, the platform will retain the final interpretation of this event.", + activityRulesText6: "6. In order to avoid differences in text understanding, the platform will retain the final interpretation of this event." + }, + rebateRules: { + title: "How to participate:", + rebateRulesText1: "1、Everyday single deposit minimum of 500 or Above will bee claimed as up to 30%bonus.", + rebateRulesText2: "2、 After the deposit, contact our customer24/7support to apply.", + rebateRulesText3: "3、 Maximum bonus:30000lNR per day.", + title2: "Terms and conditions:", + rebateRulesText4: "1、All player must provide their mobil numberand bank account details before applving.Phone number, lP address and bankaccountdetail must match their region, and anyviolationwill-invalidate his: bonus or proht.", + rebateRulesText5: "2、Players opening multiple or fraudulentaccounts wil disqualifed frothe promotion. lnaddition, the remaining amount could beforfeitedand the report shall be frozen.", + rebateRulesText6: "3、 This promotion cannot conjunction be usedwith any promotional offer. Draw ,refundedvoidbets on two opposite sidesand bets onnon-participating products will not count as validtumnover.", + rebateRulesText7: "4、Please be sure to read these terms andconditions carefully before you participate inthis activity." + }, + signinRules: { + title: "Event rules", + signinRulesText1: "1、Everyday single deposit minimum of 500 or Above will bee claimed as up to 30%bonus.", + signinRulesText2: "2、 After the deposit, contact our customer24/7support to apply.", + signinRulesText3: "3、 Maximum bonus:30000lNR per day." + }, + popup: { + upRebateText: "Every deposit that meets the minimum amount can earn cash back,", + upTo: "up to", + rankText: "Place a bet and join the rankings for", + rankFree: "free", + rankReward: "Rewards", + communityTitle: "The bonus up to", + communityText: "Join the telegramcommunity to participate in the red envelope rain event for", + communityTip: "I agree all statements in Terms and Conditions", + signinText: "Complete daily check-in today to get", + tapClose: 'TAP TO CLOSE' + }, + promoCodePlaceholder: "Please enter the Promo Code", + signup: { + title: "Sign-up Bonus", + eventCountdown: "Event countdown", + task: "Task", + cliam: "Cliam", + totalRollover: "Total Rollover", + ruleTitle: "Event Rules", + rule1: "1. Complete the above four tasks to get rewards.Click the button above to receive the rewards.", + rule2: "2. The event is only open to users who have registered within 24 hours.", + rule3: "3. The reward will be retained for a maximum of 7 days, after which it will no longer be available for redemption", + termTitle: "Terms & Conditions", + term1: "1. All player must provide their mobil number and bank account details before applving. Phone number, IP address and bank accountdetail must match their region, and any violation will invalidate his bonus or profit.", + term2: "2. Players opening multiple or fraudulent accounts wil disqualifed from the promotion. In addition, the remaining amount could be forfeitedand the report shall be frozen.", + term3: "3. This promotion cannot conjunction be used with any promotional offer. Draw ,refundedvoid bets on two opposite sides and bets onnon-participating products will not count as valid turnover.", + term4: "4. Please be sure to read these terms and conditions carefully before you participate in this activity.", + toast1: 'After completing all tasks, you can receive rewards' + }, + jili: { + title: "JiLi", + userRequirements: "User Requirements", + getGiftCode: "Get Gift Code", + copy: "Copy", + suportedGamesTitle: "Gift Code supported games", + ruleTitle: "EVENT RULES", + rule1: "After receiving the Gift code, please enter the corresponding", + rule2: "1.Goto settings>gifticon>enter giftcode", + rule3: "2.One gift code can use once per account", + rule4: "3.enter my code and got free spin!", + termTitle: "TERMS & CONDITIONS", + term1: "1. All player must provide their mobil number and bank account details before applving. Phone number, IP address and bank accountdetail must match their region, and any violation will invalidate his bonus or profit.", + term2: "2. Players opening multiple or fraudulent accounts wil disqualifed from the promotion. In addition, the remaining amount could be forfeitedand the report shall be frozen.", + term3: "3. This promotion cannot conjunction be used with any promotional offer. Draw ,refundedvoid bets on two opposite sides and bets onnon-participating products will not count as valid turnover.", + term4: "4. Please be sure to read these terms and conditions carefully before you participate in this activity.", + popbtn: "Get it Now", + poptip: "Don't show today", + popdes1: "You have a", + popdes2: "Free", + popdes3: "gift code to receive", + require1: '1. Users registered after', + require2: '2. Total deposit reach', + require3: '3. Need to', + require4: 'bind mobile phone number' + }, + invitationRanks: { + tab1: 'Home', + tab2: 'Rank', + tab3: 'Myrewards&Teams', + tab4: 'Rules', + eventRewards: 'Event Rewards', + commission: 'Commission', + ranking: 'Ranking', + rank: 'Rank', + rewards: 'Rewards', + times: 'times', + teams: 'Teams', + rulsTip1: ' Reward Rollover', + rulsTipTitle1: 'Event Time:', + rulsTipTitle2: 'Event Rules:', + rulsTipTitle3: 'Terms & Conditions ', + "rulsTipDes1-1": '1. You must bind your mobile phone to participate in the event', + "rulsTipDes1-2": '2. The user you invite must deposit a certain amount to become a valid invitation', + "rulsTipDes1-3": '3. The rewards will be distributed via Inbox at 5:00 GMT+5.5 in the morning of the next day after the event ends.', + "rulsTipDes2-1": '1. All player must provide their mobil number and bank account details before applving. Phone number, IP address and bank accountdetail must match their region, and any violation will invalidate his bonus or profit.', + "rulsTipDes2-2": '2. Players opening multiple or fraudulent accounts wil disqualifed from the promotion. In addition, the remaining amount could be forfeitedand the report shall be frozen.', + "rulsTipDes2-3": '3. This promotion cannot conjunction be used with any promotional offer. Draw ,refundedvoid bets on two opposite sides and bets onnon-participating products will not count as valid turnover.', + "rulsTipDes2-4": '4. Please be sure to read these terms and conditions carefully before you participate in this activity.', + rules: 'Rules', + inviteLink: 'Invite Link', + inviteCode: 'Invite Code', + copy: 'Copy', + share: 'Share', + myRewards: 'My rewards', + phoneNumber: 'Phone Number', + invite: 'Invite', + bindToJoin: 'Bind to join', + homeText1: 'Invitation Courtesy', + homeText2: 'Invite your friends to get rewards', + homeText3: 'UP to', + homeText4: 'per user', + homeText5: 'During the event, you will receive a reward for every 2 validusers you invite. The more people you invite, the higher thereward.', + homeText6: 'Invitation Ranking', + homeText7: 'Join Invitation Rank List', + homeText8: 'Top Rewards', + homeText9: 'Invite valid users to join the invitation rankings. The higherthe ranking, the higher the reward.', + homeText10: 'The event has ended, please go to claim your rewards.', + teamText1: 'Tolat invitation user', + teamText2: 'Valid invitation user', + teamText3: 'Total Rewards', + teamText4: 'Underreview', + teamText5: 'You will get', + teamText6: 'by inviting', + teamText7: 'Show only valid invitations', + teamText8: 'Invite Time', + teamText9: 'Deposit', + teamText11: 'Status', + teamText10: 'more valid users.', + all: 'All', + underReview: 'Under Review', + pass: 'Pass', + claimable: 'Claimable', + reClaim: 'ReClaim', + claim: 'Claim' + }, + turnplate: { + yourBonus: 'Your bonus:', + claim: 'Claim', + share: 'Share', + rules:'Rules', + winning: 'Winning announcement', + myRecord: 'My record', + phone: 'Phone', + bonus: 'Bonus', + time: 'Time', + claimTime: 'ClaimTime' + }, + tgReward: { + title: 'Reward redemption code', + descTitle: 'Follow official channel to get the code', + inputTitle: 'Hi ,we have a gift for you', + placeholder: 'Please enter the gift code', + amountLabel: 'Bonus amount:', + btnConfirm: 'Confirm', + btnTg: 'Telegram channel', + joinDesc1: 'Join ' + import.meta.env.VITE_APP_NAME + '.GAME Official Channel:', + joinDesc2: 'Get daily bonus codes ranging from ₹ 7 to ₹ 7777! Invite your friends to join and claim your bonus together!' + } + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/redeposit.js b/src/locales/lang/en-US/redeposit.js new file mode 100644 index 0000000..89c4af0 --- /dev/null +++ b/src/locales/lang/en-US/redeposit.js @@ -0,0 +1,21 @@ +export default { + redeposit: { + slogan1: 'Complete the deposit task to participate in the wheel', + slogan2: 'spin activity and win up to ₹3,777.', + depositNow: 'Deposit Now', + upto: 'Up To', + myReward: 'My Rewards', + title: 'Activity rules', + history: 'My Rewards', + row1: 'The event includes four types of carousels: silver, gold, diamond and special. Unlock different levels of carou- sels by recharging, the higher the level, the more gener- ous the rewards.', + row2: 'Each draw has a 100% chance to get rewards.', + row3: 'All rewards will be deposited directly into your wallet.', + row4: 'Bonus requires 1 turnaround before withdrawal.', + row5: `The right to interpret the activity belongs to ${import.meta.env.VITE_NAME_UPPER}, if you have any questions, please contact customer service.`, + rewards: 'Total Rewards', + tip: 'Comp the first three wheel tasks to unlock specal wheel!', + supreme: 'Complete the first three wheel tasks to unlock supreme wheel!', + noRecord: 'No Record', + noCount: 'you need to deposit before spinning the wheel~' + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/search.js b/src/locales/lang/en-US/search.js new file mode 100644 index 0000000..f41fd6e --- /dev/null +++ b/src/locales/lang/en-US/search.js @@ -0,0 +1,22 @@ +export default { + search: { + title: 'Search', + searchGames: 'Search Games', + searchResult: 'Search Result', + popularSearches: 'Popular Searches', + recommentGames: 'Recomment Games', + recentlySearches: 'Recently Searches', + + + tabs: { + tab1: 'All', + tab2: 'Hot', + tab3: 'Recent' + }, + + message: { + nodata: 'There are no search results for', + norecord: 'No Records!' + } + } +} diff --git a/src/locales/lang/en-US/vip.js b/src/locales/lang/en-US/vip.js new file mode 100644 index 0000000..2fa568e --- /dev/null +++ b/src/locales/lang/en-US/vip.js @@ -0,0 +1,22 @@ +export default { + vip: { + VIP: "VIP", + relegationSuccessfuIl: "Relegation successfuIl", + thisMonth: "this month", + continueToDeposit: "Continue to deposit", + toReach: "to reach", + deposit: "Deposit", + privileges: "Privileges", + upGradeBouns: "UpGrade Bouns", + betRebate: "Bet Rebate", + weeklyBouns: "Weekly Bouns", + birthdayBouns: "Birthday Bouns", + withdrawDailyLimited: "Withdraw Daily Limited", + withdrawFee: "Withdraw Fee", + withdrawDailyTimes: "Withdraw Daily Times", + relegationRequirements: "Relegation requirements", + VIPCustomerService: "VIP Customer Service", + exclusiveforVlP: "Exclusive for VlP", + customer: "Contact", + } +} \ No newline at end of file diff --git a/src/locales/lang/en-US/withdraw.js b/src/locales/lang/en-US/withdraw.js new file mode 100644 index 0000000..8a2a359 --- /dev/null +++ b/src/locales/lang/en-US/withdraw.js @@ -0,0 +1,98 @@ +export default { + withdraw: { + title: 'Withdraw', + title2: 'Withdraw History', + bankAccount: 'Bank Account', + walletAddr: 'Wallet Address', + changeBankAccount: "Change Account", + edit: 'Edit Account', + walletEdit: 'Edit Wallet', + withdrawAmount: 'Withdraw Amount', + addNewAccount: 'Add New Account', + myBalance: 'My balance', + total: 'Total', + orderId: 'OrderId', + bindWallet: 'Bind Wallet', + walletLink: 'Wallet Address', + linkPlaceholder: 'Please enter the wallet address', + bankLabel: 'Bank Account', + walletLabel: 'Wallet Address', + posterText: 'Get INRUPAY Wallet', + mesaage: { + nodata: 'No record!' + }, + + input: { + placeholder: 'Withdraw Amount' + }, + + button: { + withdraw: 'WITHDRAW', + cancel: 'Cancel', + goToSetPassword: 'Go to set password', + addNewAccount: 'Add New Account' + }, + + tips: { + title: 'Tips', + tips1: 'Under normal circumstances, the withdrawal amount will arrive in your account in about', + tips2: '2 hours', + tips3: ', and the longest time will not exceed', + tips4: '24 hours' + }, + + items1: 'Remaining withdrawal Limit', + items2: 'VIP Daily Limit', + items3: 'Wager requirement', + items4: 'Remaining withdrawals times today', + + setPasswordPopup: { + title: 'Set Withdrawal Password', + des: 'For the security of your account, please set awithdrawal password first.' + }, + + bankCardPopup: { + title: 'Bank Account Required', + des: 'To be able to withdraw,please,add a bank account first.' + }, + + configPopup: { + title: 'Withdrawal tips', + orderNumber: 'Order Number', + arrivalAmount: 'Arrival Amount', + total: 'Total', + withdrawAmount: 'Withdraw Amount', + serviceCharege: 'Service Charge', + yourBankAccount: 'Your account', + chooseBankAccount: 'Choose Withdraw Account', + withdrawPassword: 'Withdrawal password', + + des1: 'Withdraw fee is', + des2: '(Comprehensive personal income tax)', + + placeHolder: 'Please enter the withdrawal password' + }, + + toast: { + text1: 'Please enter your withdrawal password', + text2: 'Application successful, please wait', + text3: 'The withdrawal amount cannot be empty', + text4: 'You still have ', + text5: ' rupees left tobet in the game,' + }, + + tabs: { + tab1: 'Today', + tab2: '7 Days', + tab3: '30 Days' + }, + waitPage: { + btnTetx: "BACK TO ACCOUNT", + tipTetx: "Withdraw in progress" + }, + bindWallet: 'Bind Wallet', + walletLink: 'Wallet Address', + getTitle: 'Get wallet address:', + linkPlaceholder: 'Enter the wallet address,single withdrawal >3000 per reward ₹77-7777' + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND.js b/src/locales/lang/ind-IND.js new file mode 100644 index 0000000..6bea13d --- /dev/null +++ b/src/locales/lang/ind-IND.js @@ -0,0 +1,25 @@ +import app from './ind-IND/app.js' +import login from './ind-IND/login.js' +import constants from './ind-IND/constants.js' +import home from './ind-IND/home.js' +import mail from './ind-IND/mail.js' +import deposit from './ind-IND/deposit.js' +import withdraw from './ind-IND/withdraw.js' +import earn from './ind-IND/earn.js'; +import vip from './ind-IND/vip.js'; +import promo from './ind-IND/promo.js'; +import search from './ind-IND/search.js' + +export default { + ...app, + ...login, + ...constants, + ...home, + ...mail, + ...deposit, + ...withdraw, + ...earn, + ...vip, + ...promo, + ...search +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/app.js b/src/locales/lang/ind-IND/app.js new file mode 100644 index 0000000..b386224 --- /dev/null +++ b/src/locales/lang/ind-IND/app.js @@ -0,0 +1,65 @@ +export default { + app: { + language: 'Bahasa', + languageChange: 'Ubah Bahasa', + notification: 'Notification', + english: 'English', + chinese: 'Chinese', + tabbar: { + home: 'Home', + promo: 'Promo', + vip: 'Vip', + earnMoney: 'Menghasilkan uang', + account: 'Akun' + }, + popup: { + confirm: 'Mengonfirmasi', + cancel: 'Batalkan', + tips: 'Tips' + } + }, + 'pages/home/Home': 'Home', + 'pages/Login/Login': 'Masuk', + 'pages/Login/Register': 'Daftar', + 'pages/promo/Promo': 'Promo', + 'pages/vip/Vip': 'Vip', + 'pages/earn/Earn': 'Menghasilkan uang', + 'pages/account/Account': 'Akun', + 'pages/mail/Mail': 'Surat', + 'pages/search/Search': 'Mencari', + 'pages/search/SearchResult': 'Hasil pencarian', + 'pages/wallet/Deposit': 'Setoran', + 'pages/wallet/DepositHistory': 'Riwayat Deposit', + 'pages/wallet/DepositOrderDetail': 'Detail pesanan', + 'pages/wallet/DepositUpiDetail': 'UPI', + 'pages/wallet/DepositImpsDetail': 'IMPS', + 'pages/wallet/Withdraw': 'Menarik', + 'pages/wallet/WithdrawHistory': 'Tarik Riwayat', + 'pages/wallet/TransferInstructions': 'Instruksi Transfer', + 'pages/webview/GameWeb': 'Permainan', + 'pages/account/Profile/Profile': 'Profil', + 'pages/account/components/EditProfile/EditProfile': 'Sunting Profil', + 'pages/account/Language': 'Bahasa', + + + 'pages/account/BalanceRecords/BalanceRecords': 'Catatan Saldo', + 'pages/account/GameRecords/GameRecords': 'Catatan Permainan', + 'pages/account/BankCard/BankCard': 'Tarik Akun', + 'pages/account/BankCard/BankCardList': 'Tarik Akun', + 'pages/account/PhoneBinding/PhoneBinding': 'Pengikatan Telepon', + 'pages/account/WithdrawalPassword/WithdrawalPassword': 'Tarik Kata Sandi', + 'pages/account/FeedBack/FeedBack': 'Masukan', + 'pages/account/FAQ/FAQ': 'Pertanyaan Umum', + 'pages/account/FAQInfo/FAQInfo': 'FAQ', + 'pages/promo/FirstDeposit/FirstDeposit': 'Setoran Pertama', + 'pages/promo/Ranking/Ranking': 'Peringkat', + 'pages/promo/RebatePromo/RebatePromo': 'Promo Rabat', + 'pages/promo/CashbackRecord/CashbackRecord': 'Catatan Uang Kembali', + 'pages/promo/Signin/Signin': 'Masuk', + 'pages/promo/SignupBonus': 'Bonus Pendaftaran', + 'pages/promo/Jili': 'Jili', + 'pages/wallet/WithdrawWait': "Withdraw", + 'pages/Login/LoginV2': "Masuk", + 'pages/Login/Register': "Daftar", + "pages/Login/ForgetPassword": "Lupa Password" +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/constants.js b/src/locales/lang/ind-IND/constants.js new file mode 100644 index 0000000..fce1f8e --- /dev/null +++ b/src/locales/lang/ind-IND/constants.js @@ -0,0 +1,183 @@ +export default { + account: { + header: { + bankCardTitle: "Akun", + faqTitle: "Pertanyaan Umum", + balanceRecordsTitle: "Catatan Saldo", + feedbackTitle: "Masukan", + withdrawalPasswordTitle: "Setel ulang kata", + gameRecordsTitle: 'Catatan Permainan', + phoneBindingTitle: "Mengikat", + withdrawalBankTitle: "Tarik Akun" + }, + bindPhone: { + title: 'Bind Phone No.', + placeholder: 'Enter your phone no.', + send: 'Send', + verifyPlaceholder: 'Enter the received verification code', + bindTip: 'To ensure the security of your funds, please link your mobile number.', + confirm: 'Confirm', + }, + button: { + save: "SIMPAN", + submit: "Kirim", + switchAccount: "GANTI AKUN", + confirm: "Mengonfirmasi", + otp: "OTP", + confirmCapital: "MENGONFIRMASI" + }, + toast: { + copySuccess: "Berhasil disalin", + loading: "Loading..." + }, + noData: { + text: "Anda tidak memiliki catatan saldo selama periode ini." + }, + config: { + deposit: "Setoran", + withdraw: "Menarik", + balanceRecords: "Catatan Saldo", + gameRecords: "Catatan Permainan", + firstTitle: 'Profil & Keamanan', + helpTitle: "Bantuan & Pengaturan", + profile: "Profil", + phoneBinding: "Pengikatan Telepon", + bankCard: "Tarik Akun", + withdrawPassword: "Tarik Kata Sandi", + faq: "Pertanyaan Umum", + feedback: "Masukan", + version: "Versi", + }, + profileItem: { + id: "ID", + avatar: "Avatar", + nickname: "Nama panggilan", + phoneNumber: "Nomor telepon", + birthday: "Hari ulang tahun", + eamil: "Email", + whatsApp: "WhatsApp", + facebook: "Facebook", + telegram: "Telegram", + twitter: "Twitter", + setUp: 'mempersiapkan' + }, + balanceRecordsStatus: { + all: "Semua", + bet: "Taruhan", + deposit: "Setoran", + withdrawal: "Penarikan", + win: "Menang", + giftMoney: "Hadiah uang", + vipBonus: "Bonus VIP", + dailyRebate: "Rabat Harian", + depositBonus: "Bonus isi ulang", + dailyBonus: "Bonus Harian" + }, + month: { + January: "Januari", + February: "Februari", + March: "Berbaris", + April: "April", + May: "Mungkin", + June: "Juni", + July: "Juli", + August: "Agustus", + September: "September", + October: "Oktober", + November: "November", + December: "Desember" + }, + + bankCard: { + placeholder: { + accountName: "Silakan Masukkan Nama Pemilik Rekening", + accountNumber: "Silakan Masukkan Nama Pemilik Rekening", + accountIfsc: "", + }, + tips: { + title: "Tips", + text: "kartu", + tipsMain: "tidak akan didukung untuk penarikan tunai Harap konfirmasi informasi akun penarikan Anda dengan hati-hati untuk menghindari kesalahan penarikan.", + ifscTips: "Digit kelima IFSC harus 0", + }, + button: { + submit: "SIMPAN & LANJUTKAN" + }, + labels: { + accountName: "nama pemilik akun", + accountNumber: "Nomor akun", + accountIfsc: "IFSC", + accountType: "Jenis akun", + }, + text: { + accNo: "Nomor Rek.", + addBankCardText: "Tambahkan Akun Baru", + add: "Menambahkan", + edit: "Sunting", + delAccount: "Hapus akun" + } + }, + balanceRecords: { + searchFormTitle: "Verifikasi Terkirim" + }, + feedBack: { + label: { + yourId: "Tanda pengenal Anda", + phoneNumber: "Nomor telepon", + email: "Email", + suggestion: "Saran", + emailPlaceholder: "Masukkan Email Anda.", + phonePlaceholder: "Masukkan Ponsel Anda.", + suggestionPlaceholder: "Pendapat Anda sangat penting bagi kami, kami akan mendengarkan semua saran, dan selama saran Anda efektif, Anda akan menerima hadiah uang tunai!", + }, + screen: { + game: "Permainan", + deposit: "Setoran", + withdraw: "Menarik", + vip: "Vip", + invite: "Mengundang", + account: "Akun", + other: "Lainnya", + }, + upto: "Hingga", + bonus: 'bonus' + + }, + withdrawalPassword: { + label: { + password: "I-set ang iyong Menarik Password", + repeatPassword: "Ulangi kata sandi penarikan", + phone: "Ilagay ang iyong naka-bind na phone number", + otpPlaceholder: "OTP 6 digit" + }, + toast: { + phone: "Nomor telepon tidak boleh kosong", + withdrawPasswd: "Kata sandi penarikan tidak boleh kosong", + withdrawPasswdRepeat: "Dua kata sandi tidak cocok", + verificationCode: "Kode verifikasi tidak boleh kosong", + }, + }, + gameRecords: { + status: { + all: "Semua Status", + settled: "Selesai", + unsettled: "Belum Selesai", + cancel: "Dibatalkan" + }, + time: { + today: "Hari ini", + yesterday: "Kemarin", + lastDay: "3 hari terakhir" + }, + betId: "ID Taruhan", + vaildBet: "Taruhan yang valid", + wl: "W/L", + }, + phoneBinding: { + toast: { + phone: "Nomor telepon tidak boleh kosong" + } + } + }, + +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/deposit.js b/src/locales/lang/ind-IND/deposit.js new file mode 100644 index 0000000..a8fd08a --- /dev/null +++ b/src/locales/lang/ind-IND/deposit.js @@ -0,0 +1,123 @@ +export default { + deposit: { + title: 'Setoran', + title2: 'Detail pesanan', + title3: 'Riwayat Deposit', + title4: 'UPI', + title5: 'IMPS', + titleSelfUtr: 'RRN', + onlinePayment: 'Pembayaran Daring', + transferDeposit: 'Transfer Setoran', + crypto: 'kripto', + paymentMethods: 'cara Pembayaran', + depositChannel: 'Saluran Setoran', + depositEvent: 'Acara Setoran', + bonus: 'Bonus', + depositAmount: 'Jumlah setoran', + depositTips: 'Tip Setoran', + agencyDeposit: 'Agensi isi ulang', + channel: 'Saluran', + depositService: 'Layanan Deposit', + cryptoCurrency: 'Mata Uang Kripto', + getAmount: 'Dapatkan jumlah', + online: 'Online', + supportAmount: 'Jumlah dukungan', + onlineTime: 'Waktu Online', + total: 'Total', + orderId: 'ID Pesanan', + depositType: 'Jenis Setoran', + creationTime: 'Waktu Pembuatan', + arrivalTime: 'Jam kedatangan', + orderNo: 'Nomor Pesanan', + transferAmount: 'Jumlah transfer', + utr: 'UTR', + bankAccountInfo: 'Info Rekening Bank', + accountHolderName: 'Nama pemilik akun', + bankName: 'Nama Bank', + IFSCCode: 'Kode IFSC', + accountNo: 'No rekening', + remark: 'Komentar', + transferInstructions: 'Instruksi Transfer', + name: 'Nama', + upi: 'UPI', + orderConfirmation: 'Konfirmasi pesanan', + howtouse: 'How to use?', + + button: { + depositNow: 'Setor Sekarang', + confirm: 'Mengonfirmasi', + transferCompleted: 'Pemindahan Selesai', + copy: 'menyalin', + gotoDepositHistory: 'Buka Riwayat Deposit', + selfUtrCheck: 'Hanya pesanan swalayan' + }, + + status: { + succeeded: 'Salinan Berhasil', + success: 'Success', + pending: 'Tertunda' + }, + + tabs: { + tab1: 'Hari ini', + tab2: '7 hari', + tab3: '30 hari' + }, + + message: { + nodata: 'Tidak Ada Catatan!', + tips1: '1、Setiap deposit akan dikreditkan dalam 1-5 menit.', + tips2: '2、Anda dapat menghubungi layanan pelanggan kapan saja untuk menyelesaikan masalah isi ulang.', + tips3: 'Setelah berpartisipasi dalam event ini, Anda memerlukan 3 kali lipat taruhan yang diperlukan untuk melakukan penarikan uang', + tips4: '7*24 Layanan Pelanggan Online > ', + tips5: 'Jika Anda memiliki masalah setoran, Anda dapat menghubungi kami', + tips6: 'Pesanan deposit Anda telah berhasil dikirimkan dan akan tiba dalam waktu 1-5 menit. Harap bersabar menunggu...', + tips7: 'Anda juga dapat memeriksa hasilnya di riwayat isi ulang atau menghubungi layanan pelanggan.', + + tipsUtr1: 'RRN', + tipsUtr2: 'bonusnya hingga 30%.', + tipsUtr3: 'Unggah UTR Anda dan kami akan mengkonfirmasi pesanan Anda', + tipsUtr4: 'Pesanan ini berlaku untuk layanan mandiri', + tipsUtr5: 'Detail', + + history1: 'Pesanan ini akan diproses dalam waktu 2-24 jam', + + tipsDetail1: 'Setoran belum sampai?', + + tipsImps1: 'Untuk meningkatkan pengalaman deposit Anda, disarankan agar Anda menggunakan Transfer Deposit untuk deposit lebih besar dari #0', + tipsImps2: 'Tips: Anda dapat menekan lama kotak input untuk menempelkan RRN', + tipsImps3: '1、Masukkan komentar di kolom Komentar saat Anda melakukan deposit. Jika Anda tidak memasukkan komentar tersebut, pembayaran Anda mungkin tidak teridentifikasi atau dikreditkan ke akun Anda.', + tipsImps4: '2、Anda dapat menghubungi layanan pelanggan kapan saja untuk menyelesaikan masalah isi ulang.', + tipsImps5: 'Silakan masukkan UTR 12~sigit', + + popupTip: 'Jika jumlah transfer Anda tidak sesuai dengan jumlah yang dikirimkan, maka transfer tidak akan sampai tepat waktu. Jika Anda memiliki pertanyaan, silakan hubungi layanan pelanggan' + }, + + utrPage: { + text1: 'Untuk memproses pesanan deposit Anda lebih cepat, kami menyediakan layanan isi ulang mandiri.', + text2: 'Jika pesanan Anda belum sampai, Anda bisa langsung memberikan UTR dan screenshot pembayarannya.', + title1: 'Bonus Self Service', + title2: 'Prosedur operasi', + text3: 'Setiap 6 jam hingga UTR dan screenshot berhasil dikirimkan, 1% dari jumlah deposit akan diberikan, maksimal 30%, dan hadiah akan dikeluarkan bersamaan dengan deposit.', + text4: '1. Temukan pesanan Anda di riwayat deposit dan klik pesanan untuk masuk ke halaman detail.', + text5: '2. Klik pintu masuk layanan mandiri di bagian bawah halaman detail.', + text6: '3. Unggah UTR dan tangkapan layar pembayaran Anda di halaman web, Kami akan menangani masalah Anda sesegera mungkin.', + text7: '4. Anda dapat memeriksa kemajuan pemrosesan kapan saja dengan mengklik pintu masuk layanan mandiri pesanan ini.', + text8: '5. Hasil pemrosesan pesanan akan kami informasikan melalui inbox.', + }, + + toast: { + text1: 'Silakan masukkan jumlah deposit!', + text2: 'Jumlah deposit harus selama', + text3: 'Silakan masukkan UTR!', + text4: 'Salin Sukses', + text5: 'Anda masih punya', + text6: 'pesanan sedang diproses. Silakan coba lagi nanti.', + }, + + closePopup: { + text: 'Fungsi deposit Anda telah ditutup, silakan hubungi layanan pelanggan', + confirm: 'Hubungi Layanan Pelanggan' + } + } +} diff --git a/src/locales/lang/ind-IND/earn.js b/src/locales/lang/ind-IND/earn.js new file mode 100644 index 0000000..4db239f --- /dev/null +++ b/src/locales/lang/ind-IND/earn.js @@ -0,0 +1,38 @@ +export default { + earn: { + header: { + myRewards: "Hadiahku", + rules: "Aturan" + }, + toast: { + loading: "Memuat...." + }, + footer: { + myLink: "Tautan SAYA", + copy: "Menyalin", + share: "Membagikan" + }, + rule: { + cashBonus: "Bonus Tunai", + cashBalance: "Saldo Tunai", + text: "dari taruhannya kepada Anda", + tipOneProblem: "1. Bagaimana cara mengembangkan downline saya?", + tipOneText: "Unduh game melalui tautan yang Anda bagikan, daftarkan akun, dan berpartisipasi dalam game apa pun, Anda berhasil menjadi pengguna level lebih rendah dan mendapatkan hadiah.", + tipTwoProblem: "2. Bagaimana cara mengklaim hadiah saya?", + tipTwoText: "Di halaman Hadiah Saya, klik klaim untuk mendapatkan hadiah yang akan diberikan secara real time.", + tipThreeProblem: "3. Bagaimana cara menghasilkan lebih banyak uang?", + tipThreeText: "Kembangkan lebih banyak pengguna downline dan dorong pengguna downline Anda untuk mengembangkan lebih banyak pengguna downline. Anda akan mendapatkan banyak uang setiap saat!", + + }, + myRewards: { + rewardToday: "Hadiah Hari Ini", + totalRewards: "Jumlah Hadiah", + numberOfInviters: "Jumlah Pengundang", + amountAvailable: "Jumlah yang tersedia", + data: "Data", + rewards: "Hadiah", + claim: "Klaim" + }, + } + +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/home.js b/src/locales/lang/ind-IND/home.js new file mode 100644 index 0000000..23d9266 --- /dev/null +++ b/src/locales/lang/ind-IND/home.js @@ -0,0 +1,14 @@ +export default { + home: { + allgames: 'Semua permainan', + recent: 'Terkini', + favorite: 'Favorit', + withdraw: 'Menarik', + deposit: 'Setoran', + download: 'unduh', + login: 'Masuk', + register: 'Daftar', + award: 'Get', + downloadSlogan: 'Download the App and bind your phone' + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/login.js b/src/locales/lang/ind-IND/login.js new file mode 100644 index 0000000..f73e119 --- /dev/null +++ b/src/locales/lang/ind-IND/login.js @@ -0,0 +1,52 @@ +export default { + login: { + header: { + title: "Masuk", + text: "Masuk untuk melanjutkan.", + Password: "Kata sandi", + OTP: "OTP", + or: "ATAU", + phone: "Telepon", + oneClick: "Satu klik", + register: "Daftar", + registerSuccess: "Registration success!", + changePassword: "Ganti kata sandi", + forgetPassword: "Lupa Password" + }, + placeholder: { + phone: "Masukkan nomor telepon Anda", + otp: "OTP 6 digit", + password: "Kata sandi", + passwordLogin: "Telepon, ID", + loginOtp: "OTP 6 digit" + }, + button: { + submit: "MASUK", + otp: "OTP", + send: 'Mengirim', + register: "Daftar", + forgetPassword: "Lupa Password?", + share: "Membagikan", + copy: "Menyalin", + clickSubmit: "KIRIM" + }, + tips: { + checkText: "Saya menyetujui semua pernyataan dalam Syarat dan Ketentuan", + rgisterTipText: "Saya menyatakan bahwa saya berusia minimal 18 tahun dan menyetujui syarat dan ketentuan yang diuraikan dalam", + termsAndConditions: "“Syarat & Ketentuan”", + oneClickTips: "Klik tombol di bawah untuk segera mendaftar. Anda dapat menambahkan nomor ponsel, email, dan kata sandi Anda di pusat pribadi.", + changePasswordTipTitle: "Tips:", + changePasswordTipText: "Demi keamanan data, Anda perlu mengikat nomor ponsel untuk menyetel kata sandi." + }, + toast: { + phone: "Nomor telepon tidak boleh kosong", + oth: "OTP tidak boleh kosong", + idOrPhone: "Nomor telepon atau ID tidak boleh kosong", + password: "Kata Sandi tidak boleh kosong", + }, + label: { + userId: "ID Pengguna Anda:", + password: "Kata sandi Anda:", + } + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/mail.js b/src/locales/lang/ind-IND/mail.js new file mode 100644 index 0000000..d3bcc33 --- /dev/null +++ b/src/locales/lang/ind-IND/mail.js @@ -0,0 +1,13 @@ +export default { + mail: { + title: 'InBox', + dearPlayer: 'Pemain yang terhormat', + message: { + nodata: 'Saat ini tidak ada pesan untuk Anda.' + }, + button: { + delete: 'Menghapus', + confirm: 'Mengonfirmasi' + } + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/promo.js b/src/locales/lang/ind-IND/promo.js new file mode 100644 index 0000000..8386aa4 --- /dev/null +++ b/src/locales/lang/ind-IND/promo.js @@ -0,0 +1,184 @@ +export default { + promo: { + header: { + promo: "Promo", + community: "Masyarakat", + promoCode: "Kode promosi", + firstDeposit: "Setoran Pertama", + ranking: "Peringkat", + rules: "Aturan", + myReward: "Hadiahku", + siginTitle: "Check-In Harian", + luckySpin: "Lucky Spin", + }, + activity: { + btnTip: "Choose your reward", + inviteText: 'Invite Friends to Earn Money!', + endTime: 'End Time', + recordTitle: 'Record', + playerName: 'Player', + awardTitle: 'Congratulations!', + ok: 'OK', + prev: 'Prev', + next: 'Next', + noChance: 'No more chances to spin', + tips: 'Tips', + cashout: 'Cash Out', + noPrize: 'The amount does not meet the conditions for collection.' + }, + public: { + rank: "Pangkat", + bonus: "Bonusnya", + bet: "Bet", + activityAward: "Penghargaan Aktivitas", + depoistAmoout: "Jumlah isi ulang", + rewardAmoout: "", + requiredDeposit: "Diperlukan deposit", + requiredBets: "Diperlukan deposit", + day: "Hari", + bonusContent: "Konten Bonus", + checkText: "Jangan tampilkan lagi hari ini", + }, + button: { + confirm: "Mengonfirmasi", + joinNow: "BERGABUNG SEKARANG", + contatToClaim: "Kontak Untuk Klaim", + claim: "Mengeklaim", + claimAll: "Klaim Semua", + betNow: "Pasang taruhan sekarang", + despiteNow: "Meskipun Sekarang", + details: "Detail", + eventDetails: "detail acara" + }, + toast: { + loading: "Loading....", + receiveSuccessfully: "Sukses di terima" + }, + noData: { + myRewardText: "Anda belum menerima hadiah peringkat apa pun, jadi bertaruhlah dan berpartisipasilah dalam Event ini.", + leaderboardText: "Tidak ada informasi peringkat untuk edisi sebelumnya." + }, + rebatePromo: { + title: "uang kembali deposit 35%.", + ninmiumDeposit: "Minimal isi ulang", + bonus: "bonusnya", + tumover: "Tumor" + }, + leaderboard: { + dailyList: "Daliy", + weeklyList: "Mingguan", + monthlyList: "Bulanan", + phone: "Nomor telepon", + totalBet: "Jumlah taruhan", + history: "Sejarah", + lastDay: "Hari terakhir", + lastWeekly: "Minggu lalu", + lastMonthly: "Bulan lalu", + phoneNo: "No Telepon", + award: "Menghadiahkan" + }, + community: { + oneTitle: "Banyak imbalan", + oneContent: "Komunitas akan mengadakan acara hujan amplop merah dari waktu ke waktu. Jika Anda bergabung dengan komunitas, Anda dapat berpartisipasi dalam acara secara gratis. Satu hadiah bisa maksimal sebesar", + twoTitle: "Informasi acara lebih lanjut", + twoContent: "Kegiatan dan konsultasi terkini akan disebarkan ke komunitas sesegera mungkin. Bergabunglah dengan komunitas, dapatkan informasi terkini, dan jadilah yang pertama berpartisipasi dalam Event", + threeTitle: "Lebih banyak acara komunitas", + threeContent: "Kami akan mengadakan aktivitas komunitas eksklusif, seperti pemeringkatan permainan komunitas, aktivitas tugas komunitas, dll. Ada banyak aktivitas gratis yang menunggu Anda untuk berpartisipasi.", + foreTitle: "Lebih banyak layanan", + foreContent: "Bergabunglah dengan komunitas untuk mendapatkan lebih banyak dukungan layanan, dan pengelola komunitas dapat menjawab pertanyaan Anda dengan lebih baik.", + }, + firstDeposit: { + activityConditions: "Kondisi Aktivitas", + activityConditionsText: "Bonus akan didistribusikan melalui InBox. Jika nomor ponsel belum terikat, silakan masuk ke InBox setelah mengikat nomor ponsel untuk mengklaim hadiah.", + rewardDistribution: "Distribusi hadiah", + rewardDistributionText: "Untuk deposit pertama ke dalam akun game, akun tersebut harus terdaftar dengan nomor ponsel.", + activityTerms: "Ketentuan Kegiatan:", + activityTermsText1: "1. Bonus yang diberikan dalam acara ini (modal + bonus) harus dipertaruhkan sebanyak {0} kali untuk dapat ditarik.", + activityTermsText2: "2. Pemain yang membuka beberapa akun atau akun palsu akan didiskualifikasi dari promosi. Selain itu, sisa dana bisa hangus dan laporannya dibekukan.", + activityTermsText3: "3. Promosi ini tidak dapat digunakan dengan penawaran promosi apa pun. Taruhan seri, pengembalian dana, pembatalan pada dua sisi berlawanan dan taruhan pada produk yang tidak berpartisipasi tidak akan dihitung sebagai turnover yang sah.", + activityTermsText4: "4. Acara ini hanya untuk operasi manual normal pemilik akun, menyewa, menggunakan perangkat lunak curang, bot, perjudian antar akun yang berbeda, saling mainpulasi, arbitrase, protokol API, eksploitasi kerentanan, kontrol grup, atau cara teknis lainnya dilarang, jika tidak, hadiah dapat dibatalkan atau dipotong atau akun dapat dibekukan atau bahkan dimasukkan dalam daftar hitam.", + activityTermsText5: "5. Untuk menghindari perbedaan pemahaman teks, platform akan mempertahankan interpretasi akhir dari acara ini.", + }, + rankRule: { + activityRules: "Aturan Aktivitas", + activityRulesText1: "1. Bonus yang diberikan dalam acara ini (modal + bonus) harus dipertaruhkan sebanyak {0} kali untuk dapat ditarik.", + activityRulesText2: "2. Pemain yang membuka beberapa akun atau akun palsu akan didiskualifikasi dari promosi. Selain itu, jumlah sisanya bisa hangus, dan laporannya akan dibekukan.", + activityRulesText3: "3. Promosi ini tidak dapat digunakan dengan penawaran promosi apa pun. Taruhan seri, pengembalian dana, pembatalan pada dua sisi berlawanan dan taruhan pada produk yang tidak berpartisipasi tidak akan dihitung sebagai turnover yang sah.", + activityRulesText4: "4. Event ini hanya untuk operasi manual normal pemilik akun, menyewa, menggunakan aplikasi curang, bot, perjudian antar akun yang berbeda, manipulasi timbal balik, arbitrase, protokol API, eksploitasi kerentanan, kontrol grup, atau cara teknis lainnya dilarang, jika tidak, hadiah dapat dibatalkan atau dipotong, atau akun mungkin dibekukan atau bahkan masuk daftar hitam;", + activityRulesText5: "5. Untuk menghindari perbedaan pemahaman teks, platform akan mempertahankan interpretasi akhir dari acara ini.", + activityRulesText6: "6. Untuk menghindari perbedaan pemahaman teks, platform akan mempertahankan interpretasi akhir dari acara ini." + }, + rebateRules: { + title: "Cara berpartisipasi:", + rebateRulesText1: "1、Setoran tunggal setiap hari minimal 500INR atau lebih akan diklaim sebagai bonus hingga 30%.", + rebateRulesText2: "2、 Setelah deposit, hubungi dukungan pelanggan kami 24/7 untuk mengajukan permohonan.", + rebateRulesText3: "3、 Bonus maksimum: 30000lNR per hari.", + title2: "Syarat dan Ketentuan:", + rebateRulesText4: "1. Semua pemain harus memberikan nomor ponsel dan detail rekening banknya sebelum mendaftar. Nomor telepon, alamat IP, dan detail rekening bank harus sesuai dengan wilayahnya, dan pelanggaran apa pun akan membatalkan bonus atau keuntungannya.", + rebateRulesText5: "2. Pemain yang membuka banyak akun atau akun palsu akan didiskualifikasi dari promosi. Selain itu, jumlah yang tersisa dapat hangus dan laporan akan dibekukan.", + rebateRulesText6: "3. Promosi ini tidak dapat digabungkan dengan penawaran promosi apa pun. Seri, taruhan batal yang dikembalikan pada dua sisi berlawanan dan taruhan pada produk yang tidak berpartisipasi tidak akan dihitung sebagai penukaran yang sah.", + rebateRulesText7: "4. Harap pastikan untuk membaca syarat dan ketentuan ini dengan cermat sebelum Anda berpartisipasi dalam kegiatan ini." + }, + signinRules: { + title: "Aturan acara:", + signinRulesText1: "1、Setoran tunggal setiap hari minimal 500INR atau lebih akan diklaim sebagai bonus hingga 30%.", + signinRulesText2: "2、 Setelah deposit, hubungi dukungan pelanggan kami 24/7 untuk mengajukan permohonan.", + signinRulesText3: "3、 Bonus maksimum: 30000 per hari." + }, + popup: { + upRebateText: "Pasang taruhan dan ikuti peringkatnya", + upTo: "Gratis", + rankText: "Pasang taruhan dan ikuti peringkatnya", + rankFree: "Gratis", + rankReward: "Hadiah", + communityTitle: "Bonusnya sampai", + communityText: "Bergabunglah dengan komunitas telegram untuk berpartisipasi dalam acara hujan amplop merah", + communityTip: "Saya menyetujui semua pernyataan dalam Syarat dan Ketentuan", + signinText: "Selesaikan check-in harian hari ini untuk mendapatkan", + }, + promoCodePlaceholder: "Silakan masukkan Kode Promo", + signup: { + title: "Bonus Pendaftaran", + eventCountdown: "Hitung mundur acara", + task: "Tugas", + cliam: "Klaim", + totalRollover: "Jumlah Rollover", + ruleTitle: "Aturan acara", + rule1: "1. Selesaikan empat tugas di atas untuk mendapatkan hadiah. Klik tombol di atas untuk menerima hadiah.", + rule2: "2. Event hanya terbuka untuk pengguna yang telah mendaftar dalam waktu 24 jam.", + rule3: "3. Hadiah akan disimpan maksimal 7 hari, setelah itu tidak dapat ditukarkan lagi", + termTitle: "Syarat & Ketentuan", + term1: "1. Semua pemain harus memberikan nomor ponsel dan detail rekening banknya sebelum mendaftar. Nomor telepon, alamat IP, dan detail rekening bank harus sesuai dengan wilayahnya, dan pelanggaran apa pun akan membatalkan bonus atau keuntungannya.", + term2: "2. Pemain yang membuka beberapa akun atau akun palsu akan didiskualifikasi dari promosi. Selain itu, sisa dana bisa hangus dan laporannya dibekukan.", + term3: "3. Promosi ini tidak dapat digabungkan dengan penawaran promosi apa pun. Taruhan seri, pembatalan yang dikembalikan pada dua sisi berlawanan dan taruhan pada produk yang tidak berpartisipasi tidak akan dihitung sebagai turnover yang sah.", + term4: "4. Harap pastikan untuk membaca syarat dan ketentuan ini dengan cermat sebelum Anda berpartisipasi dalam kegiatan ini.", + toast1: 'Setelah menyelesaikan semua tugas, Anda bisa menerima hadiah' + }, + jili: { + title: "JiLi", + userRequirements: "Persyaratan Pengguna", + getGiftCode: "Dapatkan Kode Hadiah", + copy: "Menyalin", + suportedGamesTitle: "Game yang didukung Kode Hadiah", + ruleTitle: "Aturan acara", + rule1: "Setelah menerima kode Hadiah, silakan masukkan kode yang sesuai", + rule2: "1.masuk ke pengaturan>ikon hadiah>masukkan kode hadiah", + rule3: "2.Satu kode hadiah dapat digunakan satu kali per akun", + rule4: "3.masukkan kode saya dan dapatkan putaran gratis!", + termTitle: "Syarat & Ketentuan", + term1: "1. Semua pemain harus memberikan nomor ponsel dan detail rekening banknya sebelum mendaftar. Nomor telepon, alamat IP, dan detail rekening bank harus sesuai dengan wilayahnya, dan pelanggaran apa pun akan membatalkan bonus atau keuntungannya.", + term2: "2. Pemain yang membuka beberapa akun atau akun palsu akan didiskualifikasi dari promosi. Selain itu, sisa dana bisa hangus dan laporannya dibekukan.", + term3: "3. Promosi ini tidak dapat digabungkan dengan penawaran promosi apa pun. Taruhan seri, pembatalan yang dikembalikan pada dua sisi berlawanan dan taruhan pada produk yang tidak berpartisipasi tidak akan dihitung sebagai turnover yang sah.", + term4: "4. Harap pastikan untuk membaca syarat dan ketentuan ini dengan cermat sebelum Anda berpartisipasi dalam kegiatan ini.", + popbtn: "Dapatkan Sekarang", + poptip: "Jangan tampilkan hari ini", + popdes1: "Anda punya", + popdes2: "Gratis", + popdes3: "kode hadiah untuk diterima", + require1: '1. Pengguna mendaftar setelahnya', + require2: '2. Total jangkauan setoran', + require3: '3. Perlu', + require4: 'Daftarkan nomor ponsel' + } + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/search.js b/src/locales/lang/ind-IND/search.js new file mode 100644 index 0000000..5d752e6 --- /dev/null +++ b/src/locales/lang/ind-IND/search.js @@ -0,0 +1,22 @@ +export default { + search: { + title: 'Mencari', + searchGames: 'Permainan Pencarian', + searchResult: 'Hasil pencarian', + popularSearches: 'Pencarian Populer', + recommentGames: 'Rekomendasi Permainan', + recentlySearches: 'Pencarian Baru-baru ini', + + + tabs: { + tab1: 'Semua', + tab2: 'Hot', + tab3: 'Terkini' + }, + + message: { + nodata: 'Tidak ada hasil pencarian untuk', + norecord: 'Tidak Ada Catatan!' + } + } +} diff --git a/src/locales/lang/ind-IND/vip.js b/src/locales/lang/ind-IND/vip.js new file mode 100644 index 0000000..f4bf704 --- /dev/null +++ b/src/locales/lang/ind-IND/vip.js @@ -0,0 +1,22 @@ +export default { + vip: { + VIP: "VIP", + relegationSuccessfuIl: "Degradasi berhasil", + thisMonth: "bulan ini", + continueToDeposit: "Lanjutkan menyetor", + toReach: "untuk mencapai", + deposit: "Setoran", + privileges: "Hak istimewa", + upGradeBouns: "Peningkatan Kelas", + betRebate: "Rabat Taruhan", + weeklyBouns: "Bonus Mingguan", + birthdayBouns: "Hadiah Ulang Tahun", + withdrawDailyLimited: "Penarikan Harian Terbatas", + withdrawFee: "Biaya Penarikan", + withdrawDailyTimes: "Penarikan Waktu Harian:", + relegationRequirements: "Persyaratan degradasi", + VIPCustomerService: "Layanan Pelanggan VIP", + exclusiveforVlP: "Eksklusif untuk VIP", + customer: "Kontak", + } +} \ No newline at end of file diff --git a/src/locales/lang/ind-IND/withdraw.js b/src/locales/lang/ind-IND/withdraw.js new file mode 100644 index 0000000..bb43b34 --- /dev/null +++ b/src/locales/lang/ind-IND/withdraw.js @@ -0,0 +1,86 @@ +export default { + withdraw: { + title: 'Menarik', + title2: 'Tarik Riwayat', + bankAccount: 'Akun bank', + changeBankAccount: "Ganti akun", + withdrawAmount: 'Jumlah Penarikan', + addNewAccount: 'Tambahkan Akun Baru', + myBalance: 'Saldo saya', + total: 'Jumlah', + orderId: 'Nomor Pesanan', + + mesaage: { + nodata: 'Tidak ada catatan!' + }, + + input: { + placeholder: 'Jumlah Penarikan' + }, + + button: { + withdraw: 'MENARIK', + cancel: 'Membatalkan', + goToSetPassword: 'Mengonfirmasi', + addNewAccount: 'Tambahkan Akun Baru' + }, + + tips: { + title: 'Tips', + tips1: 'Dalam keadaan normal, penarikan anda akan masuk ke akun Bank Anda dalam waktu sekitar', + tips2: '2 jam', + tips3: 'dan waktu terlama tidak akan melebihi', + tips4: '24 jam' + }, + + items1: 'Batas Penarikan yang Tersisa', + items2: 'Batas Harian VIP', + items3: 'Persyaratan Taruhan', + items4: 'Sisa Waktu Penarikan Hari Ini', + + setPasswordPopup: { + title: 'Tetapkan Kata Sandi Penarikan', + des: 'Demi keamanan akun Anda, harap atur kata sandi penarikan terlebih dahulu.' + }, + + bankCardPopup: { + title: 'Rekening Bank Diperlukan', + des: 'Untuk dapat melakukan penarikan, silakan tambahkan rekening bank terlebih dahulu.' + }, + + configPopup: { + title: 'Kiat penarikan', + orderNumber: 'Nomor Pesanan', + arrivalAmount: 'Jumlah Kedatangan', + total: 'Jumlah', + withdrawAmount: 'Jumlah Penarikan', + serviceCharege: 'Biaya Layanan', + yourBankAccount: 'Rekening bank Anda', + chooseBankAccount: 'Pilih Rekening Bank', + withdrawPassword: 'Kata sandi penarikan', + + des1: 'Biaya penarikan adalah', + des2: '(Pajak penghasilan pribadi komprehensif)', + + placeHolder: 'Silakan masukkan kata sandi penarikan' + }, + + toast: { + text1: 'Silakan masukkan kata sandi penarikan Anda', + text2: 'Aplikasi berhasil, harap tunggu', + text3: 'Jumlah penarikan tidak boleh kosong', + text4: 'Anda masih punya ', + text5: 'Rupiah tersisa untuk bertaruh dalam permainan,' + }, + + tabs: { + tab1: 'Hari ini', + tab2: '7 hari', + tab3: '30 Hari' + }, + waitPage: { + btnTetx: "KEMBALI KE AKUN", + tipTetx: "Penarikan sedang di proses", + } + } +} \ No newline at end of file diff --git a/src/locales/lang/ja-JP.js b/src/locales/lang/ja-JP.js new file mode 100644 index 0000000..d7c19f9 --- /dev/null +++ b/src/locales/lang/ja-JP.js @@ -0,0 +1,11 @@ +import app from './ja-JP/app.js' +import login from './ja-JP/login.js' +import constants from './ja-JP/constants.js' +import home from './ja-JP/home.js' + +export default { + ...app, + ...login, + ...constants, + ...home +} diff --git a/src/locales/lang/ja-JP/app.js b/src/locales/lang/ja-JP/app.js new file mode 100644 index 0000000..fd3f6fb --- /dev/null +++ b/src/locales/lang/ja-JP/app.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/src/locales/lang/ja-JP/constants.js b/src/locales/lang/ja-JP/constants.js new file mode 100644 index 0000000..fd3f6fb --- /dev/null +++ b/src/locales/lang/ja-JP/constants.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/src/locales/lang/ja-JP/home.js b/src/locales/lang/ja-JP/home.js new file mode 100644 index 0000000..fd3f6fb --- /dev/null +++ b/src/locales/lang/ja-JP/home.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/src/locales/lang/ja-JP/login.js b/src/locales/lang/ja-JP/login.js new file mode 100644 index 0000000..fd3f6fb --- /dev/null +++ b/src/locales/lang/ja-JP/login.js @@ -0,0 +1,3 @@ +export default { + +} \ No newline at end of file diff --git a/src/locales/lang/zh-CN.js b/src/locales/lang/zh-CN.js new file mode 100644 index 0000000..8c6f793 --- /dev/null +++ b/src/locales/lang/zh-CN.js @@ -0,0 +1,5 @@ +import app from './zh-CN/app.js' + +export default { + ...app +} diff --git a/src/locales/lang/zh-CN/app.js b/src/locales/lang/zh-CN/app.js new file mode 100644 index 0000000..c947bb1 --- /dev/null +++ b/src/locales/lang/zh-CN/app.js @@ -0,0 +1,9 @@ +export default { + 'app.language': '语言', + 'app.languageChange': '语言切换', + 'app.notification': '通知', + 'app.user': '用户', + + 'app.language.english': '英语', + 'app.language.chinese': '中文' +} \ No newline at end of file diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..a940747 --- /dev/null +++ b/src/main.js @@ -0,0 +1,62 @@ +import App from './App' + +import { createSSRApp } from 'vue' + +import { setupStore } from '@/store' +import { setupLocales } from '@/locales' +import { setupRouterInterceptor } from '@/module/router/interceptor.js' + +import { setupAdjust } from '@/module/third/adjust.js' +import { setupOpeninstall } from '@/module/third/openinstall' +import { setupFbSdk } from '@/module/third/fbsdk' +import { setupErrorHandler } from '@/module/utils/errorHandler' +import { setupOkSpin } from '@/module/third/okspin.js' + +import CommonLayout from '@/components/layout/CommonLayout.vue' +import MobileHeader from '@/components/header/MobileHeader.vue' +import MobileLayout from '@/components/layout/MobileLayout' +import MobileSubLayout from '@/components/layout/MobileSubLayout' +import ThemeImage from '@/components/image/ThemeImage' +import CustomTabBar from '@/components/custom-tab-bar/CustomTabBar.vue' +import EmptyHold from './components/emptyHold/EmptyHold.vue' +import MobileCustomLayout from './components/layout/MobileCustomLayout.vue' +import MobileSubHeader from './components/header/MobileSubHeader.vue' + +import { formatKMB, formatThousandDot, formatFloat } from '@/module/formatter/data-formatter.js' +// import fbPixiel from './plugins/fb-pixiel' + +export function createApp() { + const app = createSSRApp(App) + + setupErrorHandler(app) + + setupStore(app) + setupLocales(app) + setupRouterInterceptor() + + // setupAdjust() + setupOpeninstall() + // setupFbSdk(app) + setupOkSpin() + // app.use(fbPixiel) + + app.component("common-layout", CommonLayout) + app.component('mobile-header', MobileHeader) + app.component('mobile-layout', MobileLayout) + app.component('mobile-sub-layout', MobileSubLayout) + app.component('mobile-custom-layout', MobileCustomLayout) + app.component('theme-image', ThemeImage) + app.component('custom-tabbar', CustomTabBar) + app.component('empty-hold', EmptyHold) + app.component('mobile-sub-header', MobileSubHeader) + + app.config.globalProperties.$formatKMB = formatKMB + app.config.globalProperties.$formatThousandDot = formatThousandDot + app.config.globalProperties.$formatFloat = formatFloat + app.config.errorHandler = (err, instance, info) => { + console.log('error', err, instance, info) + } + return { + app + } +} diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..7b958d9 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,172 @@ +{ + /* Spinz777 */// + // "name" : "Winzz777", + "name" : "Spinz777", + "appid" : "__UNI__FECBD22", + // "description" : "Winzz777", + "description" : "Spinz777", + "versionName" : "1.2.1", + "versionCode" : 121, + "channel_list" : [ + { + "id" : "suisui2" + } + ], + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : false, + "waiting" : false, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : { + "Share" : {}, + "Payment" : {} + }, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "targetSdkVersion" : 33, + "minSdkVersion" : 23, + "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ] + }, + /* ios打包配置 */ + "ios" : { + "idfa" : false, + "dSYMs" : false + }, + /* SDK配置 */ + "sdkConfigs" : { + "payment" : {}, + "ad" : {}, + "push" : {}, + "share" : {} + }, + "splashscreen" : { + "androidStyle" : "common", + "iosStyle" : "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" + } + } + } + }, + "nativePlugins" : { + "Tidu-GaidUtil" : { + "__plugin_info__" : { + "name" : "GaidUtil", + "description" : "获取gaid插件", + "platforms" : "Android", + "url" : "", + "android_package_name" : "", + "ios_bundle_id" : "", + "isCloud" : false, + "bought" : -1, + "pid" : "", + "parameters" : {} + } + } + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics" : { + "enable" : false + }, + "vueVersion" : "3", + "h5" : { + "router" : { + "mode" : "history", + "base" : "" + }, + "title" : "", + "devServer" : { + "port" : 5173, + "disableHostCheck" : true, + "proxy" : { + "/api" : { + "target" : "https://game.777spinz.com", + "changeOrigin" : true, + "secure" : true, + "pathRewrite" : { + "^/api" : "/" + } + } + } + }, + "optimization" : { + "treeShaking" : { + "enable" : true + } + } + }, + "locale" : "en" +} diff --git a/src/module/app/app.js b/src/module/app/app.js new file mode 100644 index 0000000..7eb6ace --- /dev/null +++ b/src/module/app/app.js @@ -0,0 +1,20 @@ +// 根据userAgent判断还是手机 +// export const isMobile = () => { +// const userAgent = navigator.userAgent || navigator.vendor || window.opera; +// return /android|avantgo|blackberry|iemobile|ipad|iphone|ipod|opera mini|opera mobi|palm|pocket|psp|series(4|6)0|symbian|windows ce|windows phone|xda|xiino/i.test(userAgent) || /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|au(di|\-m|l|g|r |s )|avan|be(ll|nq)|bi(lb|rd|t)|bl(ac|az)|br(e|t|w)|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|et(5|si)|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|(\/\-|))|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(c1|od)|me(rc|di|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n40(0|2|5)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa( +// } + +export const isPWA = () => { + // #ifdef H5 + if (navigator) { + if ('serviceWorker' in navigator) { + return !!navigator.serviceWorker.controller + } + + if ('standalone' in navigator) { + return navigator.standalone + } + } + // #endif + return false +} diff --git a/src/module/formatter/data-formatter.js b/src/module/formatter/data-formatter.js new file mode 100644 index 0000000..66a06bb --- /dev/null +++ b/src/module/formatter/data-formatter.js @@ -0,0 +1,121 @@ +// 用于处理数据格式化的方法 + +/** + * @description 四舍五入保留小数 + * @param {Number} value 需要格式化的值 + * @param {Number} n 保留的小数位数 + * @returns {Number} 结果 + */ +export const formatFloat = (value, n) => { + if (!value) { return (0.000).toFixed(n) } + if (!n) { + n = 0 + } + const powValue = Math.pow(10, n) + const newV = Math.round(Number(value) * powValue) / powValue + return newV.toFixed(n) +} + +/** + * @description 向下取整保留小数 + * @param {Number} value 需要格式化的值 + * @param {Number} n 保留的小数位数 + * @returns {Number} 结果 + */ +export const formatFloorFloat = (value, n) => { + if (!value) { return (0.000).toFixed(n) } + if (!n) { + n = 0 + } + const powValue = Math.pow(10, n) + const newV = Math.floor(Number(value) * powValue) / powValue + return newV.toFixed(n) +} + +/** + * @description 字符串转二进制 + */ +export const strToBinary = (str) => { + var result = [] + var list = str.split("") + for(var i = 0; i < list.length; i++){ + if(i != 0){ + result.push(" ") + } + var item = list[i] + var binaryStr = item.charCodeAt().toString(2) + result.push(binaryStr) + } + return result.join("") +} + +/** + * @description 转千分位 100,010.00 + */ +export const formatThousandDot = (value, n) => { + if (!value || value === 0) { return '0' } + let num = value + if (n || n === 0) { + num = formatFloat(num, n) + } + num = num + '' + return num.replace(/(\d{1,3})(?=(\d{3})+(?:$|\.))/g, '$1,') +} + +/** + * 处理位数国产 + * 小于5位没有 + 6位 e.g. 123456=123.4K 小数点1位 + 7位 e.g 1234567=1.234M 小数点3 位 + 8位 e.g 12345678=12.34M 小数点2 位 + 9位 e.g 123456789=123.4M 小数点1位 + 10位 e.g 1234567891=1.234B 小数点3位 + 11位 e.g 12345678912=12.34B 小数点2 位 + 12位 e.g 123456789123=123.4B 小数点1位 + KMBT + */ +export const formatKMB = (value) => { + if (!value) { return value } + + return formatThousandDot(value, 0) + + // const flagNum = Math.floor(Number(value)) + // const flagNumStr = flagNum + '' + // const length = flagNumStr.length + + // let result + // if (length === 5) { + // result = parseFloat(formatFloorFloat(flagNum / 1000, 2)) + 'K' + // } else if (length === 6) { + // result = parseFloat(formatFloorFloat(flagNum / 1000, 1)) + 'K' + // } else if (length === 7) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000, 3)) + 'M' + // } else if (length === 8) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000, 2)) + 'M' + // } else if (length === 9) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000, 1)) + 'M' + // } else if (length === 10) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000, 3)) + 'B' + // } else if (length === 11) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000, 2)) + 'B' + // } else if (length === 12) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000, 1)) + 'B' + // } else if (length === 13) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000 / 1000, 3)) + 'T' + // } else if (length === 14) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000 / 1000, 2)) + 'T' + // } else if (length === 15) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000 / 1000, 1)) + 'T' + // } else if (length > 15 ) { + // result = parseFloat(formatFloorFloat(flagNum / 1000 / 1000 / 1000 / 1000, 1)) + 'T' + // } else { + // result = formatThousandDot(flagNum, 0) + // } + // return result +} + +export default { + formatFloat, + strToBinary, + formatThousandDot +} \ No newline at end of file diff --git a/src/module/formatter/date-formatter.js b/src/module/formatter/date-formatter.js new file mode 100644 index 0000000..006448b --- /dev/null +++ b/src/module/formatter/date-formatter.js @@ -0,0 +1,124 @@ +// 用于处理时间日期格式化的方法 + +// 格式列表 +const formatType = [ + { type: 1, format: 'YYYY-MM-DD HH:mm:ss' }, + { type: 2, format: 'YYYY-MM-DD' }, + { type: 3, format: 'YYYY/MM/DD HH:mm:ss' }, + { type: 4, format: 'YYYY/MM/DD' }, + { type: 5, format: 'YYYYMM' }, + { type: 6, format: 'YYYY-MM-DD HH:mm' }, + { type: 7, format: 'YYYY-MM' }, + { type: 8, format: 'YYYYMMDD' }, + { type: 9, format: 'HH:mm' }, + { type: 10, format: 'YYYY/MM' }, +] + +// 获取类型格式 +const getFormatWithType = (type) => { + let format = formatType[0].format + formatType.forEach(element => { + if (element.type === type) { + format = element.format + } + }) + return format +} + +/** + * @description 日期转时间 + * format 格式 + * date 日期类型 + */ +const dateFormat = (date, format) => { + var tmpDate = { + "M+": date.getMonth() + 1, + "D+": date.getDate(), + "H+": date.getHours(), + "m+": date.getMinutes(), + "s+": date.getSeconds(), + "q+": Math.floor((date.getMonth() + 3) / 3), + "S+": date.getMilliseconds() + }; + if (/(y+)/i.test(format)) { + format = format.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length)); + } + for (var k in tmpDate) { + if (new RegExp("(" + k + ")").test(format)) { + format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? tmpDate[k] : ("00" + tmpDate[k]).substr(("" + tmpDate[k]).length)); + } + } + return format; +} + +/** + * @description 日期转成String类型 + */ +export const dateToString = (date, type) => { + if (!date) { + return '' + } + return dateFormat(date, getFormatWithType(type)) +} + +/** + * @description 日期字符串转成String类型 + */ +export const formatDateStr = (dateStr, type) => { + if (!dateStr) { + return '' + } + if (typeof dateStr === 'string') { + dateStr =dateStr.replace(/\-/g, "/") + dateStr =dateStr.replace('T', " ") + dateStr =dateStr.replace('.000', " ") + } + const date = new Date(dateStr) + + // console.log('formatDateStr', date, dateStr) + return dateFormat(date, getFormatWithType(type)) +} + +/** + * @description 获取当前时间String类型 + */ +export const getCurrentDateStr = (type) => { + const currentDate = new Date() + return dateFormat(currentDate, getFormatWithType(type)) +} + +/** + * @description 获取之后时间String类型 + */ +export const getNextDaysDateStr = (days, type) => { + const currentDate = new Date() + let tempDate = new Date(currentDate) + tempDate.setDate(currentDate.getDate() + days) + return dateFormat(tempDate, getFormatWithType(type)) +} + +export const countdownFormatter = (timestamps) => { + if (timestamps <= 0) { return '00:00:00' } + const formatTimeInt = (value) => { + if (value >= 0 && value < 10) { + return '0' + value + } else { + return '' + value + } + } + // const days = Math.floor(timestamps / (1000 * 60 * 60 * 24)) + // const hours = Math.floor((timestamps % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) + const hours = Math.floor(timestamps / (1000 * 60 * 60)) + const minutes = Math.floor((timestamps % (1000 * 60 * 60)) / (1000 * 60)) + const seconds = Math.floor((timestamps % (1000 * 60)) / 1000) + + return `${formatTimeInt(hours)}:${formatTimeInt(minutes)}:${formatTimeInt(seconds)}` +} + +export default { + dateToString, + formatDateStr, + getCurrentDateStr, + getNextDaysDateStr, + countdownFormatter +} diff --git a/src/module/fullscreen/fullscreen-handler.js b/src/module/fullscreen/fullscreen-handler.js new file mode 100644 index 0000000..6836b0f --- /dev/null +++ b/src/module/fullscreen/fullscreen-handler.js @@ -0,0 +1,44 @@ +export const enterFullscreen = () => { + // #ifdef H5 + if (document.documentElement.requestFullscreen) { + document.documentElement.requestFullscreen(); + } else if (document.documentElement.mozRequestFullScreen) { /* Firefox */ + document.documentElement.mozRequestFullScreen(); + } else if (document.documentElement.webkitRequestFullscreen) { /* Chrome, Safari & Opera */ + document.documentElement.webkitRequestFullscreen(); + } else if (document.documentElement.msRequestFullscreen) { /* IE/Edge */ + document.documentElement.msRequestFullscreen(); + } + // #endif + // #ifdef APP-PLUS + // plus.navigator.setFullscreen(true) + // #endif +} + +export const exitFullscreen = () => { + // #ifdef H5 + if (document.exitFullscreen) { + document.exitFullscreen(); + } else if (document.mozCancelFullScreen) { /* Firefox */ + document.mozCancelFullScreen(); + } else if (document.webkitExitFullscreen) { /* Chrome, Safari and Opera */ + document.webkitExitFullscreen(); + } else if (document.msExitFullscreen) { /* IE/Edge */ + document.msExitFullscreen(); + } + // #endif +} + +// const toggleFullScreen = () => { +// // #ifdef H5 +// if (appStore.systemInfo.browserName === 'safari') { +// // if (safari.application) { +// // safari.application.activate() +// // } +// } else { +// if (!document.fullscreenElement) { +// document.documentElement.requestFullscreen() +// } +// } +// // #endif +// } \ No newline at end of file diff --git a/src/module/request/http-client.js b/src/module/request/http-client.js new file mode 100644 index 0000000..1b1fd8c --- /dev/null +++ b/src/module/request/http-client.js @@ -0,0 +1,54 @@ +// http请求方法封装 +class HttpClient { + + // [{ key, value }] + taskList = [] + + // http基础请求方法 + request = (option) => { + const taskName = option.name || option.url || '' + return new Promise((resolve, reject) => { + const requestTask = uni.request(option).then(response => { + if (Array.isArray(response) && response.length) { + resolve(response[response.length - 1]) + } else { + resolve(response) + } + }).catch(error => { + reject(error) + }).finally(() => { + this.removeTaskFromTaskList(taskName) + }) + this.addTaskToTaskList(requestTask, taskName) + }) + } + + addTaskToTaskList (task, name) { + if (!(task && name)) { return } + this.taskList.push({ key: name, value: task }) + // console.log('addTaskToTaskList', name, this.taskList) + } + + removeTaskFromTaskList (name) { + if (!name) { return } + for (let i = this.taskList.length - 1; i >= 0; i--) { + if (this.taskList[i].key === name) { + this.taskList.splice(i, 1) + break; + // console.log('removeTaskFromTaskList', name, this.taskList) + } + } + } + + // 取消http请求 + cancelRequest = (name) => { + this.taskList.forEach(el => { + if (el.key === name && el.value) { + el.value.abort() + this.removeTaskFromTaskList(name) + } + }) + } +} + +export default HttpClient diff --git a/src/module/request/http-constant.js b/src/module/request/http-constant.js new file mode 100644 index 0000000..1f575f4 --- /dev/null +++ b/src/module/request/http-constant.js @@ -0,0 +1,93 @@ + +import globalConfig from '@/config/global.config.js' +import { useUserStore } from '@/store/useUserStore.js' +import { useAppStore } from '@/store/useAppStore' +import { useLangStore } from '@/store/useLangStore' + + +// http状态吗 +const HttpStatus = { + SUCCESS: 200, + CLIENTERROR: 400, + AUTHENTICATE: 401, + FORBIDDEN: 403, + NOTFOUND: 404, + SERVERERROR: 500, + BADGATEWAY: 502, + SERVICEUNAVAILABLE: 503, + GATEWAYTIMEOUT: 504 +} + +// 后台返回状态码 +const HttpResponseCode = { + SUCCESS: "200", + TOKENERROR: "401", + TOKENERROR2: "-1", + SERVERERROR: "500" +} + +// 请求返回log +const HttpRequestLog = (url, data, res) => { + // console.log('request', url, data) + // console.log('response:', res) +} + +// 错误提示弹窗 +const ShowErrorMessage = (message) => { + if (!message) { return } + setTimeout(() => { + uni.showToast({ + title: message, + icon: 'none', + duration: 3000 + }) + }) +} + +// 请求头处理 +const HttpRequestHeader = (option) => { + if (option.isClearHeader) { + return {} + } + const header = { + } + return Object.assign({}, header, option.header) +} + +// 请求参数处理 +const HttpRequestData = (option) => { + if (Array.isArray(option.data)) { + return option.data + } + + const userStore = useUserStore() + const appStore = useAppStore() + const langStore = useLangStore() + + const commonData = { + appId: globalConfig.appId, + deviceNumber: appStore.deviceId, + androidId: appStore.androidId, + locale: langStore.requestLocale, + // appPackageName: `com.luck.h5.${globalConfig.appId}`, + appPackageName: appStore.packageName, + h5No: isNaN(appStore.h5No) ? 1 : Number(appStore.h5No), + // adid: appStore.adjustAdid, + channel: appStore.channelId, + deviceType: appStore.isNative ? 3 : 1 + } + if (userStore.isLogin) { + commonData.sign = userStore.sign + commonData.uid = userStore.uid + } + return Object.assign({}, commonData, option.data) +} + +export { + HttpStatus, + HttpResponseCode, + HttpRequestLog, + ShowErrorMessage, + HttpRequestHeader, + HttpRequestData +} diff --git a/src/module/request/http-request.js b/src/module/request/http-request.js new file mode 100644 index 0000000..48263c4 --- /dev/null +++ b/src/module/request/http-request.js @@ -0,0 +1,113 @@ +import HttpClient from './http-client.js' +import { HttpStatus, HttpResponseCode, HttpRequestLog, ShowErrorMessage, HttpRequestHeader, HttpRequestData } from './http-constant.js' +import { useUserStore } from '@/store/useUserStore.js' +import { useAppStore } from '@/store/useAppStore.js' +import toast from '../toast/toast.js' + +const httpClient = new HttpClient() + +// http通用请求 +const httpRequest = (option) => { + const url = option.url + const header = HttpRequestHeader(option) + const data = HttpRequestData(option) + // console.log("request data:", data); + + return new Promise(resolve => { + httpClient.request({ + url: url, + method: option.method, + data: data, + header: header, + dataType: 'json', + name: option.name + }).then(res => { + HttpRequestLog(url, data, res.data) + handleResponse(res, resolve) + }).catch(err => { + HttpRequestLog(url, data, err) + handleError(err, resolve) + }) + }) +} + +// 请求结果处理 +const handleResponse = (response, resolve) => { + if (response.statusCode === HttpStatus.SUCCESS) { + const responseData = response.data + // 登录无内部code,先这么处理 + if (typeof responseData !== 'object' || !responseData.state) { + resolve({ code: 200, data: responseData }) + return + } + // 有内部code处理 + if (responseData.state === HttpResponseCode.SUCCESS) { + resolve({ code: 200, data: responseData.resultData, totalData: responseData, message: '', appDownloadUrl: responseData.appDownLoadURL || '' }) + } else { + if (responseData.state === HttpResponseCode.TOKENERROR || responseData.state === HttpResponseCode.TOKENERROR2 || responseData.msg && (responseData.msg.includes('Please login first') > 0 || responseData.msg.includes('please login') > 0)) { + console.log('guested', userStore.guested); + const userStore = useUserStore() + userStore.logout() + if (userStore.guested) { + uni.reLaunch({ + url: '/pages/Login/Login' + }) + } else { + uni.reLaunch({ + url: '/pages/index/index' + }) + } + toast.hideLoading() + resolve({ code: 999, data: null, message: responseData.msg || 'request failed' }) + } else { + toast.hideLoading() + if (responseData.msg && !responseData.msg.includes('system')) { + ShowErrorMessage(responseData.msg) + } + } + } + } else if (response.statusCode === HttpStatus.AUTHENTICATE) { + resolve({ code: response.statusCode, data: null, message: response.errMsg }) + + const userStore = useUserStore() + userStore.logout() + uni.reLaunch({ + url: '/pages/index/index' + }) + } else { + resolve({ code: response.statusCode, data: null, message: response.errMsg }) + if (response.data && response.data.message) { + // ShowErrorMessage(response.data.message) + } else { + // ShowErrorMessage(`System Error! ${response.statusCode} ${response.errMsg}`) + } + } +} + +const handleError = (error, resolve) => { + resolve({ code: 999, data: null, message: error.message }) + // ShowErrorMessage(`System Error! ${error.message}`) +} + +// get请求方法 +const get = (option) => { + option.method = 'GET' + return httpRequest(option) +} + +// post请求方法 +const post = (option) => { + option.method = 'POST' + return httpRequest(option) +} + +// 取消请求 +const cancel = (name) => { + httpClient.cancelRequest(name) +} + +export default { + get, + post, + cancel +} diff --git a/src/module/request/http-upload.js b/src/module/request/http-upload.js new file mode 100644 index 0000000..376d892 --- /dev/null +++ b/src/module/request/http-upload.js @@ -0,0 +1,106 @@ +import { HttpStatus, HttpResponseCode, HttpRequestLog, ShowErrorMessage, HttpRequestHeader } from './http-constant.js' +import { useUserStore } from '@/store/useUserStore.js' + +// 上传方法 +const uploadFile = (option) => { + const header = HttpRequestHeader(option) + return new Promise(resolve => { + uni.uploadFile({ + url: option.url, + filePath: option.filePath, + header: header, + timeout: 10000, + name: option.name || 'file', + formData: option.formData || {}, + success: (response) => { + if (response.data) { + response.data = JSON.parse(response.data) + } + // HttpRequestLog(option.url, params, res.data) + handleResponse(response, resolve) + }, + fail: (err) => { + // HttpRequestLog(option.url, params, err) + handleError(err, resolve) + } + }) + }) +} + +// 批量上传文件,同一个bizCode +const uploadFiles = (option) => { + const queue = async (filePaths) => { + let res = [] + for (let filePath of filePaths) { + const params = { + url: option.url, + filePath: filePath, + formData: option.formData + } + const { code, data } = await uploadFile(params) + if (code === 200) { + res.push(data) + } else { + return Promise.resolve({ code: 999 }) + } + } + const callbackData = { + files: res + // filePaths: res.map(el => el.filePath) + } + return Promise.resolve({ code: 200, data: callbackData }) + } + return queue(option.filePaths) +} + +// 请求结果处理 +const handleResponse = (response, resolve) => { + if (response.statusCode === HttpStatus.SUCCESS) { + const responseData = response.data + // 登录无内部code,先这么处理 + if (!responseData.Code) { + resolve({ code: 200, data: responseData }) + return + } + // 有内部code处理 + if (responseData.Code === HttpResponseCode.SUCCESS) { + resolve({ code: 200, data: responseData.Data, totalData: responseData, message: '' }) + } else { + resolve({ code: 999, data: null, message: responseData.Msg || '' }) + if (responseData.Msg) { + ShowErrorMessage(responseData.Msg) + } + if (responseData.Code === HttpResponseCode.TOKENERROR || responseData.Code === HttpResponseCode.TOKENERROR2) { + const userStore = useUserStore() + userStore.logout() + uni.reLaunch({ + url: '/pages/index/index' + }) + } + } + } else if (response.statusCode === HttpStatus.AUTHENTICATE) { + resolve({ code: response.statusCode, data: null, message: response.errMsg }) + const userStore = useUserStore() + userStore.logout() + uni.reLaunch({ + url: '/pages/index/index' + }) + } else { + resolve({ code: response.statusCode, data: null, message: response.errMsg }) + if (response.data && response.data.message) { + ShowErrorMessage(response.data.message) + } else { + ShowErrorMessage('Sorry,服务器开小差了!') + } + } +} + +const handleError = (error, resolve) => { + resolve({ code: 999, data: null, message: error.message }) + ShowErrorMessage('Sorry,服务器开小差了!') +} + +export default { + uploadFile, + uploadFiles +} diff --git a/src/module/router/interceptor.js b/src/module/router/interceptor.js new file mode 100644 index 0000000..a1f4c24 --- /dev/null +++ b/src/module/router/interceptor.js @@ -0,0 +1,50 @@ +import { useUserStore } from '@/store/useUserStore' +import { useDepositStore } from '@/store/useDepositStore' +import { useAppStore } from '@/store/useAppStore' + +// 路由权限拦截 +export const setupRouterInterceptor = () => { + const list = [ + 'navigateTo', + 'redirectTo', + 'reLaunch', + 'switchTab' + ] + + const whiteList = [ + '/pages/home/Home', + '/pages/index/index', + '/pages/Login/Login', + '/pages/Login/LoginV2', + '/pages/Login/Register', + '/pages/Login/ForgetPassword' + ] + + const depositList = [ + '/pages/wallet/Deposit' + ] + + list.forEach(item => { + uni.addInterceptor(item, { + invoke(e) { + // const userStore = useUserStore() + // if (!userStore.isLogin && !whiteList.includes(e.url)) { + // uni.navigateTo({ + // url: '/pages/Login/LoginV2' + // }) + // return false + // } + const appStore = useAppStore() + const depositStore = useDepositStore() + if (appStore.phoneNumberPrefix === '+91') { + if (!depositStore.chargeInfo.rechargeOpen && depositList.includes(e.url)) { + depositStore.showDepositClosePopup = true + return false + } + } + console.log('jump to the page:', e.url) + return true + } + }) + }) +} \ No newline at end of file diff --git a/src/module/storage/local-storage.js b/src/module/storage/local-storage.js new file mode 100644 index 0000000..6a81579 --- /dev/null +++ b/src/module/storage/local-storage.js @@ -0,0 +1,20 @@ +// 本地存储 +const LocalStorage = { + setSync (key, value) { + uni.setStorageSync(key, value) + }, + + getSync (key) { + return uni.getStorageSync(key) + }, + + removeSync (key) { + uni.removeStorageSync(key) + }, + + clearSync () { + uni.clearStorageSync() + } +} + +export default LocalStorage diff --git a/src/module/third/adjust.js b/src/module/third/adjust.js new file mode 100644 index 0000000..8954054 --- /dev/null +++ b/src/module/third/adjust.js @@ -0,0 +1,67 @@ +// #ifdef H5 +import Adjust from "@adjustcom/adjust-web-sdk" +// #endif + +import { useAppStore } from "@/store/useAppStore" +import { requestUserAdid } from '@/api/user.js' + +export const setupAdjust = () => { + // #ifdef H5 + if (!process.env.ADJUST_KEY) { + return + } + Adjust.initSdk({ + appToken: process.env.ADJUST_KEY, + environment: 'production', + // logLevel: 'verbose', + // environment: process.env.NODE_ENV === 'production' ? 'production' : 'sandbox' + attributionCallback: (e, attribution) => { + console.log('Adjust info callback:', process.env.ADJUST_KEY, attribution) + const appStore = useAppStore() + appStore.adjustAdid = attribution.adid + } + }) + getAdjustAdid() + // #endif +} + +export const getAdjustAdid = () => { + return new Promise((resolve) => { + if (!process.env.ADJUST_KEY) { + resolve() + return + } + const appStore = useAppStore() + if (appStore.adjustAdid) { + resolve() + return + } + let count = 0 + const timer = setInterval(() => { + const attribution = Adjust.getAttribution() + console.log('Adjust info:', process.env.ADJUST_KEY, attribution) + + if (attribution && attribution.adid) { + resolve() + clearInterval(timer) + appStore.adjustAdid = attribution.adid + return + } + + count++ + if (count > 30) { + resolve() + clearInterval(timer) + } + }, 500) + }) +} + +export const reportAdjustAdid = async () => { + if (!process.env.ADJUST_KEY) { + return + } + // await getAdjustAdid() + // const { code } = await requestUserAdid() +} + diff --git a/src/module/third/fbsdk.js b/src/module/third/fbsdk.js new file mode 100644 index 0000000..58327d8 --- /dev/null +++ b/src/module/third/fbsdk.js @@ -0,0 +1,14 @@ +// H5-lcuky777 +// pixel: +// 1411288862899072 +// token: +// EAAEZC8Jlfl4UBO81IlyNZATZCZBcZALZBVSP7hu74sMFZBO0ZCxUtqb6JAYZBd8sDXuXQjGVBGmGxGASUWrbZB1qNtBR4FZBU3z95uPoAhWSlDgXcsvSPgbxatVsitTu0leSBZCeV6Ca4bURslm3FHLIqZASX6uDpIrfMgWhJQ2PRTzXoIcmr2BDCuEWP60SwYLB8ZA0aufQZDZD + +export const setupFbSdk = (app) => { + // #ifdef H5 + // if (window.fbq) { + // window.fbq('init', '1411288862899072'); + // window.fbq('track', 'PageView'); + // } + // #endif +} \ No newline at end of file diff --git a/src/module/third/googlesdk.js b/src/module/third/googlesdk.js new file mode 100644 index 0000000..ca58f30 --- /dev/null +++ b/src/module/third/googlesdk.js @@ -0,0 +1,71 @@ +import HttpClient from '@/module/request/http-client.js' +import Toast from '@/module/toast/toast.js' + +const httpClient = new HttpClient() +const googleApi = { + auth: 'https://accounts.google.com/o/oauth2/v2/auth', + getUserInfo: 'https://www.googleapis.com/oauth2/v2/userinfo' +} + +const clientId = '402236096416-lqmokpmsrkm1var22hqrkdba555v4gdm.apps.googleusercontent.com' +const responseType = 'token' +const scope = 'email profile' + +export const googleAuthLogin = (options) => { + // #ifdef H5 + const redirectUri = window.location.href.split('?')[0] + const url = `${googleApi.auth}?client_id=${clientId}&redirect_uri=${encodeURIComponent(redirectUri)}&scope=${scope}&response_type=${responseType}&state=${generateNonce()}` + window.location.href = url + // #endif +} + +export const getGoogleUserInfo = (options) => { + return new Promise(resolve => { + if (!options) { + resolve({ code: 999 }) + return + } + httpClient.request({ + url: googleApi.getUserInfo, + method: 'GET', + header: { + Authorization: `Bearer ${options.accessToken}` + }, + dataType: 'json' + }).then(res => { + if (res.statusCode === 200 && res.data) { + resolve({ code: 200, data: res.data }) + } else { + resolve({ code: 999 }) + if (res.errMsg) { + Toast.show(res.errMsg) + } + } + }).catch(err => { + resolve({ code: 999 }) + if (err) { + Toast.show(JSON.stringify(err)) + } + }) + }) +} + +// #state=qjenqanjbh7pgm8qama99&access_token=ya29.a0AXooCgvYMTTEyFvqhLwsGgyCgl8uybY6OafURm3hL4lUYnL2W_y_PoItN-COVUv-yZ9a1qgLxgxnpvOHnQOp6O3nDfi3S-6AAiwtfqSw2Dg9G2daspkLFBdt_V020KcJG4_mZan8OfZTGH6sEPt5Y3OFvQ8azsSDHAaCgYKATwSARESFQHGX2MiFvuPFGeD07f4oG36j8NDsg0169&token_type=Bearer&expires_in=3599&scope=email%20profile%20openid%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&authuser=0&prompt=consent + +const generateNonce = () => { + return ( + Math.random().toString(36).substring(2, 15) + + Math.random().toString(36).substring(2, 15) + ) +} + +export const searchParam = (url, key) => { + if (!url.includes(key)) { return null } + const urlList = url.split('#') + const kvStr = urlList.find(el => el.includes(key)) + if (!kvStr) { return null } + const kvList = kvStr.split('&') + const finalStr = kvList.find(el => el.includes(key)) + if (!finalStr) { return null } + return finalStr.split('=')[1] +} diff --git a/src/module/third/okspin.js b/src/module/third/okspin.js new file mode 100644 index 0000000..486508d --- /dev/null +++ b/src/module/third/okspin.js @@ -0,0 +1,45 @@ +import { useAppStore } from "@/store/useAppStore" + +const okspinId = process.env.ADVERTISER_APP_ID + +export const setupOkSpin = () => { + // #ifdef H5 + const appStore = useAppStore() + if (appStore.phoneNumberPrefix === '+92' && okspinId) { + let head = document.getElementsByTagName('body')[0]; + let script = document.createElement('script'); + script.type = 'text/javascript'; + script.src = 'https://s.oksp.in/js/tag.js?aa=' + okspinId + head.appendChild(script) + console.log('okspin', 'init', okspinId) + } + // #endif +} + +// okspin打点 +const pushEvent = (eid, data) => { + // #ifdef H5 + const appStore = useAppStore() + if (appStore.phoneNumberPrefix === '+92' && okspinId) { + window._okTag = window._okTag || [] + window._okTag.push({ + "eid": eid, + "data": data + }) + console.log('okspin', eid) + } + // #endif +} + + +export const okSpin = { + register: () => { + pushEvent('register', {}) + }, + login: () => { + pushEvent('login', {}) + }, + purchase: () => { + pushEvent('purchase', {}) + } +} diff --git a/src/module/third/openinstall.js b/src/module/third/openinstall.js new file mode 100644 index 0000000..35aa1f7 --- /dev/null +++ b/src/module/third/openinstall.js @@ -0,0 +1,19 @@ +// key: bsov13 +export const setupOpeninstall = () => { + // const openinstall = uni.requireNativePlugin('openinstall-plugin') + // openinstall.init() + + // openinstall.getInstall( + // 8, + // function(result) { + // console.log('getInstall : channel=' + result.channelCode + ', data=' + result.bindData + // + ', shouldRetry=' + result.shouldRetry); + // } + // ); + + // openinstall.registerWakeUp(function(result){ + // console.log('getWakeup : channel=' + result.channelCode + ', data=' + result.bindData); + // }); + + // openinstall.reportRegister(); +} \ No newline at end of file diff --git a/src/module/toast/toast.js b/src/module/toast/toast.js new file mode 100644 index 0000000..06e8f85 --- /dev/null +++ b/src/module/toast/toast.js @@ -0,0 +1,42 @@ + +const showLoading = (title) => { + uni.showLoading({ + title: title || '', + mask: true + }) +} + +const hideLoading = () => { + uni.hideLoading() +} + +const show = (title, icon) => { + if (!title) { return } + uni.showToast({ + title: title || '', + mask: true, + icon: icon || 'none', + duration: 2000 + }) +} + +const showSuccess = (title) => { + uni.showToast({ + title: title || 'Success!', + icon: 'success', + mask: true, + duration: 1500 + }) +} + +const hide = () => { + uni.hideToast() +} + +export default { + showLoading, + hideLoading, + show, + hide, + showSuccess +} diff --git a/src/module/utils/conversionTime.js b/src/module/utils/conversionTime.js new file mode 100644 index 0000000..7f3ebe1 --- /dev/null +++ b/src/module/utils/conversionTime.js @@ -0,0 +1,27 @@ +export const conversionTime = (value) => { + var currentDate = new Date(); + if(value) { + currentDate.setDate(currentDate.getDate() - value + 1); + } + + var year = currentDate.getFullYear(); + var month = currentDate.getMonth() + 1; // 月份是从0开始计数的,所以要加1 + var day = currentDate.getDate(); + return year + '-' + addZero(month) + '-' + addZero(day); // 年月日 + month + '-' + (day < 10 ? '0' : '') + day +} + +export const formatTime = (value) => { + if(!value) return '' + var date = new Date(value); + var year = date.getFullYear(); + var month = date.getMonth() + 1; // 月份是从0开始计数的,所以要加1 + var day = date.getDate(); + var hour = date.getHours(); + var minute = date.getMinutes(); + var second = date.getSeconds(); + return year + '-' + addZero(month) + '-' + addZero(day) + ' ' + addZero(hour) + ':' + addZero(minute) + ':' + addZero(second) +} + +const addZero = (num) => { + return num < 10 ? '0' + num : num +} \ No newline at end of file diff --git a/src/module/utils/convertBirthday.js b/src/module/utils/convertBirthday.js new file mode 100644 index 0000000..113bd62 --- /dev/null +++ b/src/module/utils/convertBirthday.js @@ -0,0 +1,16 @@ +import { + MonthList +} from "@/pages/account/constants/birthday.js" +export const convertBirthday = (value) => { + let year = value.slice(0, 4); + let month = value.slice(4, 6); + let day = value.slice(6, value.length); + return { + birthdayText: MonthList[month - 1] + day + "," + year, + year: year, + month: MonthList[month - 1], + monthIndex: month - 1, + day: day + } + +} \ No newline at end of file diff --git a/src/module/utils/encipherPhone.js b/src/module/utils/encipherPhone.js new file mode 100644 index 0000000..c96176c --- /dev/null +++ b/src/module/utils/encipherPhone.js @@ -0,0 +1,15 @@ +export const encipherPhone = (phone) => { + if (phone != "" && phone != undefined) { + let mobile = phone.substring(2); + return mobile.replace(/(\d{2})\d{4}(\d{4})/, "$1****$2"); + } + return "" +} + +export const encipherAccountPhone = (phone) => { + if (phone != "" && phone != undefined) { + let mobile = phone; + return mobile.replace(/(\d{5})\d{4}(\d{3})/, "$1****$2"); + } + return "" +} \ No newline at end of file diff --git a/src/module/utils/errorHandler.js b/src/module/utils/errorHandler.js new file mode 100644 index 0000000..9165b17 --- /dev/null +++ b/src/module/utils/errorHandler.js @@ -0,0 +1,20 @@ +import { requestAppStackUpload } from "@/api/app" +import globalConfig from '@/config/global.config.js' +import { useAppStore } from "@/store/useAppStore" +import { useUserStore } from "@/store/useUserStore" + +export const setupErrorHandler = (app) => { + app.config.errorHandler = (err, instance, info) => { + const appStore = useAppStore() + const userStore = useUserStore() + + requestAppStackUpload({ + appId: globalConfig.appId, + appPackageName: appStore.packageName, + deviceNumber: appStore.deviceId, + data: JSON.stringify(err), + userId: userStore.userInfo.id + }) + console.log('error', err) + } +} \ No newline at end of file diff --git a/src/module/utils/htmlparser.js b/src/module/utils/htmlparser.js new file mode 100644 index 0000000..0d28a40 --- /dev/null +++ b/src/module/utils/htmlparser.js @@ -0,0 +1,352 @@ +/* + * HTML5 Parser By Sam Blowes + * + * Designed for HTML5 documents + * + * Original code by John Resig (ejohn.org) + * http://ejohn.org/blog/pure-javascript-html-parser/ + * Original code by Erik Arvidsson, Mozilla Public License + * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js + * + * ---------------------------------------------------------------------------- + * License + * ---------------------------------------------------------------------------- + * + * This code is triple licensed using Apache Software License 2.0, + * Mozilla Public License or GNU Public License + * + * //////////////////////////////////////////////////////////////////////////// + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * //////////////////////////////////////////////////////////////////////////// + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Simple HTML Parser. + * + * The Initial Developer of the Original Code is Erik Arvidsson. + * Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights + * Reserved. + * + * //////////////////////////////////////////////////////////////////////////// + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ---------------------------------------------------------------------------- + * Usage + * ---------------------------------------------------------------------------- + * + * // Use like so: + * HTMLParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + * // or to get an XML string: + * HTMLtoXML(htmlString); + * + * // or to get an XML DOM Document + * HTMLtoDOM(htmlString); + * + * // or to inject into an existing document/DOM node + * HTMLtoDOM(htmlString, document); + * HTMLtoDOM(htmlString, document.body); + * + */ +// Regular Expressions for parsing tags and attributes +var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/; +var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/; +var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; // Empty Elements - HTML 5 + +var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); // Block Elements - HTML 5 +// fixed by xxx 将 ins 标签从块级名单中移除 + +var block = makeMap('a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); // Inline Elements - HTML 5 + +var inline = makeMap('abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); // Elements that you can, intentionally, leave open +// (and which close themselves) + +var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); // Attributes that have their values filled in disabled="disabled" + +var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything) + +var special = makeMap('script,style'); +function HTMLParser(html, handler) { + var index; + var chars; + var match; + var stack = []; + var last = html; + + stack.last = function () { + return this[this.length - 1]; + }; + + while (html) { + chars = true; // Make sure we're not in a script or style element + + if (!stack.last() || !special[stack.last()]) { + // Comment + if (html.indexOf(''); + + if (index >= 0) { + if (handler.comment) { + handler.comment(html.substring(4, index)); + } + + html = html.substring(index + 3); + chars = false; + } // end tag + + } else if (html.indexOf(']*>'), function (all, text) { + text = text.replace(/|/g, '$1$2'); + + if (handler.chars) { + handler.chars(text); + } + + return ''; + }); + parseEndTag('', stack.last()); + } + + if (html == last) { + throw 'Parse Error: ' + html; + } + + last = html; + } // Clean up any remaining tags + + + parseEndTag(); + + function parseStartTag(tag, tagName, rest, unary) { + tagName = tagName.toLowerCase(); + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag('', stack.last()); + } + } + + if (closeSelf[tagName] && stack.last() == tagName) { + parseEndTag('', tagName); + } + + unary = empty[tagName] || !!unary; + + if (!unary) { + stack.push(tagName); + } + + if (handler.start) { + var attrs = []; + rest.replace(attr, function (match, name) { + var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : ''; + attrs.push({ + name: name, + value: value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') // " + + }); + }); + + if (handler.start) { + handler.start(tagName, attrs, unary); + } + } + } + + function parseEndTag(tag, tagName) { + // If no tag name is provided, clean shop + if (!tagName) { + var pos = 0; + } // Find the closest opened tag of the same type + else { + for (var pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos] == tagName) { + break; + } + } + } + + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) { + if (handler.end) { + handler.end(stack[i]); + } + } // Remove the open elements from the stack + + + stack.length = pos; + } + } +} + +function makeMap(str) { + var obj = {}; + var items = str.split(','); + + for (var i = 0; i < items.length; i++) { + obj[items[i]] = true; + } + + return obj; +} + +function removeDOCTYPE(html) { + return html.replace(/<\?xml.*\?>\n/, '').replace(/\n/, '').replace(/\n/, ''); +} + +function parseAttrs(attrs) { + return attrs.reduce(function (pre, attr) { + var value = attr.value; + var name = attr.name; + + if (pre[name]) { + pre[name] = pre[name] + " " + value; + } else { + pre[name] = value; + } + + return pre; + }, {}); +} + +function parseHtml(html) { + html = removeDOCTYPE(html); + var stacks = []; + var results = { + node: 'root', + children: [] + }; + HTMLParser(html, { + start: function start(tag, attrs, unary) { + var node = { + name: tag + }; + + if (attrs.length !== 0) { + node.attrs = parseAttrs(attrs); + } + + if (unary) { + var parent = stacks[0] || results; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } else { + stacks.unshift(node); + } + }, + end: function end(tag) { + var node = stacks.shift(); + if (node.name !== tag) console.error('invalid state: mismatch end tag'); + + if (stacks.length === 0) { + results.children.push(node); + } else { + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }, + chars: function chars(text) { + var node = { + type: 'text', + text: text + }; + + if (stacks.length === 0) { + results.children.push(node); + } else { + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }, + comment: function comment(text) { + var node = { + node: 'comment', + text: text + }; + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }); + return results.children; +} + +export default parseHtml; \ No newline at end of file diff --git a/src/module/utils/isEmpty.js b/src/module/utils/isEmpty.js new file mode 100644 index 0000000..481c8ae --- /dev/null +++ b/src/module/utils/isEmpty.js @@ -0,0 +1,19 @@ +export const isEmpty = (value) => { + if (value == "" || value == undefined || value == null) { + return true + } else { + return false + } +} + +export const require = (imgPath) => { + try { + const handlePath = imgPath.replace('@', '') + // console.log(handlePath); + // https://vitejs.cn/guide/assets.html#the-public-directory + // return new URL(handlePath, import.meta.url).href + return handlePath; + } catch (error) { + console.warn(error) + } +} \ No newline at end of file diff --git a/src/module/utils/openUrl.js b/src/module/utils/openUrl.js new file mode 100644 index 0000000..03a72e3 --- /dev/null +++ b/src/module/utils/openUrl.js @@ -0,0 +1,40 @@ +import { useAppStore } from "@/store/useAppStore" + +export const openUrl = (url) => { + if (!url) { return } + // #ifdef H5 + const appStore = useAppStore() + const platform = appStore.appConfig.platform + + if (platform && platform === 'H5_GP_Guitar') { + if (window.android) { + window.android.openUrl({ + url: url + }) + } + return + } + + // if (appStore.isNative) { + // if (appStore.appId === 1901) { + // window.location.href = url + // } else { + // requestAnimationFrame(() => { + // window.open(url, '_blank') + // }) + // } + // } + const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) + if (isIOS) { + window.location.href = url + } else { + requestAnimationFrame(() => { + window.open(url, '_blank') + }) + } + // #endif + // #ifdef APP-PLUS + // plus.runtime.openURL(url) + plus.runtime.openWeb(url) + // #endif +} \ No newline at end of file diff --git a/src/module/utils/require.js b/src/module/utils/require.js new file mode 100644 index 0000000..dde2823 --- /dev/null +++ b/src/module/utils/require.js @@ -0,0 +1,10 @@ +/** vite的特殊性, 需要处理图片 */ +export const require = (imgPath) => { + try { + const handlePath = imgPath.replace('@', '..') + // https://vitejs.cn/guide/assets.html#the-public-directory + return new URL(handlePath, import.meta.url).href + } catch (error) { + console.warn(error) + } +} diff --git a/src/module/utils/sortArray.js b/src/module/utils/sortArray.js new file mode 100644 index 0000000..c877315 --- /dev/null +++ b/src/module/utils/sortArray.js @@ -0,0 +1,7 @@ +export const arrSortByKey = (array, property) => { + return array.sort(function(a, b) { + let value1 = Number(a[property]), + value2 = Number(b[property]); + return value1 - value2; + }); +}; \ No newline at end of file diff --git a/src/module/utils/system.js b/src/module/utils/system.js new file mode 100644 index 0000000..7d71a1a --- /dev/null +++ b/src/module/utils/system.js @@ -0,0 +1,74 @@ +import { useAppStore } from "@/store/useAppStore"; + +// 复制文本 +export const copyText = ({ text }) => { + if (!text) { return } + + uni.setClipboardData({ + data: text, + success() { + uni.showToast({ + title: 'Success!', + icon: 'success', + mask: true, + duration: 1500 + }) + } + }) +} + +// 调用系统分享 仅限https +/** + * + * @param {{title?:string, content?:string, url: URL|string}} shareMsg + * @returns + */ +export const shareWithSystem = (shareMsg) => { + if (!shareMsg) return + const appStore = useAppStore(); + + // #ifdef APP-PLUS + plus.share.sendWithSystem({ + type: 'text', + content: shareMsg?.content ?? '', + href: shareMsg.url, + }, () => { + uni.showToast({ + title: 'Success!', + icon: 'success', + mask: true, + duration: 1500 + }) + }, err => { + uni.setClipboardData({ + data: shareMsg.url, + complete: () => { + uni.hideToast() + } + }) + + }) + // #endif + // #ifdef H5 + if (window !== window.parent) { + window.parent.postMessage({ type: 'share', data: { title: shareMsg?.title ?? '', text: shareMsg?.content ?? '', url: shareMsg.url } }, '*') + } else { + if (window.navigator.share) { + window.navigator.share({ title: shareMsg?.title??'', text: shareMsg?.content??'', url: shareMsg.url }) + } + } + if (appStore.isCoat) { + // NOTE: for 殼包 + const msg = { + type: 'share', + url: shareMsg.url + }; + parent.postMessage(JSON.stringify(msg), '*'); + } else { + uni.setClipboardData({ + data: shareMsg.url + }) + uni.hideToast() + } + // #endif +} diff --git a/src/module/utils/util.js b/src/module/utils/util.js new file mode 100644 index 0000000..b9a331c --- /dev/null +++ b/src/module/utils/util.js @@ -0,0 +1,150 @@ +/** + * + * @param {number} num + * @param {number} radix + * @returns + */ +export const formatNum = (num, radix = 2) => { + if (!num) return 0 + if (isNaN(num)) return 0 + const numStr = num.toFixed(radix) + for (let i = numStr.length - 1; i > 0; i--) { + if (numStr[i] !== '0') { + if (numStr[i] === '.') { + return numStr.slice(0, i) + } + return numStr.slice(0, i + 1) + } + } + return numStr +} + +export const versionCompare = (v1, v2) => { + if (!v1) return false + if (!v2) return false + v1 = v1.split('.') + v2 = v2.split('.') + const len = Math.max(v1.length, v2.length) + + while (v1.length < len) { + v1.push('0') + } + while (v2.length < len) { + v2.push('0') + } + for (let i = 0; i < len; i++) { + const num1 = parseInt(v1[i]) + const num2 = parseInt(v2[i]) + if (num1 > num2) { + return 1 + } else if (num1 < num2) { + return -1 + } + } +} + +export const formatDate = (data) => { + const date = new Date(data) + const year = date.getFullYear() + const month = date.getMonth() + 1 + const day = date.getDate() + return `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')}` +} + + +// export function getGoogleAdId() { +// return new Promise((resolve, reject) => { +// console.log("getGoogleAdId plus:", plus.android) +// if (typeof plus !== 'undefined' && plus.android) { +// try { +// let Looper = plus.android.importClass("android.os.Looper"); +// let Handler = plus.android.importClass("android.os.Handler"); +// let Context = plus.android.importClass("android.content.Context"); +// let AdvertisingIdClient = plus.android.importClass( +// "com.google.android.gms.ads.identifier.AdvertisingIdClient"); +// let mainActivity = plus.android.runtimeMainActivity(); +// console.log("getGoogleAdId AdvertisingIdClient:", AdvertisingIdClient) +// // 在子线程获取广告 ID,避免 UI 线程阻塞 +// let handler = new Handler(Looper.getMainLooper()); + +// handler.post(new plus.android.implements("java.lang.Runnable", { +// run: function() { +// try { +// let adInfo = AdvertisingIdClient.getAdvertisingIdInfo(mainActivity); +// let adId = adInfo.getId(); +// resolve(adId); +// } catch (e) { +// reject("获取 Google 广告 ID 失败:" + e.message); +// } +// } +// })); +// } catch (e) { +// reject("初始化失败:" + e.message); +// } +// } else { +// reject("当前环境不支持 Android 原生接口"); +// } +// }); +// } +export const onBack = () => { + const pages = getCurrentPages() + if (pages.length > 1) { + uni.navigateBack() + } else { + uni.reLaunch({ url: '/pages/home/Home' }) + } +} +// #ifdef APP-PLUS +export function getAdid() { + return new Promise((resolve, reject) => { + // const GoogleAdHelper = uni.requireNativePlugin('GoogleAdid') + // GoogleAdHelper.getGoogleAdId(result => { + // console.log("GAID Result:" + JSON.stringify(result)); + // if (result?.adID) { + // resolve(result?.adID) + // } else { + // reject(null) + // } + // }) + const tiduGaidUtil = uni.requireNativePlugin('Tidu-GaidUtil'); + tiduGaidUtil.getGaid({}, result => { + console.log("result is " + JSON.stringify(result)); + if (result?.gaid) { + if(result.gaid === '00000000-0000-0000-0000-000000000000') { + reject(null) + } else { + resolve(result?.gaid) + } + } else { + reject(null) + } + }) + }) +} + +// export function getAndroidId() { +// return new Promise((resolve, reject) => { +// const AndroidId = uni.requireNativePlugin('AndroidId') +// AndroidId.getAndroidId(result => { +// console.log("android_id is " + JSON.stringify(result)); +// if (result?.aid) { +// resolve(result?.aid) +// } else { +// reject(null) +// } +// }) +// }) +// } + +export const loginReport = (data) => { + const LoginReport = uni.requireNativePlugin('EarnReport') + LoginReport.loginReport(data, (err) => { + if (err) { + uni.showToast({ + title: 'report error', + icon: 'none' + }) + } + }) +} +// #endif \ No newline at end of file diff --git a/src/module/verify/verify.js b/src/module/verify/verify.js new file mode 100644 index 0000000..94f73a0 --- /dev/null +++ b/src/module/verify/verify.js @@ -0,0 +1,40 @@ +// 用于数据校验 +/** + * 校验Email + */ +export function isValidityEmail (option) { + if (!option) { return false } + // const regex = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/ + const regex = /^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/ + return regex.test(option) +} + +/** + * 校验手机号 + */ +export function isValidityPhoneNumber (option) { + if (!option) { return false } + const regex = /^1[23456789]\d{9}$/ + return regex.test(option) +} + +/** + * 校验密码等级 + */ +export function verifyPasswordLevel (option) { + if (!option) { return 0 } + let level = 0 + // 判断这个字符串中有没有数字 + if (/[0-9]/.test(option)) { + level++ + } + // 判断字符串中有没有字母 + if (/[a-zA-Z]/.test(option)) { + level++ + } + // 判断字符串中有没有特殊符号 + if (/[^0-9a-zA-Z_]/.test(option)) { + level++ + } + return level +} diff --git a/src/pages.json b/src/pages.json new file mode 100644 index 0000000..430d123 --- /dev/null +++ b/src/pages.json @@ -0,0 +1,419 @@ +{ + "pages": [ + { + "path": "pages/index/index", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/home/Home", + "style": { + "navigationBarTitleText": "", + "enablePullDownRefresh": false, + "backgroundColor": "#4D0606" + } + }, + { + "path": "pages/Login/Login", + "style": { + "navigationBarTitleText": "Login", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/Login/Register", + "style": { + "navigationBarTitleText": "Register", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/Promo", + "style": { + "navigationBarTitleText": "Promo", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/vip/Vip", + "style": { + "navigationBarTitleText": "Vip", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/earn/Earn", + "style": { + "navigationBarTitleText": "Earn Money", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/Account", + "style": { + "navigationBarTitleText": "Account", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/mail/Mail", + "style": { + "navigationBarTitleText": "Mail", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/mail/MailDetail", + "style": { + "navigationBarTitleText": "Mail Detail", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/search/Search", + "style": { + "navigationBarTitleText": "Search", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/search/SearchResult", + "style": { + "navigationBarTitleText": "Search Result", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/Deposit", + "style": { + "navigationBarTitleText": "Deposit", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/DepositHistory", + "style": { + "navigationBarTitleText": "Deposit History", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/DepositOrderDetail", + "style": { + "navigationBarTitleText": "Order Detail", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/DepositImpsDetail", + "style": { + "navigationBarTitleText": "IMPS", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/DepositUpiDetail", + "style": { + "navigationBarTitleText": "UPI", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/Withdraw", + "style": { + "navigationBarTitleText": "Withdraw", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/WithdrawHistory", + "style": { + "navigationBarTitleText": "Withdraw History", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/TransferInstructions", + "style": { + "navigationBarTitleText": "Transfer Instructions", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/SelfUtrInfo", + "style": { + "navigationBarTitleText": "Self-service UTR", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/webview/GameWeb", + "style": { + "navigationBarTitleText": "Game", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/Profile/Profile", + "style": { + "navigationBarTitleText": "Profile", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/components/EditProfile/EditProfile", + "style": { + "navigationBarTitleText": "Edit Profile", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/GameRecords/GameRecords", + "style": { + "navigationBarTitleText": "Game Records", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/BalanceRecords/BalanceRecords", + "style": { + "navigationBarTitleText": "Balance Records", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/FeedBack/FeedBack", + "style": { + "navigationBarTitleText": "Feedback", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/BankCard/BankCard", + "style": { + "navigationBarTitleText": "Withdraw Account", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/WithdrawalPassword/WithdrawalPassword", + "style": { + "navigationBarTitleText": "Withdrawal Password", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/PhoneBinding/PhoneBinding", + "style": { + "navigationBarTitleText": "Phone Binding", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/FirstDeposit/FirstDeposit", + "style": { + "navigationBarTitleText": "First Deposit", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/SignupBonus", + "style": { + "navigationBarTitleText": "Signup Bonus", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/Jili", + "style": { + "navigationBarTitleText": "Jili", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/InvitationalRanks", + "style": { + "navigationBarTitleText": "Invitational Ranks", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/Ranking/Ranking", + "style": { + "navigationBarTitleText": "Ranking", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/RebatePromo/RebatePromo", + "style": { + "navigationBarTitleText": "Rebate Promo", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/CashbackRecord/CashbackRecord", + "style": { + "navigationBarTitleText": "Cashback Record", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/Signin/Signin", + "style": { + "navigationBarTitleText": "Signin", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/BankCard/BankCardList", + "style": { + "navigationBarTitleText": "Withdraw Account", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/account/Language", + "style": { + "navigationBarTitleText": "Language", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/WithdrawWait", + "style": { + "navigationBarTitleText": "Withdraw", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/Login/LoginV2", + "style": { + "navigationBarTitleText": "Login", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/Login/ForgetPassword", + "style": { + "navigationBarTitleText": "Forget Password", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/activity/Activity", + "style": { + "navigationBarTitleText": "Lottery", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/webview/serviceWeb", + "style": { + "navigationBarTitleText": "Service", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/wallet/BindWallet", + "style": { + "navigationBarTitleText": "Bind Wallet", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/activity/Poster", + "style": { + "navigationBarTitleText": "Poster", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/promo/TgExchange", + "style": { + "navigationBarTitleText": "Telegram Exchange", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/redeposit/ReDeposit", + "style": { + "navigationBarTitleText": "ReDeposit", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/redeposit/WheelHistory", + "style": { + "navigationBarTitleText": "ReDeposit History", + "enablePullDownRefresh": false + } + }, + { + "path": "pages/redeposit/WheelRules", + "style": { + "navigationBarTitleText": "ReDeposit Rules", + "enablePullDownRefresh": false + } + } + ], + "globalStyle": { + "navigationStyle": "custom", + "navigationBarTextStyle": "white", + "navigationBarTitleText": "Spinz777", + // "navigationBarTitleText": "Winzz777", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#FFFFFF", + "app-plus": { + "bounce": "none", + "pullToRefresh": { + "support": false, + "style": "circle", + "offset": "0px", + "color": "#FEBF05" + } + }, + "pageOrientation": "portrait" //横屏配置,全局屏幕旋转设置(仅 APP/微信/QQ小程序),支持 auto / portrait / landscape + // "rpxCalcMaxDeviceWidth": 960, + // "rpxCalcBaseDeviceWidth": 375, + // "rpxCalcIncludeWidth": 750 + }, + "easycom": { + "autoscan": true, //是否自动扫描组件 + "custom": { + //自定义扫描规则 + // "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" + } + }, + "tabBar": { + "color": "#FB9595", + "selectedColor": "#FDF062", + "backgroundColor": "#610606", + "borderStyle": "black", + "height": "0px", + "fontSize": "10px", + "iconWidth": "24px", + "spacing": "3px", + "custom": true, + "list": [ + { + "pagePath": "pages/home/Home", + "text": "Home" + }, + { + "pagePath": "pages/promo/Promo", + "text": "Promo" + }, + { + "pagePath": "pages/earn/Earn", + "text": "Earn" + }, + { + "pagePath": "pages/account/Account", + "text": "Account" + } + ] + } +} diff --git a/src/pages/Login/ForgetPassword.vue b/src/pages/Login/ForgetPassword.vue new file mode 100644 index 0000000..e413559 --- /dev/null +++ b/src/pages/Login/ForgetPassword.vue @@ -0,0 +1,376 @@ + + + + + diff --git a/src/pages/Login/Login.vue b/src/pages/Login/Login.vue new file mode 100644 index 0000000..16a38ad --- /dev/null +++ b/src/pages/Login/Login.vue @@ -0,0 +1,362 @@ + + + + + diff --git a/src/pages/Login/LoginV2.vue b/src/pages/Login/LoginV2.vue new file mode 100644 index 0000000..470fab0 --- /dev/null +++ b/src/pages/Login/LoginV2.vue @@ -0,0 +1,442 @@ + + + + + diff --git a/src/pages/Login/Register.vue b/src/pages/Login/Register.vue new file mode 100644 index 0000000..a1bea2f --- /dev/null +++ b/src/pages/Login/Register.vue @@ -0,0 +1,540 @@ + + + + + diff --git a/src/pages/Login/components/LoginFotter.vue b/src/pages/Login/components/LoginFotter.vue new file mode 100644 index 0000000..22266e4 --- /dev/null +++ b/src/pages/Login/components/LoginFotter.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/src/pages/account/Account.vue b/src/pages/account/Account.vue new file mode 100644 index 0000000..6cc17bc --- /dev/null +++ b/src/pages/account/Account.vue @@ -0,0 +1,528 @@ + + + + + diff --git a/src/pages/account/BalanceRecords/BalanceRecords.vue b/src/pages/account/BalanceRecords/BalanceRecords.vue new file mode 100644 index 0000000..8bd3f27 --- /dev/null +++ b/src/pages/account/BalanceRecords/BalanceRecords.vue @@ -0,0 +1,373 @@ + + + + + diff --git a/src/pages/account/BankCard/BankCard.vue b/src/pages/account/BankCard/BankCard.vue new file mode 100644 index 0000000..f64ad7b --- /dev/null +++ b/src/pages/account/BankCard/BankCard.vue @@ -0,0 +1,527 @@ + + + + + diff --git a/src/pages/account/BankCard/BankCardList.vue b/src/pages/account/BankCard/BankCardList.vue new file mode 100644 index 0000000..7d6218d --- /dev/null +++ b/src/pages/account/BankCard/BankCardList.vue @@ -0,0 +1,195 @@ + + + + + diff --git a/src/pages/account/FeedBack/FeedBack.vue b/src/pages/account/FeedBack/FeedBack.vue new file mode 100644 index 0000000..dc64757 --- /dev/null +++ b/src/pages/account/FeedBack/FeedBack.vue @@ -0,0 +1,313 @@ + + + + + \ No newline at end of file diff --git a/src/uni_modules/uni-easyinput/package.json b/src/uni_modules/uni-easyinput/package.json new file mode 100644 index 0000000..2939256 --- /dev/null +++ b/src/uni_modules/uni-easyinput/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-easyinput", + "displayName": "uni-easyinput 增强输入框", + "version": "1.1.19", + "description": "Easyinput 组件是对原生input组件的增强", + "keywords": [ + "uni-ui", + "uniui", + "input", + "uni-easyinput", + "输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-easyinput/readme.md b/src/uni_modules/uni-easyinput/readme.md new file mode 100644 index 0000000..f1faf8f --- /dev/null +++ b/src/uni_modules/uni-easyinput/readme.md @@ -0,0 +1,11 @@ + + +### Easyinput 增强输入框 +> **组件名:uni-easyinput** +> 代码块: `uEasyinput` + + +easyinput 组件是对原生input组件的增强 ,是专门为配合表单组件[uni-forms](https://ext.dcloud.net.cn/plugin?id=2773)而设计的,easyinput 内置了边框,图标等,同时包含 input 所有功能 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-easyinput) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-fab/changelog.md b/src/uni_modules/uni-fab/changelog.md new file mode 100644 index 0000000..8a22807 --- /dev/null +++ b/src/uni_modules/uni-fab/changelog.md @@ -0,0 +1,25 @@ +## 1.2.6(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.2.5(2023-03-29) +- 新增 pattern.icon 属性,可自定义图标 +## 1.2.4(2022-09-07) +小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false) +## 1.2.3(2022-09-05) +- 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310) +## 1.2.2(2021-12-29) +- 更新 组件依赖 +## 1.2.1(2021-11-19) +- 修复 阴影颜色不正确的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fab](https://uniapp.dcloud.io/component/uniui/uni-fab) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 按钮背景色调整 +- 优化 兼容pc端 diff --git a/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue new file mode 100644 index 0000000..492b5d1 --- /dev/null +++ b/src/uni_modules/uni-fab/components/uni-fab/uni-fab.vue @@ -0,0 +1,491 @@ + + + + + diff --git a/src/uni_modules/uni-fab/package.json b/src/uni_modules/uni-fab/package.json new file mode 100644 index 0000000..1b8543c --- /dev/null +++ b/src/uni_modules/uni-fab/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-fab", + "displayName": "uni-fab 悬浮按钮", + "version": "1.2.6", + "description": "悬浮按钮 fab button ,点击可展开一个图标按钮菜单。", + "keywords": [ + "uni-ui", + "uniui", + "按钮", + "悬浮按钮", + "fab" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-fab/readme.md b/src/uni_modules/uni-fab/readme.md new file mode 100644 index 0000000..9a444e8 --- /dev/null +++ b/src/uni_modules/uni-fab/readme.md @@ -0,0 +1,9 @@ +## Fab 悬浮按钮 +> **组件名:uni-fab** +> 代码块: `uFab` + + +点击可展开一个图形按钮菜单 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fab) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-fav/changelog.md b/src/uni_modules/uni-fav/changelog.md new file mode 100644 index 0000000..d8a08d4 --- /dev/null +++ b/src/uni_modules/uni-fav/changelog.md @@ -0,0 +1,19 @@ +## 1.2.1(2022-05-30) +- 新增 stat 属性 ,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-fav](https://uniapp.dcloud.io/component/uniui/uni-fav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 组件示例地址 +## 1.0.5(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.4(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.3(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json new file mode 100644 index 0000000..9a0759e --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "collect", + "uni-fav.collected": "collected" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js b/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json new file mode 100644 index 0000000..67c89bf --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-fav.collect": "收藏", + "uni-fav.collected": "已收藏" +} diff --git a/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue b/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue new file mode 100644 index 0000000..d2c58df --- /dev/null +++ b/src/uni_modules/uni-fav/components/uni-fav/uni-fav.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/uni_modules/uni-fav/package.json b/src/uni_modules/uni-fav/package.json new file mode 100644 index 0000000..cc14697 --- /dev/null +++ b/src/uni_modules/uni-fav/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-fav", + "displayName": "uni-fav 收藏按钮", + "version": "1.2.1", + "description": " Fav 收藏组件,可自定义颜色、大小。", + "keywords": [ + "fav", + "uni-ui", + "uniui", + "收藏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-fav/readme.md b/src/uni_modules/uni-fav/readme.md new file mode 100644 index 0000000..4de125d --- /dev/null +++ b/src/uni_modules/uni-fav/readme.md @@ -0,0 +1,10 @@ + + +## Fav 收藏按钮 +> **组件名:uni-fav** +> 代码块: `uFav` + +用于收藏功能,可点击切换选中、不选中的状态。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-fav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-file-picker/changelog.md b/src/uni_modules/uni-file-picker/changelog.md new file mode 100644 index 0000000..b81e7f9 --- /dev/null +++ b/src/uni_modules/uni-file-picker/changelog.md @@ -0,0 +1,81 @@ +## 1.0.11(2024-07-19) +- 修复 vue3 使用value报错的bug +## 1.0.10(2024-07-09) +- 优化 vue3兼容性 +## 1.0.9(2024-07-09) +- 修复 value 属性不兼容vue3的bug +## 1.0.8(2024-03-20) +- 补充 删除文件时返回文件下标 +## 1.0.7(2024-02-21) +- 新增 微信小程序选择视频时改用chooseMedia,并返回视频缩略图 +## 1.0.6(2024-01-06) +- 新增 微信小程序不再调用chooseImage,而是调用chooseMedia +## 1.0.5(2024-01-03) +- 新增 上传文件至云存储携带本地文件名称 +## 1.0.4(2023-03-29) +- 修复 手动上传删除一个文件后不能再上传的bug +## 1.0.3(2022-12-19) +- 新增 sourceType 属性, 可以自定义图片和视频选择的来源 +## 1.0.2(2022-07-04) +- 修复 在uni-forms下样式不生效的bug +## 1.0.1(2021-11-23) +- 修复 参数为对象的情况下,url在某些情况显示错误的bug +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-file-picker](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +## 0.2.16(2021-11-08) +- 修复 传入空对象 ,显示错误的Bug +## 0.2.15(2021-08-30) +- 修复 return-type="object" 时且存在v-model时,无法删除文件的Bug +## 0.2.14(2021-08-23) +- 新增 参数中返回 fileID 字段 +## 0.2.13(2021-08-23) +- 修复 腾讯云传入fileID 不能回显的bug +- 修复 选择图片后,不能放大的问题 +## 0.2.12(2021-08-17) +- 修复 由于 0.2.11 版本引起的不能回显图片的Bug +## 0.2.11(2021-08-16) +- 新增 clearFiles(index) 方法,可以手动删除指定文件 +- 修复 v-model 值设为 null 报错的Bug +## 0.2.10(2021-08-13) +- 修复 return-type="object" 时,无法删除文件的Bug +## 0.2.9(2021-08-03) +- 修复 auto-upload 属性失效的Bug +## 0.2.8(2021-07-31) +- 修复 fileExtname属性不指定值报错的Bug +## 0.2.7(2021-07-31) +- 修复 在某种场景下图片不回显的Bug +## 0.2.6(2021-07-30) +- 修复 return-type为object下,返回值不正确的Bug +## 0.2.5(2021-07-30) +- 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +## 0.2.3(2021-07-28) +- 优化 调整示例代码 +## 0.2.2(2021-07-27) +- 修复 vue3 下赋值错误的Bug +- 优化 h5平台下上传文件导致页面卡死的问题 +## 0.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.1.1(2021-07-02) +- 修复 sourceType 缺少默认值导致 ios 无法选择文件 +## 0.1.0(2021-06-30) +- 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +## 0.0.11(2021-06-30) +- 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +## 0.0.10(2021-06-29) +- 优化 文件上传后进度条消失时机 +## 0.0.9(2021-06-29) +- 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +## 0.0.8(2021-06-15) +- 修复 删除文件时无法触发 v-model 的Bug +## 0.0.7(2021-05-12) +- 新增 组件示例地址 +## 0.0.6(2021-04-09) +- 修复 选择的文件非 file-extname 字段指定的扩展名报错的Bug +## 0.0.5(2021-04-09) +- 优化 更新组件示例 +## 0.0.4(2021-04-09) +- 优化 file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 微信小程序不指定 fileExtname 属性选择失败的Bug diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js b/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js new file mode 100644 index 0000000..9c6bcdf --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/choose-and-upload-file.js @@ -0,0 +1,287 @@ +'use strict'; + +const ERR_MSG_OK = 'chooseAndUploadFile:ok'; +const ERR_MSG_FAIL = 'chooseAndUploadFile:fail'; + +function chooseImage(opts) { + const { + count, + sizeType = ['original', 'compressed'], + sourceType, + extension + } = opts + return new Promise((resolve, reject) => { + // 微信由于旧接口不再维护,针对微信小程序平台改用chooseMedia接口 + // #ifdef MP-WEIXIN + uni.chooseMedia({ + count, + sizeType, + sourceType, + mediaType: ['image'], + extension, + success(res) { + res.tempFiles.forEach(item => { + item.path = item.tempFilePath; + }) + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }) + // #endif + // #ifndef MP-WEIXIN + uni.chooseImage({ + count, + sizeType, + sourceType, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res, 'image')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseImage:fail', ERR_MSG_FAIL), + }); + }, + }); + // #endif + + }); +} + +function chooseVideo(opts) { + const { + count, + camera, + compressed, + maxDuration, + sourceType, + extension + } = opts; + return new Promise((resolve, reject) => { + // 微信由于旧接口不再维护,针对微信小程序平台改用chooseMedia接口 + // #ifdef MP-WEIXIN + uni.chooseMedia({ + count, + compressed, + maxDuration, + sourceType, + extension, + mediaType: ['video'], + success(res) { + const { + tempFiles, + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFiles: tempFiles.map(item => { + return { + name: item.name || '', + path: item.tempFilePath, + thumbTempFilePath: item.thumbTempFilePath, + size:item.size, + type: (res.tempFile && res.tempFile.type) || '', + width:item.width, + height:item.height, + duration:item.duration, + fileType: 'video', + cloudPath: '', + } + }), + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }) + // #endif + // #ifndef MP-WEIXIN + uni.chooseVideo({ + camera, + compressed, + maxDuration, + sourceType, + extension, + success(res) { + const { + tempFilePath, + duration, + size, + height, + width + } = res; + resolve(normalizeChooseAndUploadFileRes({ + errMsg: 'chooseVideo:ok', + tempFilePaths: [tempFilePath], + tempFiles: [{ + name: (res.tempFile && res.tempFile.name) || '', + path: tempFilePath, + size, + type: (res.tempFile && res.tempFile.type) || '', + width, + height, + duration, + fileType: 'video', + cloudPath: '', + }, ], + }, 'video')); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseVideo:fail', ERR_MSG_FAIL), + }); + }, + }); + // #endif + }); +} + +function chooseAll(opts) { + const { + count, + extension + } = opts; + return new Promise((resolve, reject) => { + let chooseFile = uni.chooseFile; + if (typeof wx !== 'undefined' && + typeof wx.chooseMessageFile === 'function') { + chooseFile = wx.chooseMessageFile; + } + if (typeof chooseFile !== 'function') { + return reject({ + errMsg: ERR_MSG_FAIL + ' 请指定 type 类型,该平台仅支持选择 image 或 video。', + }); + } + chooseFile({ + type: 'all', + count, + extension, + success(res) { + resolve(normalizeChooseAndUploadFileRes(res)); + }, + fail(res) { + reject({ + errMsg: res.errMsg.replace('chooseFile:fail', ERR_MSG_FAIL), + }); + }, + }); + }); +} + +function normalizeChooseAndUploadFileRes(res, fileType) { + res.tempFiles.forEach((item, index) => { + if (!item.name) { + item.name = item.path.substring(item.path.lastIndexOf('/') + 1); + } + if (fileType) { + item.fileType = fileType; + } + item.cloudPath = + Date.now() + '_' + index + item.name.substring(item.name.lastIndexOf('.')); + }); + if (!res.tempFilePaths) { + res.tempFilePaths = res.tempFiles.map((file) => file.path); + } + return res; +} + +function uploadCloudFiles(files, max = 5, onUploadProgress) { + files = JSON.parse(JSON.stringify(files)) + const len = files.length + let count = 0 + let self = this + return new Promise(resolve => { + while (count < max) { + next() + } + + function next() { + let cur = count++ + if (cur >= len) { + !files.find(item => !item.url && !item.errMsg) && resolve(files) + return + } + const fileItem = files[cur] + const index = self.files.findIndex(v => v.uuid === fileItem.uuid) + fileItem.url = '' + delete fileItem.errMsg + + uniCloud + .uploadFile({ + filePath: fileItem.path, + cloudPath: fileItem.cloudPath, + fileType: fileItem.fileType, + onUploadProgress: res => { + res.index = index + onUploadProgress && onUploadProgress(res) + } + }) + .then(res => { + fileItem.url = res.fileID + fileItem.index = index + if (cur < len) { + next() + } + }) + .catch(res => { + fileItem.errMsg = res.errMsg || res.message + fileItem.index = index + if (cur < len) { + next() + } + }) + } + }) +} + + + + + +function uploadFiles(choosePromise, { + onChooseFile, + onUploadProgress +}) { + return choosePromise + .then((res) => { + if (onChooseFile) { + const customChooseRes = onChooseFile(res); + if (typeof customChooseRes !== 'undefined') { + return Promise.resolve(customChooseRes).then((chooseRes) => typeof chooseRes === 'undefined' ? + res : chooseRes); + } + } + return res; + }) + .then((res) => { + if (res === false) { + return { + errMsg: ERR_MSG_OK, + tempFilePaths: [], + tempFiles: [], + }; + } + return res + }) +} + +function chooseAndUploadFile(opts = { + type: 'all' +}) { + if (opts.type === 'image') { + return uploadFiles(chooseImage(opts), opts); + } else if (opts.type === 'video') { + return uploadFiles(chooseVideo(opts), opts); + } + return uploadFiles(chooseAll(opts), opts); +} + +export { + chooseAndUploadFile, + uploadCloudFiles +}; diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue new file mode 100644 index 0000000..785c7eb --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/uni-file-picker.vue @@ -0,0 +1,668 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue new file mode 100644 index 0000000..625d92e --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-file.vue @@ -0,0 +1,325 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue new file mode 100644 index 0000000..2a29bc2 --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/upload-image.vue @@ -0,0 +1,292 @@ + + + + + diff --git a/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js b/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js new file mode 100644 index 0000000..1bc9259 --- /dev/null +++ b/src/uni_modules/uni-file-picker/components/uni-file-picker/utils.js @@ -0,0 +1,110 @@ +/** + * 获取文件名和后缀 + * @param {String} name + */ +export const get_file_ext = (name) => { + const last_len = name.lastIndexOf('.') + const len = name.length + return { + name: name.substring(0, last_len), + ext: name.substring(last_len + 1, len) + } +} + +/** + * 获取扩展名 + * @param {Array} fileExtname + */ +export const get_extname = (fileExtname) => { + if (!Array.isArray(fileExtname)) { + let extname = fileExtname.replace(/(\[|\])/g, '') + return extname.split(',') + } else { + return fileExtname + } + return [] +} + +/** + * 获取文件和检测是否可选 + */ +export const get_files_and_is_max = (res, _extname) => { + let filePaths = [] + let files = [] + if(!_extname || _extname.length === 0){ + return { + filePaths, + files + } + } + res.tempFiles.forEach(v => { + let fileFullName = get_file_ext(v.name) + const extname = fileFullName.ext.toLowerCase() + if (_extname.indexOf(extname) !== -1) { + files.push(v) + filePaths.push(v.path) + } + }) + if (files.length !== res.tempFiles.length) { + uni.showToast({ + title: `当前选择了${res.tempFiles.length}个文件 ,${res.tempFiles.length - files.length} 个文件格式不正确`, + icon: 'none', + duration: 5000 + }) + } + + return { + filePaths, + files + } +} + + +/** + * 获取图片信息 + * @param {Object} filepath + */ +export const get_file_info = (filepath) => { + return new Promise((resolve, reject) => { + uni.getImageInfo({ + src: filepath, + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }) + }) +} +/** + * 获取封装数据 + */ +export const get_file_data = async (files, type = 'image') => { + // 最终需要上传数据库的数据 + let fileFullName = get_file_ext(files.name) + const extname = fileFullName.ext.toLowerCase() + let filedata = { + name: files.name, + uuid: files.uuid, + extname: extname || '', + cloudPath: files.cloudPath, + fileType: files.fileType, + thumbTempFilePath: files.thumbTempFilePath, + url: files.path || files.path, + size: files.size, //单位是字节 + image: {}, + path: files.path, + video: {} + } + if (type === 'image') { + const imageinfo = await get_file_info(files.path) + delete filedata.video + filedata.image.width = imageinfo.width + filedata.image.height = imageinfo.height + filedata.image.location = imageinfo.path + } else { + delete filedata.image + } + return filedata +} diff --git a/src/uni_modules/uni-file-picker/package.json b/src/uni_modules/uni-file-picker/package.json new file mode 100644 index 0000000..34bb18f --- /dev/null +++ b/src/uni_modules/uni-file-picker/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-file-picker", + "displayName": "uni-file-picker 文件选择上传", + "version": "1.0.11", + "description": "文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间", + "keywords": [ + "uni-ui", + "uniui", + "图片上传", + "文件上传" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-file-picker/readme.md b/src/uni_modules/uni-file-picker/readme.md new file mode 100644 index 0000000..c8399a5 --- /dev/null +++ b/src/uni_modules/uni-file-picker/readme.md @@ -0,0 +1,11 @@ + +## FilePicker 文件选择上传 + +> **组件名:uni-file-picker** +> 代码块: `uFilePicker` + + +文件选择上传组件,可以选择图片、视频等任意文件并上传到当前绑定的服务空间 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-file-picker) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-forms/changelog.md b/src/uni_modules/uni-forms/changelog.md new file mode 100644 index 0000000..0b58ab8 --- /dev/null +++ b/src/uni_modules/uni-forms/changelog.md @@ -0,0 +1,100 @@ +## 1.4.13(2024-10-08) +- 修复 校验规则在抖音开发者工具上不生效的bug,详见:[https://ask.dcloud.net.cn/question/191933](https://ask.dcloud.net.cn/question/191933) +## 1.4.12 (2024-9-21) +- 修复 form上次修改的问题 +## 1.4.11 (2024-9-14) +- 修复 binddata的兼容性问题 +## 1.4.10(2023-11-03) +- 优化 labelWidth 描述错误 +## 1.4.9(2023-02-10) +- 修复 required 参数无法动态绑定 +## 1.4.8(2022-08-23) +- 优化 根据 rules 自动添加 required 的问题 +## 1.4.7(2022-08-22) +- 修复 item 未设置 require 属性,rules 设置 require 后,星号也显示的 bug,详见:[https://ask.dcloud.net.cn/question/151540](https://ask.dcloud.net.cn/question/151540) +## 1.4.6(2022-07-13) +- 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug +## 1.4.5(2022-07-05) +- 新增 更多表单示例 +- 优化 子表单组件过期提示的问题 +- 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 +## 1.4.4(2022-07-04) +- 更新 删除组件日志 +## 1.4.3(2022-07-04) +- 修复 由 1.4.0 引发的 label 插槽不生效的bug +## 1.4.2(2022-07-04) +- 修复 子组件找不到 setValue 报错的bug +## 1.4.1(2022-07-04) +- 修复 uni-data-picker 在 uni-forms-item 中报错的bug +- 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +## 1.4.0(2022-06-30) +- 【重要】组件逻辑重构,部分用法用旧版本不兼容,请注意兼容问题 +- 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 +- 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 +- 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 +- 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 +- 新增 子表单的 setRules 方法,配合自定义校验函数使用 +- 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 +- 优化 动态表单校验方式,废弃拼接name的方式 +## 1.3.3(2022-06-22) +- 修复 表单校验顺序无序问题 +## 1.3.2(2021-12-09) +- +## 1.3.1(2021-11-19) +- 修复 label 插槽不生效的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-forms](https://uniapp.dcloud.io/component/uniui/uni-forms) +## 1.2.7(2021-08-13) +- 修复 没有添加校验规则的字段依然报错的Bug +## 1.2.6(2021-08-11) +- 修复 重置表单错误信息无法清除的问题 +## 1.2.5(2021-08-11) +- 优化 组件文档 +## 1.2.4(2021-08-11) +- 修复 表单验证只生效一次的问题 +## 1.2.3(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.2(2021-07-26) +- 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- 修复 1.2.1 引起的示例在小程序平台报错的Bug +## 1.2.1(2021-07-22) +- 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- 修复 不指定name属性时,运行报错的Bug +- 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- 优化 组件示例,新增动态校验示例代码 +- 优化 组件文档,使用方式更清晰 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-06-25) +- 修复 pattern 属性在微信小程序平台无效的问题 +## 1.1.1(2021-06-22) +- 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +## 1.1.0(2021-06-22) +- 修复 只写setRules方法而导致校验不生效的Bug +- 修复 由上个办法引发的错误提示文字错位的Bug +## 1.0.48(2021-06-21) +- 修复 不设置 label 属性 ,无法设置label插槽的问题 +## 1.0.47(2021-06-21) +- 修复 不设置label属性,label-width属性不生效的bug +- 修复 setRules 方法与rules属性冲突的问题 +## 1.0.46(2021-06-04) +- 修复 动态删减数据导致报错的问题 +## 1.0.45(2021-06-04) +- 新增 modelValue 属性 ,value 即将废弃 +## 1.0.44(2021-06-02) +- 新增 uni-forms-item 可以设置单独的 rules +- 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- 优化 submit 事件重命名为 validate +## 1.0.43(2021-05-12) +- 新增 组件示例地址 +## 1.0.42(2021-04-30) +- 修复 自定义检验器失效的问题 +## 1.0.41(2021-03-05) +- 更新 校验器 +- 修复 表单规则设置类型为 number 的情况下,值为0校验失败的Bug +## 1.0.40(2021-03-04) +- 修复 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +## 1.0.39(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 校验器传入 int 等类型 ,返回String类型的Bug diff --git a/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue b/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue new file mode 100644 index 0000000..c924882 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms-item/uni-forms-item.vue @@ -0,0 +1,632 @@ + + + + + diff --git a/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue b/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue new file mode 100644 index 0000000..d061313 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/uni-forms.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/src/uni_modules/uni-forms/components/uni-forms/utils.js b/src/uni_modules/uni-forms/components/uni-forms/utils.js new file mode 100644 index 0000000..6da2421 --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/utils.js @@ -0,0 +1,293 @@ +/** + * 简单处理对象拷贝 + * @param {Obejct} 被拷贝对象 + * @@return {Object} 拷贝对象 + */ +export const deepCopy = (val) => { + return JSON.parse(JSON.stringify(val)) +} +/** + * 过滤数字类型 + * @param {String} format 数字类型 + * @@return {Boolean} 返回是否为数字类型 + */ +export const typeFilter = (format) => { + return format === 'int' || format === 'double' || format === 'number' || format === 'timestamp'; +} + +/** + * 把 value 转换成指定的类型,用于处理初始值,原因是初始值需要入库不能为 undefined + * @param {String} key 字段名 + * @param {any} value 字段值 + * @param {Object} rules 表单校验规则 + */ +export const getValue = (key, value, rules) => { + const isRuleNumType = rules.find(val => val.format && typeFilter(val.format)); + const isRuleBoolType = rules.find(val => (val.format && val.format === 'boolean') || val.format === 'bool'); + // 输入类型为 number + if (!!isRuleNumType) { + if (!value && value !== 0) { + value = null + } else { + value = isNumber(Number(value)) ? Number(value) : value + } + } + + // 输入类型为 boolean + if (!!isRuleBoolType) { + value = isBoolean(value) ? value : false + } + + return value; +} + +/** + * 获取表单数据 + * @param {String|Array} name 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + * @param {any} value 需要设置的值 + */ +export const setDataValue = (field, formdata, value) => { + formdata[field] = value + return value || '' +} + +/** + * 获取表单数据 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + * @param {Object} data 原始数据 + */ +export const getDataValue = (field, data) => { + return objGet(data, field) +} + +/** + * 获取表单类型 + * @param {String|Array} field 真实名称,需要使用 realName 获取 + */ +export const getDataValueType = (field, data) => { + const value = getDataValue(field, data) + return { + type: type(value), + value + } +} + +/** + * 获取表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const realName = (name, data = {}) => { + const base_name = _basePath(name) + if (typeof base_name === 'object' && Array.isArray(base_name) && base_name.length > 1) { + const realname = base_name.reduce((a, b) => a += `#${b}`, '_formdata_') + return realname + } + return base_name[0] || name +} + +/** + * 判断是否表单可用的真实name + * @param {String|Array} name 表单name + * @@return {String} 表单可用的真实name + */ +export const isRealName = (name) => { + const reg = /^_formdata_#*/ + return reg.test(name) +} + +/** + * 获取表单数据的原始格式 + * @@return {Object|Array} object 需要解析的数据 + */ +export const rawData = (object = {}, name) => { + let newData = JSON.parse(JSON.stringify(object)) + let formData = {} + for(let i in newData){ + let path = name2arr(i) + objSet(formData,path,newData[i]) + } + return formData +} + +/** + * 真实name还原为 array + * @param {*} name + */ +export const name2arr = (name) => { + let field = name.replace('_formdata_#', '') + field = field.split('#').map(v => (isNumber(v) ? Number(v) : v)) + return field +} + +/** + * 对象中设置值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} value 需要设置的值 + */ +export const objSet = (object, path, value) => { + if (typeof object !== 'object') return object; + _basePath(path).reduce((o, k, i, _) => { + if (i === _.length - 1) { + // 若遍历结束直接赋值 + o[k] = value + return null + } else if (k in o) { + // 若存在对应路径,则返回找到的对象,进行下一次遍历 + return o[k] + } else { + // 若不存在对应路径,则创建对应对象,若下一路径是数字,新对象赋值为空数组,否则赋值为空对象 + o[k] = /^[0-9]{1,}$/.test(_[i + 1]) ? [] : {} + return o[k] + } + }, object) + // 返回object + return object; +} + +// 处理 path, path有三种形式:'a[0].b.c'、'a.0.b.c' 和 ['a','0','b','c'],需要统一处理成数组,便于后续使用 +function _basePath(path) { + // 若是数组,则直接返回 + if (Array.isArray(path)) return path + // 若有 '[',']',则替换成将 '[' 替换成 '.',去掉 ']' + return path.replace(/\[/g, '.').replace(/\]/g, '').split('.') +} + +/** + * 从对象中获取值 + * @param {Object|Array} object 源数据 + * @param {String| Array} path 'a.b.c' 或 ['a',0,'b','c'] + * @param {String} defaultVal 如果无法从调用链中获取值的默认值 + */ +export const objGet = (object, path, defaultVal = 'undefined') => { + // 先将path处理成统一格式 + let newPath = _basePath(path) + // 递归处理,返回最后结果 + let val = newPath.reduce((o, k) => { + return (o || {})[k] + }, object); + return !val || val !== undefined ? val : defaultVal +} + + +/** + * 是否为 number 类型 + * @param {any} num 需要判断的值 + * @return {Boolean} 是否为 number + */ +export const isNumber = (num) => { + return !isNaN(Number(num)) +} + +/** + * 是否为 boolean 类型 + * @param {any} bool 需要判断的值 + * @return {Boolean} 是否为 boolean + */ +export const isBoolean = (bool) => { + return (typeof bool === 'boolean') +} +/** + * 是否有必填字段 + * @param {Object} rules 规则 + * @return {Boolean} 是否有必填字段 + */ +export const isRequiredField = (rules) => { + let isNoField = false; + for (let i = 0; i < rules.length; i++) { + const ruleData = rules[i]; + if (ruleData.required) { + isNoField = true; + break; + } + } + return isNoField; +} + + +/** + * 获取数据类型 + * @param {Any} obj 需要获取数据类型的值 + */ +export const type = (obj) => { + var class2type = {}; + + // 生成class2type映射 + "Boolean Number String Function Array Date RegExp Object Error".split(" ").map(function(item, index) { + class2type["[object " + item + "]"] = item.toLowerCase(); + }) + if (obj == null) { + return obj + ""; + } + return typeof obj === "object" || typeof obj === "function" ? + class2type[Object.prototype.toString.call(obj)] || "object" : + typeof obj; +} + +/** + * 判断两个值是否相等 + * @param {any} a 值 + * @param {any} b 值 + * @return {Boolean} 是否相等 + */ +export const isEqual = (a, b) => { + //如果a和b本来就全等 + if (a === b) { + //判断是否为0和-0 + return a !== 0 || 1 / a === 1 / b; + } + //判断是否为null和undefined + if (a == null || b == null) { + return a === b; + } + //接下来判断a和b的数据类型 + var classNameA = toString.call(a), + classNameB = toString.call(b); + //如果数据类型不相等,则返回false + if (classNameA !== classNameB) { + return false; + } + //如果数据类型相等,再根据不同数据类型分别判断 + switch (classNameA) { + case '[object RegExp]': + case '[object String]': + //进行字符串转换比较 + return '' + a === '' + b; + case '[object Number]': + //进行数字转换比较,判断是否为NaN + if (+a !== +a) { + return +b !== +b; + } + //判断是否为0或-0 + return +a === 0 ? 1 / +a === 1 / b : +a === +b; + case '[object Date]': + case '[object Boolean]': + return +a === +b; + } + //如果是对象类型 + if (classNameA == '[object Object]') { + //获取a和b的属性长度 + var propsA = Object.getOwnPropertyNames(a), + propsB = Object.getOwnPropertyNames(b); + if (propsA.length != propsB.length) { + return false; + } + for (var i = 0; i < propsA.length; i++) { + var propName = propsA[i]; + //如果对应属性对应值不相等,则返回false + if (a[propName] !== b[propName]) { + return false; + } + } + return true; + } + //如果是数组类型 + if (classNameA == '[object Array]') { + if (a.toString() == b.toString()) { + return true; + } + return false; + } +} diff --git a/src/uni_modules/uni-forms/components/uni-forms/validate.js b/src/uni_modules/uni-forms/components/uni-forms/validate.js new file mode 100644 index 0000000..1834c6c --- /dev/null +++ b/src/uni_modules/uni-forms/components/uni-forms/validate.js @@ -0,0 +1,486 @@ +var pattern = { + email: /^\S+?@\S+?\.\S+?$/, + idcard: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, + url: new RegExp( + "^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$", + 'i') +}; + +const FORMAT_MAPPING = { + "int": 'integer', + "bool": 'boolean', + "double": 'number', + "long": 'number', + "password": 'string' + // "fileurls": 'array' +} + +function formatMessage(args, resources = '') { + var defaultMessage = ['label'] + defaultMessage.forEach((item) => { + if (args[item] === undefined) { + args[item] = '' + } + }) + + let str = resources + for (let key in args) { + let reg = new RegExp('{' + key + '}') + str = str.replace(reg, args[key]) + } + return str +} + +function isEmptyValue(value, type) { + if (value === undefined || value === null) { + return true; + } + + if (typeof value === 'string' && !value) { + return true; + } + + if (Array.isArray(value) && !value.length) { + return true; + } + + if (type === 'object' && !Object.keys(value).length) { + return true; + } + + return false; +} + +const types = { + integer(value) { + return types.number(value) && parseInt(value, 10) === value; + }, + string(value) { + return typeof value === 'string'; + }, + number(value) { + if (isNaN(value)) { + return false; + } + return typeof value === 'number'; + }, + "boolean": function(value) { + return typeof value === 'boolean'; + }, + "float": function(value) { + return types.number(value) && !types.integer(value); + }, + array(value) { + return Array.isArray(value); + }, + object(value) { + return typeof value === 'object' && !types.array(value); + }, + date(value) { + return value instanceof Date; + }, + timestamp(value) { + if (!this.integer(value) || Math.abs(value).toString().length > 16) { + return false + } + return true; + }, + file(value) { + return typeof value.url === 'string'; + }, + email(value) { + return typeof value === 'string' && !!value.match(pattern.email) && value.length < 255; + }, + url(value) { + return typeof value === 'string' && !!value.match(pattern.url); + }, + pattern(reg, value) { + try { + return new RegExp(reg).test(value); + } catch (e) { + return false; + } + }, + method(value) { + return typeof value === 'function'; + }, + idcard(value) { + return typeof value === 'string' && !!value.match(pattern.idcard); + }, + 'url-https'(value) { + return this.url(value) && value.startsWith('https://'); + }, + 'url-scheme'(value) { + return value.startsWith('://'); + }, + 'url-web'(value) { + return false; + } +} + +class RuleValidator { + + constructor(message) { + this._message = message + } + + async validateRule(fieldKey, fieldValue, value, data, allData) { + var result = null + + let rules = fieldValue.rules + + let hasRequired = rules.findIndex((item) => { + return item.required + }) + if (hasRequired < 0) { + if (value === null || value === undefined) { + return result + } + if (typeof value === 'string' && !value.length) { + return result + } + } + + var message = this._message + + if (rules === undefined) { + return message['default'] + } + + for (var i = 0; i < rules.length; i++) { + let rule = rules[i] + let vt = this._getValidateType(rule) + + Object.assign(rule, { + label: fieldValue.label || `["${fieldKey}"]` + }) + + if (RuleValidatorHelper[vt]) { + result = RuleValidatorHelper[vt](rule, value, message) + if (result != null) { + break + } + } + + if (rule.validateExpr) { + let now = Date.now() + let resultExpr = rule.validateExpr(value, allData, now) + if (resultExpr === false) { + result = this._getMessage(rule, rule.errorMessage || this._message['default']) + break + } + } + + if (rule.validateFunction) { + result = await this.validateFunction(rule, value, data, allData, vt) + if (result !== null) { + break + } + } + } + + if (result !== null) { + result = message.TAG + result + } + + return result + } + + async validateFunction(rule, value, data, allData, vt) { + let result = null + try { + let callbackMessage = null + const res = await rule.validateFunction(rule, value, allData || data, (message) => { + callbackMessage = message + }) + if (callbackMessage || (typeof res === 'string' && res) || res === false) { + result = this._getMessage(rule, callbackMessage || res, vt) + } + } catch (e) { + result = this._getMessage(rule, e.message, vt) + } + return result + } + + _getMessage(rule, message, vt) { + return formatMessage(rule, message || rule.errorMessage || this._message[vt] || message['default']) + } + + _getValidateType(rule) { + var result = '' + if (rule.required) { + result = 'required' + } else if (rule.format) { + result = 'format' + } else if (rule.arrayType) { + result = 'arrayTypeFormat' + } else if (rule.range) { + result = 'range' + } else if (rule.maximum !== undefined || rule.minimum !== undefined) { + result = 'rangeNumber' + } else if (rule.maxLength !== undefined || rule.minLength !== undefined) { + result = 'rangeLength' + } else if (rule.pattern) { + result = 'pattern' + } else if (rule.validateFunction) { + result = 'validateFunction' + } + return result + } +} + +const RuleValidatorHelper = { + required(rule, value, message) { + if (rule.required && isEmptyValue(value, rule.format || typeof value)) { + return formatMessage(rule, rule.errorMessage || message.required); + } + + return null + }, + + range(rule, value, message) { + const { + range, + errorMessage + } = rule; + + let list = new Array(range.length); + for (let i = 0; i < range.length; i++) { + const item = range[i]; + if (types.object(item) && item.value !== undefined) { + list[i] = item.value; + } else { + list[i] = item; + } + } + + let result = false + if (Array.isArray(value)) { + result = (new Set(value.concat(list)).size === list.length); + } else { + if (list.indexOf(value) > -1) { + result = true; + } + } + + if (!result) { + return formatMessage(rule, errorMessage || message['enum']); + } + + return null + }, + + rangeNumber(rule, value, message) { + if (!types.number(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let { + minimum, + maximum, + exclusiveMinimum, + exclusiveMaximum + } = rule; + let min = exclusiveMinimum ? value <= minimum : value < minimum; + let max = exclusiveMaximum ? value >= maximum : value > maximum; + + if (minimum !== undefined && min) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMinimum ? + 'exclusiveMinimum' : 'minimum' + ]) + } else if (maximum !== undefined && max) { + return formatMessage(rule, rule.errorMessage || message['number'][exclusiveMaximum ? + 'exclusiveMaximum' : 'maximum' + ]) + } else if (minimum !== undefined && maximum !== undefined && (min || max)) { + return formatMessage(rule, rule.errorMessage || message['number'].range) + } + + return null + }, + + rangeLength(rule, value, message) { + if (!types.string(value) && !types.array(value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + let min = rule.minLength; + let max = rule.maxLength; + let val = value.length; + + if (min !== undefined && val < min) { + return formatMessage(rule, rule.errorMessage || message['length'].minLength) + } else if (max !== undefined && val > max) { + return formatMessage(rule, rule.errorMessage || message['length'].maxLength) + } else if (min !== undefined && max !== undefined && (val < min || val > max)) { + return formatMessage(rule, rule.errorMessage || message['length'].range) + } + + return null + }, + + pattern(rule, value, message) { + if (!types['pattern'](rule.pattern, value)) { + return formatMessage(rule, rule.errorMessage || message.pattern.mismatch); + } + + return null + }, + + format(rule, value, message) { + var customTypes = Object.keys(types); + var format = FORMAT_MAPPING[rule.format] ? FORMAT_MAPPING[rule.format] : (rule.format || rule.arrayType); + + if (customTypes.indexOf(format) > -1) { + if (!types[format](value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + } + + return null + }, + + arrayTypeFormat(rule, value, message) { + if (!Array.isArray(value)) { + return formatMessage(rule, rule.errorMessage || message.typeError); + } + + for (let i = 0; i < value.length; i++) { + const element = value[i]; + let formatResult = this.format(rule, element, message) + if (formatResult !== null) { + return formatResult + } + } + + return null + } +} + +class SchemaValidator extends RuleValidator { + + constructor(schema, options) { + super(SchemaValidator.message); + + this._schema = schema + this._options = options || null + } + + updateSchema(schema) { + this._schema = schema + } + + async validate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, false, allData) + } + return result.length ? result[0] : null + } + + async validateAll(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidate(data, true, allData) + } + return result + } + + async validateUpdate(data, allData) { + let result = this._checkFieldInSchema(data) + if (!result) { + result = await this.invokeValidateUpdate(data, false, allData) + } + return result.length ? result[0] : null + } + + async invokeValidate(data, all, allData) { + let result = [] + let schema = this._schema + for (let key in schema) { + let value = schema[key] + let errorMessage = await this.validateRule(key, value, data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + async invokeValidateUpdate(data, all, allData) { + let result = [] + for (let key in data) { + let errorMessage = await this.validateRule(key, this._schema[key], data[key], data, allData) + if (errorMessage != null) { + result.push({ + key, + errorMessage + }) + if (!all) break + } + } + return result + } + + _checkFieldInSchema(data) { + var keys = Object.keys(data) + var keys2 = Object.keys(this._schema) + if (new Set(keys.concat(keys2)).size === keys2.length) { + return '' + } + + var noExistFields = keys.filter((key) => { + return keys2.indexOf(key) < 0; + }) + var errorMessage = formatMessage({ + field: JSON.stringify(noExistFields) + }, SchemaValidator.message.TAG + SchemaValidator.message['defaultInvalid']) + return [{ + key: 'invalid', + errorMessage + }] + } +} + +function Message() { + return { + TAG: "", + default: '验证错误', + defaultInvalid: '提交的字段{field}在数据库中并不存在', + validateFunction: '验证无效', + required: '{label}必填', + 'enum': '{label}超出范围', + timestamp: '{label}格式无效', + whitespace: '{label}不能为空', + typeError: '{label}类型无效', + date: { + format: '{label}日期{value}格式无效', + parse: '{label}日期无法解析,{value}无效', + invalid: '{label}日期{value}无效' + }, + length: { + minLength: '{label}长度不能少于{minLength}', + maxLength: '{label}长度不能超过{maxLength}', + range: '{label}必须介于{minLength}和{maxLength}之间' + }, + number: { + minimum: '{label}不能小于{minimum}', + maximum: '{label}不能大于{maximum}', + exclusiveMinimum: '{label}不能小于等于{minimum}', + exclusiveMaximum: '{label}不能大于等于{maximum}', + range: '{label}必须介于{minimum}and{maximum}之间' + }, + pattern: { + mismatch: '{label}格式不匹配' + } + }; +} + + +SchemaValidator.message = new Message(); + +export default SchemaValidator diff --git a/src/uni_modules/uni-forms/package.json b/src/uni_modules/uni-forms/package.json new file mode 100644 index 0000000..0d72c63 --- /dev/null +++ b/src/uni_modules/uni-forms/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-forms", + "displayName": "uni-forms 表单", + "version": "1.4.13", + "description": "由输入框、选择器、单选框、多选框等控件组成,用以收集、校验、提交数据", + "keywords": [ + "uni-ui", + "表单", + "校验", + "表单校验", + "表单验证" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-forms/readme.md b/src/uni_modules/uni-forms/readme.md new file mode 100644 index 0000000..63d5a04 --- /dev/null +++ b/src/uni_modules/uni-forms/readme.md @@ -0,0 +1,23 @@ + + +## Forms 表单 + +> **组件名:uni-forms** +> 代码块: `uForms`、`uni-forms-item` +> 关联组件:`uni-forms-item`、`uni-easyinput`、`uni-data-checkbox`、`uni-group`。 + + +uni-app的内置组件已经有了 `

`组件,用于提交表单内容。 + +然而几乎每个表单都需要做表单验证,为了方便做表单验证,减少重复开发,`uni ui` 又基于 ``组件封装了 ``组件,内置了表单验证功能。 + +`` 提供了 `rules`属性来描述校验规则、``子组件来包裹具体的表单项,以及给原生或三方组件提供了 `binddata()` 来设置表单值。 + +每个要校验的表单项,不管input还是checkbox,都必须放在``组件中,且一个``组件只能放置一个表单项。 + +``组件内部预留了显示error message的区域,默认是在表单项的底部。 + +另外,``组件下面的各个表单项,可以通过``包裹为不同的分组。同一``下的不同表单项目将聚拢在一起,同其他group保持垂直间距。``仅影响视觉效果。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-forms) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-goods-nav/changelog.md b/src/uni_modules/uni-goods-nav/changelog.md new file mode 100644 index 0000000..c6264c6 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/changelog.md @@ -0,0 +1,18 @@ +## 1.2.1(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-goods-nav](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json new file mode 100644 index 0000000..dcdba41 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/en.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "shop", + "uni-goods-nav.options.cart": "cart", + "uni-goods-nav.buttonGroup.addToCart": "add to cart", + "uni-goods-nav.buttonGroup.buyNow": "buy now" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json new file mode 100644 index 0000000..48ee344 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hans.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店铺", + "uni-goods-nav.options.cart": "购物车", + "uni-goods-nav.buttonGroup.addToCart": "加入购物车", + "uni-goods-nav.buttonGroup.buyNow": "立即购买" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json new file mode 100644 index 0000000..d0a0255 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/i18n/zh-Hant.json @@ -0,0 +1,6 @@ +{ + "uni-goods-nav.options.shop": "店鋪", + "uni-goods-nav.options.cart": "購物車", + "uni-goods-nav.buttonGroup.addToCart": "加入購物車", + "uni-goods-nav.buttonGroup.buyNow": "立即購買" +} diff --git a/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue new file mode 100644 index 0000000..8a16b17 --- /dev/null +++ b/src/uni_modules/uni-goods-nav/components/uni-goods-nav/uni-goods-nav.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/src/uni_modules/uni-goods-nav/package.json b/src/uni_modules/uni-goods-nav/package.json new file mode 100644 index 0000000..636e45e --- /dev/null +++ b/src/uni_modules/uni-goods-nav/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-goods-nav", + "displayName": "uni-goods-nav 商品导航", + "version": "1.2.1", + "description": "商品导航组件主要用于电商类应用底部导航,可自定义加入购物车,购买等操作", + "keywords": [ + "uni-ui", + "uniui", + "商品导航" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-goods-nav/readme.md b/src/uni_modules/uni-goods-nav/readme.md new file mode 100644 index 0000000..07df93f --- /dev/null +++ b/src/uni_modules/uni-goods-nav/readme.md @@ -0,0 +1,10 @@ + + +## GoodsNav 商品导航 +> **组件名:uni-goods-nav** +> 代码块: `uGoodsNav` + +商品加入购物车,立即购买等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-goods-nav) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-grid/changelog.md b/src/uni_modules/uni-grid/changelog.md new file mode 100644 index 0000000..d301166 --- /dev/null +++ b/src/uni_modules/uni-grid/changelog.md @@ -0,0 +1,13 @@ +## 1.4.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-grid](https://uniapp.dcloud.io/component/uniui/uni-grid) +## 1.3.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.3.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.3.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.2.4(2021-05-12) +- 新增 组件示例地址 +## 1.2.3(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue b/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue new file mode 100644 index 0000000..19c08d7 --- /dev/null +++ b/src/uni_modules/uni-grid/components/uni-grid-item/uni-grid-item.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue b/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue new file mode 100644 index 0000000..0edc7ff --- /dev/null +++ b/src/uni_modules/uni-grid/components/uni-grid/uni-grid.vue @@ -0,0 +1,142 @@ + + + + + diff --git a/src/uni_modules/uni-grid/package.json b/src/uni_modules/uni-grid/package.json new file mode 100644 index 0000000..ccb2c91 --- /dev/null +++ b/src/uni_modules/uni-grid/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-grid", + "displayName": "uni-grid 宫格", + "version": "1.4.0", + "description": "Grid 宫格组件,提供移动端常见的宫格布局,如九宫格。", + "keywords": [ + "uni-ui", + "uniui", + "九宫格", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-grid/readme.md b/src/uni_modules/uni-grid/readme.md new file mode 100644 index 0000000..0aa44cc --- /dev/null +++ b/src/uni_modules/uni-grid/readme.md @@ -0,0 +1,11 @@ + + +## Grid 宫格 +> **组件名:uni-grid** +> 代码块: `uGrid` + + +宫格组件。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-grid) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-group/changelog.md b/src/uni_modules/uni-group/changelog.md new file mode 100644 index 0000000..a7024fd --- /dev/null +++ b/src/uni_modules/uni-group/changelog.md @@ -0,0 +1,16 @@ +## 1.2.2(2022-05-30) +- 新增 stat属性,是否开启uni统计功能 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-group](https://uniapp.dcloud.io/component/uniui/uni-group) +## 1.1.7(2021-11-08) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 优化 组件文档 +## 1.0.3(2021-05-12) +- 新增 组件示例地址 +## 1.0.2(2021-02-05) +- 调整为uni_modules目录规范 +- 优化 兼容 nvue 页面 diff --git a/src/uni_modules/uni-group/components/uni-group/uni-group.vue b/src/uni_modules/uni-group/components/uni-group/uni-group.vue new file mode 100644 index 0000000..3425ecd --- /dev/null +++ b/src/uni_modules/uni-group/components/uni-group/uni-group.vue @@ -0,0 +1,134 @@ + + + + diff --git a/src/uni_modules/uni-group/package.json b/src/uni_modules/uni-group/package.json new file mode 100644 index 0000000..ea00a08 --- /dev/null +++ b/src/uni_modules/uni-group/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-group", + "displayName": "uni-group 分组", + "version": "1.2.2", + "description": "分组组件可用于将组件用于分组,添加间隔,以产生明显的区块", + "keywords": [ + "uni-ui", + "uniui", + "group", + "分组", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-group/readme.md b/src/uni_modules/uni-group/readme.md new file mode 100644 index 0000000..bae67f4 --- /dev/null +++ b/src/uni_modules/uni-group/readme.md @@ -0,0 +1,9 @@ + +## Group 分组 +> **组件名:uni-group** +> 代码块: `uGroup` + +分组组件可用于将组件分组,添加间隔,以产生明显的区块。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-group) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-icons/changelog.md b/src/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..0261131 --- /dev/null +++ b/src/uni_modules/uni-icons/changelog.md @@ -0,0 +1,42 @@ +## 2.0.10(2024-06-07) +- 优化 uni-app x 中,size 属性的类型 +## 2.0.9(2024-01-12) +fix: 修复图标大小默认值错误的问题 +## 2.0.8(2023-12-14) +- 修复 项目未使用 ts 情况下,打包报错的bug +## 2.0.7(2023-12-14) +- 修复 size 属性为 string 时,不加单位导致尺寸异常的bug +## 2.0.6(2023-12-11) +- 优化 兼容老版本icon类型,如 top ,bottom 等 +## 2.0.5(2023-12-11) +- 优化 兼容老版本icon类型,如 top ,bottom 等 +## 2.0.4(2023-12-06) +- 优化 uni-app x 下示例项目图标排序 +## 2.0.3(2023-12-06) +- 修复 nvue下引入组件报错的bug +## 2.0.2(2023-12-05) +-优化 size 属性支持单位 +## 2.0.1(2023-12-05) +- 新增 uni-app x 支持定义图标 +## 1.3.5(2022-01-24) +- 优化 size 属性可以传入不带单位的字符串数值 +## 1.3.4(2022-01-24) +- 优化 size 支持其他单位 +## 1.3.3(2022-01-17) +- 修复 nvue 有些图标不显示的bug,兼容老版本图标 +## 1.3.2(2021-12-01) +- 优化 示例可复制图标名称 +## 1.3.1(2021-11-23) +- 优化 兼容旧组件 type 值 +## 1.3.0(2021-11-19) +- 新增 更多图标 +- 优化 自定义图标使用方式 +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-icons](https://uniapp.dcloud.io/component/uniui/uni-icons) +## 1.1.7(2021-11-08) +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.5(2021-05-12) +- 新增 组件示例地址 +## 1.1.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-icons/components/uni-icons/icons.js b/src/uni_modules/uni-icons/components/uni-icons/icons.js new file mode 100644 index 0000000..7889936 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/icons.js @@ -0,0 +1,1169 @@ +export default { + "id": "2852637", + "name": "uniui图标库", + "font_family": "uniicons", + "css_prefix_text": "uniui-", + "description": "", + "glyphs": [ + { + "icon_id": "25027049", + "name": "yanse", + "font_class": "color", + "unicode": "e6cf", + "unicode_decimal": 59087 + }, + { + "icon_id": "25027048", + "name": "wallet", + "font_class": "wallet", + "unicode": "e6b1", + "unicode_decimal": 59057 + }, + { + "icon_id": "25015720", + "name": "settings-filled", + "font_class": "settings-filled", + "unicode": "e6ce", + "unicode_decimal": 59086 + }, + { + "icon_id": "25015434", + "name": "shimingrenzheng-filled", + "font_class": "auth-filled", + "unicode": "e6cc", + "unicode_decimal": 59084 + }, + { + "icon_id": "24934246", + "name": "shop-filled", + "font_class": "shop-filled", + "unicode": "e6cd", + "unicode_decimal": 59085 + }, + { + "icon_id": "24934159", + "name": "staff-filled-01", + "font_class": "staff-filled", + "unicode": "e6cb", + "unicode_decimal": 59083 + }, + { + "icon_id": "24932461", + "name": "VIP-filled", + "font_class": "vip-filled", + "unicode": "e6c6", + "unicode_decimal": 59078 + }, + { + "icon_id": "24932462", + "name": "plus_circle_fill", + "font_class": "plus-filled", + "unicode": "e6c7", + "unicode_decimal": 59079 + }, + { + "icon_id": "24932463", + "name": "folder_add-filled", + "font_class": "folder-add-filled", + "unicode": "e6c8", + "unicode_decimal": 59080 + }, + { + "icon_id": "24932464", + "name": "yanse-filled", + "font_class": "color-filled", + "unicode": "e6c9", + "unicode_decimal": 59081 + }, + { + "icon_id": "24932465", + "name": "tune-filled", + "font_class": "tune-filled", + "unicode": "e6ca", + "unicode_decimal": 59082 + }, + { + "icon_id": "24932455", + "name": "a-rilidaka-filled", + "font_class": "calendar-filled", + "unicode": "e6c0", + "unicode_decimal": 59072 + }, + { + "icon_id": "24932456", + "name": "notification-filled", + "font_class": "notification-filled", + "unicode": "e6c1", + "unicode_decimal": 59073 + }, + { + "icon_id": "24932457", + "name": "wallet-filled", + "font_class": "wallet-filled", + "unicode": "e6c2", + "unicode_decimal": 59074 + }, + { + "icon_id": "24932458", + "name": "paihangbang-filled", + "font_class": "medal-filled", + "unicode": "e6c3", + "unicode_decimal": 59075 + }, + { + "icon_id": "24932459", + "name": "gift-filled", + "font_class": "gift-filled", + "unicode": "e6c4", + "unicode_decimal": 59076 + }, + { + "icon_id": "24932460", + "name": "fire-filled", + "font_class": "fire-filled", + "unicode": "e6c5", + "unicode_decimal": 59077 + }, + { + "icon_id": "24928001", + "name": "refreshempty", + "font_class": "refreshempty", + "unicode": "e6bf", + "unicode_decimal": 59071 + }, + { + "icon_id": "24926853", + "name": "location-ellipse", + "font_class": "location-filled", + "unicode": "e6af", + "unicode_decimal": 59055 + }, + { + "icon_id": "24926735", + "name": "person-filled", + "font_class": "person-filled", + "unicode": "e69d", + "unicode_decimal": 59037 + }, + { + "icon_id": "24926703", + "name": "personadd-filled", + "font_class": "personadd-filled", + "unicode": "e698", + "unicode_decimal": 59032 + }, + { + "icon_id": "24923351", + "name": "back", + "font_class": "back", + "unicode": "e6b9", + "unicode_decimal": 59065 + }, + { + "icon_id": "24923352", + "name": "forward", + "font_class": "forward", + "unicode": "e6ba", + "unicode_decimal": 59066 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrow-right", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923353", + "name": "arrowthinright", + "font_class": "arrowthinright", + "unicode": "e6bb", + "unicode_decimal": 59067 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrow-left", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923354", + "name": "arrowthinleft", + "font_class": "arrowthinleft", + "unicode": "e6bc", + "unicode_decimal": 59068 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrow-up", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923355", + "name": "arrowthinup", + "font_class": "arrowthinup", + "unicode": "e6bd", + "unicode_decimal": 59069 + }, + { + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrow-down", + "unicode": "e6be", + "unicode_decimal": 59070 + },{ + "icon_id": "24923356", + "name": "arrowthindown", + "font_class": "arrowthindown", + "unicode": "e6be", + "unicode_decimal": 59070 + }, + { + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "bottom", + "unicode": "e6b8", + "unicode_decimal": 59064 + },{ + "icon_id": "24923349", + "name": "arrowdown", + "font_class": "arrowdown", + "unicode": "e6b8", + "unicode_decimal": 59064 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "right", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923346", + "name": "arrowright", + "font_class": "arrowright", + "unicode": "e6b5", + "unicode_decimal": 59061 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "top", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923347", + "name": "arrowup", + "font_class": "arrowup", + "unicode": "e6b6", + "unicode_decimal": 59062 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "left", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923348", + "name": "arrowleft", + "font_class": "arrowleft", + "unicode": "e6b7", + "unicode_decimal": 59063 + }, + { + "icon_id": "24923334", + "name": "eye", + "font_class": "eye", + "unicode": "e651", + "unicode_decimal": 58961 + }, + { + "icon_id": "24923335", + "name": "eye-filled", + "font_class": "eye-filled", + "unicode": "e66a", + "unicode_decimal": 58986 + }, + { + "icon_id": "24923336", + "name": "eye-slash", + "font_class": "eye-slash", + "unicode": "e6b3", + "unicode_decimal": 59059 + }, + { + "icon_id": "24923337", + "name": "eye-slash-filled", + "font_class": "eye-slash-filled", + "unicode": "e6b4", + "unicode_decimal": 59060 + }, + { + "icon_id": "24923305", + "name": "info-filled", + "font_class": "info-filled", + "unicode": "e649", + "unicode_decimal": 58953 + }, + { + "icon_id": "24923299", + "name": "reload-01", + "font_class": "reload", + "unicode": "e6b2", + "unicode_decimal": 59058 + }, + { + "icon_id": "24923195", + "name": "mic_slash_fill", + "font_class": "micoff-filled", + "unicode": "e6b0", + "unicode_decimal": 59056 + }, + { + "icon_id": "24923165", + "name": "map-pin-ellipse", + "font_class": "map-pin-ellipse", + "unicode": "e6ac", + "unicode_decimal": 59052 + }, + { + "icon_id": "24923166", + "name": "map-pin", + "font_class": "map-pin", + "unicode": "e6ad", + "unicode_decimal": 59053 + }, + { + "icon_id": "24923167", + "name": "location", + "font_class": "location", + "unicode": "e6ae", + "unicode_decimal": 59054 + }, + { + "icon_id": "24923064", + "name": "starhalf", + "font_class": "starhalf", + "unicode": "e683", + "unicode_decimal": 59011 + }, + { + "icon_id": "24923065", + "name": "star", + "font_class": "star", + "unicode": "e688", + "unicode_decimal": 59016 + }, + { + "icon_id": "24923066", + "name": "star-filled", + "font_class": "star-filled", + "unicode": "e68f", + "unicode_decimal": 59023 + }, + { + "icon_id": "24899646", + "name": "a-rilidaka", + "font_class": "calendar", + "unicode": "e6a0", + "unicode_decimal": 59040 + }, + { + "icon_id": "24899647", + "name": "fire", + "font_class": "fire", + "unicode": "e6a1", + "unicode_decimal": 59041 + }, + { + "icon_id": "24899648", + "name": "paihangbang", + "font_class": "medal", + "unicode": "e6a2", + "unicode_decimal": 59042 + }, + { + "icon_id": "24899649", + "name": "font", + "font_class": "font", + "unicode": "e6a3", + "unicode_decimal": 59043 + }, + { + "icon_id": "24899650", + "name": "gift", + "font_class": "gift", + "unicode": "e6a4", + "unicode_decimal": 59044 + }, + { + "icon_id": "24899651", + "name": "link", + "font_class": "link", + "unicode": "e6a5", + "unicode_decimal": 59045 + }, + { + "icon_id": "24899652", + "name": "notification", + "font_class": "notification", + "unicode": "e6a6", + "unicode_decimal": 59046 + }, + { + "icon_id": "24899653", + "name": "staff", + "font_class": "staff", + "unicode": "e6a7", + "unicode_decimal": 59047 + }, + { + "icon_id": "24899654", + "name": "VIP", + "font_class": "vip", + "unicode": "e6a8", + "unicode_decimal": 59048 + }, + { + "icon_id": "24899655", + "name": "folder_add", + "font_class": "folder-add", + "unicode": "e6a9", + "unicode_decimal": 59049 + }, + { + "icon_id": "24899656", + "name": "tune", + "font_class": "tune", + "unicode": "e6aa", + "unicode_decimal": 59050 + }, + { + "icon_id": "24899657", + "name": "shimingrenzheng", + "font_class": "auth", + "unicode": "e6ab", + "unicode_decimal": 59051 + }, + { + "icon_id": "24899565", + "name": "person", + "font_class": "person", + "unicode": "e699", + "unicode_decimal": 59033 + }, + { + "icon_id": "24899566", + "name": "email-filled", + "font_class": "email-filled", + "unicode": "e69a", + "unicode_decimal": 59034 + }, + { + "icon_id": "24899567", + "name": "phone-filled", + "font_class": "phone-filled", + "unicode": "e69b", + "unicode_decimal": 59035 + }, + { + "icon_id": "24899568", + "name": "phone", + "font_class": "phone", + "unicode": "e69c", + "unicode_decimal": 59036 + }, + { + "icon_id": "24899570", + "name": "email", + "font_class": "email", + "unicode": "e69e", + "unicode_decimal": 59038 + }, + { + "icon_id": "24899571", + "name": "personadd", + "font_class": "personadd", + "unicode": "e69f", + "unicode_decimal": 59039 + }, + { + "icon_id": "24899558", + "name": "chatboxes-filled", + "font_class": "chatboxes-filled", + "unicode": "e692", + "unicode_decimal": 59026 + }, + { + "icon_id": "24899559", + "name": "contact", + "font_class": "contact", + "unicode": "e693", + "unicode_decimal": 59027 + }, + { + "icon_id": "24899560", + "name": "chatbubble-filled", + "font_class": "chatbubble-filled", + "unicode": "e694", + "unicode_decimal": 59028 + }, + { + "icon_id": "24899561", + "name": "contact-filled", + "font_class": "contact-filled", + "unicode": "e695", + "unicode_decimal": 59029 + }, + { + "icon_id": "24899562", + "name": "chatboxes", + "font_class": "chatboxes", + "unicode": "e696", + "unicode_decimal": 59030 + }, + { + "icon_id": "24899563", + "name": "chatbubble", + "font_class": "chatbubble", + "unicode": "e697", + "unicode_decimal": 59031 + }, + { + "icon_id": "24881290", + "name": "upload-filled", + "font_class": "upload-filled", + "unicode": "e68e", + "unicode_decimal": 59022 + }, + { + "icon_id": "24881292", + "name": "upload", + "font_class": "upload", + "unicode": "e690", + "unicode_decimal": 59024 + }, + { + "icon_id": "24881293", + "name": "weixin", + "font_class": "weixin", + "unicode": "e691", + "unicode_decimal": 59025 + }, + { + "icon_id": "24881274", + "name": "compose", + "font_class": "compose", + "unicode": "e67f", + "unicode_decimal": 59007 + }, + { + "icon_id": "24881275", + "name": "qq", + "font_class": "qq", + "unicode": "e680", + "unicode_decimal": 59008 + }, + { + "icon_id": "24881276", + "name": "download-filled", + "font_class": "download-filled", + "unicode": "e681", + "unicode_decimal": 59009 + }, + { + "icon_id": "24881277", + "name": "pengyouquan", + "font_class": "pyq", + "unicode": "e682", + "unicode_decimal": 59010 + }, + { + "icon_id": "24881279", + "name": "sound", + "font_class": "sound", + "unicode": "e684", + "unicode_decimal": 59012 + }, + { + "icon_id": "24881280", + "name": "trash-filled", + "font_class": "trash-filled", + "unicode": "e685", + "unicode_decimal": 59013 + }, + { + "icon_id": "24881281", + "name": "sound-filled", + "font_class": "sound-filled", + "unicode": "e686", + "unicode_decimal": 59014 + }, + { + "icon_id": "24881282", + "name": "trash", + "font_class": "trash", + "unicode": "e687", + "unicode_decimal": 59015 + }, + { + "icon_id": "24881284", + "name": "videocam-filled", + "font_class": "videocam-filled", + "unicode": "e689", + "unicode_decimal": 59017 + }, + { + "icon_id": "24881285", + "name": "spinner-cycle", + "font_class": "spinner-cycle", + "unicode": "e68a", + "unicode_decimal": 59018 + }, + { + "icon_id": "24881286", + "name": "weibo", + "font_class": "weibo", + "unicode": "e68b", + "unicode_decimal": 59019 + }, + { + "icon_id": "24881288", + "name": "videocam", + "font_class": "videocam", + "unicode": "e68c", + "unicode_decimal": 59020 + }, + { + "icon_id": "24881289", + "name": "download", + "font_class": "download", + "unicode": "e68d", + "unicode_decimal": 59021 + }, + { + "icon_id": "24879601", + "name": "help", + "font_class": "help", + "unicode": "e679", + "unicode_decimal": 59001 + }, + { + "icon_id": "24879602", + "name": "navigate-filled", + "font_class": "navigate-filled", + "unicode": "e67a", + "unicode_decimal": 59002 + }, + { + "icon_id": "24879603", + "name": "plusempty", + "font_class": "plusempty", + "unicode": "e67b", + "unicode_decimal": 59003 + }, + { + "icon_id": "24879604", + "name": "smallcircle", + "font_class": "smallcircle", + "unicode": "e67c", + "unicode_decimal": 59004 + }, + { + "icon_id": "24879605", + "name": "minus-filled", + "font_class": "minus-filled", + "unicode": "e67d", + "unicode_decimal": 59005 + }, + { + "icon_id": "24879606", + "name": "micoff", + "font_class": "micoff", + "unicode": "e67e", + "unicode_decimal": 59006 + }, + { + "icon_id": "24879588", + "name": "closeempty", + "font_class": "closeempty", + "unicode": "e66c", + "unicode_decimal": 58988 + }, + { + "icon_id": "24879589", + "name": "clear", + "font_class": "clear", + "unicode": "e66d", + "unicode_decimal": 58989 + }, + { + "icon_id": "24879590", + "name": "navigate", + "font_class": "navigate", + "unicode": "e66e", + "unicode_decimal": 58990 + }, + { + "icon_id": "24879591", + "name": "minus", + "font_class": "minus", + "unicode": "e66f", + "unicode_decimal": 58991 + }, + { + "icon_id": "24879592", + "name": "image", + "font_class": "image", + "unicode": "e670", + "unicode_decimal": 58992 + }, + { + "icon_id": "24879593", + "name": "mic", + "font_class": "mic", + "unicode": "e671", + "unicode_decimal": 58993 + }, + { + "icon_id": "24879594", + "name": "paperplane", + "font_class": "paperplane", + "unicode": "e672", + "unicode_decimal": 58994 + }, + { + "icon_id": "24879595", + "name": "close", + "font_class": "close", + "unicode": "e673", + "unicode_decimal": 58995 + }, + { + "icon_id": "24879596", + "name": "help-filled", + "font_class": "help-filled", + "unicode": "e674", + "unicode_decimal": 58996 + }, + { + "icon_id": "24879597", + "name": "plus-filled", + "font_class": "paperplane-filled", + "unicode": "e675", + "unicode_decimal": 58997 + }, + { + "icon_id": "24879598", + "name": "plus", + "font_class": "plus", + "unicode": "e676", + "unicode_decimal": 58998 + }, + { + "icon_id": "24879599", + "name": "mic-filled", + "font_class": "mic-filled", + "unicode": "e677", + "unicode_decimal": 58999 + }, + { + "icon_id": "24879600", + "name": "image-filled", + "font_class": "image-filled", + "unicode": "e678", + "unicode_decimal": 59000 + }, + { + "icon_id": "24855900", + "name": "locked-filled", + "font_class": "locked-filled", + "unicode": "e668", + "unicode_decimal": 58984 + }, + { + "icon_id": "24855901", + "name": "info", + "font_class": "info", + "unicode": "e669", + "unicode_decimal": 58985 + }, + { + "icon_id": "24855903", + "name": "locked", + "font_class": "locked", + "unicode": "e66b", + "unicode_decimal": 58987 + }, + { + "icon_id": "24855884", + "name": "camera-filled", + "font_class": "camera-filled", + "unicode": "e658", + "unicode_decimal": 58968 + }, + { + "icon_id": "24855885", + "name": "chat-filled", + "font_class": "chat-filled", + "unicode": "e659", + "unicode_decimal": 58969 + }, + { + "icon_id": "24855886", + "name": "camera", + "font_class": "camera", + "unicode": "e65a", + "unicode_decimal": 58970 + }, + { + "icon_id": "24855887", + "name": "circle", + "font_class": "circle", + "unicode": "e65b", + "unicode_decimal": 58971 + }, + { + "icon_id": "24855888", + "name": "checkmarkempty", + "font_class": "checkmarkempty", + "unicode": "e65c", + "unicode_decimal": 58972 + }, + { + "icon_id": "24855889", + "name": "chat", + "font_class": "chat", + "unicode": "e65d", + "unicode_decimal": 58973 + }, + { + "icon_id": "24855890", + "name": "circle-filled", + "font_class": "circle-filled", + "unicode": "e65e", + "unicode_decimal": 58974 + }, + { + "icon_id": "24855891", + "name": "flag", + "font_class": "flag", + "unicode": "e65f", + "unicode_decimal": 58975 + }, + { + "icon_id": "24855892", + "name": "flag-filled", + "font_class": "flag-filled", + "unicode": "e660", + "unicode_decimal": 58976 + }, + { + "icon_id": "24855893", + "name": "gear-filled", + "font_class": "gear-filled", + "unicode": "e661", + "unicode_decimal": 58977 + }, + { + "icon_id": "24855894", + "name": "home", + "font_class": "home", + "unicode": "e662", + "unicode_decimal": 58978 + }, + { + "icon_id": "24855895", + "name": "home-filled", + "font_class": "home-filled", + "unicode": "e663", + "unicode_decimal": 58979 + }, + { + "icon_id": "24855896", + "name": "gear", + "font_class": "gear", + "unicode": "e664", + "unicode_decimal": 58980 + }, + { + "icon_id": "24855897", + "name": "smallcircle-filled", + "font_class": "smallcircle-filled", + "unicode": "e665", + "unicode_decimal": 58981 + }, + { + "icon_id": "24855898", + "name": "map-filled", + "font_class": "map-filled", + "unicode": "e666", + "unicode_decimal": 58982 + }, + { + "icon_id": "24855899", + "name": "map", + "font_class": "map", + "unicode": "e667", + "unicode_decimal": 58983 + }, + { + "icon_id": "24855825", + "name": "refresh-filled", + "font_class": "refresh-filled", + "unicode": "e656", + "unicode_decimal": 58966 + }, + { + "icon_id": "24855826", + "name": "refresh", + "font_class": "refresh", + "unicode": "e657", + "unicode_decimal": 58967 + }, + { + "icon_id": "24855808", + "name": "cloud-upload", + "font_class": "cloud-upload", + "unicode": "e645", + "unicode_decimal": 58949 + }, + { + "icon_id": "24855809", + "name": "cloud-download-filled", + "font_class": "cloud-download-filled", + "unicode": "e646", + "unicode_decimal": 58950 + }, + { + "icon_id": "24855810", + "name": "cloud-download", + "font_class": "cloud-download", + "unicode": "e647", + "unicode_decimal": 58951 + }, + { + "icon_id": "24855811", + "name": "cloud-upload-filled", + "font_class": "cloud-upload-filled", + "unicode": "e648", + "unicode_decimal": 58952 + }, + { + "icon_id": "24855813", + "name": "redo", + "font_class": "redo", + "unicode": "e64a", + "unicode_decimal": 58954 + }, + { + "icon_id": "24855814", + "name": "images-filled", + "font_class": "images-filled", + "unicode": "e64b", + "unicode_decimal": 58955 + }, + { + "icon_id": "24855815", + "name": "undo-filled", + "font_class": "undo-filled", + "unicode": "e64c", + "unicode_decimal": 58956 + }, + { + "icon_id": "24855816", + "name": "more", + "font_class": "more", + "unicode": "e64d", + "unicode_decimal": 58957 + }, + { + "icon_id": "24855817", + "name": "more-filled", + "font_class": "more-filled", + "unicode": "e64e", + "unicode_decimal": 58958 + }, + { + "icon_id": "24855818", + "name": "undo", + "font_class": "undo", + "unicode": "e64f", + "unicode_decimal": 58959 + }, + { + "icon_id": "24855819", + "name": "images", + "font_class": "images", + "unicode": "e650", + "unicode_decimal": 58960 + }, + { + "icon_id": "24855821", + "name": "paperclip", + "font_class": "paperclip", + "unicode": "e652", + "unicode_decimal": 58962 + }, + { + "icon_id": "24855822", + "name": "settings", + "font_class": "settings", + "unicode": "e653", + "unicode_decimal": 58963 + }, + { + "icon_id": "24855823", + "name": "search", + "font_class": "search", + "unicode": "e654", + "unicode_decimal": 58964 + }, + { + "icon_id": "24855824", + "name": "redo-filled", + "font_class": "redo-filled", + "unicode": "e655", + "unicode_decimal": 58965 + }, + { + "icon_id": "24841702", + "name": "list", + "font_class": "list", + "unicode": "e644", + "unicode_decimal": 58948 + }, + { + "icon_id": "24841489", + "name": "mail-open-filled", + "font_class": "mail-open-filled", + "unicode": "e63a", + "unicode_decimal": 58938 + }, + { + "icon_id": "24841491", + "name": "hand-thumbsdown-filled", + "font_class": "hand-down-filled", + "unicode": "e63c", + "unicode_decimal": 58940 + }, + { + "icon_id": "24841492", + "name": "hand-thumbsdown", + "font_class": "hand-down", + "unicode": "e63d", + "unicode_decimal": 58941 + }, + { + "icon_id": "24841493", + "name": "hand-thumbsup-filled", + "font_class": "hand-up-filled", + "unicode": "e63e", + "unicode_decimal": 58942 + }, + { + "icon_id": "24841494", + "name": "hand-thumbsup", + "font_class": "hand-up", + "unicode": "e63f", + "unicode_decimal": 58943 + }, + { + "icon_id": "24841496", + "name": "heart-filled", + "font_class": "heart-filled", + "unicode": "e641", + "unicode_decimal": 58945 + }, + { + "icon_id": "24841498", + "name": "mail-open", + "font_class": "mail-open", + "unicode": "e643", + "unicode_decimal": 58947 + }, + { + "icon_id": "24841488", + "name": "heart", + "font_class": "heart", + "unicode": "e639", + "unicode_decimal": 58937 + }, + { + "icon_id": "24839963", + "name": "loop", + "font_class": "loop", + "unicode": "e633", + "unicode_decimal": 58931 + }, + { + "icon_id": "24839866", + "name": "pulldown", + "font_class": "pulldown", + "unicode": "e632", + "unicode_decimal": 58930 + }, + { + "icon_id": "24813798", + "name": "scan", + "font_class": "scan", + "unicode": "e62a", + "unicode_decimal": 58922 + }, + { + "icon_id": "24813786", + "name": "bars", + "font_class": "bars", + "unicode": "e627", + "unicode_decimal": 58919 + }, + { + "icon_id": "24813788", + "name": "cart-filled", + "font_class": "cart-filled", + "unicode": "e629", + "unicode_decimal": 58921 + }, + { + "icon_id": "24813790", + "name": "checkbox", + "font_class": "checkbox", + "unicode": "e62b", + "unicode_decimal": 58923 + }, + { + "icon_id": "24813791", + "name": "checkbox-filled", + "font_class": "checkbox-filled", + "unicode": "e62c", + "unicode_decimal": 58924 + }, + { + "icon_id": "24813794", + "name": "shop", + "font_class": "shop", + "unicode": "e62f", + "unicode_decimal": 58927 + }, + { + "icon_id": "24813795", + "name": "headphones", + "font_class": "headphones", + "unicode": "e630", + "unicode_decimal": 58928 + }, + { + "icon_id": "24813796", + "name": "cart", + "font_class": "cart", + "unicode": "e631", + "unicode_decimal": 58929 + } + ] +} diff --git a/src/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue new file mode 100644 index 0000000..8740559 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue @@ -0,0 +1,91 @@ + + + + + diff --git a/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..7da5356 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons.css b/src/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..0a6b6fe --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uniicons.css @@ -0,0 +1,664 @@ + +.uniui-cart-filled:before { + content: "\e6d0"; +} + +.uniui-gift-filled:before { + content: "\e6c4"; +} + +.uniui-color:before { + content: "\e6cf"; +} + +.uniui-wallet:before { + content: "\e6b1"; +} + +.uniui-settings-filled:before { + content: "\e6ce"; +} + +.uniui-auth-filled:before { + content: "\e6cc"; +} + +.uniui-shop-filled:before { + content: "\e6cd"; +} + +.uniui-staff-filled:before { + content: "\e6cb"; +} + +.uniui-vip-filled:before { + content: "\e6c6"; +} + +.uniui-plus-filled:before { + content: "\e6c7"; +} + +.uniui-folder-add-filled:before { + content: "\e6c8"; +} + +.uniui-color-filled:before { + content: "\e6c9"; +} + +.uniui-tune-filled:before { + content: "\e6ca"; +} + +.uniui-calendar-filled:before { + content: "\e6c0"; +} + +.uniui-notification-filled:before { + content: "\e6c1"; +} + +.uniui-wallet-filled:before { + content: "\e6c2"; +} + +.uniui-medal-filled:before { + content: "\e6c3"; +} + +.uniui-fire-filled:before { + content: "\e6c5"; +} + +.uniui-refreshempty:before { + content: "\e6bf"; +} + +.uniui-location-filled:before { + content: "\e6af"; +} + +.uniui-person-filled:before { + content: "\e69d"; +} + +.uniui-personadd-filled:before { + content: "\e698"; +} + +.uniui-arrowthinleft:before { + content: "\e6d2"; +} + +.uniui-arrowthinup:before { + content: "\e6d3"; +} + +.uniui-arrowthindown:before { + content: "\e6d4"; +} + +.uniui-back:before { + content: "\e6b9"; +} + +.uniui-forward:before { + content: "\e6ba"; +} + +.uniui-arrow-right:before { + content: "\e6bb"; +} + +.uniui-arrow-left:before { + content: "\e6bc"; +} + +.uniui-arrow-up:before { + content: "\e6bd"; +} + +.uniui-arrow-down:before { + content: "\e6be"; +} + +.uniui-arrowthinright:before { + content: "\e6d1"; +} + +.uniui-down:before { + content: "\e6b8"; +} + +.uniui-bottom:before { + content: "\e6b8"; +} + +.uniui-arrowright:before { + content: "\e6d5"; +} + +.uniui-right:before { + content: "\e6b5"; +} + +.uniui-up:before { + content: "\e6b6"; +} + +.uniui-top:before { + content: "\e6b6"; +} + +.uniui-left:before { + content: "\e6b7"; +} + +.uniui-arrowup:before { + content: "\e6d6"; +} + +.uniui-eye:before { + content: "\e651"; +} + +.uniui-eye-filled:before { + content: "\e66a"; +} + +.uniui-eye-slash:before { + content: "\e6b3"; +} + +.uniui-eye-slash-filled:before { + content: "\e6b4"; +} + +.uniui-info-filled:before { + content: "\e649"; +} + +.uniui-reload:before { + content: "\e6b2"; +} + +.uniui-micoff-filled:before { + content: "\e6b0"; +} + +.uniui-map-pin-ellipse:before { + content: "\e6ac"; +} + +.uniui-map-pin:before { + content: "\e6ad"; +} + +.uniui-location:before { + content: "\e6ae"; +} + +.uniui-starhalf:before { + content: "\e683"; +} + +.uniui-star:before { + content: "\e688"; +} + +.uniui-star-filled:before { + content: "\e68f"; +} + +.uniui-calendar:before { + content: "\e6a0"; +} + +.uniui-fire:before { + content: "\e6a1"; +} + +.uniui-medal:before { + content: "\e6a2"; +} + +.uniui-font:before { + content: "\e6a3"; +} + +.uniui-gift:before { + content: "\e6a4"; +} + +.uniui-link:before { + content: "\e6a5"; +} + +.uniui-notification:before { + content: "\e6a6"; +} + +.uniui-staff:before { + content: "\e6a7"; +} + +.uniui-vip:before { + content: "\e6a8"; +} + +.uniui-folder-add:before { + content: "\e6a9"; +} + +.uniui-tune:before { + content: "\e6aa"; +} + +.uniui-auth:before { + content: "\e6ab"; +} + +.uniui-person:before { + content: "\e699"; +} + +.uniui-email-filled:before { + content: "\e69a"; +} + +.uniui-phone-filled:before { + content: "\e69b"; +} + +.uniui-phone:before { + content: "\e69c"; +} + +.uniui-email:before { + content: "\e69e"; +} + +.uniui-personadd:before { + content: "\e69f"; +} + +.uniui-chatboxes-filled:before { + content: "\e692"; +} + +.uniui-contact:before { + content: "\e693"; +} + +.uniui-chatbubble-filled:before { + content: "\e694"; +} + +.uniui-contact-filled:before { + content: "\e695"; +} + +.uniui-chatboxes:before { + content: "\e696"; +} + +.uniui-chatbubble:before { + content: "\e697"; +} + +.uniui-upload-filled:before { + content: "\e68e"; +} + +.uniui-upload:before { + content: "\e690"; +} + +.uniui-weixin:before { + content: "\e691"; +} + +.uniui-compose:before { + content: "\e67f"; +} + +.uniui-qq:before { + content: "\e680"; +} + +.uniui-download-filled:before { + content: "\e681"; +} + +.uniui-pyq:before { + content: "\e682"; +} + +.uniui-sound:before { + content: "\e684"; +} + +.uniui-trash-filled:before { + content: "\e685"; +} + +.uniui-sound-filled:before { + content: "\e686"; +} + +.uniui-trash:before { + content: "\e687"; +} + +.uniui-videocam-filled:before { + content: "\e689"; +} + +.uniui-spinner-cycle:before { + content: "\e68a"; +} + +.uniui-weibo:before { + content: "\e68b"; +} + +.uniui-videocam:before { + content: "\e68c"; +} + +.uniui-download:before { + content: "\e68d"; +} + +.uniui-help:before { + content: "\e679"; +} + +.uniui-navigate-filled:before { + content: "\e67a"; +} + +.uniui-plusempty:before { + content: "\e67b"; +} + +.uniui-smallcircle:before { + content: "\e67c"; +} + +.uniui-minus-filled:before { + content: "\e67d"; +} + +.uniui-micoff:before { + content: "\e67e"; +} + +.uniui-closeempty:before { + content: "\e66c"; +} + +.uniui-clear:before { + content: "\e66d"; +} + +.uniui-navigate:before { + content: "\e66e"; +} + +.uniui-minus:before { + content: "\e66f"; +} + +.uniui-image:before { + content: "\e670"; +} + +.uniui-mic:before { + content: "\e671"; +} + +.uniui-paperplane:before { + content: "\e672"; +} + +.uniui-close:before { + content: "\e673"; +} + +.uniui-help-filled:before { + content: "\e674"; +} + +.uniui-paperplane-filled:before { + content: "\e675"; +} + +.uniui-plus:before { + content: "\e676"; +} + +.uniui-mic-filled:before { + content: "\e677"; +} + +.uniui-image-filled:before { + content: "\e678"; +} + +.uniui-locked-filled:before { + content: "\e668"; +} + +.uniui-info:before { + content: "\e669"; +} + +.uniui-locked:before { + content: "\e66b"; +} + +.uniui-camera-filled:before { + content: "\e658"; +} + +.uniui-chat-filled:before { + content: "\e659"; +} + +.uniui-camera:before { + content: "\e65a"; +} + +.uniui-circle:before { + content: "\e65b"; +} + +.uniui-checkmarkempty:before { + content: "\e65c"; +} + +.uniui-chat:before { + content: "\e65d"; +} + +.uniui-circle-filled:before { + content: "\e65e"; +} + +.uniui-flag:before { + content: "\e65f"; +} + +.uniui-flag-filled:before { + content: "\e660"; +} + +.uniui-gear-filled:before { + content: "\e661"; +} + +.uniui-home:before { + content: "\e662"; +} + +.uniui-home-filled:before { + content: "\e663"; +} + +.uniui-gear:before { + content: "\e664"; +} + +.uniui-smallcircle-filled:before { + content: "\e665"; +} + +.uniui-map-filled:before { + content: "\e666"; +} + +.uniui-map:before { + content: "\e667"; +} + +.uniui-refresh-filled:before { + content: "\e656"; +} + +.uniui-refresh:before { + content: "\e657"; +} + +.uniui-cloud-upload:before { + content: "\e645"; +} + +.uniui-cloud-download-filled:before { + content: "\e646"; +} + +.uniui-cloud-download:before { + content: "\e647"; +} + +.uniui-cloud-upload-filled:before { + content: "\e648"; +} + +.uniui-redo:before { + content: "\e64a"; +} + +.uniui-images-filled:before { + content: "\e64b"; +} + +.uniui-undo-filled:before { + content: "\e64c"; +} + +.uniui-more:before { + content: "\e64d"; +} + +.uniui-more-filled:before { + content: "\e64e"; +} + +.uniui-undo:before { + content: "\e64f"; +} + +.uniui-images:before { + content: "\e650"; +} + +.uniui-paperclip:before { + content: "\e652"; +} + +.uniui-settings:before { + content: "\e653"; +} + +.uniui-search:before { + content: "\e654"; +} + +.uniui-redo-filled:before { + content: "\e655"; +} + +.uniui-list:before { + content: "\e644"; +} + +.uniui-mail-open-filled:before { + content: "\e63a"; +} + +.uniui-hand-down-filled:before { + content: "\e63c"; +} + +.uniui-hand-down:before { + content: "\e63d"; +} + +.uniui-hand-up-filled:before { + content: "\e63e"; +} + +.uniui-hand-up:before { + content: "\e63f"; +} + +.uniui-heart-filled:before { + content: "\e641"; +} + +.uniui-mail-open:before { + content: "\e643"; +} + +.uniui-heart:before { + content: "\e639"; +} + +.uniui-loop:before { + content: "\e633"; +} + +.uniui-pulldown:before { + content: "\e632"; +} + +.uniui-scan:before { + content: "\e62a"; +} + +.uniui-bars:before { + content: "\e627"; +} + +.uniui-checkbox:before { + content: "\e62b"; +} + +.uniui-checkbox-filled:before { + content: "\e62c"; +} + +.uniui-shop:before { + content: "\e62f"; +} + +.uniui-headphones:before { + content: "\e630"; +} + +.uniui-cart:before { + content: "\e631"; +} diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/src/uni_modules/uni-icons/components/uni-icons/uniicons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..14696d038d828073edac09ea4e5ba1dec2f58115 GIT binary patch literal 35824 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 F{2S@rCxHL} literal 0 HcmV?d00001 diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts b/src/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts new file mode 100644 index 0000000..98e93aa --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts @@ -0,0 +1,664 @@ + +export type IconsData = { + id : string + name : string + font_family : string + css_prefix_text : string + description : string + glyphs : Array +} + +export type IconsDataItem = { + font_class : string + unicode : string +} + + +export const fontData = [ + { + "font_class": "arrow-down", + "unicode": "\ue6be" + }, + { + "font_class": "arrow-left", + "unicode": "\ue6bc" + }, + { + "font_class": "arrow-right", + "unicode": "\ue6bb" + }, + { + "font_class": "arrow-up", + "unicode": "\ue6bd" + }, + { + "font_class": "auth", + "unicode": "\ue6ab" + }, + { + "font_class": "auth-filled", + "unicode": "\ue6cc" + }, + { + "font_class": "back", + "unicode": "\ue6b9" + }, + { + "font_class": "bars", + "unicode": "\ue627" + }, + { + "font_class": "calendar", + "unicode": "\ue6a0" + }, + { + "font_class": "calendar-filled", + "unicode": "\ue6c0" + }, + { + "font_class": "camera", + "unicode": "\ue65a" + }, + { + "font_class": "camera-filled", + "unicode": "\ue658" + }, + { + "font_class": "cart", + "unicode": "\ue631" + }, + { + "font_class": "cart-filled", + "unicode": "\ue6d0" + }, + { + "font_class": "chat", + "unicode": "\ue65d" + }, + { + "font_class": "chat-filled", + "unicode": "\ue659" + }, + { + "font_class": "chatboxes", + "unicode": "\ue696" + }, + { + "font_class": "chatboxes-filled", + "unicode": "\ue692" + }, + { + "font_class": "chatbubble", + "unicode": "\ue697" + }, + { + "font_class": "chatbubble-filled", + "unicode": "\ue694" + }, + { + "font_class": "checkbox", + "unicode": "\ue62b" + }, + { + "font_class": "checkbox-filled", + "unicode": "\ue62c" + }, + { + "font_class": "checkmarkempty", + "unicode": "\ue65c" + }, + { + "font_class": "circle", + "unicode": "\ue65b" + }, + { + "font_class": "circle-filled", + "unicode": "\ue65e" + }, + { + "font_class": "clear", + "unicode": "\ue66d" + }, + { + "font_class": "close", + "unicode": "\ue673" + }, + { + "font_class": "closeempty", + "unicode": "\ue66c" + }, + { + "font_class": "cloud-download", + "unicode": "\ue647" + }, + { + "font_class": "cloud-download-filled", + "unicode": "\ue646" + }, + { + "font_class": "cloud-upload", + "unicode": "\ue645" + }, + { + "font_class": "cloud-upload-filled", + "unicode": "\ue648" + }, + { + "font_class": "color", + "unicode": "\ue6cf" + }, + { + "font_class": "color-filled", + "unicode": "\ue6c9" + }, + { + "font_class": "compose", + "unicode": "\ue67f" + }, + { + "font_class": "contact", + "unicode": "\ue693" + }, + { + "font_class": "contact-filled", + "unicode": "\ue695" + }, + { + "font_class": "down", + "unicode": "\ue6b8" + }, + { + "font_class": "bottom", + "unicode": "\ue6b8" + }, + { + "font_class": "download", + "unicode": "\ue68d" + }, + { + "font_class": "download-filled", + "unicode": "\ue681" + }, + { + "font_class": "email", + "unicode": "\ue69e" + }, + { + "font_class": "email-filled", + "unicode": "\ue69a" + }, + { + "font_class": "eye", + "unicode": "\ue651" + }, + { + "font_class": "eye-filled", + "unicode": "\ue66a" + }, + { + "font_class": "eye-slash", + "unicode": "\ue6b3" + }, + { + "font_class": "eye-slash-filled", + "unicode": "\ue6b4" + }, + { + "font_class": "fire", + "unicode": "\ue6a1" + }, + { + "font_class": "fire-filled", + "unicode": "\ue6c5" + }, + { + "font_class": "flag", + "unicode": "\ue65f" + }, + { + "font_class": "flag-filled", + "unicode": "\ue660" + }, + { + "font_class": "folder-add", + "unicode": "\ue6a9" + }, + { + "font_class": "folder-add-filled", + "unicode": "\ue6c8" + }, + { + "font_class": "font", + "unicode": "\ue6a3" + }, + { + "font_class": "forward", + "unicode": "\ue6ba" + }, + { + "font_class": "gear", + "unicode": "\ue664" + }, + { + "font_class": "gear-filled", + "unicode": "\ue661" + }, + { + "font_class": "gift", + "unicode": "\ue6a4" + }, + { + "font_class": "gift-filled", + "unicode": "\ue6c4" + }, + { + "font_class": "hand-down", + "unicode": "\ue63d" + }, + { + "font_class": "hand-down-filled", + "unicode": "\ue63c" + }, + { + "font_class": "hand-up", + "unicode": "\ue63f" + }, + { + "font_class": "hand-up-filled", + "unicode": "\ue63e" + }, + { + "font_class": "headphones", + "unicode": "\ue630" + }, + { + "font_class": "heart", + "unicode": "\ue639" + }, + { + "font_class": "heart-filled", + "unicode": "\ue641" + }, + { + "font_class": "help", + "unicode": "\ue679" + }, + { + "font_class": "help-filled", + "unicode": "\ue674" + }, + { + "font_class": "home", + "unicode": "\ue662" + }, + { + "font_class": "home-filled", + "unicode": "\ue663" + }, + { + "font_class": "image", + "unicode": "\ue670" + }, + { + "font_class": "image-filled", + "unicode": "\ue678" + }, + { + "font_class": "images", + "unicode": "\ue650" + }, + { + "font_class": "images-filled", + "unicode": "\ue64b" + }, + { + "font_class": "info", + "unicode": "\ue669" + }, + { + "font_class": "info-filled", + "unicode": "\ue649" + }, + { + "font_class": "left", + "unicode": "\ue6b7" + }, + { + "font_class": "link", + "unicode": "\ue6a5" + }, + { + "font_class": "list", + "unicode": "\ue644" + }, + { + "font_class": "location", + "unicode": "\ue6ae" + }, + { + "font_class": "location-filled", + "unicode": "\ue6af" + }, + { + "font_class": "locked", + "unicode": "\ue66b" + }, + { + "font_class": "locked-filled", + "unicode": "\ue668" + }, + { + "font_class": "loop", + "unicode": "\ue633" + }, + { + "font_class": "mail-open", + "unicode": "\ue643" + }, + { + "font_class": "mail-open-filled", + "unicode": "\ue63a" + }, + { + "font_class": "map", + "unicode": "\ue667" + }, + { + "font_class": "map-filled", + "unicode": "\ue666" + }, + { + "font_class": "map-pin", + "unicode": "\ue6ad" + }, + { + "font_class": "map-pin-ellipse", + "unicode": "\ue6ac" + }, + { + "font_class": "medal", + "unicode": "\ue6a2" + }, + { + "font_class": "medal-filled", + "unicode": "\ue6c3" + }, + { + "font_class": "mic", + "unicode": "\ue671" + }, + { + "font_class": "mic-filled", + "unicode": "\ue677" + }, + { + "font_class": "micoff", + "unicode": "\ue67e" + }, + { + "font_class": "micoff-filled", + "unicode": "\ue6b0" + }, + { + "font_class": "minus", + "unicode": "\ue66f" + }, + { + "font_class": "minus-filled", + "unicode": "\ue67d" + }, + { + "font_class": "more", + "unicode": "\ue64d" + }, + { + "font_class": "more-filled", + "unicode": "\ue64e" + }, + { + "font_class": "navigate", + "unicode": "\ue66e" + }, + { + "font_class": "navigate-filled", + "unicode": "\ue67a" + }, + { + "font_class": "notification", + "unicode": "\ue6a6" + }, + { + "font_class": "notification-filled", + "unicode": "\ue6c1" + }, + { + "font_class": "paperclip", + "unicode": "\ue652" + }, + { + "font_class": "paperplane", + "unicode": "\ue672" + }, + { + "font_class": "paperplane-filled", + "unicode": "\ue675" + }, + { + "font_class": "person", + "unicode": "\ue699" + }, + { + "font_class": "person-filled", + "unicode": "\ue69d" + }, + { + "font_class": "personadd", + "unicode": "\ue69f" + }, + { + "font_class": "personadd-filled", + "unicode": "\ue698" + }, + { + "font_class": "personadd-filled-copy", + "unicode": "\ue6d1" + }, + { + "font_class": "phone", + "unicode": "\ue69c" + }, + { + "font_class": "phone-filled", + "unicode": "\ue69b" + }, + { + "font_class": "plus", + "unicode": "\ue676" + }, + { + "font_class": "plus-filled", + "unicode": "\ue6c7" + }, + { + "font_class": "plusempty", + "unicode": "\ue67b" + }, + { + "font_class": "pulldown", + "unicode": "\ue632" + }, + { + "font_class": "pyq", + "unicode": "\ue682" + }, + { + "font_class": "qq", + "unicode": "\ue680" + }, + { + "font_class": "redo", + "unicode": "\ue64a" + }, + { + "font_class": "redo-filled", + "unicode": "\ue655" + }, + { + "font_class": "refresh", + "unicode": "\ue657" + }, + { + "font_class": "refresh-filled", + "unicode": "\ue656" + }, + { + "font_class": "refreshempty", + "unicode": "\ue6bf" + }, + { + "font_class": "reload", + "unicode": "\ue6b2" + }, + { + "font_class": "right", + "unicode": "\ue6b5" + }, + { + "font_class": "scan", + "unicode": "\ue62a" + }, + { + "font_class": "search", + "unicode": "\ue654" + }, + { + "font_class": "settings", + "unicode": "\ue653" + }, + { + "font_class": "settings-filled", + "unicode": "\ue6ce" + }, + { + "font_class": "shop", + "unicode": "\ue62f" + }, + { + "font_class": "shop-filled", + "unicode": "\ue6cd" + }, + { + "font_class": "smallcircle", + "unicode": "\ue67c" + }, + { + "font_class": "smallcircle-filled", + "unicode": "\ue665" + }, + { + "font_class": "sound", + "unicode": "\ue684" + }, + { + "font_class": "sound-filled", + "unicode": "\ue686" + }, + { + "font_class": "spinner-cycle", + "unicode": "\ue68a" + }, + { + "font_class": "staff", + "unicode": "\ue6a7" + }, + { + "font_class": "staff-filled", + "unicode": "\ue6cb" + }, + { + "font_class": "star", + "unicode": "\ue688" + }, + { + "font_class": "star-filled", + "unicode": "\ue68f" + }, + { + "font_class": "starhalf", + "unicode": "\ue683" + }, + { + "font_class": "trash", + "unicode": "\ue687" + }, + { + "font_class": "trash-filled", + "unicode": "\ue685" + }, + { + "font_class": "tune", + "unicode": "\ue6aa" + }, + { + "font_class": "tune-filled", + "unicode": "\ue6ca" + }, + { + "font_class": "undo", + "unicode": "\ue64f" + }, + { + "font_class": "undo-filled", + "unicode": "\ue64c" + }, + { + "font_class": "up", + "unicode": "\ue6b6" + }, + { + "font_class": "top", + "unicode": "\ue6b6" + }, + { + "font_class": "upload", + "unicode": "\ue690" + }, + { + "font_class": "upload-filled", + "unicode": "\ue68e" + }, + { + "font_class": "videocam", + "unicode": "\ue68c" + }, + { + "font_class": "videocam-filled", + "unicode": "\ue689" + }, + { + "font_class": "vip", + "unicode": "\ue6a8" + }, + { + "font_class": "vip-filled", + "unicode": "\ue6c6" + }, + { + "font_class": "wallet", + "unicode": "\ue6b1" + }, + { + "font_class": "wallet-filled", + "unicode": "\ue6c2" + }, + { + "font_class": "weibo", + "unicode": "\ue68b" + }, + { + "font_class": "weixin", + "unicode": "\ue691" + } +] as IconsDataItem[] + +// export const fontData = JSON.parse(fontDataJson) diff --git a/src/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js b/src/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js new file mode 100644 index 0000000..1cd11e1 --- /dev/null +++ b/src/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js @@ -0,0 +1,649 @@ + +export const fontData = [ + { + "font_class": "arrow-down", + "unicode": "\ue6be" + }, + { + "font_class": "arrow-left", + "unicode": "\ue6bc" + }, + { + "font_class": "arrow-right", + "unicode": "\ue6bb" + }, + { + "font_class": "arrow-up", + "unicode": "\ue6bd" + }, + { + "font_class": "auth", + "unicode": "\ue6ab" + }, + { + "font_class": "auth-filled", + "unicode": "\ue6cc" + }, + { + "font_class": "back", + "unicode": "\ue6b9" + }, + { + "font_class": "bars", + "unicode": "\ue627" + }, + { + "font_class": "calendar", + "unicode": "\ue6a0" + }, + { + "font_class": "calendar-filled", + "unicode": "\ue6c0" + }, + { + "font_class": "camera", + "unicode": "\ue65a" + }, + { + "font_class": "camera-filled", + "unicode": "\ue658" + }, + { + "font_class": "cart", + "unicode": "\ue631" + }, + { + "font_class": "cart-filled", + "unicode": "\ue6d0" + }, + { + "font_class": "chat", + "unicode": "\ue65d" + }, + { + "font_class": "chat-filled", + "unicode": "\ue659" + }, + { + "font_class": "chatboxes", + "unicode": "\ue696" + }, + { + "font_class": "chatboxes-filled", + "unicode": "\ue692" + }, + { + "font_class": "chatbubble", + "unicode": "\ue697" + }, + { + "font_class": "chatbubble-filled", + "unicode": "\ue694" + }, + { + "font_class": "checkbox", + "unicode": "\ue62b" + }, + { + "font_class": "checkbox-filled", + "unicode": "\ue62c" + }, + { + "font_class": "checkmarkempty", + "unicode": "\ue65c" + }, + { + "font_class": "circle", + "unicode": "\ue65b" + }, + { + "font_class": "circle-filled", + "unicode": "\ue65e" + }, + { + "font_class": "clear", + "unicode": "\ue66d" + }, + { + "font_class": "close", + "unicode": "\ue673" + }, + { + "font_class": "closeempty", + "unicode": "\ue66c" + }, + { + "font_class": "cloud-download", + "unicode": "\ue647" + }, + { + "font_class": "cloud-download-filled", + "unicode": "\ue646" + }, + { + "font_class": "cloud-upload", + "unicode": "\ue645" + }, + { + "font_class": "cloud-upload-filled", + "unicode": "\ue648" + }, + { + "font_class": "color", + "unicode": "\ue6cf" + }, + { + "font_class": "color-filled", + "unicode": "\ue6c9" + }, + { + "font_class": "compose", + "unicode": "\ue67f" + }, + { + "font_class": "contact", + "unicode": "\ue693" + }, + { + "font_class": "contact-filled", + "unicode": "\ue695" + }, + { + "font_class": "down", + "unicode": "\ue6b8" + }, + { + "font_class": "bottom", + "unicode": "\ue6b8" + }, + { + "font_class": "download", + "unicode": "\ue68d" + }, + { + "font_class": "download-filled", + "unicode": "\ue681" + }, + { + "font_class": "email", + "unicode": "\ue69e" + }, + { + "font_class": "email-filled", + "unicode": "\ue69a" + }, + { + "font_class": "eye", + "unicode": "\ue651" + }, + { + "font_class": "eye-filled", + "unicode": "\ue66a" + }, + { + "font_class": "eye-slash", + "unicode": "\ue6b3" + }, + { + "font_class": "eye-slash-filled", + "unicode": "\ue6b4" + }, + { + "font_class": "fire", + "unicode": "\ue6a1" + }, + { + "font_class": "fire-filled", + "unicode": "\ue6c5" + }, + { + "font_class": "flag", + "unicode": "\ue65f" + }, + { + "font_class": "flag-filled", + "unicode": "\ue660" + }, + { + "font_class": "folder-add", + "unicode": "\ue6a9" + }, + { + "font_class": "folder-add-filled", + "unicode": "\ue6c8" + }, + { + "font_class": "font", + "unicode": "\ue6a3" + }, + { + "font_class": "forward", + "unicode": "\ue6ba" + }, + { + "font_class": "gear", + "unicode": "\ue664" + }, + { + "font_class": "gear-filled", + "unicode": "\ue661" + }, + { + "font_class": "gift", + "unicode": "\ue6a4" + }, + { + "font_class": "gift-filled", + "unicode": "\ue6c4" + }, + { + "font_class": "hand-down", + "unicode": "\ue63d" + }, + { + "font_class": "hand-down-filled", + "unicode": "\ue63c" + }, + { + "font_class": "hand-up", + "unicode": "\ue63f" + }, + { + "font_class": "hand-up-filled", + "unicode": "\ue63e" + }, + { + "font_class": "headphones", + "unicode": "\ue630" + }, + { + "font_class": "heart", + "unicode": "\ue639" + }, + { + "font_class": "heart-filled", + "unicode": "\ue641" + }, + { + "font_class": "help", + "unicode": "\ue679" + }, + { + "font_class": "help-filled", + "unicode": "\ue674" + }, + { + "font_class": "home", + "unicode": "\ue662" + }, + { + "font_class": "home-filled", + "unicode": "\ue663" + }, + { + "font_class": "image", + "unicode": "\ue670" + }, + { + "font_class": "image-filled", + "unicode": "\ue678" + }, + { + "font_class": "images", + "unicode": "\ue650" + }, + { + "font_class": "images-filled", + "unicode": "\ue64b" + }, + { + "font_class": "info", + "unicode": "\ue669" + }, + { + "font_class": "info-filled", + "unicode": "\ue649" + }, + { + "font_class": "left", + "unicode": "\ue6b7" + }, + { + "font_class": "link", + "unicode": "\ue6a5" + }, + { + "font_class": "list", + "unicode": "\ue644" + }, + { + "font_class": "location", + "unicode": "\ue6ae" + }, + { + "font_class": "location-filled", + "unicode": "\ue6af" + }, + { + "font_class": "locked", + "unicode": "\ue66b" + }, + { + "font_class": "locked-filled", + "unicode": "\ue668" + }, + { + "font_class": "loop", + "unicode": "\ue633" + }, + { + "font_class": "mail-open", + "unicode": "\ue643" + }, + { + "font_class": "mail-open-filled", + "unicode": "\ue63a" + }, + { + "font_class": "map", + "unicode": "\ue667" + }, + { + "font_class": "map-filled", + "unicode": "\ue666" + }, + { + "font_class": "map-pin", + "unicode": "\ue6ad" + }, + { + "font_class": "map-pin-ellipse", + "unicode": "\ue6ac" + }, + { + "font_class": "medal", + "unicode": "\ue6a2" + }, + { + "font_class": "medal-filled", + "unicode": "\ue6c3" + }, + { + "font_class": "mic", + "unicode": "\ue671" + }, + { + "font_class": "mic-filled", + "unicode": "\ue677" + }, + { + "font_class": "micoff", + "unicode": "\ue67e" + }, + { + "font_class": "micoff-filled", + "unicode": "\ue6b0" + }, + { + "font_class": "minus", + "unicode": "\ue66f" + }, + { + "font_class": "minus-filled", + "unicode": "\ue67d" + }, + { + "font_class": "more", + "unicode": "\ue64d" + }, + { + "font_class": "more-filled", + "unicode": "\ue64e" + }, + { + "font_class": "navigate", + "unicode": "\ue66e" + }, + { + "font_class": "navigate-filled", + "unicode": "\ue67a" + }, + { + "font_class": "notification", + "unicode": "\ue6a6" + }, + { + "font_class": "notification-filled", + "unicode": "\ue6c1" + }, + { + "font_class": "paperclip", + "unicode": "\ue652" + }, + { + "font_class": "paperplane", + "unicode": "\ue672" + }, + { + "font_class": "paperplane-filled", + "unicode": "\ue675" + }, + { + "font_class": "person", + "unicode": "\ue699" + }, + { + "font_class": "person-filled", + "unicode": "\ue69d" + }, + { + "font_class": "personadd", + "unicode": "\ue69f" + }, + { + "font_class": "personadd-filled", + "unicode": "\ue698" + }, + { + "font_class": "personadd-filled-copy", + "unicode": "\ue6d1" + }, + { + "font_class": "phone", + "unicode": "\ue69c" + }, + { + "font_class": "phone-filled", + "unicode": "\ue69b" + }, + { + "font_class": "plus", + "unicode": "\ue676" + }, + { + "font_class": "plus-filled", + "unicode": "\ue6c7" + }, + { + "font_class": "plusempty", + "unicode": "\ue67b" + }, + { + "font_class": "pulldown", + "unicode": "\ue632" + }, + { + "font_class": "pyq", + "unicode": "\ue682" + }, + { + "font_class": "qq", + "unicode": "\ue680" + }, + { + "font_class": "redo", + "unicode": "\ue64a" + }, + { + "font_class": "redo-filled", + "unicode": "\ue655" + }, + { + "font_class": "refresh", + "unicode": "\ue657" + }, + { + "font_class": "refresh-filled", + "unicode": "\ue656" + }, + { + "font_class": "refreshempty", + "unicode": "\ue6bf" + }, + { + "font_class": "reload", + "unicode": "\ue6b2" + }, + { + "font_class": "right", + "unicode": "\ue6b5" + }, + { + "font_class": "scan", + "unicode": "\ue62a" + }, + { + "font_class": "search", + "unicode": "\ue654" + }, + { + "font_class": "settings", + "unicode": "\ue653" + }, + { + "font_class": "settings-filled", + "unicode": "\ue6ce" + }, + { + "font_class": "shop", + "unicode": "\ue62f" + }, + { + "font_class": "shop-filled", + "unicode": "\ue6cd" + }, + { + "font_class": "smallcircle", + "unicode": "\ue67c" + }, + { + "font_class": "smallcircle-filled", + "unicode": "\ue665" + }, + { + "font_class": "sound", + "unicode": "\ue684" + }, + { + "font_class": "sound-filled", + "unicode": "\ue686" + }, + { + "font_class": "spinner-cycle", + "unicode": "\ue68a" + }, + { + "font_class": "staff", + "unicode": "\ue6a7" + }, + { + "font_class": "staff-filled", + "unicode": "\ue6cb" + }, + { + "font_class": "star", + "unicode": "\ue688" + }, + { + "font_class": "star-filled", + "unicode": "\ue68f" + }, + { + "font_class": "starhalf", + "unicode": "\ue683" + }, + { + "font_class": "trash", + "unicode": "\ue687" + }, + { + "font_class": "trash-filled", + "unicode": "\ue685" + }, + { + "font_class": "tune", + "unicode": "\ue6aa" + }, + { + "font_class": "tune-filled", + "unicode": "\ue6ca" + }, + { + "font_class": "undo", + "unicode": "\ue64f" + }, + { + "font_class": "undo-filled", + "unicode": "\ue64c" + }, + { + "font_class": "up", + "unicode": "\ue6b6" + }, + { + "font_class": "top", + "unicode": "\ue6b6" + }, + { + "font_class": "upload", + "unicode": "\ue690" + }, + { + "font_class": "upload-filled", + "unicode": "\ue68e" + }, + { + "font_class": "videocam", + "unicode": "\ue68c" + }, + { + "font_class": "videocam-filled", + "unicode": "\ue689" + }, + { + "font_class": "vip", + "unicode": "\ue6a8" + }, + { + "font_class": "vip-filled", + "unicode": "\ue6c6" + }, + { + "font_class": "wallet", + "unicode": "\ue6b1" + }, + { + "font_class": "wallet-filled", + "unicode": "\ue6c2" + }, + { + "font_class": "weibo", + "unicode": "\ue68b" + }, + { + "font_class": "weixin", + "unicode": "\ue691" + } +] + +// export const fontData = JSON.parse(fontDataJson) diff --git a/src/uni_modules/uni-icons/package.json b/src/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..6b681b4 --- /dev/null +++ b/src/uni_modules/uni-icons/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "2.0.10", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y", + "app-uvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "钉钉": "y", + "快手": "y", + "飞书": "y", + "京东": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-icons/readme.md b/src/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/src/uni_modules/uni-icons/readme.md @@ -0,0 +1,8 @@ +## Icons 图标 +> **组件名:uni-icons** +> 代码块: `uIcons` + +用于展示 icons 图标 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-icons) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-indexed-list/changelog.md b/src/uni_modules/uni-indexed-list/changelog.md new file mode 100644 index 0000000..08fa71c --- /dev/null +++ b/src/uni_modules/uni-indexed-list/changelog.md @@ -0,0 +1,17 @@ +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-indexed-list](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 diff --git a/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue new file mode 100644 index 0000000..19284bd --- /dev/null +++ b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list-item.vue @@ -0,0 +1,144 @@ + + + + + diff --git a/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue new file mode 100644 index 0000000..ee3a7ec --- /dev/null +++ b/src/uni_modules/uni-indexed-list/components/uni-indexed-list/uni-indexed-list.vue @@ -0,0 +1,367 @@ + + + diff --git a/src/uni_modules/uni-indexed-list/package.json b/src/uni_modules/uni-indexed-list/package.json new file mode 100644 index 0000000..125c0e7 --- /dev/null +++ b/src/uni_modules/uni-indexed-list/package.json @@ -0,0 +1,89 @@ +{ + "id": "uni-indexed-list", + "displayName": "uni-indexed-list 索引列表", + "version": "1.2.1", + "description": "索引列表组件,右侧带索引的列表,方便快速定位到具体内容,通常用于城市/机场选择等场景", + "keywords": [ + "uni-ui", + "索引列表", + "索引", + "列表" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-indexed-list/readme.md b/src/uni_modules/uni-indexed-list/readme.md new file mode 100644 index 0000000..44ad84b --- /dev/null +++ b/src/uni_modules/uni-indexed-list/readme.md @@ -0,0 +1,11 @@ + + +## IndexedList 索引列表 +> **组件名:uni-indexed-list** +> 代码块: `uIndexedList` + + +用于展示索引列表。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-indexed-list) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-link/changelog.md b/src/uni_modules/uni-link/changelog.md new file mode 100644 index 0000000..2cfbf59 --- /dev/null +++ b/src/uni_modules/uni-link/changelog.md @@ -0,0 +1,17 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-link](https://uniapp.dcloud.io/component/uniui/uni-link) +## 1.1.7(2021-11-08) +## 0.0.7(2021-09-03) +- 修复 在 nvue 下不显示的 bug +## 0.0.6(2021-07-30) +- 新增 支持自定义插槽 +## 0.0.5(2021-06-21) +- 新增 download 属性,H5平台下载文件名 +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-03-09) +- 新增 href 属性支持 tel:|mailto: + +## 0.0.2(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-link/components/uni-link/uni-link.vue b/src/uni_modules/uni-link/components/uni-link/uni-link.vue new file mode 100644 index 0000000..27c5468 --- /dev/null +++ b/src/uni_modules/uni-link/components/uni-link/uni-link.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/uni_modules/uni-link/package.json b/src/uni_modules/uni-link/package.json new file mode 100644 index 0000000..77b1986 --- /dev/null +++ b/src/uni_modules/uni-link/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-link", + "displayName": "uni-link 超链接", + "version": "1.0.0", + "description": "uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打", + "keywords": [ + "uni-ui", + "uniui", + "link", + "超链接", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "y" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-link/readme.md b/src/uni_modules/uni-link/readme.md new file mode 100644 index 0000000..7f09e94 --- /dev/null +++ b/src/uni_modules/uni-link/readme.md @@ -0,0 +1,11 @@ + + +## Link 链接 +> **组件名:uni-link** +> 代码块: `uLink` + + +uni-link是一个外部网页超链接组件,在小程序内复制url,在app内打开外部浏览器,在h5端打开新网页。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-link) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-list/changelog.md b/src/uni_modules/uni-list/changelog.md new file mode 100644 index 0000000..8254a18 --- /dev/null +++ b/src/uni_modules/uni-list/changelog.md @@ -0,0 +1,46 @@ +## 1.2.14(2023-04-14) +- 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改 +## 1.2.13(2023-03-03) +- uni-list-chat 新增 支持具名插槽`header` +## 1.2.12(2023-02-01) +- 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props) +## 1.2.11(2023-01-31) +- 修复 无反馈效果呈现的bug +## 1.2.9(2022-11-22) +- 修复 uni-list-chat 在vue3下跳转报错的bug +## 1.2.8(2022-11-21) +- 修复 uni-list-chat avatar属性 值为本地路径时错误的问题 +## 1.2.7(2022-11-21) +- 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题 +## 1.2.6(2022-11-18) +- 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题 +## 1.2.5(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug +## 1.2.4(2022-11-15) +- 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug +## 1.2.3(2022-11-14) +- uni-list-chat 新增 avatar 支持 fileId +## 1.2.2(2022-11-11) +- uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html) +- uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im) +- uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor +## 1.2.1(2022-03-30) +- 删除无用文件 +## 1.2.0(2021-11-23) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-list](https://uniapp.dcloud.io/component/uniui/uni-list) +## 1.1.3(2021-08-30) +- 修复 在vue3中to属性在发行应用的时候报错的bug +## 1.1.2(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.1(2021-07-21) +- 修复 与其他组件嵌套使用时,点击失效的Bug +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.17(2021-05-12) +- 新增 组件示例地址 +## 1.0.16(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.0.15(2021-02-05) +- 调整为uni_modules目录规范 +- 修复 uni-list-chat 角标显示不正常的问题 diff --git a/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue b/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue new file mode 100644 index 0000000..b9349c2 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-ad/uni-list-ad.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss new file mode 100644 index 0000000..311f8d9 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.scss @@ -0,0 +1,58 @@ +/** + * 这里是 uni-list 组件内置的常用样式变量 + * 如果需要覆盖样式,这里提供了基本的组件样式变量,您可以尝试修改这里的变量,去完成样式替换,而不用去修改源码 + * + */ + +// 背景色 +$background-color : #fff; +// 分割线颜色 +$divide-line-color : #e5e5e5; + +// 默认头像大小,如需要修改此值,注意同步修改 js 中的值 const avatarWidth = xx ,目前只支持方形头像 +// nvue 页面不支持修改头像大小 +$avatar-width : 45px ; + +// 头像边框 +$avatar-border-radius: 5px; +$avatar-border-color: #eee; +$avatar-border-width: 1px; + +// 标题文字样式 +$title-size : 16px; +$title-color : #3b4144; +$title-weight : normal; + +// 描述文字样式 +$note-size : 12px; +$note-color : #999; +$note-weight : normal; + +// 右侧额外内容默认样式 +$right-text-size : 12px; +$right-text-color : #999; +$right-text-weight : normal; + +// 角标样式 +// nvue 页面不支持修改圆点位置以及大小 +// 角标在左侧时,角标的位置,默认为 0 ,负数左/下移动,正数右/上移动 +$badge-left: 0px; +$badge-top: 0px; + +// 显示圆点时,圆点大小 +$dot-width: 10px; +$dot-height: 10px; + +// 显示角标时,角标大小和字体大小 +$badge-size : 18px; +$badge-font : 12px; +// 显示角标时,角标前景色 +$badge-color : #fff; +// 显示角标时,角标背景色 +$badge-background-color : #ff5a5f; +// 显示角标时,角标左右间距 +$badge-space : 6px; + +// 状态样式 +// 选中颜色 +$hover : #f5f5f5; diff --git a/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue new file mode 100644 index 0000000..d49fd7c --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-chat/uni-list-chat.vue @@ -0,0 +1,593 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue b/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue new file mode 100644 index 0000000..a274ac8 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list-item/uni-list-item.vue @@ -0,0 +1,534 @@ + + + + + \ No newline at end of file diff --git a/src/uni_modules/uni-list/components/uni-list/uni-list.vue b/src/uni_modules/uni-list/components/uni-list/uni-list.vue new file mode 100644 index 0000000..6ef5972 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-list.vue @@ -0,0 +1,123 @@ + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue b/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue new file mode 100644 index 0000000..3b4c5a2 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-refresh.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs b/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs new file mode 100644 index 0000000..818a6b7 --- /dev/null +++ b/src/uni_modules/uni-list/components/uni-list/uni-refresh.wxs @@ -0,0 +1,87 @@ +var pullDown = { + threshold: 95, + maxHeight: 200, + callRefresh: 'onrefresh', + callPullingDown: 'onpullingdown', + refreshSelector: '.uni-refresh' +}; + +function ready(newValue, oldValue, ownerInstance, instance) { + var state = instance.getState() + state.canPullDown = newValue; + // console.log(newValue); +} + +function touchStart(e, instance) { + var state = instance.getState(); + state.refreshInstance = instance.selectComponent(pullDown.refreshSelector); + state.canPullDown = (state.refreshInstance != null && state.refreshInstance != undefined); + if (!state.canPullDown) { + return + } + + // console.log("touchStart"); + + state.height = 0; + state.touchStartY = e.touches[0].pageY || e.changedTouches[0].pageY; + state.refreshInstance.setStyle({ + 'height': 0 + }); + state.refreshInstance.callMethod("onchange", true); +} + +function touchMove(e, ownerInstance) { + var instance = e.instance; + var state = instance.getState(); + if (!state.canPullDown) { + return + } + + var oldHeight = state.height; + var endY = e.touches[0].pageY || e.changedTouches[0].pageY; + var height = endY - state.touchStartY; + if (height > pullDown.maxHeight) { + return; + } + + var refreshInstance = state.refreshInstance; + refreshInstance.setStyle({ + 'height': height + 'px' + }); + + height = height < pullDown.maxHeight ? height : pullDown.maxHeight; + state.height = height; + refreshInstance.callMethod(pullDown.callPullingDown, { + height: height + }); +} + +function touchEnd(e, ownerInstance) { + var state = e.instance.getState(); + if (!state.canPullDown) { + return + } + + state.refreshInstance.callMethod("onchange", false); + + var refreshInstance = state.refreshInstance; + if (state.height > pullDown.threshold) { + refreshInstance.callMethod(pullDown.callRefresh); + return; + } + + refreshInstance.setStyle({ + 'height': 0 + }); +} + +function propObserver(newValue, oldValue, instance) { + pullDown = newValue; +} + +module.exports = { + touchmove: touchMove, + touchstart: touchStart, + touchend: touchEnd, + propObserver: propObserver +} diff --git a/src/uni_modules/uni-list/package.json b/src/uni_modules/uni-list/package.json new file mode 100644 index 0000000..8350efc --- /dev/null +++ b/src/uni_modules/uni-list/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-list", + "displayName": "uni-list 列表", + "version": "1.2.14", + "description": "List 组件 ,帮助使用者快速构建列表。", + "keywords": [ + "", + "uni-ui", + "uniui", + "列表", + "", + "list" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-badge", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-list/readme.md b/src/uni_modules/uni-list/readme.md new file mode 100644 index 0000000..32c2865 --- /dev/null +++ b/src/uni_modules/uni-list/readme.md @@ -0,0 +1,346 @@ +## List 列表 +> **组件名:uni-list** +> 代码块: `uList`、`uListItem` +> 关联组件:`uni-list-item`、`uni-badge`、`uni-icons`、`uni-list-chat`、`uni-list-ad` + + +List 列表组件,包含基本列表样式、可扩展插槽机制、长列表性能优化、多端兼容。 + +在vue页面里,它默认使用页面级滚动。在app-nvue页面里,它默认使用原生list组件滚动。这样的长列表,在滚动出屏幕外后,系统会回收不可见区域的渲染内存资源,不会造成滚动越长手机越卡的问题。 + +uni-list组件是父容器,里面的核心是uni-list-item子组件,它代表列表中的一个可重复行,子组件可以无限循环。 + +uni-list-item有很多风格,uni-list-item组件通过内置的属性,满足一些常用的场景。当内置属性不满足需求时,可以通过扩展插槽来自定义列表内容。 + +内置属性可以覆盖的场景包括:导航列表、设置列表、小图标列表、通信录列表、聊天记录列表。 + +涉及很多大图或丰富内容的列表,比如类今日头条的新闻列表、类淘宝的电商列表,需要通过扩展插槽实现。 + +下文均有样例给出。 + +uni-list不包含下拉刷新和上拉翻页。上拉翻页另见组件:[uni-load-more](https://ext.dcloud.net.cn/plugin?id=29) + + +### 安装方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,`HBuilderX 2.5.5`起,只需将本组件导入项目,在页面`template`中即可直接使用,无需在页面中`import`和注册`components`。 + +如需通过`npm`方式使用`uni-ui`组件,另见文档:[https://ext.dcloud.net.cn/plugin?id=55](https://ext.dcloud.net.cn/plugin?id=55) + +> **注意事项** +> 为了避免错误使用,给大家带来不好的开发体验,请在使用组件前仔细阅读下面的注意事项,可以帮你避免一些错误。 +> - 组件需要依赖 `sass` 插件 ,请自行手动安装 +> - 组件内部依赖 `'uni-icons'` 、`uni-badge` 组件 +> - `uni-list` 和 `uni-list-item` 需要配套使用,暂不支持单独使用 `uni-list-item` +> - 只有开启点击反馈后,会有点击选中效果 +> - 使用插槽时,可以完全自定义内容 +> - note 、rightText 属性暂时没做限制,不支持文字溢出隐藏,使用时应该控制长度显示或通过默认插槽自行扩展 +> - 支付宝小程序平台需要在支付宝小程序开发者工具里开启 component2 编译模式,开启方式: 详情 --> 项目配置 --> 启用 component2 编译 +> - 如果需要修改 `switch`、`badge` 样式,请使用插槽自定义 +> - 在 `HBuilderX` 低版本中,可能会出现组件显示 `undefined` 的问题,请升级最新的 `HBuilderX` 或者 `cli` +> - 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + +### 基本用法 + +- 设置 `title` 属性,可以显示列表标题 +- 设置 `disabled` 属性,可以禁用当前项 + +```html + + + + + +``` + +### 多行内容显示 + +- 设置 `note` 属性 ,可以在第二行显示描述文本信息 + +```html + + + + + +``` + +### 右侧显示角标、switch + +- 设置 `show-badge` 属性 ,可以显示角标内容 +- 设置 `show-switch` 属性,可以显示 switch 开关 + +```html + + + + + +``` + +### 左侧显示略缩图、图标 + +- 设置 `thumb` 属性 ,可以在列表左侧显示略缩图 +- 设置 `show-extra-icon` 属性,并指定 `extra-icon` 可以在左侧显示图标 + +```html + + + + +``` + +### 开启点击反馈和右侧箭头 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,并给列表右侧添加一个箭头 +- 设置 `to` 属性,可以跳转页面,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` + +```html + + + + + + + +``` + + +### 聊天列表示例 +- 设置 `clickable` 为 `true` ,则表示这是一个可点击的列表,会默认给一个点击效果,并可以监听 `click` 事件 +- 设置 `link` 属性,会自动开启点击反馈,`link` 的值表示跳转方式,如果不指定,默认为 `navigateTo` +- 设置 `to` 属性,可以跳转页面 +- `time` 属性,通常会设置成时间显示,但是这个属性不仅仅可以设置时间,你可以传入任何文本,注意文本长度可能会影响显示 +- `avatar` 和 `avatarList` 属性同时只会有一个生效,同时设置的话,`avatarList` 属性的长度大于1 ,`avatar` 属性将失效 +- 可以通过默认插槽自定义列表右侧内容 + +```html + + + + + + + + + + + + + + + + + 刚刚 + + + + + + + +``` + +```javascript + +export default { + components: {}, + data() { + return { + avatarList: [{ + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }, { + url: 'https://vkceyugu.cdn.bspapp.com/VKCEYUGU-dc-site/460d46d0-4fcc-11eb-8ff1-d5dcf8779628.png' + }] + } + } +} + +``` + + +```css + +.chat-custom-right { + flex: 1; + /* #ifndef APP-NVUE */ + display: flex; + /* #endif */ + flex-direction: column; + justify-content: space-between; + align-items: flex-end; +} + +.chat-custom-text { + font-size: 12px; + color: #999; +} + +``` + +## API + +### List Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +border |Boolean |true | 是否显示边框 + + +### ListItem Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +ellipsis |Number |0 | title 是否溢出隐藏,可选值,0:默认; 1:显示一行; 2:显示两行;【nvue 暂不支持】 +thumb |String |- | 左侧缩略图,若thumb有值,则不会显示扩展图标 +thumbSize |String |medium | 略缩图尺寸,可选值,lg:大图; medium:一般; sm:小图; +showBadge |Boolean |false | 是否显示数字角标 +badgeText |String |- | 数字角标内容 +badgeType |String |- | 数字角标类型,参考[uni-icons](https://ext.dcloud.net.cn/plugin?id=21) +badgeStyle |Object |- | 数字角标样式,使用uni-badge的custom-style参数 +rightText |String |- | 右侧文字内容 +disabled |Boolean |false | 是否禁用 +showArrow |Boolean |true | 是否显示箭头图标 +link |String |navigateTo | 新页面跳转方式,可选值见下表 +to |String |- | 新页面跳转地址,如填写此属性,click 会返回页面是否跳转成功 +clickable |Boolean |false | 是否开启点击反馈 +showSwitch |Boolean |false | 是否显示Switch +switchChecked |Boolean |false | Switch是否被选中 +showExtraIcon |Boolean |false | 左侧是否显示扩展图标 +extraIcon |Object |- | 扩展图标参数,格式为 ``{color: '#4cd964',size: '22',type: 'spinner'}``,参考 [uni-icons](https://ext.dcloud.net.cn/plugin?id=28) +direction | String |row | 排版方向,可选值,row:水平排列; column:垂直排列; 3个插槽是水平排还是垂直排,也受此属性控制 + + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItem Events + +事件称名 |说明 |返回参数 +:-: |:-: |:-: +click |点击 uniListItem 触发事件,需开启点击反馈 |- +switchChange |点击切换 Switch 时触发,需显示 switch |e={value:checked} + + + +### ListItem Slots + +名称 | 说明 +:-: | :-: +header | 左/上内容插槽,可完全自定义默认显示 +body | 中间内容插槽,可完全自定义中间内容 +footer | 右/下内容插槽,可完全自定义右侧内容 + + +> **通过插槽扩展** +> 需要注意的是当使用插槽时,内置样式将会失效,只保留排版样式,此时的样式需要开发者自己实现 +> 如果 `uni-list-item` 组件内置属性样式无法满足需求,可以使用插槽来自定义uni-list-item里的内容。 +> uni-list-item提供了3个可扩展的插槽:`header`、`body`、`footer` +> - 当 `direction` 属性为 `row` 时表示水平排列,此时 `header` 表示列表的左边部分,`body` 表示列表的中间部分,`footer` 表示列表的右边部分 +> - 当 `direction` 属性为 `column` 时表示垂直排列,此时 `header` 表示列表的上边部分,`body` 表示列表的中间部分,`footer` 表示列表的下边部分 +> 开发者可以只用1个插槽,也可以3个一起使用。在插槽中可自主编写view标签,实现自己所需的效果。 + + +**示例** + +```html + + + + + + + + + 自定义插槽 + + + + +``` + + + + + +### ListItemChat Props + +属性名 |类型 |默认值 | 说明 +:-: |:-: |:-: | :-: +title |String |- | 标题 +note |String |- | 描述 +clickable |Boolean |false | 是否开启点击反馈 +badgeText |String |- | 数字角标内容,设置为 `dot` 将显示圆点 +badgePositon |String |right | 角标位置 +link |String |navigateTo | 是否展示右侧箭头并开启点击反馈,可选值见下表 +clickable |Boolean |false | 是否开启点击反馈 +to |String |- | 跳转页面地址,如填写此属性,click 会返回页面是否跳转成功 +time |String |- | 右侧时间显示 +avatarCircle |Boolean |false | 是否显示圆形头像 +avatar |String |- | 头像地址,avatarCircle 不填时生效 +avatarList |Array |- | 头像组,格式为 [{url:''}] + +#### Link Options + +属性名 | 说明 +:-: | :-: +navigateTo | 同 uni.navigateTo() +redirectTo | 同 uni.reLaunch() +reLaunch | 同 uni.reLaunch() +switchTab | 同 uni.switchTab() + +### ListItemChat Slots + +名称 | 说明 +:- | :- +default | 自定义列表右侧内容(包括时间和角标显示) + +### ListItemChat Events +事件称名 | 说明 | 返回参数 +:-: | :-: | :-: +@click | 点击 uniListChat 触发事件 | {data:{}} ,如有 to 属性,会返回页面跳转信息 + + + + + + +## 基于uni-list扩展的页面模板 + +通过扩展插槽,可实现多种常见样式的列表 + +**新闻列表类** + +1. 云端一体混合布局:[https://ext.dcloud.net.cn/plugin?id=2546](https://ext.dcloud.net.cn/plugin?id=2546) +2. 云端一体垂直布局,大图模式:[https://ext.dcloud.net.cn/plugin?id=2583](https://ext.dcloud.net.cn/plugin?id=2583) +3. 云端一体垂直布局,多行图文混排:[https://ext.dcloud.net.cn/plugin?id=2584](https://ext.dcloud.net.cn/plugin?id=2584) +4. 云端一体垂直布局,多图模式:[https://ext.dcloud.net.cn/plugin?id=2585](https://ext.dcloud.net.cn/plugin?id=2585) +5. 云端一体水平布局,左图右文:[https://ext.dcloud.net.cn/plugin?id=2586](https://ext.dcloud.net.cn/plugin?id=2586) +6. 云端一体水平布局,左文右图:[https://ext.dcloud.net.cn/plugin?id=2587](https://ext.dcloud.net.cn/plugin?id=2587) +7. 云端一体垂直布局,无图模式,主标题+副标题:[https://ext.dcloud.net.cn/plugin?id=2588](https://ext.dcloud.net.cn/plugin?id=2588) + +**商品列表类** + +1. 云端一体列表/宫格视图互切:[https://ext.dcloud.net.cn/plugin?id=2651](https://ext.dcloud.net.cn/plugin?id=2651) +2. 云端一体列表(宫格模式):[https://ext.dcloud.net.cn/plugin?id=2671](https://ext.dcloud.net.cn/plugin?id=2671) +3. 云端一体列表(列表模式):[https://ext.dcloud.net.cn/plugin?id=2672](https://ext.dcloud.net.cn/plugin?id=2672) + +## 组件示例 + +点击查看:[https://hellouniapp.dcloud.net.cn/pages/extUI/list/list](https://hellouniapp.dcloud.net.cn/pages/extUI/list/list) \ No newline at end of file diff --git a/src/uni_modules/uni-load-more/changelog.md b/src/uni_modules/uni-load-more/changelog.md new file mode 100644 index 0000000..667abdb --- /dev/null +++ b/src/uni_modules/uni-load-more/changelog.md @@ -0,0 +1,25 @@ +## 1.3.6(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.5(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.4(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.3(2022-01-20) +- 新增 showText属性 ,是否显示文本 +## 1.3.2(2022-01-19) +- 修复 nvue 平台下不显示文本的bug +## 1.3.1(2022-01-19) +- 修复 微信小程序平台样式选择器报警告的问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-load-more](https://uniapp.dcloud.io/component/uniui/uni-load-more) +## 1.2.1(2021-08-24) +- 新增 支持国际化 +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.8(2021-05-12) +- 新增 组件示例地址 +## 1.1.7(2021-03-30) +- 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +## 1.1.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json new file mode 100644 index 0000000..a4f14a5 --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "Pull up to show more", + "uni-load-more.contentrefresh": "loading...", + "uni-load-more.contentnomore": "No more data" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json new file mode 100644 index 0000000..f15d510 --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉显示更多", + "uni-load-more.contentrefresh": "正在加载...", + "uni-load-more.contentnomore": "没有更多数据了" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json new file mode 100644 index 0000000..a255c6d --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-load-more.contentdown": "上拉顯示更多", + "uni-load-more.contentrefresh": "正在加載...", + "uni-load-more.contentnomore": "沒有更多數據了" +} diff --git a/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue b/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue new file mode 100644 index 0000000..a203417 --- /dev/null +++ b/src/uni_modules/uni-load-more/components/uni-load-more/uni-load-more.vue @@ -0,0 +1,404 @@ + + + + + diff --git a/src/uni_modules/uni-load-more/package.json b/src/uni_modules/uni-load-more/package.json new file mode 100644 index 0000000..cf44bff --- /dev/null +++ b/src/uni_modules/uni-load-more/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-load-more", + "displayName": "uni-load-more 加载更多", + "version": "1.3.6", + "description": "LoadMore 组件,常用在列表里面,做滚动加载使用。", + "keywords": [ + "uni-ui", + "uniui", + "加载更多", + "load-more" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-load-more/readme.md b/src/uni_modules/uni-load-more/readme.md new file mode 100644 index 0000000..54dc1fa --- /dev/null +++ b/src/uni_modules/uni-load-more/readme.md @@ -0,0 +1,14 @@ + + +### LoadMore 加载更多 +> **组件名:uni-load-more** +> 代码块: `uLoadMore` + + +用于列表中,做滚动加载使用,展示 loading 的各种状态。 + + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-load-more) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-nav-bar/changelog.md b/src/uni_modules/uni-nav-bar/changelog.md new file mode 100644 index 0000000..e3efe12 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/changelog.md @@ -0,0 +1,57 @@ +## 1.3.14(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.13(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.12(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.3.11(2023-03-29) +- 修复 自定义状态栏高度闪动BUG +## 1.3.10(2023-03-29) +- 修复 暗黑模式下边线颜色错误的bug +## 1.3.9(2022-10-13) +- 修复 条件编译错误的bug +## 1.3.8(2022-10-12) +- 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.7(2022-08-11) +- 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug +## 1.3.6(2022-06-30) +- 修复 组件示例中插槽用法无法显示内容的bug +## 1.3.5(2022-05-24) +- 新增 stat 属性 ,可开启统计title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +## 1.3.4(2022-01-24) +- 更新 组件示例 +## 1.3.3(2022-01-24) +- 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +## 1.3.2(2022-01-18) +- 修复 在vue下,标题不垂直居中的bug +## 1.3.1(2022-01-18) +- 修复 height 属性类型错误 +## 1.3.0(2022-01-18) +- 新增 height 属性,可修改组件高度 +- 新增 dark 属性可可开启暗黑模式 +- 优化 标题字数过多显示省略号 +- 优化 插槽,插入内容可完全覆盖 +## 1.2.1(2022-01-10) +- 修复 color 属性不生效的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-nav-bar](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.11(2021-05-12) +- 新增 组件示例地址 +## 1.0.10(2021-04-30) +- 修复 在nvue下fixed为true,宽度不能撑满的Bug +## 1.0.9(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.8(2021-04-14) +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug + +## 1.0.7(2021-02-25) +- 修复 easycom 下,找不到 uni-status-bar 的bug + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue new file mode 100644 index 0000000..46806c1 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-nav-bar.vue @@ -0,0 +1,357 @@ + + + + + diff --git a/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue new file mode 100644 index 0000000..6185446 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/components/uni-nav-bar/uni-status-bar.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/uni_modules/uni-nav-bar/package.json b/src/uni_modules/uni-nav-bar/package.json new file mode 100644 index 0000000..d9f53b2 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-nav-bar", + "displayName": "uni-nav-bar 自定义导航栏", + "version": "1.3.14", + "description": "自定义导航栏组件,主要用于头部导航。", + "keywords": [ + "uni-ui", + "导航", + "导航栏", + "自定义导航栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-nav-bar/readme.md b/src/uni_modules/uni-nav-bar/readme.md new file mode 100644 index 0000000..3934b32 --- /dev/null +++ b/src/uni_modules/uni-nav-bar/readme.md @@ -0,0 +1,15 @@ + + +## NavBar 导航栏 +> **组件名:uni-nav-bar** +> 代码块: `uNavBar` + +导航栏组件,主要用于头部导航。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-nav-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/src/uni_modules/uni-notice-bar/changelog.md b/src/uni_modules/uni-notice-bar/changelog.md new file mode 100644 index 0000000..ce50674 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/changelog.md @@ -0,0 +1,20 @@ +## 1.2.2(2023-12-20) +- 修复动态绑定title时,滚动速度不一致的问题 +## 1.2.1(2022-09-05) +- 新增 属性 fontSize,可修改文字大小。 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-notice-bar](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +## 1.1.1(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 组件示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.6(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue b/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue new file mode 100644 index 0000000..47fb9b3 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/components/uni-notice-bar/uni-notice-bar.vue @@ -0,0 +1,431 @@ + + + + + diff --git a/src/uni_modules/uni-notice-bar/package.json b/src/uni_modules/uni-notice-bar/package.json new file mode 100644 index 0000000..1e9762c --- /dev/null +++ b/src/uni_modules/uni-notice-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-notice-bar", + "displayName": "uni-notice-bar 通告栏", + "version": "1.2.2", + "description": "NoticeBar 通告栏组件,常用于展示公告信息,可设为滚动公告", + "keywords": [ + "uni-ui", + "uniui", + "通告栏", + "公告", + "跑马灯" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-notice-bar/readme.md b/src/uni_modules/uni-notice-bar/readme.md new file mode 100644 index 0000000..fb2ede2 --- /dev/null +++ b/src/uni_modules/uni-notice-bar/readme.md @@ -0,0 +1,13 @@ + + +## NoticeBar 通告栏 +> **组件名:uni-notice-bar** +> 代码块: `uNoticeBar` + + +通告栏组件 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-notice-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-number-box/changelog.md b/src/uni_modules/uni-number-box/changelog.md new file mode 100644 index 0000000..adf9221 --- /dev/null +++ b/src/uni_modules/uni-number-box/changelog.md @@ -0,0 +1,39 @@ +## 1.2.8(2024-04-26) +- 修复 在vue2下H5黑边的bug +## 1.2.7(2024-04-26) +- 修复 在vue2手动输入后失焦导致清空数值的严重bug +## 1.2.6(2024-02-22) +- 新增 设置宽度属性width(单位:px) +## 1.2.5(2024-02-21) +- 修复 step步长小于1时,键盘类型为number的bug +## 1.2.4(2024-02-02) +- 修复 加减号垂直位置偏移样式问题 +## 1.2.3(2023-05-23) +- 更新示例工程 +## 1.2.2(2023-05-08) +- 修复 change 事件执行顺序错误的问题 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-number-box](https://uniapp.dcloud.io/component/uniui/uni-number-box) +## 1.1.2(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +## 1.1.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-20) +- 修复 uni-number-box 浮点数运算不精确的 bug +- 修复 uni-number-box change 事件触发不正确的 bug +- 新增 uni-number-box v-model 双向绑定 +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 + +## 1.0.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 v-model +- 新增 支持 focus、blur 事件 +- 新增 支持 PC 端 diff --git a/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue b/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue new file mode 100644 index 0000000..4e203cc --- /dev/null +++ b/src/uni_modules/uni-number-box/components/uni-number-box/uni-number-box.vue @@ -0,0 +1,232 @@ + + + diff --git a/src/uni_modules/uni-number-box/package.json b/src/uni_modules/uni-number-box/package.json new file mode 100644 index 0000000..4ac9047 --- /dev/null +++ b/src/uni_modules/uni-number-box/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-number-box", + "displayName": "uni-number-box 数字输入框", + "version": "1.2.8", + "description": "NumberBox 带加减按钮的数字输入框组件,用户可以控制每次点击增加的数值,支持小数。", + "keywords": [ + "uni-ui", + "uniui", + "数字输入框" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-number-box/readme.md b/src/uni_modules/uni-number-box/readme.md new file mode 100644 index 0000000..affc56f --- /dev/null +++ b/src/uni_modules/uni-number-box/readme.md @@ -0,0 +1,13 @@ + + +## NumberBox 数字输入框 +> **组件名:uni-number-box** +> 代码块: `uNumberBox` + + +带加减按钮的数字输入框。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-number-box) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-pagination/changelog.md b/src/uni_modules/uni-pagination/changelog.md new file mode 100644 index 0000000..2e94adc --- /dev/null +++ b/src/uni_modules/uni-pagination/changelog.md @@ -0,0 +1,27 @@ +## 1.2.4(2022-09-19) +- 修复,未对主题色设置默认色,导致未引入 uni-scss 变量文件报错。 +- 修复,未对移动端当前页文字做主题色适配。 +## 1.2.3(2022-09-15) +- 修复未使用 uni-scss 主题色的 bug。 +## 1.2.2(2022-07-06) +- 修复 es 语言 i18n 错误 +## 1.2.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-pagination](https://uniapp.dcloud.io/component/uniui/uni-pagination) +## 1.1.2(2021-10-08) +- 修复 current 、value 属性未监听,导致高亮样式失效的 bug +## 1.1.1(2021-08-20) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-05-12) +- 新增 组件示例地址 +## 1.0.6(2021-04-12) +- 新增 PC 和 移动端适配不同的 ui +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json new file mode 100644 index 0000000..d6e2897 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/en.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "prev", + "uni-pagination.nextText": "next", + "uni-pagination.piecePerPage": "piece/page" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json new file mode 100644 index 0000000..604a113 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/es.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "anterior", + "uni-pagination.nextText": "prxima", + "uni-pagination.piecePerPage": "Artculo/Pgina" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json new file mode 100644 index 0000000..a7a0c77 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/fr.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "précédente", + "uni-pagination.nextText": "suivante", + "uni-pagination.piecePerPage": "Articles/Pages" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json new file mode 100644 index 0000000..782bbe4 --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hans.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一页", + "uni-pagination.nextText": "下一页", + "uni-pagination.piecePerPage": "条/页" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json new file mode 100644 index 0000000..180fddb --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/i18n/zh-Hant.json @@ -0,0 +1,5 @@ +{ + "uni-pagination.prevText": "上一頁", + "uni-pagination.nextText": "下一頁", + "uni-pagination.piecePerPage": "條/頁" +} diff --git a/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue b/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue new file mode 100644 index 0000000..5305b5f --- /dev/null +++ b/src/uni_modules/uni-pagination/components/uni-pagination/uni-pagination.vue @@ -0,0 +1,465 @@ + + + + + diff --git a/src/uni_modules/uni-pagination/package.json b/src/uni_modules/uni-pagination/package.json new file mode 100644 index 0000000..862d5ab --- /dev/null +++ b/src/uni_modules/uni-pagination/package.json @@ -0,0 +1,83 @@ +{ + "id": "uni-pagination", + "displayName": "uni-pagination 分页器", + "version": "1.2.4", + "description": "Pagination 分页器组件,用于展示页码、请求数据等。", + "keywords": [ + "uni-ui", + "uniui", + "分页器", + "页码" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-icons"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-pagination/readme.md b/src/uni_modules/uni-pagination/readme.md new file mode 100644 index 0000000..97ea1d6 --- /dev/null +++ b/src/uni_modules/uni-pagination/readme.md @@ -0,0 +1,11 @@ + + +## Pagination 分页器 +> **组件名:uni-pagination** +> 代码块: `uPagination` + + +分页器组件,用于展示页码、请求数据等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-pagination) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-popup/changelog.md b/src/uni_modules/uni-popup/changelog.md new file mode 100644 index 0000000..f559715 --- /dev/null +++ b/src/uni_modules/uni-popup/changelog.md @@ -0,0 +1,92 @@ +## 1.9.5(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.9.4(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.9.3(2024-10-12) +- 修复 微信小程序中的getSystemInfo警告 +## 1.9.2(2024-09-21) +- 修复 uni-popup在android上的重复点击弹出位置不正确的bug +## 1.9.1(2024-04-02) +- 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法) +## 1.9.0(2024-03-28) +- 修复 uni-popup-dialog 双向绑定时初始化逻辑修正 +## 1.8.9(2024-03-20) +- 修复 uni-popup-dialog 数据输入时修正为双向绑定 +## 1.8.8(2024-02-20) +- 修复 uni-popup 在微信小程序下出现文字向上闪动的bug +## 1.8.7(2024-02-02) +- 新增 uni-popup-dialog 新增属性focus:input模式下,是否自动自动聚焦 +## 1.8.6(2024-01-30) +- 新增 uni-popup-dialog 新增属性maxLength:限制输入框字数 +## 1.8.5(2024-01-26) +- 新增 uni-popup-dialog 新增属性showClose:控制关闭按钮的显示 +## 1.8.4(2023-11-15) +- 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close` +## 1.8.3(2023-04-17) +- 修复 uni-popup 重复打开时的 bug +## 1.8.2(2023-02-02) +- uni-popup-dialog 组件新增 inputType 属性 +## 1.8.1(2022-12-01) +- 修复 nvue 下 v-show 报错 +## 1.8.0(2022-11-29) +- 优化 主题样式 +## 1.7.9(2022-04-02) +- 修复 弹出层内部无法滚动的bug +## 1.7.8(2022-03-28) +- 修复 小程序中高度错误的bug +## 1.7.7(2022-03-17) +- 修复 快速调用open出现问题的Bug +## 1.7.6(2022-02-14) +- 修复 safeArea 属性不能设置为false的bug +## 1.7.5(2022-01-19) +- 修复 isMaskClick 失效的bug +## 1.7.4(2022-01-19) +- 新增 cancelText \ confirmText 属性 ,可自定义文本 +- 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 +## 1.7.3(2022-01-13) +- 修复 设置 safeArea 属性不生效的bug +## 1.7.2(2021-11-26) +- 优化 组件示例 +## 1.7.1(2021-11-26) +- 修复 vuedoc 文字错误 +## 1.7.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-popup](https://uniapp.dcloud.io/component/uniui/uni-popup) +## 1.6.2(2021-08-24) +- 新增 支持国际化 +## 1.6.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.6.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.5.0(2021-06-23) +- 新增 mask-click 遮罩层点击事件 +## 1.4.5(2021-06-22) +- 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.4(2021-06-18) +- 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +## 1.4.3(2021-06-08) +- 修复 错误的 watch 字段 +- 修复 safeArea 属性不生效的问题 +- 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.4.2(2021-05-12) +- 新增 组件示例地址 +## 1.4.1(2021-04-29) +- 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +## 1.4.0 (2021-04-29) +- 新增 type 属性的 left\right 值,支持左右弹出 +- 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- 新增 safeArea 属性,是否适配底部安全区 +- 修复 App\h5\微信小程序底部安全区占位不对的Bug +- 修复 App 端弹出等待的Bug +- 优化 提升低配设备性能,优化动画卡顿问题 +- 优化 更简单的组件自定义方式 +## 1.2.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 +## 1.2.8(2021-02-05) +- 调整为uni_modules目录规范 +## 1.2.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持 PC 端 +- 新增 uni-popup-message 、uni-popup-dialog扩展组件支持 PC 端 diff --git a/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js b/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js new file mode 100644 index 0000000..6ef26a2 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-dialog/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + this.$once('hook:beforeDestroy', () => { + document.removeEventListener('keyup', listener) + }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue b/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue new file mode 100644 index 0000000..08707d4 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-dialog/uni-popup-dialog.vue @@ -0,0 +1,316 @@ + + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue new file mode 100644 index 0000000..91370a8 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-message/uni-popup-message.vue @@ -0,0 +1,143 @@ + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue new file mode 100644 index 0000000..f7e667c --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup-share/uni-popup-share.vue @@ -0,0 +1,187 @@ + + + + diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json new file mode 100644 index 0000000..7f1bd06 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/en.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "cancel", + "uni-popup.ok": "ok", + "uni-popup.placeholder": "pleace enter", + "uni-popup.title": "Hint", + "uni-popup.shareTitle": "Share to" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json new file mode 100644 index 0000000..5e3003c --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hans.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "确定", + "uni-popup.placeholder": "请输入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json new file mode 100644 index 0000000..13e39eb --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/i18n/zh-Hant.json @@ -0,0 +1,7 @@ +{ + "uni-popup.cancel": "取消", + "uni-popup.ok": "確定", + "uni-popup.placeholder": "請輸入", + "uni-popup.title": "提示", + "uni-popup.shareTitle": "分享到" +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/keypress.js b/src/uni_modules/uni-popup/components/uni-popup/keypress.js new file mode 100644 index 0000000..62dda46 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/keypress.js @@ -0,0 +1,45 @@ +// #ifdef H5 +export default { + name: 'Keypress', + props: { + disable: { + type: Boolean, + default: false + } + }, + mounted () { + const keyNames = { + esc: ['Esc', 'Escape'], + tab: 'Tab', + enter: 'Enter', + space: [' ', 'Spacebar'], + up: ['Up', 'ArrowUp'], + left: ['Left', 'ArrowLeft'], + right: ['Right', 'ArrowRight'], + down: ['Down', 'ArrowDown'], + delete: ['Backspace', 'Delete', 'Del'] + } + const listener = ($event) => { + if (this.disable) { + return + } + const keyName = Object.keys(keyNames).find(key => { + const keyName = $event.key + const value = keyNames[key] + return value === keyName || (Array.isArray(value) && value.includes(keyName)) + }) + if (keyName) { + // 避免和其他按键事件冲突 + setTimeout(() => { + this.$emit(keyName, {}) + }, 0) + } + } + document.addEventListener('keyup', listener) + // this.$once('hook:beforeDestroy', () => { + // document.removeEventListener('keyup', listener) + // }) + }, + render: () => {} +} +// #endif diff --git a/src/uni_modules/uni-popup/components/uni-popup/popup.js b/src/uni_modules/uni-popup/components/uni-popup/popup.js new file mode 100644 index 0000000..c4e5781 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/popup.js @@ -0,0 +1,26 @@ + +export default { + data() { + return { + + } + }, + created(){ + this.popup = this.getParent() + }, + methods:{ + /** + * 获取父元素实例 + */ + getParent(name = 'uniPopup') { + let parent = this.$parent; + let parentName = parent.$options.name; + while (parentName !== name) { + parent = parent.$parent; + if (!parent) return false + parentName = parent.$options.name; + } + return parent; + }, + } +} diff --git a/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue new file mode 100644 index 0000000..5eb8d5b --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.uvue @@ -0,0 +1,90 @@ + + + + + \ No newline at end of file diff --git a/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue new file mode 100644 index 0000000..5af55e0 --- /dev/null +++ b/src/uni_modules/uni-popup/components/uni-popup/uni-popup.vue @@ -0,0 +1,518 @@ + + + + diff --git a/src/uni_modules/uni-popup/package.json b/src/uni_modules/uni-popup/package.json new file mode 100644 index 0000000..2750803 --- /dev/null +++ b/src/uni_modules/uni-popup/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-popup", + "displayName": "uni-popup 弹出层", + "version": "1.9.5", + "description": " Popup 组件,提供常用的弹层", + "keywords": [ + "uni-ui", + "弹出层", + "弹窗", + "popup", + "弹框" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-popup/readme.md b/src/uni_modules/uni-popup/readme.md new file mode 100644 index 0000000..fdad4b3 --- /dev/null +++ b/src/uni_modules/uni-popup/readme.md @@ -0,0 +1,17 @@ + + +## Popup 弹出层 +> **组件名:uni-popup** +> 代码块: `uPopup` +> 关联组件:`uni-transition` + + +弹出层组件,在应用中弹出一个消息提示窗口、提示框等 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-popup) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + + diff --git a/src/uni_modules/uni-rate/changelog.md b/src/uni_modules/uni-rate/changelog.md new file mode 100644 index 0000000..8a98a61 --- /dev/null +++ b/src/uni_modules/uni-rate/changelog.md @@ -0,0 +1,25 @@ +## 1.3.1(2022-02-25) +- 修复 条件判断 `NaN` 错误的 bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-rate](https://uniapp.dcloud.io/component/uniui/uni-rate) +## 1.2.2(2021-09-10) +- 优化 默认值修改为 0 颗星 +## 1.2.1(2021-07-30) +- 优化 vue3下事件警告的问题 +## 1.2.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.2(2021-05-12) +- 新增 组件示例地址 +## 1.1.1(2021-04-21) +- 修复 布局变化后 uni-rate 星星计算不准确的 bug +- 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +## 1.1.0(2021-04-16) +- 修复 uni-rate 属性 margin 值为 string 组件失效的 bug + +## 1.0.9(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.8(2021-02-05) +- 调整为uni_modules目录规范 +- 支持 pc 端 diff --git a/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue b/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue new file mode 100644 index 0000000..857f5f9 --- /dev/null +++ b/src/uni_modules/uni-rate/components/uni-rate/uni-rate.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/src/uni_modules/uni-rate/package.json b/src/uni_modules/uni-rate/package.json new file mode 100644 index 0000000..64e8e33 --- /dev/null +++ b/src/uni_modules/uni-rate/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-rate", + "displayName": "uni-rate 评分", + "version": "1.3.1", + "description": "Rate 评分组件,可自定义评分星星图标的大小、间隔、评分数。", + "keywords": [ + "uni-ui", + "uniui", + "评分" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-rate/readme.md b/src/uni_modules/uni-rate/readme.md new file mode 100644 index 0000000..eae7b5c --- /dev/null +++ b/src/uni_modules/uni-rate/readme.md @@ -0,0 +1,12 @@ + + +## Rate 评分 +> **组件名:uni-rate** +> 代码块: `uRate` +> 关联组件:`uni-icons` + + +评分组件,多用于购买商品后,对商品进行评价等场景 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-rate) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-row/changelog.md b/src/uni_modules/uni-row/changelog.md new file mode 100644 index 0000000..5b465bc --- /dev/null +++ b/src/uni_modules/uni-row/changelog.md @@ -0,0 +1,10 @@ +## 1.0.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-row](https://uniapp.dcloud.io/component/uniui/uni-row) +## 0.1.0(2021-07-13) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 0.0.4(2021-05-12) +- 新增 组件示例地址 +## 0.0.3(2021-02-05) +- 调整为uni_modules目录规范 +- 新增uni-row组件 diff --git a/src/uni_modules/uni-row/components/uni-col/uni-col.vue b/src/uni_modules/uni-row/components/uni-col/uni-col.vue new file mode 100644 index 0000000..84e2deb --- /dev/null +++ b/src/uni_modules/uni-row/components/uni-col/uni-col.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/src/uni_modules/uni-row/components/uni-row/uni-row.vue b/src/uni_modules/uni-row/components/uni-row/uni-row.vue new file mode 100644 index 0000000..f8e8542 --- /dev/null +++ b/src/uni_modules/uni-row/components/uni-row/uni-row.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/uni_modules/uni-row/package.json b/src/uni_modules/uni-row/package.json new file mode 100644 index 0000000..3f52fa6 --- /dev/null +++ b/src/uni_modules/uni-row/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-row", + "displayName": "uni-row 布局-行", + "version": "1.0.0", + "description": "流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。", + "keywords": [ + "uni-ui", + "uniui", + "栅格", + "布局", + "layout" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-row/readme.md b/src/uni_modules/uni-row/readme.md new file mode 100644 index 0000000..3c9c8b9 --- /dev/null +++ b/src/uni_modules/uni-row/readme.md @@ -0,0 +1,10 @@ +## Layout 布局 + +> **组件名 uni-row、uni-col** +> 代码块: `uRow`、`uCol` + + +流式栅格系统,随着屏幕或视口分为 24 份,可以迅速简便地创建布局。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-row) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-scss/changelog.md b/src/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/src/uni_modules/uni-scss/changelog.md @@ -0,0 +1,8 @@ +## 1.0.3(2022-01-21) +- 优化 组件示例 +## 1.0.2(2021-11-22) +- 修复 / 符号在 vue 不同版本兼容问题引起的报错问题 +## 1.0.1(2021-11-22) +- 修复 vue3中scss语法兼容问题 +## 1.0.0(2021-11-18) +- init diff --git a/src/uni_modules/uni-scss/index.scss b/src/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/src/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/src/uni_modules/uni-scss/package.json b/src/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/src/uni_modules/uni-scss/package.json @@ -0,0 +1,82 @@ +{ + "id": "uni-scss", + "displayName": "uni-scss 辅助样式", + "version": "1.0.3", + "description": "uni-sass是uni-ui提供的一套全局样式 ,通过一些简单的类名和sass变量,实现简单的页面布局操作,比如颜色、边距、圆角等。", + "keywords": [ + "uni-scss", + "uni-ui", + "辅助样式" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.1.0" + }, + "dcloudext": { + "category": [ + "JS SDK", + "通用 SDK" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-scss/readme.md b/src/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/src/uni_modules/uni-scss/readme.md @@ -0,0 +1,4 @@ +`uni-sass` 是 `uni-ui`提供的一套全局样式 ,通过一些简单的类名和`sass`变量,实现简单的页面布局操作,比如颜色、边距、圆角等。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-sass) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/index.scss b/src/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/src/uni_modules/uni-scss/styles/index.scss @@ -0,0 +1,7 @@ +@import './setting/_variables.scss'; +@import './setting/_border.scss'; +@import './setting/_color.scss'; +@import './setting/_space.scss'; +@import './setting/_radius.scss'; +@import './setting/_text.scss'; +@import './setting/_styles.scss'; diff --git a/src/uni_modules/uni-scss/styles/setting/_border.scss b/src/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_border.scss @@ -0,0 +1,3 @@ +.uni-border { + border: 1px $uni-border-1 solid; +} \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/setting/_color.scss b/src/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_color.scss @@ -0,0 +1,66 @@ + +// TODO 暂时不需要 class ,需要用户使用变量实现 ,如果使用类名其实并不推荐 +// @mixin get-styles($k,$c) { +// @if $k == size or $k == weight{ +// font-#{$k}:#{$c} +// }@else{ +// #{$k}:#{$c} +// } +// } +$uni-ui-color:( + // 主色 + primary: $uni-primary, + primary-disable: $uni-primary-disable, + primary-light: $uni-primary-light, + // 辅助色 + success: $uni-success, + success-disable: $uni-success-disable, + success-light: $uni-success-light, + warning: $uni-warning, + warning-disable: $uni-warning-disable, + warning-light: $uni-warning-light, + error: $uni-error, + error-disable: $uni-error-disable, + error-light: $uni-error-light, + info: $uni-info, + info-disable: $uni-info-disable, + info-light: $uni-info-light, + // 中性色 + main-color: $uni-main-color, + base-color: $uni-base-color, + secondary-color: $uni-secondary-color, + extra-color: $uni-extra-color, + // 背景色 + bg-color: $uni-bg-color, + // 边框颜色 + border-1: $uni-border-1, + border-2: $uni-border-2, + border-3: $uni-border-3, + border-4: $uni-border-4, + // 黑色 + black:$uni-black, + // 白色 + white:$uni-white, + // 透明 + transparent:$uni-transparent +) !default; +@each $key, $child in $uni-ui-color { + .uni-#{"" + $key} { + color: $child; + } + .uni-#{"" + $key}-bg { + background-color: $child; + } +} +.uni-shadow-sm { + box-shadow: $uni-shadow-sm; +} +.uni-shadow-base { + box-shadow: $uni-shadow-base; +} +.uni-shadow-lg { + box-shadow: $uni-shadow-lg; +} +.uni-mask { + background-color:$uni-mask; +} diff --git a/src/uni_modules/uni-scss/styles/setting/_radius.scss b/src/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_radius.scss @@ -0,0 +1,55 @@ +@mixin radius($r,$d:null ,$important: false){ + $radius-value:map-get($uni-radius, $r) if($important, !important, null); + // Key exists within the $uni-radius variable + @if (map-has-key($uni-radius, $r) and $d){ + @if $d == t { + border-top-left-radius:$radius-value; + border-top-right-radius:$radius-value; + }@else if $d == r { + border-top-right-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == b { + border-bottom-left-radius:$radius-value; + border-bottom-right-radius:$radius-value; + }@else if $d == l { + border-top-left-radius:$radius-value; + border-bottom-left-radius:$radius-value; + }@else if $d == tl { + border-top-left-radius:$radius-value; + }@else if $d == tr { + border-top-right-radius:$radius-value; + }@else if $d == br { + border-bottom-right-radius:$radius-value; + }@else if $d == bl { + border-bottom-left-radius:$radius-value; + } + }@else{ + border-radius:$radius-value; + } +} + +@each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $key} { + @include radius($key) + } + }@else{ + .uni-radius { + @include radius($key) + } + } +} + +@each $direction in t, r, b, l,tl, tr, br, bl { + @each $key, $child in $uni-radius { + @if($key){ + .uni-radius-#{"" + $direction}-#{"" + $key} { + @include radius($key,$direction,false) + } + }@else{ + .uni-radius-#{$direction} { + @include radius($key,$direction,false) + } + } + } +} diff --git a/src/uni_modules/uni-scss/styles/setting/_space.scss b/src/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_space.scss @@ -0,0 +1,56 @@ + +@mixin fn($space,$direction,$size,$n) { + @if $n { + #{$space}-#{$direction}: #{$size*$uni-space-root}px + } @else { + #{$space}-#{$direction}: #{-$size*$uni-space-root}px + } +} +@mixin get-styles($direction,$i,$space,$n){ + @if $direction == t { + @include fn($space, top,$i,$n); + } + @if $direction == r { + @include fn($space, right,$i,$n); + } + @if $direction == b { + @include fn($space, bottom,$i,$n); + } + @if $direction == l { + @include fn($space, left,$i,$n); + } + @if $direction == x { + @include fn($space, left,$i,$n); + @include fn($space, right,$i,$n); + } + @if $direction == y { + @include fn($space, top,$i,$n); + @include fn($space, bottom,$i,$n); + } + @if $direction == a { + @if $n { + #{$space}:#{$i*$uni-space-root}px; + } @else { + #{$space}:#{-$i*$uni-space-root}px; + } + } +} + +@each $orientation in m,p { + $space: margin; + @if $orientation == m { + $space: margin; + } @else { + $space: padding; + } + @for $i from 0 through 16 { + @each $direction in t, r, b, l, x, y, a { + .uni-#{$orientation}#{$direction}-#{$i} { + @include get-styles($direction,$i,$space,true); + } + .uni-#{$orientation}#{$direction}-n#{$i} { + @include get-styles($direction,$i,$space,false); + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-scss/styles/setting/_styles.scss b/src/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_styles.scss @@ -0,0 +1,167 @@ +/* #ifndef APP-NVUE */ + +$-color-white:#fff; +$-color-black:#000; +@mixin base-style($color) { + color: #fff; + background-color: $color; + border-color: mix($-color-black, $color, 8%); + &:not([hover-class]):active { + background: mix($-color-black, $color, 10%); + border-color: mix($-color-black, $color, 20%); + color: $-color-white; + outline: none; + } +} +@mixin is-color($color) { + @include base-style($color); + &[loading] { + @include base-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &[loading], + &:not([hover-class]):active { + color: $-color-white; + border-color: mix(darken($color,10%), $-color-white); + background-color: mix($color, $-color-white); + } + } + +} +@mixin base-plain-style($color) { + color:$color; + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 70%); + &:not([hover-class]):active { + background: mix($-color-white, $color, 80%); + color: $color; + outline: none; + border-color: mix($-color-white, $color, 50%); + } +} +@mixin is-plain($color){ + &[plain] { + @include base-plain-style($color); + &[loading] { + @include base-plain-style($color); + &::before { + margin-right:5px; + } + } + &[disabled] { + &, + &:active { + color: mix($-color-white, $color, 40%); + background-color: mix($-color-white, $color, 90%); + border-color: mix($-color-white, $color, 80%); + } + } + } +} + + +.uni-btn { + margin: 5px; + color: #393939; + border:1px solid #ccc; + font-size: 16px; + font-weight: 200; + background-color: #F9F9F9; + // TODO 暂时处理边框隐藏一边的问题 + overflow: visible; + &::after{ + border: none; + } + + &:not([type]),&[type=default] { + color: #999; + &[loading] { + background: none; + &::before { + margin-right:5px; + } + } + + + + &[disabled]{ + color: mix($-color-white, #999, 60%); + &, + &[loading], + &:active { + color: mix($-color-white, #999, 60%); + background-color: mix($-color-white,$-color-black , 98%); + border-color: mix($-color-white, #999, 85%); + } + } + + &[plain] { + color: #999; + background: none; + border-color: $uni-border-1; + &:not([hover-class]):active { + background: none; + color: mix($-color-white, $-color-black, 80%); + border-color: mix($-color-white, $-color-black, 90%); + outline: none; + } + &[disabled]{ + &, + &[loading], + &:active { + background: none; + color: mix($-color-white, #999, 60%); + border-color: mix($-color-white, #999, 85%); + } + } + } + } + + &:not([hover-class]):active { + color: mix($-color-white, $-color-black, 50%); + } + + &[size=mini] { + font-size: 16px; + font-weight: 200; + border-radius: 8px; + } + + + + &.uni-btn-small { + font-size: 14px; + } + &.uni-btn-mini { + font-size: 12px; + } + + &.uni-btn-radius { + border-radius: 999px; + } + &[type=primary] { + @include is-color($uni-primary); + @include is-plain($uni-primary) + } + &[type=success] { + @include is-color($uni-success); + @include is-plain($uni-success) + } + &[type=error] { + @include is-color($uni-error); + @include is-plain($uni-error) + } + &[type=warning] { + @include is-color($uni-warning); + @include is-plain($uni-warning) + } + &[type=info] { + @include is-color($uni-info); + @include is-plain($uni-info) + } +} +/* #endif */ diff --git a/src/uni_modules/uni-scss/styles/setting/_text.scss b/src/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_text.scss @@ -0,0 +1,24 @@ +@mixin get-styles($k,$c) { + @if $k == size or $k == weight{ + font-#{$k}:#{$c} + }@else{ + #{$k}:#{$c} + } +} + +@each $key, $child in $uni-headings { + /* #ifndef APP-NVUE */ + .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ + /* #ifdef APP-NVUE */ + .container .uni-#{$key} { + @each $k, $c in $child { + @include get-styles($k,$c) + } + } + /* #endif */ +} diff --git a/src/uni_modules/uni-scss/styles/setting/_variables.scss b/src/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/src/uni_modules/uni-scss/styles/setting/_variables.scss @@ -0,0 +1,146 @@ +// @use "sass:math"; +@import '../tools/functions.scss'; +// 间距基础倍数 +$uni-space-root: 2 !default; +// 边框半径默认值 +$uni-radius-root:5px !default; +$uni-radius: () !default; +// 边框半径断点 +$uni-radius: map-deep-merge( + ( + 0: 0, + // TODO 当前版本暂时不支持 sm 属性 + // 'sm': math.div($uni-radius-root, 2), + null: $uni-radius-root, + 'lg': $uni-radius-root * 2, + 'xl': $uni-radius-root * 6, + 'pill': 9999px, + 'circle': 50% + ), + $uni-radius +); +// 字体家族 +$body-font-family: 'Roboto', sans-serif !default; +// 文本 +$heading-font-family: $body-font-family !default; +$uni-headings: () !default; +$letterSpacing: -0.01562em; +$uni-headings: map-deep-merge( + ( + 'h1': ( + size: 32px, + weight: 300, + line-height: 50px, + // letter-spacing:-0.01562em + ), + 'h2': ( + size: 28px, + weight: 300, + line-height: 40px, + // letter-spacing: -0.00833em + ), + 'h3': ( + size: 24px, + weight: 400, + line-height: 32px, + // letter-spacing: normal + ), + 'h4': ( + size: 20px, + weight: 400, + line-height: 30px, + // letter-spacing: 0.00735em + ), + 'h5': ( + size: 16px, + weight: 400, + line-height: 24px, + // letter-spacing: normal + ), + 'h6': ( + size: 14px, + weight: 500, + line-height: 18px, + // letter-spacing: 0.0125em + ), + 'subtitle': ( + size: 12px, + weight: 400, + line-height: 20px, + // letter-spacing: 0.00937em + ), + 'body': ( + font-size: 14px, + font-weight: 400, + line-height: 22px, + // letter-spacing: 0.03125em + ), + 'caption': ( + 'size': 12px, + 'weight': 400, + 'line-height': 20px, + // 'letter-spacing': 0.03333em, + // 'text-transform': false + ) + ), + $uni-headings +); + + + +// 主色 +$uni-primary: #2979ff !default; +$uni-primary-disable:lighten($uni-primary,20%) !default; +$uni-primary-light: lighten($uni-primary,25%) !default; + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37 !default; +$uni-success-disable:lighten($uni-success,20%) !default; +$uni-success-light: lighten($uni-success,25%) !default; + +$uni-warning: #f3a73f !default; +$uni-warning-disable:lighten($uni-warning,20%) !default; +$uni-warning-light: lighten($uni-warning,25%) !default; + +$uni-error: #e43d33 !default; +$uni-error-disable:lighten($uni-error,20%) !default; +$uni-error-light: lighten($uni-error,25%) !default; + +$uni-info: #8f939c !default; +$uni-info-disable:lighten($uni-info,20%) !default; +$uni-info-light: lighten($uni-info,25%) !default; + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a !default; // 主要文字 +$uni-base-color: #6a6a6a !default; // 常规文字 +$uni-secondary-color: #909399 !default; // 次要文字 +$uni-extra-color: #c7c7c7 !default; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0 !default; +$uni-border-2: #EDEDED !default; +$uni-border-3: #DCDCDC !default; +$uni-border-4: #B9B9B9 !default; + +// 常规色 +$uni-black: #000000 !default; +$uni-white: #ffffff !default; +$uni-transparent: rgba($color: #000000, $alpha: 0) !default; + +// 背景色 +$uni-bg-color: #f7f7f7 !default; + +/* 水平间距 */ +$uni-spacing-sm: 8px !default; +$uni-spacing-base: 15px !default; +$uni-spacing-lg: 30px !default; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5) !default; +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2) !default; +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5) !default; + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4) !default; diff --git a/src/uni_modules/uni-scss/styles/tools/functions.scss b/src/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/src/uni_modules/uni-scss/styles/tools/functions.scss @@ -0,0 +1,19 @@ +// 合并 map +@function map-deep-merge($parent-map, $child-map){ + $result: $parent-map; + @each $key, $child in $child-map { + $parent-has-key: map-has-key($result, $key); + $parent-value: map-get($result, $key); + $parent-type: type-of($parent-value); + $child-type: type-of($child); + $parent-is-map: $parent-type == map; + $child-is-map: $child-type == map; + + @if (not $parent-has-key) or ($parent-type != $child-type) or (not ($parent-is-map and $child-is-map)){ + $result: map-merge($result, ( $key: $child )); + }@else { + $result: map-merge($result, ( $key: map-deep-merge($parent-value, $child) )); + } + } + @return $result; +}; diff --git a/src/uni_modules/uni-scss/theme.scss b/src/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/src/uni_modules/uni-scss/theme.scss @@ -0,0 +1,31 @@ +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; +// 主色 +$uni-primary: #2979ff; +// 辅助色 +$uni-success: #4cd964; +// 警告色 +$uni-warning: #f0ad4e; +// 错误色 +$uni-error: #dd524d; +// 描述色 +$uni-info: #909399; +// 中性色 +$uni-main-color: #303133; +$uni-base-color: #606266; +$uni-secondary-color: #909399; +$uni-extra-color: #C0C4CC; +// 背景色 +$uni-bg-color: #f5f5f5; +// 边框颜色 +$uni-border-1: #DCDFE6; +$uni-border-2: #E4E7ED; +$uni-border-3: #EBEEF5; +$uni-border-4: #F2F6FC; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); diff --git a/src/uni_modules/uni-scss/variables.scss b/src/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/src/uni_modules/uni-scss/variables.scss @@ -0,0 +1,62 @@ +@import './styles/setting/_variables.scss'; +// 间距基础倍数 +$uni-space-root: 2; +// 边框半径默认值 +$uni-radius-root:5px; + +// 主色 +$uni-primary: #2979ff; +$uni-primary-disable:mix(#fff,$uni-primary,50%); +$uni-primary-light: mix(#fff,$uni-primary,80%); + +// 辅助色 +// 除了主色外的场景色,需要在不同的场景中使用(例如危险色表示危险的操作)。 +$uni-success: #18bc37; +$uni-success-disable:mix(#fff,$uni-success,50%); +$uni-success-light: mix(#fff,$uni-success,80%); + +$uni-warning: #f3a73f; +$uni-warning-disable:mix(#fff,$uni-warning,50%); +$uni-warning-light: mix(#fff,$uni-warning,80%); + +$uni-error: #e43d33; +$uni-error-disable:mix(#fff,$uni-error,50%); +$uni-error-light: mix(#fff,$uni-error,80%); + +$uni-info: #8f939c; +$uni-info-disable:mix(#fff,$uni-info,50%); +$uni-info-light: mix(#fff,$uni-info,80%); + +// 中性色 +// 中性色用于文本、背景和边框颜色。通过运用不同的中性色,来表现层次结构。 +$uni-main-color: #3a3a3a; // 主要文字 +$uni-base-color: #6a6a6a; // 常规文字 +$uni-secondary-color: #909399; // 次要文字 +$uni-extra-color: #c7c7c7; // 辅助说明 + +// 边框颜色 +$uni-border-1: #F0F0F0; +$uni-border-2: #EDEDED; +$uni-border-3: #DCDCDC; +$uni-border-4: #B9B9B9; + +// 常规色 +$uni-black: #000000; +$uni-white: #ffffff; +$uni-transparent: rgba($color: #000000, $alpha: 0); + +// 背景色 +$uni-bg-color: #f7f7f7; + +/* 水平间距 */ +$uni-spacing-sm: 8px; +$uni-spacing-base: 15px; +$uni-spacing-lg: 30px; + +// 阴影 +$uni-shadow-sm:0 0 5px rgba($color: #d8d8d8, $alpha: 0.5); +$uni-shadow-base:0 1px 8px 1px rgba($color: #a5a5a5, $alpha: 0.2); +$uni-shadow-lg:0px 1px 10px 2px rgba($color: #a5a4a4, $alpha: 0.5); + +// 蒙版 +$uni-mask: rgba($color: #000000, $alpha: 0.4); diff --git a/src/uni_modules/uni-search-bar/changelog.md b/src/uni_modules/uni-search-bar/changelog.md new file mode 100644 index 0000000..2c6571c --- /dev/null +++ b/src/uni_modules/uni-search-bar/changelog.md @@ -0,0 +1,47 @@ +## 1.3.0(2024-04-22) +- 修复 textColor默认值导致的文字不显示的bug +## 1.2.9(2024-04-17) +- 修复 textColor不生效的bug +## 1.2.8(2024-02-22) +- 修复 清空按钮emit值错误的bug +## 1.2.7(2024-02-21) +- 新增 设置输入框字体颜色:textColor +## 1.2.6(2024-02-20) +- 修复 uni-search-bar在支付宝小程序下样式兼容问题 +## 1.2.5(2024-01-31) +- 修复 uni-search-bar居中问题,现在默认居左,并修复样式偏移问题 +## 1.2.4(2023-05-09) +- 修复 i18n 国际化不正确的 Bug +## 1.2.3(2022-05-24) +- 新增 readonly 属性,组件只读 +## 1.2.2(2022-05-06) +- 修复 vue3 input 事件不生效的bug +## 1.2.1(2022-05-06) +- 修复 多余代码导致的bug +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-search-bar](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +## 1.1.2(2021-08-30) +- 修复 value 属性与 modelValue 属性不兼容的Bug +## 1.1.1(2021-08-24) +- 新增 支持国际化 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.9(2021-05-12) +- 新增 项目示例地址 +## 1.0.8(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.7(2021-04-15) +- uni-ui 新增 uni-search-bar 的 focus 事件 + +## 1.0.6(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 支持双向绑定 +- 更改 input 事件的返回值,e={value:Number} --> e=value +- 新增 支持图标插槽 +- 新增 支持 clear、blur 事件 +- 新增 支持 focus 属性 +- 去掉组件背景色 diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json new file mode 100644 index 0000000..dd083a5 --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/en.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "cancel", + "uni-search-bar.placeholder": "Search enter content" +} \ No newline at end of file diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js new file mode 100644 index 0000000..de7509c --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/index.js @@ -0,0 +1,8 @@ +import en from './en.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json new file mode 100644 index 0000000..d2a1ced --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hans.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "取消", + "uni-search-bar.placeholder": "请输入搜索内容" +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json new file mode 100644 index 0000000..f1c96bc --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/i18n/zh-Hant.json @@ -0,0 +1,4 @@ +{ + "uni-search-bar.cancel": "取消", + "uni-search-bar.placeholder": "請輸入搜索內容" +} diff --git a/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue b/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue new file mode 100644 index 0000000..6b9b9c1 --- /dev/null +++ b/src/uni_modules/uni-search-bar/components/uni-search-bar/uni-search-bar.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/src/uni_modules/uni-search-bar/package.json b/src/uni_modules/uni-search-bar/package.json new file mode 100644 index 0000000..1730d9d --- /dev/null +++ b/src/uni_modules/uni-search-bar/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-search-bar", + "displayName": "uni-search-bar 搜索栏", + "version": "1.3.0", + "description": "搜索栏组件,通常用于搜索商品、文章等", + "keywords": [ + "uni-ui", + "uniui", + "搜索框", + "搜索栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-search-bar/readme.md b/src/uni_modules/uni-search-bar/readme.md new file mode 100644 index 0000000..253092f --- /dev/null +++ b/src/uni_modules/uni-search-bar/readme.md @@ -0,0 +1,14 @@ + + +## SearchBar 搜索栏 + +> **组件名:uni-search-bar** +> 代码块: `uSearchBar` + + +搜索栏组件 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-search-bar) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-section/changelog.md b/src/uni_modules/uni-section/changelog.md new file mode 100644 index 0000000..738f2b3 --- /dev/null +++ b/src/uni_modules/uni-section/changelog.md @@ -0,0 +1,2 @@ +## 0.0.1(2022-07-22) +- 初始化 diff --git a/src/uni_modules/uni-section/components/uni-section/uni-section.vue b/src/uni_modules/uni-section/components/uni-section/uni-section.vue new file mode 100644 index 0000000..9a52e0b --- /dev/null +++ b/src/uni_modules/uni-section/components/uni-section/uni-section.vue @@ -0,0 +1,167 @@ + + + + diff --git a/src/uni_modules/uni-section/package.json b/src/uni_modules/uni-section/package.json new file mode 100644 index 0000000..0a31fb5 --- /dev/null +++ b/src/uni_modules/uni-section/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-section", + "displayName": "uni-section 标题栏", + "version": "0.0.1", + "description": "标题栏组件", + "keywords": [ + "uni-ui", + "uniui", + "标题栏" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-section/readme.md b/src/uni_modules/uni-section/readme.md new file mode 100644 index 0000000..d47faab --- /dev/null +++ b/src/uni_modules/uni-section/readme.md @@ -0,0 +1,8 @@ +## Section 标题栏 +> **组件名:uni-section** +> 代码块: `uSection` + +uni-section 组件主要用于文章、列表详情等标题展示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-section) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-segmented-control/changelog.md b/src/uni_modules/uni-segmented-control/changelog.md new file mode 100644 index 0000000..02d0c8a --- /dev/null +++ b/src/uni_modules/uni-segmented-control/changelog.md @@ -0,0 +1,15 @@ +## 1.2.3(2024-04-02) +- 修复 修复在微信小程序下inactiveColor失效bug +## 1.2.2(2024-03-28) +- 修复 在vue2下:style动态绑定导致编译失败的bug +## 1.2.1(2024-03-20) +- 新增 inActiveColor属性,可供配置未激活时的颜色 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-segmented-control](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.5(2021-05-12) +- 新增 项目示例地址 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue b/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue new file mode 100644 index 0000000..a69366a --- /dev/null +++ b/src/uni_modules/uni-segmented-control/components/uni-segmented-control/uni-segmented-control.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/uni_modules/uni-segmented-control/package.json b/src/uni_modules/uni-segmented-control/package.json new file mode 100644 index 0000000..49f9eff --- /dev/null +++ b/src/uni_modules/uni-segmented-control/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-segmented-control", + "displayName": "uni-segmented-control 分段器", + "version": "1.2.3", + "description": "分段器由至少 2 个分段控件组成,用作不同视图的显示", + "keywords": [ + "uni-ui", + "uniui", + "分段器", + "segement", + "顶部选择" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-segmented-control/readme.md b/src/uni_modules/uni-segmented-control/readme.md new file mode 100644 index 0000000..3527b03 --- /dev/null +++ b/src/uni_modules/uni-segmented-control/readme.md @@ -0,0 +1,13 @@ + + +## SegmentedControl 分段器 +> **组件名:uni-segmented-control** +> 代码块: `uSegmentedControl` + + +用作不同视图的显示 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-segmented-control) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-steps/changelog.md b/src/uni_modules/uni-steps/changelog.md new file mode 100644 index 0000000..04367d8 --- /dev/null +++ b/src/uni_modules/uni-steps/changelog.md @@ -0,0 +1,18 @@ +## 1.1.2(2024-03-28) +- 修复 uni-steps为竖排列时,文本长度过长引起点错乱的bug +## 1.1.1(2021-11-22) +- 修复 vue3中某些scss变量无法找到的问题 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-steps](https://uniapp.dcloud.io/component/uniui/uni-steps) +## 1.0.8(2021-05-12) +- 新增 项目示例地址 +## 1.0.7(2021-05-06) +- 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +## 1.0.6(2021-04-21) +- 优化 添加依赖 uni-icons, 导入后自动下载依赖 +## 1.0.5(2021-02-05) +- 优化 组件引用关系,通过uni_modules引用组件 + +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue b/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue new file mode 100644 index 0000000..81017fc --- /dev/null +++ b/src/uni_modules/uni-steps/components/uni-steps/uni-steps.vue @@ -0,0 +1,280 @@ + + + + + diff --git a/src/uni_modules/uni-steps/package.json b/src/uni_modules/uni-steps/package.json new file mode 100644 index 0000000..4145ce9 --- /dev/null +++ b/src/uni_modules/uni-steps/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-steps", + "displayName": "uni-steps 步骤条", + "version": "1.1.2", + "description": "步骤条组件,提供横向和纵向两种布局格式。", + "keywords": [ + "uni-ui", + "uniui", + "步骤条", + "时间轴" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-scss", + "uni-icons" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-steps/readme.md b/src/uni_modules/uni-steps/readme.md new file mode 100644 index 0000000..da7a4bf --- /dev/null +++ b/src/uni_modules/uni-steps/readme.md @@ -0,0 +1,13 @@ + + +## Steps 步骤条 +> **组件名:uni-steps** +> 代码块: `uSteps` + + +步骤条,常用于显示进度 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-steps) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-swipe-action/changelog.md b/src/uni_modules/uni-swipe-action/changelog.md new file mode 100644 index 0000000..e28472f --- /dev/null +++ b/src/uni_modules/uni-swipe-action/changelog.md @@ -0,0 +1,47 @@ +## 1.3.10(2024-01-17) +- 修复 点击按钮时,按钮会被点击穿透导致自动收缩的 bug(兼容阿里/百度/抖音小程序) +## 1.3.9(2024-01-17) +- 修复 点击按钮时,按钮会被点击穿透导致自动收缩的 bug +## 1.3.8(2023-04-13) +- 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug +## 1.3.7(2022-06-06) +- 修复 vue3 下使用组件不能正常运行的Bug +## 1.3.6(2022-05-31) +- 修复 h5端点击click触发两次的Bug +## 1.3.5(2022-05-23) +- 修复 isPC 找不到的Bug +## 1.3.4(2022-05-19) +- 修复 在 nvue 下 disabled 失效的bug +## 1.3.3(2022-03-31) +- 修复 按钮字体大小不能设置的bug +## 1.3.2(2022-03-16) +- 修复 h5和app端下报el错误的bug +## 1.3.1(2022-03-07) +- 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swipe-action](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +## 1.2.4(2021-08-20) +- 优化 close-all 方法 +## 1.2.3(2021-08-20) +- 新增 close-all 方法,关闭所有已打开的组件 +## 1.2.2(2021-08-17) +- 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.2.1(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.1.10(2021-06-17) +- 修复 按钮点击执行两次的bug +## 1.1.9(2021-05-12) +- 新增 项目示例地址 +## 1.1.8(2021-03-26) +- 修复 微信小程序 nv_navigator is not defined 报错的bug +## 1.1.7(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 左侧滑动 +- 新增 插槽使用方式 +- 新增 threshold 属性,可以控制滑动缺省值 +- 优化 长列表滚动性能 +- 修复 滚动页面时触发组件滑动的Bug diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js new file mode 100644 index 0000000..707e432 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/bindingx.js @@ -0,0 +1,302 @@ +let bindIngXMixins = {} + +// #ifdef APP-NVUE +const BindingX = uni.requireNativePlugin('bindingx'); +const dom = uni.requireNativePlugin('dom'); +const animation = uni.requireNativePlugin('animation'); + +bindIngXMixins = { + data() { + return {} + }, + + watch: { + show(newVal) { + if (this.autoClose) return + if (this.stop) return + this.stop = true + if (newVal) { + this.open(newVal) + } else { + this.close() + } + }, + leftOptions() { + this.getSelectorQuery() + this.init() + }, + rightOptions(newVal) { + this.init() + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.box = this.getEl(this.$refs['selector-box--hock']) + this.selector = this.getEl(this.$refs['selector-content--hock']); + this.leftButton = this.getEl(this.$refs['selector-left-button--hock']); + this.rightButton = this.getEl(this.$refs['selector-right-button--hock']); + this.init() + }, + // beforeDestroy() { + // this.swipeaction.children.forEach((item, index) => { + // if (item === this) { + // this.swipeaction.children.splice(index, 1) + // } + // }) + // }, + methods: { + init() { + this.$nextTick(() => { + this.x = 0 + this.button = { + show: false + } + setTimeout(() => { + this.getSelectorQuery() + }, 200) + }) + }, + onClick(index, item, position) { + this.$emit('click', { + content: item, + index, + position + }) + }, + touchstart(e) { + // fix by mehaotian 禁止滑动 + if (this.disabled) return + // 每次只触发一次,避免多次监听造成闪烁 + if (this.stop) return + this.stop = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + let expression = this.range(this.x, -rightWidth, leftWidth) + let leftExpression = this.range(this.x - leftWidth, -leftWidth, 0) + let rightExpression = this.range(this.x + rightWidth, 0, rightWidth) + + this.eventpan = BindingX.bind({ + anchor: this.box, + eventType: 'pan', + props: [{ + element: this.selector, + property: 'transform.translateX', + expression + }, { + element: this.leftButton, + property: 'transform.translateX', + expression: leftExpression + }, { + element: this.rightButton, + property: 'transform.translateX', + expression: rightExpression + }, ] + }, (e) => { + // nope + if (e.state === 'end') { + this.x = e.deltaX + this.x; + this.isclick = true + this.bindTiming(e.deltaX) + } + }); + }, + touchend(e) { + if (this.isopen !== 'none' && !this.isclick) { + this.open('none') + } + }, + bindTiming(x) { + const left = this.x + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + const threshold = this.threshold + if (!this.isopen || this.isopen === 'none') { + if (left > threshold) { + this.open('left') + } else if (left < -threshold) { + this.open('right') + } else { + this.open('none') + } + } else { + if ((x > -leftWidth && x < 0) || x > rightWidth) { + if ((x > -threshold && x < 0) || (x - rightWidth > threshold)) { + this.open('left') + } else { + this.open('none') + } + } else { + if ((x < threshold && x > 0) || (x + leftWidth < -threshold)) { + this.open('right') + } else { + this.open('none') + } + } + } + }, + + /** + * 移动范围 + * @param {Object} num + * @param {Object} mix + * @param {Object} max + */ + range(num, mix, max) { + return `min(max(x+${num}, ${mix}), ${max})` + }, + + /** + * 开启swipe + */ + open(type) { + this.animation(type) + }, + + /** + * 关闭swipe + */ + close() { + this.animation('none') + }, + + /** + * 开启关闭动画 + * @param {Object} type + */ + animation(type) { + const time = 300 + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + if (this.eventpan && this.eventpan.token) { + BindingX.unbind({ + token: this.eventpan.token, + eventType: 'pan' + }) + } + + switch (type) { + case 'left': + Promise.all([ + this.move(this.selector, leftWidth), + this.move(this.leftButton, 0), + this.move(this.rightButton, rightWidth * 2) + ]).then(() => { + this.setEmit(leftWidth, type) + }) + break + case 'right': + Promise.all([ + this.move(this.selector, -rightWidth), + this.move(this.leftButton, -leftWidth * 2), + this.move(this.rightButton, 0) + ]).then(() => { + this.setEmit(-rightWidth, type) + }) + break + default: + Promise.all([ + this.move(this.selector, 0), + this.move(this.leftButton, -leftWidth), + this.move(this.rightButton, rightWidth) + ]).then(() => { + this.setEmit(0, type) + }) + + } + }, + setEmit(x, type) { + const leftWidth = this.button.left.width + const rightWidth = this.button.right.width + this.isopen = this.isopen || 'none' + this.stop = false + this.isclick = false + // 只有状态不一致才会返回结果 + if (this.isopen !== type && this.x !== x) { + if (type === 'left' && leftWidth > 0) { + this.$emit('change', 'left') + } + if (type === 'right' && rightWidth > 0) { + this.$emit('change', 'right') + } + if (type === 'none') { + this.$emit('change', 'none') + } + } + this.x = x + this.isopen = type + }, + move(ref, value) { + return new Promise((resolve, reject) => { + animation.transition(ref, { + styles: { + transform: `translateX(${value})`, + }, + duration: 150, //ms + timingFunction: 'linear', + needLayout: false, + delay: 0 //ms + }, function(res) { + resolve(res) + }) + }) + + }, + + /** + * 获取ref + * @param {Object} el + */ + getEl(el) { + return el.ref + }, + /** + * 获取节点信息 + */ + getSelectorQuery() { + Promise.all([ + this.getDom('left'), + this.getDom('right'), + ]).then((data) => { + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + + if (show === 'none') { + // this.close() + } else { + this.open(show) + } + + }) + + }, + getDom(str) { + return new Promise((resolve, reject) => { + dom.getComponentRect(this.$refs[`selector-${str}-button--hock`], (data) => { + if (data) { + this.button[str] = data.size + resolve(data) + } else { + reject() + } + }) + }) + } + } +} + +// #endif + +export default bindIngXMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js new file mode 100644 index 0000000..917cb48 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/isPC.js @@ -0,0 +1,12 @@ +export function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (let v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js new file mode 100644 index 0000000..35c796b --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpalipay.js @@ -0,0 +1,195 @@ +export default { + data() { + return { + x: 0, + transition: false, + width: 0, + viewWidth: 0, + swipeShow: 0 + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + if (newVal && newVal !== 'none') { + this.transition = true + this.open(newVal) + } else { + this.close() + } + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.isopen = false + setTimeout(() => { + this.getQuerySelect() + }, 50) + }, + methods: { + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + /** + * 移动触发 + * @param {Object} e + */ + onChange(e) { + this.moveX = e.detail.x + this.isclose = false + }, + touchstart(e) { + this.transition = false + this.isclose = true + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + touchmove(e) {}, + touchend(e) { + // 0的位置什么都不执行 + if (this.isclose && this.isopen === 'none') return + if (this.isclose && this.isopen !== 'none') { + this.transition = true + this.close() + } else { + this.move(this.moveX + this.leftWidth) + } + }, + + /** + * 移动 + * @param {Object} moveX + */ + move(moveX) { + // 打开关闭的处理逻辑不太一样 + this.transition = true + // 未打开状态 + if (!this.isopen || this.isopen === 'none') { + if (moveX > this.threshold) { + this.open('left') + } else if (moveX < -this.threshold) { + this.open('right') + } else { + this.close() + } + } else { + if (moveX < 0 && moveX < this.rightWidth) { + const rightX = this.rightWidth + moveX + if (rightX < this.threshold) { + this.open('right') + } else { + this.close() + } + } else if (moveX > 0 && moveX < this.leftWidth) { + const leftX = this.leftWidth - moveX + if (leftX < this.threshold) { + this.open('left') + } else { + this.close() + } + } + + } + + }, + + /** + * 打开 + */ + open(type) { + this.x = this.moveX + this.animation(type) + }, + + /** + * 关闭 + */ + close() { + this.x = this.moveX + // TODO 解决 x 值不更新的问题,所以会多触发一次 nextTick ,待优化 + this.$nextTick(() => { + this.x = -this.leftWidth + if (this.isopen !== 'none') { + this.$emit('change', 'none') + } + this.isopen = 'none' + }) + }, + + /** + * 执行结束动画 + * @param {Object} type + */ + animation(type) { + this.$nextTick(() => { + if (type === 'left') { + this.x = 0 + } else { + this.x = -this.rightWidth - this.leftWidth + } + + if (this.isopen !== type) { + this.$emit('change', type) + } + this.isopen = type + }) + + }, + getSlide(x) {}, + getQuerySelect() { + const query = uni.createSelectorQuery().in(this); + query.selectAll('.movable-view--hock').boundingClientRect(data => { + this.leftWidth = data[1].width + this.rightWidth = data[2].width + this.width = data[0].width + this.viewWidth = this.width + this.rightWidth + this.leftWidth + if (this.leftWidth === 0) { + // TODO 疑似bug ,初始化的时候如果x 是0,会导致移动位置错误,所以让元素超出一点 + this.x = -0.1 + } else { + this.x = -this.leftWidth + } + this.moveX = this.x + this.$nextTick(() => { + this.swipeShow = 1 + }) + + if (!this.buttonWidth) { + this.disabledView = true + } + + if (this.autoClose) return + if (this.show !== 'none') { + this.transition = true + this.open(this.shows) + } + }).exec(); + + } + } +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js new file mode 100644 index 0000000..d389bce --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpother.js @@ -0,0 +1,260 @@ +let otherMixins = {} + +// #ifndef APP-PLUS|| MP-WEIXIN || H5 +const MIN_DISTANCE = 10; +otherMixins = { + data() { + // TODO 随机生生元素ID,解决百度小程序获取同一个元素位置信息的bug + const elClass = `Uni_${Math.ceil(Math.random() * 10e5).toString(36)}` + return { + uniShow: false, + left: 0, + buttonShow: 'none', + ani: false, + moveLeft: '', + elClass + } + }, + watch: { + show(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + left() { + this.moveLeft = `translateX(${this.left}px)` + }, + buttonShow(newVal) { + if (this.autoClose) return + this.openState(newVal) + }, + leftOptions() { + this.init() + }, + rightOptions() { + this.init() + } + }, + mounted() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + this.init() + }, + methods: { + init() { + clearTimeout(this.timer) + this.timer = setTimeout(() => { + this.getSelectorQuery() + }, 100) + // 移动距离 + this.left = 0 + this.x = 0 + }, + + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + appTouchStart(e) { + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + touchstart(e) { + if (this.disabled) return + this.ani = false + this.x = this.left || 0 + this.stopTouchStart(e) + this.autoClose && this.closeSwipe() + }, + touchmove(e) { + if (this.disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e); + if (this.direction !== 'horizontal') { + return; + } + this.move(this.x + this.deltaX) + return false + }, + touchend() { + if (this.disabled) return + this.moveDirection(this.left) + }, + /** + * 设置移动距离 + * @param {Object} value + */ + move(value) { + value = value || 0 + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + // 获取可滑动范围 + this.left = this.range(value, -rightWidth, leftWidth); + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + */ + moveDirection(left) { + const threshold = this.threshold + const isopen = this.isopen || 'none' + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + if (this.deltaX === 0) { + this.openState('none') + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > + 0 && rightWidth + + left < threshold)) { + // right + this.openState('right') + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > + 0 && + leftWidth - left < threshold)) { + // left + this.openState('left') + } else { + // default + this.openState('none') + } + }, + + /** + * 开启状态 + * @param {Boolean} type + */ + openState(type) { + const leftWidth = this.leftWidth + const rightWidth = this.rightWidth + let left = '' + this.isopen = this.isopen ? this.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + + if (this.isopen !== type) { + this.throttle = true + this.$emit('change', type) + } + + this.isopen = type + // 添加动画类 + this.ani = true + this.$nextTick(() => { + this.move(left) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 + }, + close() { + this.openState('none') + }, + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus() { + this.direction = ''; + this.deltaX = 0; + this.deltaY = 0; + this.offsetX = 0; + this.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event) { + this.resetTouchStatus(); + const touch = event.touches[0]; + this.startX = touch.clientX; + this.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event) { + const touch = event.touches[0]; + this.deltaX = touch.clientX - this.startX; + this.deltaY = touch.clientY - this.startY; + this.offsetX = Math.abs(this.deltaX); + this.offsetY = Math.abs(this.deltaY); + this.direction = this.direction || this.getDirection(this.offsetX, this.offsetY); + }, + + getSelectorQuery() { + const views = uni.createSelectorQuery().in(this) + views + .selectAll('.' + this.elClass) + .boundingClientRect(data => { + if (data.length === 0) return + let show = 'none' + if (this.autoClose) { + show = 'none' + } else { + show = this.show + } + this.leftWidth = data[0].width || 0 + this.rightWidth = data[1].width || 0 + this.buttonShow = show + }) + .exec() + } + } +} + +// #endif + +export default otherMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js new file mode 100644 index 0000000..08de1c9 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/mpwxs.js @@ -0,0 +1,84 @@ +let mpMixins = {} +let is_pc = null +// #ifdef H5 +import { + isPC +} from "./isPC" +is_pc = isPC() +// #endif +// #ifdef APP-VUE|| MP-WEIXIN || H5 + +mpMixins = { + data() { + return { + is_show: 'none' + } + }, + watch: { + show(newVal) { + this.is_show = this.show + } + }, + created() { + this.swipeaction = this.getSwipeAction() + if (this.swipeaction && Array.isArray(this.swipeaction.children)) { + this.swipeaction.children.push(this) + } + }, + mounted() { + this.is_show = this.show + }, + methods: { + // wxs 中调用 + closeSwipe(e) { + if (this.autoClose && this.swipeaction) { + this.swipeaction.closeOther(this) + } + }, + + change(e) { + this.$emit('change', e.open) + if (this.is_show !== e.open) { + this.is_show = e.open + } + }, + + appTouchStart(e) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + this.clientX = clientX + this.timestamp = new Date().getTime() + }, + appTouchEnd(e, index, item, position) { + if (is_pc) return + const { + clientX + } = e.changedTouches[0] + // fixed by xxxx 模拟点击事件,解决 ios 13 点击区域错位的问题 + let diff = Math.abs(this.clientX - clientX) + let time = (new Date().getTime()) - this.timestamp + if (diff < 40 && time < 300) { + this.$emit('click', { + content: item, + index, + position + }) + } + }, + onClickForPC(index, item, position) { + if (!is_pc) return + // #ifdef H5 + this.$emit('click', { + content: item, + index, + position + }) + // #endif + } + } +} + +// #endif +export default mpMixins diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js new file mode 100644 index 0000000..78f0ec6 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/render.js @@ -0,0 +1,270 @@ +const MIN_DISTANCE = 10; +export default { + showWatch(newVal, oldVal, ownerInstance, instance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + if (!$el) return + this.getDom(instance, ownerInstance, self) + if (newVal && newVal !== 'none') { + this.openState(newVal, instance, ownerInstance, self) + return + } + + if (state.left) { + this.openState('none', instance, ownerInstance, self) + } + this.resetTouchStatus(instance, self) + }, + + /** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ + touchstart(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state; + this.getDom(instance, ownerInstance, self) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + this.stopTouchStart(e, ownerInstance, self) + }, + + /** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchmove(e, ownerInstance, self) { + let instance = e.instance; + // 删除之后已经那不到实例了 + if (!instance) return; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + if (disabled) return + // 是否可以滑动页面 + this.stopTouchMove(e, self); + if (state.direction !== 'horizontal') { + return; + } + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + let x = state.x + state.deltaX + this.move(x, instance, ownerInstance, self) + }, + + /** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ + touchend(e, ownerInstance, self) { + let instance = e.instance; + let disabled = instance.getDataset().disabled + let state = self.state + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = this.getDisabledType(disabled) + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + this.moveDirection(state.left, instance, ownerInstance, self) + + }, + + /** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ + move(value, instance, ownerInstance, self) { + value = value || 0 + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = this.range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + + }, + + /** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ + getDom(instance, ownerInstance, self) { + var state = self.state + var $el = ownerInstance.$el || ownerInstance.$vm && ownerInstance.$vm.$el + var leftDom = $el.querySelector('.button-group--left') + var rightDom = $el.querySelector('.button-group--right') + + state.leftWidth = leftDom.offsetWidth || 0 + state.rightWidth = rightDom.offsetWidth || 0 + state.threshold = instance.getDataset().threshold + }, + + getDisabledType(value) { + return (typeof(value) === 'string' ? JSON.parse(value) : value) || false; + }, + + /** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ + range(num, min, max) { + return Math.min(Math.max(num, min), max); + }, + + + /** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ + moveDirection(left, ins, ownerInstance, self) { + var state = self.state + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + this.openState('none', ins, ownerInstance, self) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + this.openState('right', ins, ownerInstance, self) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + this.openState('left', ins, ownerInstance, self) + } else { + // default + this.openState('none', ins, ownerInstance, self) + } + }, + + + /** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ + openState(type, ins, ownerInstance, self) { + let state = self.state + let leftWidth = state.leftWidth + let rightWidth = state.rightWidth + let left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(() => { + ins.addClass('ani'); + this.move(left, ins, ownerInstance, self) + }) + }, + + + getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; + }, + + /** + * 重置滑动状态 + * @param {Object} event + */ + resetTouchStatus(instance, self) { + let state = self.state; + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; + }, + + /** + * 设置滑动开始位置 + * @param {Object} event + */ + stopTouchStart(event, ownerInstance, self) { + let instance = event.instance; + let state = self.state + this.resetTouchStatus(instance, self); + var touch = event.touches[0]; + state.startX = touch.clientX; + state.startY = touch.clientY; + }, + + /** + * 滑动中,是否禁止打开 + * @param {Object} event + */ + stopTouchMove(event, self) { + let instance = event.instance; + let state = self.state; + let touch = event.touches[0]; + + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || this.getDirection(state.offsetX, state.offsetY); + } +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue new file mode 100644 index 0000000..a816e92 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/uni-swipe-action-item.vue @@ -0,0 +1,348 @@ + + + + + + diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs new file mode 100644 index 0000000..b394244 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action-item/wx.wxs @@ -0,0 +1,341 @@ +var MIN_DISTANCE = 10; + +/** + * 判断当前是否为H5、app-vue + */ +var IS_HTML5 = false +if (typeof window === 'object') IS_HTML5 = true + +/** + * 监听页面内值的变化,主要用于动态开关swipe-action + * @param {Object} newValue + * @param {Object} oldValue + * @param {Object} ownerInstance + * @param {Object} instance + */ +function showWatch(newVal, oldVal, ownerInstance, instance) { + var state = instance.getState() + getDom(instance, ownerInstance) + if (newVal && newVal !== 'none') { + openState(newVal, instance, ownerInstance) + return + } + + if (state.left) { + openState('none', instance, ownerInstance) + } + resetTouchStatus(instance) +} + +/** + * 开始触摸操作 + * @param {Object} e + * @param {Object} ins + */ +function touchstart(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState(); + getDom(instance, ownerInstance) + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 开始触摸时移除动画类 + instance.requestAnimationFrame(function() { + instance.removeClass('ani'); + ownerInstance.callMethod('closeSwipe'); + }) + + // 记录上次的位置 + state.x = state.left || 0 + // 计算滑动开始位置 + stopTouchStart(e, ownerInstance) +} + +/** + * 开始滑动操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchmove(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + if (disabled) return + // 是否可以滑动页面 + stopTouchMove(e); + if (state.direction !== 'horizontal') { + return; + } + + if (e.preventDefault) { + // 阻止页面滚动 + e.preventDefault() + } + + move(state.x + state.deltaX, instance, ownerInstance) +} + +/** + * 结束触摸操作 + * @param {Object} e + * @param {Object} ownerInstance + */ +function touchend(e, ownerInstance) { + var instance = e.instance; + var disabled = instance.getDataset().disabled + var state = instance.getState() + // fix by mehaotian, TODO 兼容 app-vue 获取dataset为字符串 , h5 获取 为 undefined 的问题,待框架修复 + disabled = (typeof(disabled) === 'string' ? JSON.parse(disabled) : disabled) || false; + + if (disabled) return + // 滑动过程中触摸结束,通过阙值判断是开启还是关闭 + // fixed by mehaotian 定时器解决点击按钮,touchend 触发比 click 事件时机早的问题 ,主要是 ios13 + moveDirection(state.left, instance, ownerInstance) + +} + +/** + * 设置移动距离 + * @param {Object} value + * @param {Object} instance + * @param {Object} ownerInstance + */ +function move(value, instance, ownerInstance) { + value = value || 0 + var state = instance.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + // 获取可滑动范围 + state.left = range(value, -rightWidth, leftWidth); + instance.requestAnimationFrame(function() { + instance.setStyle({ + transform: 'translateX(' + state.left + 'px)', + '-webkit-transform': 'translateX(' + state.left + 'px)' + }) + }) + +} + +/** + * 获取元素信息 + * @param {Object} instance + * @param {Object} ownerInstance + */ +function getDom(instance, ownerInstance) { + var state = instance.getState() + var leftDom = ownerInstance.selectComponent('.button-group--left') + var rightDom = ownerInstance.selectComponent('.button-group--right') + var leftStyles = { + width: 0 + } + var rightStyles = { + width: 0 + } + leftStyles = leftDom.getBoundingClientRect() + rightStyles = rightDom.getBoundingClientRect() + + state.leftWidth = leftStyles.width || 0 + state.rightWidth = rightStyles.width || 0 + state.threshold = instance.getDataset().threshold +} + +/** + * 获取范围 + * @param {Object} num + * @param {Object} min + * @param {Object} max + */ +function range(num, min, max) { + return Math.min(Math.max(num, min), max); +} + + +/** + * 移动方向判断 + * @param {Object} left + * @param {Object} value + * @param {Object} ownerInstance + * @param {Object} ins + */ +function moveDirection(left, ins, ownerInstance) { + var state = ins.getState() + var threshold = state.threshold + var position = state.position + var isopen = state.isopen || 'none' + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + if (state.deltaX === 0) { + openState('none', ins, ownerInstance) + return + } + if ((isopen === 'none' && rightWidth > 0 && -left > threshold) || (isopen !== 'none' && rightWidth > 0 && + rightWidth + + left < threshold)) { + // right + openState('right', ins, ownerInstance) + } else if ((isopen === 'none' && leftWidth > 0 && left > threshold) || (isopen !== 'none' && leftWidth > 0 && + leftWidth - left < threshold)) { + // left + openState('left', ins, ownerInstance) + } else { + // default + openState('none', ins, ownerInstance) + } +} + + +/** + * 开启状态 + * @param {Boolean} type + * @param {Object} ins + * @param {Object} ownerInstance + */ +function openState(type, ins, ownerInstance) { + var state = ins.getState() + var leftWidth = state.leftWidth + var rightWidth = state.rightWidth + var left = '' + state.isopen = state.isopen ? state.isopen : 'none' + switch (type) { + case "left": + left = leftWidth + break + case "right": + left = -rightWidth + break + default: + left = 0 + } + + // && !state.throttle + + if (state.isopen !== type) { + state.throttle = true + ownerInstance.callMethod('change', { + open: type + }) + + } + + state.isopen = type + // 添加动画类 + ins.requestAnimationFrame(function() { + ins.addClass('ani'); + move(left, ins, ownerInstance) + }) + // 设置最终移动位置,理论上只要进入到这个函数,肯定是要打开的 +} + + +function getDirection(x, y) { + if (x > y && x > MIN_DISTANCE) { + return 'horizontal'; + } + if (y > x && y > MIN_DISTANCE) { + return 'vertical'; + } + return ''; +} + +/** + * 重置滑动状态 + * @param {Object} event + */ +function resetTouchStatus(instance) { + var state = instance.getState(); + state.direction = ''; + state.deltaX = 0; + state.deltaY = 0; + state.offsetX = 0; + state.offsetY = 0; +} + +/** + * 设置滑动开始位置 + * @param {Object} event + */ +function stopTouchStart(event) { + var instance = event.instance; + var state = instance.getState(); + resetTouchStatus(instance); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.startX = touch.clientX; + state.startY = touch.clientY; +} + +/** + * 滑动中,是否禁止打开 + * @param {Object} event + */ +function stopTouchMove(event) { + var instance = event.instance; + var state = instance.getState(); + var touch = event.touches[0]; + if (IS_HTML5 && isPC()) { + touch = event; + } + state.deltaX = touch.clientX - state.startX; + state.deltaY = touch.clientY - state.startY; + state.offsetY = Math.abs(state.deltaY); + state.offsetX = Math.abs(state.deltaX); + state.direction = state.direction || getDirection(state.offsetX, state.offsetY); +} + +function isPC() { + var userAgentInfo = navigator.userAgent; + var Agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"]; + var flag = true; + for (var v = 0; v < Agents.length - 1; v++) { + if (userAgentInfo.indexOf(Agents[v]) > 0) { + flag = false; + break; + } + } + return flag; +} + +var movable = false + +function mousedown(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchstart(e, ins) + movable = true +} + +function mousemove(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + if (!movable) return + touchmove(e, ins) +} + +function mouseup(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + touchend(e, ins) + movable = false +} + +function mouseleave(e, ins) { + if (!IS_HTML5) return + if (!isPC()) return + movable = false +} + +module.exports = { + showWatch: showWatch, + touchstart: touchstart, + touchmove: touchmove, + touchend: touchend, + mousedown: mousedown, + mousemove: mousemove, + mouseup: mouseup, + mouseleave: mouseleave +} diff --git a/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue b/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue new file mode 100644 index 0000000..4971782 --- /dev/null +++ b/src/uni_modules/uni-swipe-action/components/uni-swipe-action/uni-swipe-action.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/uni_modules/uni-swipe-action/package.json b/src/uni_modules/uni-swipe-action/package.json new file mode 100644 index 0000000..fc5dd8a --- /dev/null +++ b/src/uni_modules/uni-swipe-action/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-swipe-action", + "displayName": "uni-swipe-action 滑动操作", + "version": "1.3.10", + "description": "SwipeAction 滑动操作操作组件", + "keywords": [ + "", + "uni-ui", + "uniui", + "滑动删除", + "侧滑删除" + ], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "y", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-swipe-action/readme.md b/src/uni_modules/uni-swipe-action/readme.md new file mode 100644 index 0000000..93a5cac --- /dev/null +++ b/src/uni_modules/uni-swipe-action/readme.md @@ -0,0 +1,11 @@ + + +## SwipeAction 滑动操作 +> **组件名:uni-swipe-action** +> 代码块: `uSwipeAction`、`uSwipeActionItem` + + +通过滑动触发选项的容器 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swipe-action) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-swiper-dot/changelog.md b/src/uni_modules/uni-swiper-dot/changelog.md new file mode 100644 index 0000000..85cf54d --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/changelog.md @@ -0,0 +1,12 @@ +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-swiper-dot](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.6(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.5(2021-02-05) +- 调整为uni_modules目录规范 +- 新增 clickItem 事件,支持指示点控制轮播 +- 新增 支持 pc 可用 diff --git a/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue b/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue new file mode 100644 index 0000000..e66b6c7 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/components/uni-swiper-dot/uni-swiper-dot.vue @@ -0,0 +1,218 @@ + + + + + diff --git a/src/uni_modules/uni-swiper-dot/package.json b/src/uni_modules/uni-swiper-dot/package.json new file mode 100644 index 0000000..f2dd8d2 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/package.json @@ -0,0 +1,87 @@ +{ + "id": "uni-swiper-dot", + "displayName": "uni-swiper-dot 轮播图指示点", + "version": "1.2.0", + "description": "自定义轮播图指示点组件", + "keywords": [ + "uni-ui", + "uniui", + "轮播图指示点", + "dot", + "swiper" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-swiper-dot/readme.md b/src/uni_modules/uni-swiper-dot/readme.md new file mode 100644 index 0000000..7d397e2 --- /dev/null +++ b/src/uni_modules/uni-swiper-dot/readme.md @@ -0,0 +1,11 @@ + + +## SwiperDot 轮播图指示点 +> **组件名:uni-swiper-dot** +> 代码块: `uSwiperDot` + + +自定义轮播图指示点 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-swiper-dot) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-table/changelog.md b/src/uni_modules/uni-table/changelog.md new file mode 100644 index 0000000..943707b --- /dev/null +++ b/src/uni_modules/uni-table/changelog.md @@ -0,0 +1,33 @@ +## 1.2.8(2024-10-15) +- 修复 运行到抖音小程序上出现的问题 +## 1.2.7(2024-10-15) +- 修复 微信小程序中的getSystemInfo警告 +## 1.2.4(2023-12-19) +- 修复 uni-tr只有一列时minWidth计算错误,列变化实时计算更新 +## 1.2.3(2023-03-28) +- 修复 在vue3模式下可能会出现错误的问题 +## 1.2.2(2022-11-29) +- 优化 主题样式 +## 1.2.1(2022-06-06) +- 修复 微信小程序存在无使用组件的问题 +## 1.2.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-table](https://uniapp.dcloud.io/component/uniui/uni-table) +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-07-08) +- 新增 uni-th 支持 date 日期筛选范围 +## 1.0.6(2021-07-05) +- 新增 uni-th 支持 range 筛选范围 +## 1.0.5(2021-06-28) +- 新增 uni-th 筛选功能 +## 1.0.4(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.3(2021-04-16) +- 新增 sortable 属性,是否开启单列排序 +- 优化 表格多选逻辑 +## 1.0.2(2021-03-22) +- uni-tr 添加 disabled 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-table/components/uni-table/uni-table.vue b/src/uni_modules/uni-table/components/uni-table/uni-table.vue new file mode 100644 index 0000000..3ab0496 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-table/uni-table.vue @@ -0,0 +1,460 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue b/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue new file mode 100644 index 0000000..130f626 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tbody/uni-tbody.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-td/uni-td.vue b/src/uni_modules/uni-table/components/uni-td/uni-td.vue new file mode 100644 index 0000000..69e5e8a --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-td/uni-td.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue b/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue new file mode 100644 index 0000000..df22a71 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-th/filter-dropdown.vue @@ -0,0 +1,511 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-th/uni-th.vue b/src/uni_modules/uni-table/components/uni-th/uni-th.vue new file mode 100644 index 0000000..a39ae6c --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-th/uni-th.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue b/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue new file mode 100644 index 0000000..53b5c4c --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-thead/uni-thead.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue b/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue new file mode 100644 index 0000000..1089187 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tr/table-checkbox.vue @@ -0,0 +1,179 @@ + + + + + diff --git a/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue b/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue new file mode 100644 index 0000000..3fb76f4 --- /dev/null +++ b/src/uni_modules/uni-table/components/uni-tr/uni-tr.vue @@ -0,0 +1,184 @@ + + + + + diff --git a/src/uni_modules/uni-table/i18n/en.json b/src/uni_modules/uni-table/i18n/en.json new file mode 100644 index 0000000..e32023c --- /dev/null +++ b/src/uni_modules/uni-table/i18n/en.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reset", + "filter-dropdown.search": "Search", + "filter-dropdown.submit": "Submit", + "filter-dropdown.filter": "Filter", + "filter-dropdown.gt": "Greater or equal to", + "filter-dropdown.lt": "Less than or equal to", + "filter-dropdown.date": "Date" +} diff --git a/src/uni_modules/uni-table/i18n/es.json b/src/uni_modules/uni-table/i18n/es.json new file mode 100644 index 0000000..9afd04b --- /dev/null +++ b/src/uni_modules/uni-table/i18n/es.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Reiniciar", + "filter-dropdown.search": "Búsqueda", + "filter-dropdown.submit": "Entregar", + "filter-dropdown.filter": "Filtrar", + "filter-dropdown.gt": "Mayor o igual a", + "filter-dropdown.lt": "Menos que o igual a", + "filter-dropdown.date": "Fecha" +} diff --git a/src/uni_modules/uni-table/i18n/fr.json b/src/uni_modules/uni-table/i18n/fr.json new file mode 100644 index 0000000..b006237 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/fr.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "Réinitialiser", + "filter-dropdown.search": "Chercher", + "filter-dropdown.submit": "Soumettre", + "filter-dropdown.filter": "Filtre", + "filter-dropdown.gt": "Supérieur ou égal à", + "filter-dropdown.lt": "Inférieur ou égal à", + "filter-dropdown.date": "Date" +} diff --git a/src/uni_modules/uni-table/i18n/index.js b/src/uni_modules/uni-table/i18n/index.js new file mode 100644 index 0000000..2469dd0 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/index.js @@ -0,0 +1,12 @@ +import en from './en.json' +import es from './es.json' +import fr from './fr.json' +import zhHans from './zh-Hans.json' +import zhHant from './zh-Hant.json' +export default { + en, + es, + fr, + 'zh-Hans': zhHans, + 'zh-Hant': zhHant +} diff --git a/src/uni_modules/uni-table/i18n/zh-Hans.json b/src/uni_modules/uni-table/i18n/zh-Hans.json new file mode 100644 index 0000000..862af17 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/zh-Hans.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "确定", + "filter-dropdown.filter": "筛选", + "filter-dropdown.gt": "大于等于", + "filter-dropdown.lt": "小于等于", + "filter-dropdown.date": "日期范围" +} diff --git a/src/uni_modules/uni-table/i18n/zh-Hant.json b/src/uni_modules/uni-table/i18n/zh-Hant.json new file mode 100644 index 0000000..64f8061 --- /dev/null +++ b/src/uni_modules/uni-table/i18n/zh-Hant.json @@ -0,0 +1,9 @@ +{ + "filter-dropdown.reset": "重置", + "filter-dropdown.search": "搜索", + "filter-dropdown.submit": "確定", + "filter-dropdown.filter": "篩選", + "filter-dropdown.gt": "大於等於", + "filter-dropdown.lt": "小於等於", + "filter-dropdown.date": "日期範圍" +} diff --git a/src/uni_modules/uni-table/package.json b/src/uni_modules/uni-table/package.json new file mode 100644 index 0000000..19454c7 --- /dev/null +++ b/src/uni_modules/uni-table/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-table", + "displayName": "uni-table 表格", + "version": "1.2.8", + "description": "表格组件,多用于展示多条结构类似的数据,如", + "keywords": [ + "uni-ui", + "uniui", + "table", + "表格" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss","uni-datetime-picker"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "n" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "n", + "QQ": "y" + }, + "快应用": { + "华为": "n", + "联盟": "n" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} diff --git a/src/uni_modules/uni-table/readme.md b/src/uni_modules/uni-table/readme.md new file mode 100644 index 0000000..bb08c79 --- /dev/null +++ b/src/uni_modules/uni-table/readme.md @@ -0,0 +1,13 @@ + + +## Table 表单 +> 组件名:``uni-table``,代码块: `uTable`。 + +用于展示多条结构类似的数据 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-table) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + + diff --git a/src/uni_modules/uni-tag/changelog.md b/src/uni_modules/uni-tag/changelog.md new file mode 100644 index 0000000..ddee87a --- /dev/null +++ b/src/uni_modules/uni-tag/changelog.md @@ -0,0 +1,23 @@ +## 2.1.1(2024-03-20) +- 优化 app下边框过窄导致不显示的bug +## 2.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-tag](https://uniapp.dcloud.io/component/uniui/uni-tag) +## 2.0.0(2021-11-09) +- 新增 提供组件设计资源,组件样式调整 +- 移除 插槽 +- 移除 type 属性的 royal 选项 +## 1.1.1(2021-08-11) +- type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.1.0(2021-07-30) +- 组件兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.0.7(2021-06-18) +- 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.0.6(2021-06-04) +- 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.0.5(2021-05-10) +- 修复 royal 类型无效的bug +- 修复 uni-tag 宽度不自适应的bug +- 新增 uni-tag 支持属性 custom-style 自定义样式 +## 1.0.4(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue b/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue new file mode 100644 index 0000000..7274436 --- /dev/null +++ b/src/uni_modules/uni-tag/components/uni-tag/uni-tag.vue @@ -0,0 +1,252 @@ + + + + + diff --git a/src/uni_modules/uni-tag/package.json b/src/uni_modules/uni-tag/package.json new file mode 100644 index 0000000..71b41eb --- /dev/null +++ b/src/uni_modules/uni-tag/package.json @@ -0,0 +1,84 @@ +{ + "id": "uni-tag", + "displayName": "uni-tag 标签", + "version": "2.1.1", + "description": "Tag 组件,用于展示1个或多个文字标签,可点击切换选中、不选中的状态。", + "keywords": [ + "uni-ui", + "uniui", + "", + "tag", + "标签" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-tag/readme.md b/src/uni_modules/uni-tag/readme.md new file mode 100644 index 0000000..6e78ff5 --- /dev/null +++ b/src/uni_modules/uni-tag/readme.md @@ -0,0 +1,13 @@ + + +## Tag 标签 +> **组件名:uni-tag** +> 代码块: `uTag` + + +用于展示1个或多个文字标签,可点击切换选中、不选中的状态 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tag) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + diff --git a/src/uni_modules/uni-title/changelog.md b/src/uni_modules/uni-title/changelog.md new file mode 100644 index 0000000..7626216 --- /dev/null +++ b/src/uni_modules/uni-title/changelog.md @@ -0,0 +1,10 @@ +## 1.1.1(2022-05-19) +- 修改组件描述 +## 1.1.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-title](https://uniapp.dcloud.io/component/uniui/uni-title) +## 1.0.2(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的Bug +## 1.0.1(2021-02-05) +- 调整为uni_modules目录规范 diff --git a/src/uni_modules/uni-title/components/uni-title/uni-title.vue b/src/uni_modules/uni-title/components/uni-title/uni-title.vue new file mode 100644 index 0000000..bf4f926 --- /dev/null +++ b/src/uni_modules/uni-title/components/uni-title/uni-title.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/uni_modules/uni-title/package.json b/src/uni_modules/uni-title/package.json new file mode 100644 index 0000000..2249f5a --- /dev/null +++ b/src/uni_modules/uni-title/package.json @@ -0,0 +1,88 @@ +{ + "id": "uni-title", + "displayName": "uni-title 章节标题", + "version": "1.1.1", + "description": "章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题", + "keywords": [ + "uni-ui", + "uniui", + "标题", + "章节", + "章节标题", + "" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ], + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-title/readme.md b/src/uni_modules/uni-title/readme.md new file mode 100644 index 0000000..0e60b1b --- /dev/null +++ b/src/uni_modules/uni-title/readme.md @@ -0,0 +1,14 @@ + + +## Title 标题 +> **组件名:uni-title** +> 代码块: `uTitle` + + +章节标题,通常用于记录页面标题,使用当前组件,uni-app 如果开启统计,将会自动统计页面标题 。 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-title) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 + + + diff --git a/src/uni_modules/uni-tooltip/changelog.md b/src/uni_modules/uni-tooltip/changelog.md new file mode 100644 index 0000000..285b676 --- /dev/null +++ b/src/uni_modules/uni-tooltip/changelog.md @@ -0,0 +1,16 @@ +## 0.2.4(2024-04-23) +- 修复 弹出位置默认值不一致导致的错位 +## 0.2.3(2024-03-20) +- 修复 弹出位置修正 +## 0.2.2(2024-01-15) +- 新增 placement支持设置四个方向:top bottom left right +## 0.2.1(2022-05-09) +- 修复 content 为空时仍然弹出的bug +## 0.2.0(2022-05-07) +**注意:破坏性更新** +- 更新 text 属性变更为 content +- 更新 移除 width 属性 +## 0.1.1(2022-04-27) +- 修复 组件根 text 嵌套组件 warning +## 0.1.0(2022-04-21) +- 初始化 diff --git a/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue b/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue new file mode 100644 index 0000000..476a7dd --- /dev/null +++ b/src/uni_modules/uni-tooltip/components/uni-tooltip/uni-tooltip.vue @@ -0,0 +1,108 @@ + + + + + + diff --git a/src/uni_modules/uni-tooltip/package.json b/src/uni_modules/uni-tooltip/package.json new file mode 100644 index 0000000..44158e1 --- /dev/null +++ b/src/uni_modules/uni-tooltip/package.json @@ -0,0 +1,86 @@ +{ + "id": "uni-tooltip", + "displayName": "uni-tooltip 提示文字", + "version": "0.2.4", + "description": "Tooltip 提示文字", + "keywords": [ + "uni-tooltip", + "uni-ui", + "tooltip", + "tip", + "文字提示" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无 ", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "Vue": { + "vue2": "y", + "vue3": "y" + }, + "App": { + "app-vue": "y", + "app-nvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "u", + "百度": "u", + "字节跳动": "u", + "QQ": "u", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-tooltip/readme.md b/src/uni_modules/uni-tooltip/readme.md new file mode 100644 index 0000000..faafa2e --- /dev/null +++ b/src/uni_modules/uni-tooltip/readme.md @@ -0,0 +1,8 @@ +## Badge 数字角标 +> **组件名:uni-tooltip** +> 代码块: `uTooltip` + +数字角标一般和其它控件(列表、9宫格等)配合使用,用于进行数量提示,默认为实心灰色背景, + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-tooltip) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 diff --git a/src/uni_modules/uni-transition/changelog.md b/src/uni_modules/uni-transition/changelog.md new file mode 100644 index 0000000..faaf336 --- /dev/null +++ b/src/uni_modules/uni-transition/changelog.md @@ -0,0 +1,24 @@ +## 1.3.3(2024-04-23) +- 修复 当元素会受变量影响自动隐藏的bug +## 1.3.2(2023-05-04) +- 修复 NVUE 平台报错的问题 +## 1.3.1(2021-11-23) +- 修复 init 方法初始化问题 +## 1.3.0(2021-11-19) +- 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-transition](https://uniapp.dcloud.io/component/uniui/uni-transition) +## 1.2.1(2021-09-27) +- 修复 init 方法不生效的 Bug +## 1.2.0(2021-07-30) +- 组件兼容 vue3,如何创建 vue3 项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +## 1.1.1(2021-05-12) +- 新增 示例地址 +- 修复 示例项目缺少组件的 Bug +## 1.1.0(2021-04-22) +- 新增 通过方法自定义动画 +- 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- 优化 动画触发逻辑,使动画更流畅 +- 优化 支持单独的动画类型 +- 优化 文档示例 +## 1.0.2(2021-02-05) +- 调整为 uni_modules 目录规范 diff --git a/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js new file mode 100644 index 0000000..8f89b18 --- /dev/null +++ b/src/uni_modules/uni-transition/components/uni-transition/createAnimation.js @@ -0,0 +1,131 @@ +// const defaultOption = { +// duration: 300, +// timingFunction: 'linear', +// delay: 0, +// transformOrigin: '50% 50% 0' +// } +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') +// #endif +class MPAnimation { + constructor(options, _this) { + this.options = options + // 在iOS10+QQ小程序平台下,传给原生的对象一定是个普通对象而不是Proxy对象,否则会报parameter should be Object instead of ProxyObject的错误 + this.animation = uni.createAnimation({ + ...options + }) + this.currentStepAnimates = {} + this.next = 0 + this.$ = _this + + } + + _nvuePushAnimates(type, args) { + let aniObj = this.currentStepAnimates[this.next] + let styles = {} + if (!aniObj) { + styles = { + styles: {}, + config: {} + } + } else { + styles = aniObj + } + if (animateTypes1.includes(type)) { + if (!styles.styles.transform) { + styles.styles.transform = '' + } + let unit = '' + if(type === 'rotate'){ + unit = 'deg' + } + styles.styles.transform += `${type}(${args+unit}) ` + } else { + styles.styles[type] = `${args}` + } + this.currentStepAnimates[this.next] = styles + } + _animateRun(styles = {}, config = {}) { + let ref = this.$.$refs['ani'].ref + if (!ref) return + return new Promise((resolve, reject) => { + nvueAnimation.transition(ref, { + styles, + ...config + }, res => { + resolve() + }) + }) + } + + _nvueNextAnimate(animates, step = 0, fn) { + let obj = animates[step] + if (obj) { + let { + styles, + config + } = obj + this._animateRun(styles, config).then(() => { + step += 1 + this._nvueNextAnimate(animates, step, fn) + }) + } else { + this.currentStepAnimates = {} + typeof fn === 'function' && fn() + this.isEnd = true + } + } + + step(config = {}) { + // #ifndef APP-NVUE + this.animation.step(config) + // #endif + // #ifdef APP-NVUE + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + // #endif + return this + } + + run(fn) { + // #ifndef APP-NVUE + this.$.animationData = this.animation.export() + this.$.timer = setTimeout(() => { + typeof fn === 'function' && fn() + }, this.$.durationTime) + // #endif + // #ifdef APP-NVUE + this.isEnd = false + let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref + if(!ref) return + this._nvueNextAnimate(this.currentStepAnimates, 0, fn) + this.next = 0 + // #endif + } +} + + +const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 = ['opacity', 'backgroundColor'] +const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom'] +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + MPAnimation.prototype[type] = function(...args) { + // #ifndef APP-NVUE + this.animation[type](...args) + // #endif + // #ifdef APP-NVUE + this._nvuePushAnimates(type, args) + // #endif + return this + } +}) + +export function createAnimation(option, _this) { + if(!_this) return + clearTimeout(_this.timer) + return new MPAnimation(option, _this) +} diff --git a/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue new file mode 100644 index 0000000..f3ddd1f --- /dev/null +++ b/src/uni_modules/uni-transition/components/uni-transition/uni-transition.vue @@ -0,0 +1,286 @@ + + + + + diff --git a/src/uni_modules/uni-transition/package.json b/src/uni_modules/uni-transition/package.json new file mode 100644 index 0000000..d5c20e1 --- /dev/null +++ b/src/uni_modules/uni-transition/package.json @@ -0,0 +1,85 @@ +{ + "id": "uni-transition", + "displayName": "uni-transition 过渡动画", + "version": "1.3.3", + "description": "元素的简单过渡动画", + "keywords": [ + "uni-ui", + "uniui", + "动画", + "过渡", + "过渡动画" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "" + }, + "directories": { + "example": "../../temps/example_temps" + }, +"dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": ["uni-scss"], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-transition/readme.md b/src/uni_modules/uni-transition/readme.md new file mode 100644 index 0000000..2f8a77e --- /dev/null +++ b/src/uni_modules/uni-transition/readme.md @@ -0,0 +1,11 @@ + + +## Transition 过渡动画 +> **组件名:uni-transition** +> 代码块: `uTransition` + + +元素过渡动画 + +### [查看文档](https://uniapp.dcloud.io/component/uniui/uni-transition) +#### 如使用过程中有任何问题,或者您对uni-ui有一些好的建议,欢迎加入 uni-ui 交流群:871950839 \ No newline at end of file diff --git a/src/uni_modules/uni-ui/changelog.md b/src/uni_modules/uni-ui/changelog.md new file mode 100644 index 0000000..dc0b586 --- /dev/null +++ b/src/uni_modules/uni-ui/changelog.md @@ -0,0 +1,593 @@ +## 1.5.7(2024-10-31) +- uni-calendar 修复 calendar 在选择日期范围后重新选择日期需要点两次的 Bug +- uni-combox 新增 clearAble 属性 +- uni-countdown 新增 支持控制显示位数 默认显示 2 位 +- uni-datetime-picker 修复 没有选中日期时点击确定直接报错的 Bug [详情](https://ask.dcloud.net.cn/question/198168) +- uni-easyinput 修复 初始值传入 null 导致 input 报错的 Bug +- uni-fab 修复 微信小程序中的 getSystemInfo 警告 +- uni-file-picker 优化 vue3 兼容性 +- uni-file-picker 修复 value 属性不兼容 vue3 的 Bug +- uni-forms 修复 校验规则在抖音开发者工具上不生效的 Bug [详情](https://ask.dcloud.net.cn/question/191933) +- uni-forms 修复 form 上次修改的问题 +- uni-forms 修复 binddata 的兼容性问题 +- uni-popup 修复 uni-popup 在 android 上的重复点击弹出位置不正确的 Bug +- uni-table 修复 运行到抖音小程序上出现的问题 +- 修复 uni-load-more uni-nav-bar uni-popup uni-table uni-datetime-picker 在微信小程序中的 getSystemInfo 警告 +## 1.5.6(2024-07-08) +- uni-datetime-picker 新增 日期点击事件,在点击日期时会触发该事件。 +- uni-datetime-picker 修复 抖音小程序事件传递失效bug +- uni-easyinput 修复 easyinput组件双向绑定问题 +- uni-number-box 修复 在vue2下H5黑边的bug +- uni-number-box 修复 在vue2手动输入后失焦导致清空数值的严重bug +- uni-popup 修复 uni-popup-dialog vue3下使用value无法进行绑定的bug(双向绑定兼容旧写法) +- uni-search-bar 修复 textColor默认值导致的文字不显示的bug +- uni-search-bar 修复 textColor不生效的bug +- uni-segmented-control 修复 修复在微信小程序下inactiveColor失效bug +- uni-tooltip 修复 弹出位置默认值不一致导致的错位 +- uni-transition 修复 当元素会受变量影响自动隐藏的bug +## 1.5.0(2024-01-13) +- 修复 npm包结构目录错误的问题 +- uni-calendar 修复 回到今天时,月份显示不一致问题 +- uni-data-picker 新增 支持 uni-app-x +- uni-datetime-picker 优化 增加noChange事件,当进行日期范围选择时,若有空值,则触发该事件 [详情](https://github.com/dcloudio/uni-ui/issues/815) +- uni-datetime-picker 修复 字节小程序时间选择范围器失效问题 [详情](https://github.com/dcloudio/uni-ui/issues/834) +- uni-datetime-picker 修复 PC端初次修改时间,开始时间未更新的Bug [详情](https://github.com/dcloudio/uni-ui/issues/737) +- uni-datetime-picker 修复 部分情况修改时间,开始、结束时间显示异常的Bug [详情](https://ask.dcloud.net.cn/question/171146) +- uni-datetime-picker 优化 当前月可以选择上月、下月的日期的Bug +- uni-file-picker 新增 微信小程序不再调用chooseImage,而是调用chooseMedia +- uni-file-picker 新增 上传文件至云存储携带本地文件名称 +- uni-forms 优化 labelWidth 描述错误 +fix: 修复图标大小默认值错误的问题 +- uni-icons 修复 项目未使用 ts 情况下,打包报错的bug +- uni-icons 修复 size 属性为 string 时,不加单位导致尺寸异常的bug +- uni-icons 优化 兼容老版本icon类型,如 top ,bottom 等 +- uni-icons 优化 兼容老版本icon类型,如 top ,bottom 等 +- uni-icons 优化 uni-app x 下示例项目图标排序 +- uni-icons 修复 nvue下引入组件报错的bug +-优化 size 属性支持单位 +- uni-icons 新增 uni-app x 支持定义图标 +- uni-notice-bar 修复动态绑定title时,滚动速度不一致的问题 +更新示例工程 +- uni-popup 新增 uni-popup 支持uni-app-x 注意暂时仅支持 `maskClick` `@open` `@close` +- uni-table 修复 uni-tr只有一列时minWidth计算错误,列变化实时计算更新 +## 1.4.27(2023-04-21) +- uni-calendar 修复 某些情况 monthSwitch 未触发的Bug +- uni-calendar 修复 某些情况切换月份错误的Bug +- uni-data-picker 修复 更改 modelValue 报错的 bug +- uni-data-picker 修复 v-for 未使用 key 值控制台 warning +- uni-data-picker 修复代码合并时引发 value 属性为空时不渲染数据的问题 +- uni-data-picker 修复 localdata 不支持动态更新的bug +- uni-data-select 修复 微信小程序点击时会改变背景颜色的 bug +- uni-data-select 修复 禁用时会显示清空按钮 +- uni-data-select 优化 查询条件短期内多次变更只查询最后一次变更后的结果 +- uni-data-select 调整 内部缓存键名调整为 uni-data-select-lastSelectedValue +- uni-datetime-picker 修复 日历 picker 修改年月后,自动选中当月1日 [详情](https://ask.dcloud.net.cn/question/165937) +- uni-datetime-picker 修复 小程序端 低版本 ios NaN [详情](https://ask.dcloud.net.cn/question/162979) +- uni-datetime-picker 修复 firefox 浏览器显示区域点击无法拉起日历弹框的Bug [详情](https://ask.dcloud.net.cn/question/163362) +- uni-datetime-picker 优化 值为空依然选中当天问题 +- uni-datetime-picker 优化 提供 default-value 属性支持配置选择器打开时默认显示的时间 +- uni-datetime-picker 优化 非范围选择未选择日期时间,点击确认按钮选中当前日期时间 +- uni-datetime-picker 优化 字节小程序日期时间范围选择,底部日期换行问题 +- uni-datetime-picker 修复 2.2.18 引起范围选择配置 end 选择无效的Bug [详情](https://github.com/dcloudio/uni-ui/issues/686) +- uni-datetime-picker 修复 移动端范围选择change事件触发异常的Bug [详情](https://github.com/dcloudio/uni-ui/issues/684) +- uni-datetime-picker 优化 PC端输入日期格式错误时返回当前日期时间 +- uni-datetime-picker 优化 PC端输入日期时间超出 start、end 限制的Bug +- uni-datetime-picker 优化 移动端日期时间范围用法时间展示不完整问题 +- uni-datetime-picker 修复 小程序端绑定 Date 类型报错的Bug [详情](https://github.com/dcloudio/uni-ui/issues/679) +- uni-datetime-picker 修复 vue3 time-picker 无法显示绑定时分秒的Bug +- uni-datetime-picker 修复 字节小程序报错的Bug +- uni-datetime-picker 修复 某些情况切换月份错误的Bug +- uni-easyinput 修复 vue3 下 keyboardheightchange 事件报错的bug +- uni-easyinput 优化 trim 属性默认值 +- uni-easyinput 新增 cursor-spacing 属性 +- uni-fab 新增 pattern.icon 属性,可自定义图标 +- uni-file-picker 修复 手动上传删除一个文件后不能再上传的bug +- uni-forms 修复 required 参数无法动态绑定 +- uni-list 优化 uni-list-chat 具名插槽`header` 非app端套一层元素,方便使用时通过外层元素定位实现样式修改 +- uni-list uni-list-chat 新增 支持具名插槽`header` +- uni-list 新增 列表图标新增 customPrefix 属性 ,用法 [详见](https://uniapp.dcloud.net.cn/component/uniui/uni-icons.html#icons-props) +- uni-nav-bar 修复 自定义状态栏高度闪动BUG +- uni-nav-bar 修复 暗黑模式下边线颜色错误的bug +- uni-popup 修复 uni-popup 重复打开时的 bug +- uni-popup uni-popup-dialog 组件新增 inputType 属性 +- uni-swipe-action 修复`uni-swipe-action`和`uni-swipe-action-item`不同时使用导致 closeOther 方法报错的 bug +- uni-table 修复 在vue3模式下可能会出现错误的问题 +## 1.4.26(2023-01-31) +- uni-badge 修复 运行/打包 控制台警告问题 +- uni-calendar 修复 某些情况切换月份错误问题 +- uni-data-select 修复 不关联服务空间报错的问题 +- uni-data-select 新增 属性 `format` 可用于格式化显示选项内容 +- uni-datetime-picker 修复 某些情况切换月份错误问题 +- uni-easyinput 新增 keyboardheightchange 事件,可监听键盘高度变化 +- uni-list 修复 无反馈效果呈现的bug +## 1.4.25(2023-01-11) +- uni-file-picker 新增 sourceType 属性, 可以自定义图片和视频选择的来源 +## 1.4.24(2023-01-11) +- uni-data-select 修复 当where变化时,数据不会自动更新的问题 +- uni-datetime-picker 修复 多次加载组件造成内存占用的 bug +- uni-datetime-picker 修复 vue3 下 i18n 国际化初始值不正确的 bug +- uni-easyinput 修复 props 中背景颜色无默认值的bug +- uni-list 修复 uni-list-chat 在vue3下跳转报错的bug +- uni-list 修复 uni-list-chat avatar属性 值为本地路径时错误的问题 +- uni-list 修复 uni-list-chat avatar属性 在腾讯云版uniCloud下错误的问题 +- uni-list 修复 uni-list-chat note属性 支持:“草稿”字样功能 文本少1位的问题 +- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在 H5端 无效的bug +- uni-list 修复 uni-list-item 的 customStyle 属性 padding值在nvue(vue2)下无效的bug +- uni-list uni-list-chat 新增 avatar 支持 fileId +- uni-list uni-list 新增属性 render-reverse 详情参考:[https://uniapp.dcloud.net.cn/component/list.html](https://uniapp.dcloud.net.cn/component/list.html) +- uni-list uni-list-chat note属性 支持:“草稿”字样 加红显示 详情参考uni-im:[https://ext.dcloud.net.cn/plugin?name=uni-im](https://ext.dcloud.net.cn/plugin?name=uni-im) +- uni-list uni-list-item 新增属性 customStyle 支持设置padding、backgroundColor +- uni-popup 修复 nvue 下 v-show 报错 +## 1.4.23(2022-10-25) +- uni-datetime-picker 修复,支付宝小程序样式错乱,[详情](https://github.com/dcloudio/uni-app/issues/3861) + +- uni-nav-bar 修复 条件编译错误的bug +- uni-nav-bar 修复 nvue 环境 fixed 为 true 的情况下,无法置顶的 bug +## 1.4.22(2022-09-19) +- 优化 部分组件适配 uni-scss 主题色 +- uni-badge 修复 当 text 超过 max-num 时,badge 的宽度计算是根据 text 的长度计算,更改为 css 计算实际展示宽度,详见:[https://ask.dcloud.net.cn/question/150473](https://ask.dcloud.net.cn/question/150473) +- uni-calendar 修复 表头年月切换,导致改变当前日期为选择月1号,且未触发change事件 +- uni-data-select 修复 微信小程序下拉框出现后选择会点击到蒙板后面的输入框 +- uni-data-select 修复 点击的位置不准确 +- uni-data-select 新增 支持 disabled 属性 +- uni-datetime-picker 修复,反向选择日期范围,日期显示异常,[详情](https://ask.dcloud.net.cn/question/153401?item_id=212892&rf=false) +- uni-datetime-picker 修复 close事件无效的 bug +- uni-datetime-picker 修复 移动端 maskClick 无效的 bug,详见:[https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false](https://ask.dcloud.net.cn/question/140824?item_id=209458&rf=false) +- uni-fab 修复 小程序端由于 style 使用了对象导致报错,[详情](https://ask.dcloud.net.cn/question/152790?item_id=211778&rf=false) +- uni-fab 修复 nvue 环境下,具有 tabBar 时,fab 组件下部位置无法正常获取 --window-bottom 的bug,详见:[https://ask.dcloud.net.cn/question/110638?notification_id=826310](https://ask.dcloud.net.cn/question/110638?notification_id=826310) +- uni-forms 优化 根据 rules 自动添加 required 的问题 +- uni-forms 修复 item 未设置 require 属性,rules 设置 require 后,星号也显示的 bug,详见:[https://ask.dcloud.net.cn/question/151540](https://ask.dcloud.net.cn/question/151540) +- uni-nav-bar 修复 nvue 环境下 fixed 为 true 的情况下,无法置顶的 bug +- uni-notice-bar 新增 属性 fontSize,可修改文字大小。 +- uni-pagination 修复,未对主题色设置默认色,导致未引入 uni-scss 变量文件报错。 +- uni-pagination 修复,未对移动端当前页文字做主题色适配。 +- uni-pagination 修复 es 语言 i18n 错误 +## 1.4.21(2022-09-19) +- 修复,安装时未导入 uni-data-select 和 uni-tooltip 的问题。 +## 1.4.20(2022-07-25) +- uni-section 新增组件 +- uni-forms 修复 model 需要校验的值没有声明对应字段时,导致第一次不触发校验的bug + +## 1.4.19(2022-07-07) +- uni-data-picker 优化 pc端图标位置不正确的问题 +- uni-data-select 修复 pc端宽度异常的bug +## 1.4.18(2022-07-06) +- uni-forms 【重要】组件逻辑重构,部分用法旧版本不兼容,请注意兼容问题 +- uni-forms 【重要】组件使用 Provide/Inject 方式注入依赖,提供了自定义表单组件调用 uni-forms 校验表单的能力 +- uni-forms 新增 更多表单示例 +- uni-forms 新增 model 属性,等同于原 value/modelValue 属性,旧属性即将废弃 +- uni-forms 新增 validateTrigger 属性的 blur 值,仅 uni-easyinput 生效 +- uni-forms 新增 onFieldChange 方法,可以对子表单进行校验,可替代binddata方法 +- uni-forms 新增 子表单的 setRules 方法,配合自定义校验函数使用 +- uni-forms 新增 uni-forms-item 的 setRules 方法,配置动态表单使用可动态更新校验规则 +- uni-forms 修复 由 1.4.0 引发的 label 插槽不生效的bug +- uni-forms 修复 子组件找不到 setValue 报错的bug +- uni-forms 修复 uni-data-picker 在 uni-forms-item 中报错的bug +- uni-forms 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +- uni-forms 修复 表单校验顺序无序问题 +- uni-forms 优化 子表单组件uni-datetime-picker、uni-data-select、uni-data-picker的显示样式 +- uni-forms 优化 动态表单校验方式,废弃拼接name的方式 +- uni-breadcrumb 修复 微信小程序 separator 不显示问题 +- uni-data-checkbox 优化 在 uni-forms 中的依赖注入方式 +- uni-data-picker 修复 uni-data-picker 在 uni-forms-item 中宽度不正确的bug +- uni-data-picker 优化 显示样式 +- uni-data-select 优化 显示样式 +- uni-datetime-picker 修复 日历顶部年月及底部确认未国际化 bug +- uni-datetime-picker 优化 组件样式,调整了组件图标大小、高度、颜色等,与uni-ui风格保持一致 +- uni-easyinput 新增 在 uni-forms 1.4.0 中使用可以在 blur 时校验内容 +- uni-easyinput 新增 clear 事件,点击右侧叉号图标触发 +- uni-easyinput 新增 change 事件 ,仅在输入框失去焦点或用户按下回车时触发 +- uni-easyinput 优化 组件样式,组件获取焦点时高亮显示,图标颜色调整等 +- uni-easyinput 优化 clearable 显示策略 +- uni-file-picker 修复 在uni-forms下样式不生效的bug +- uni-nav-bar 修复 组件示例中插槽用法无法显示内容的bug +- uni-swipe-action 修复 vue3 下使用组件不能正常运行的Bug +- uni-swipe-action 修复 h5端点击click触发两次的Bug +- uni-table 修复 微信小程序存在无使用组件的问题 +## 1.4.17(2022-06-30) +- 支持 ios 安全区 +## 1.4.16(2022-06-06) +- uni-breadcrumb 新增 支持 uni.scss 修改颜色 +- uni-data-select 修复 localdata 赋值不生效的 bug +- uni-data-select 新增 支持选项禁用(数据选项设置 disabled: true 即禁用) +- uni-data-select 修复 当 value 为 0 时选择不生效的 bug +- uni-easyinput 修复 关闭图标某些情况下无法取消的bug +- uni-fav 新增 stat 属性 ,是否开启uni统计功能 +- uni-goods-nav 新增 stat属性,是否开启uni统计功能 +- uni-group 新增 stat属性,是否开启uni统计功能 +- uni-nav-bar 新增 stat 属性 ,可开启统计 title 上报 ,仅使用了title 属性且项目开启了uni统计生效 +- uni-search-bar 新增 readonly 属性,组件只读 +- uni-swipe-action 修复 isPC 找不到的Bug +- uni-swipe-action 修复 在 nvue 下 disabled 失效的bug +- uni-tooltip 修复 content 为空时仍然弹出的bug +## 1.4.15(2022-05-07) +- uni-data-picker 修复 字节小程序 本地数据无法选择下一级的Bug +- uni-data-select 新增 记住上次的选项(仅 collection 存在时有效) +- uni-search-bar 修复 vue3 input 事件不生效的bug +- uni-search-bar 修复 多余代码导致的bug +- uni-tooltip 更新 text 属性变更为 content +- uni-tooltip 更新 移除 width 属性 +- uni-tooltip 修复 组件根 text 嵌套组件 warning +## 1.4.14(2022-04-18) +- uni-datetime-picker 修复 Vue3 下动态赋值,单选类型未响应的 bug +- uni-easyinput 修复 默认值不生效的bug +## 1.4.13(2022-04-02) +- uni-calendar 修复 条件编译 nvue 不支持的 css 样式 +- uni-calendar 修复 startDate、 endDate 属性失效的 bug +- uni-data-picker 修复 nvue 不支持的 v-show 的 bug +- uni-data-picker 修复 条件编译 nvue 不支持的 css 样式 +- uni-datetime-picker 修复 Vue3 下动态赋值未响应的 bug +- uni-easyinput 修复 value不能为0的bug +- uni-popup 修复 弹出层内部无法滚动的bug +- uni-popup 修复 小程序中高度错误的bug +- uni-popup 修复 快速调用open出现问题的Bug +- uni-rate 修复 条件判断 `NaN` 错误的 bug +- uni-swipe-action 修复 按钮字体大小不能设置的bug +- uni-swipe-action 修复 h5和app端下报el错误的bug +- uni-swipe-action 修复 HBuilderX 1.4.X 版本中,h5和app端下报错的bug +## 1.4.12(2022-02-19) +- uni-collapse 修复 初始化的时候 ,open 属性失效的bug +- uni-data-checkbox 修复 multiple 为 true 时,v-model 的值为 null 报错的 bug +- uni-icons 优化 size 属性可以传入不带单位的字符串数值 +- uni-icons 优化 size 支持其他单位 +- uni-nav-bar 新增 left-width/right-width属性 ,可修改左右两侧的宽度 +- uni-popup 修复 safeArea 属性不能设置为false的bug +## 1.4.11(2022-01-21) +- uni-collapse 修复 微信小程序resize后组件收起的bug +- uni-countdown 修复 在微信小程序中样式不生效的bug +- uni-countdown 新增 update 方法 ,在动态更新时间后,刷新组件 +- uni-load-more 新增 showText属性 ,是否显示文本 +- uni-load-more 修复 nvue 平台下不显示文本的bug +- uni-load-more 修复 微信小程序平台样式选择器报警告的问题 +- uni-nav-bar 修复 在vue下,标题不垂直居中的bug +- uni-nav-bar 修复 height 属性类型错误 +- uni-nav-bar 新增 height 属性,可修改组件高度 +- uni-nav-bar 新增 dark 属性可可开启暗黑模式 +- uni-nav-bar 优化 标题字数过多显示省略号 +- uni-nav-bar 优化 插槽,插入内容可完全覆盖 +- uni-popup 修复 isMaskClick 失效的bug +- uni-popup 新增 cancelText \ confirmText 属性 ,可自定义文本 +- uni-popup 新增 maskBackgroundColor 属性 ,可以修改蒙版颜色 +- uni-popup 优化 maskClick属性 更新为 isMaskClick ,解决微信小程序警告的问题 + +## 1.4.10(2022-01-17) +- uni-card 修复 在vue页面下略缩图显示不正常的bug +- uni-datetime-picker 修复 clear-icon 属性在小程序平台不生效的 bug +- uni-datetime-picker 修复 日期范围选在小程序平台,必须多点击一次才能取消选中状态的 bug +- uni-fab 更新 组件依赖 +- +- uni-icons 修复 nvue 有些图标不显示的bug,兼容老版本图标 +- uni-icons 优化 示例可复制图标名称 +- uni-nav-bar 修复 color 属性不生效的bug +- uni-popup 修复 设置 safeArea 属性不生效的bug +- uni-popup 优化 组件示例 +- uni-popup 修复 vuedoc 文字错误 +## 1.4.9(2021-11-23) +- uni-ui 修复 vue3中某些scss变量无法找到的问题 +- uni-combox 优化 label、label-width 属性 +- uni-data-picker 修复 由上个版本引发的map、v-model等属性不生效的bug +- uni-file-picker 修复 参数为对象的情况下,url在某些情况显示错误的bug +- uni-icons 优化 兼容旧组件 type 值 +- uni-list 修复 在vue3中to属性在发行应用的时候报错的bug +- uni-scss 修复 vue3中scss语法兼容问题 +- uni-transition 修复 init 方法初始化问题 +## 1.4.8(2021-11-19) +- uni-fab 修复 阴影颜色不正确的bug +## 1.4.7(2021-11-19) +- uni-ui 新增 支持国际化 +- uni-ui 优化 组件UI,并提供设计资源,详见:[https://uniapp.dcloud.io/component/uniui/resource](https://uniapp.dcloud.io/component/uniui/resource) +- uni-ui 文档迁移,详见:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) +- uni-badge 修改 size 属性默认值调整为 small +- uni-badge 修改 type 属性,默认值调整为 error,info 替换 default +- uni-badge 修复 在字节小程序上样式不生效的 bug +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-card 重构插槽的用法 ,header 替换为 title +- uni-card 新增 actions 插槽 +- uni-card 新增 cover 封面图属性和插槽 +- uni-card 新增 padding 内容默认内边距离 +- uni-card 新增 margin 卡片默认外边距离 +- uni-card 新增 spacing 卡片默认内边距 +- uni-card 新增 shadow 卡片阴影属性 +- uni-card 取消 mode 属性,可使用组合插槽代替 +- uni-card 取消 note 属性 ,使用actions插槽代替 +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-countdown 新增 font-size 支持自定义字体大小 +- uni-data-checkbox 修复 在uni-forms中 modelValue 中不存在当前字段,当前字段必填写也不参与校验的问题 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 优化 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 修复 hide-second 在移动端的 bug +- uni-datetime-picker 修复 单选赋默认值时,赋值日期未高亮的 bug +- uni-datetime-picker 修复 赋默认值时,移动端未正确显示时间的 bug +- uni-datetime-picker 新增 hide-second 属性,支持只使用时分,隐藏秒 +- uni-datetime-picker 优化 取消选中时(范围选)直接开始下一次选择, 避免多点一次 +- uni-datetime-picker 优化 移动端支持清除按钮,同时支持通过 ref 调用组件的 clear 方法 +- uni-datetime-picker 优化 调整字号大小,美化日历界面 +- uni-datetime-picker 优化 范围选择器在 pc 端过宽的问题 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 新增 参数中返回 fileID 字段 +- uni-file-picker 修复 腾讯云传入fileID 不能回显的bug +- uni-file-picker 修复 选择图片后,不能放大的问题 +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 label 插槽不生效的bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-icons 新增 更多图标 +- uni-icons 优化 自定义图标使用方式 +- uni-link 修复 在 nvue 下不显示的 bug +- uni-pagination 修复 current 、value 属性未监听,导致高亮样式失效的 bug +- uni-rate 优化 默认值修改为 0 颗星 +- uni-search-bar 修复 value 属性与 modelValue 属性不兼容的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +- uni-tag 新增 提供组件设计资源,组件样式调整 +- uni-tag 移除 插槽 +- uni-tag 移除 type 属性的 royal 选项 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.4.2(2021-08-20) +- 新增 uni-ui 组件支持国际化 i18n +- uni-collapse 优化 show-arrow 属性默认为true +- uni-collapse 新增 show-arrow 属性,控制是否显示右侧箭头 +- uni-data-checkbox 修复 单选 list 模式下 ,icon 为 left 时,选中图标不显示的问题 +- uni-easyinput 修复 在 uni-forms 的动态表单中默认值校验不通过的 bug +- uni-file-picker 修复 由于 0.2.11 版本引起的不能回显图片的Bug +- uni-file-picker 新增 clearFiles(index) 方法,可以手动删除指定文件 +- uni-file-picker 修复 v-model 值设为 null 报错的Bug +- uni-swipe-action 新增 close-all 方法,关闭所有已打开的组件 +- uni-swipe-action 新增 resize() 方法,在非微信小程序、h5、app-vue端出现不能滑动的问题的时候,重置组件 +- uni-swipe-action 修复 app 端偶尔出现类似 Page[x][-x,xx;-x,xx,x,x-x] 的问题 +- uni-swipe-action 优化 微信小程序、h5、app-vue 滑动逻辑,避免出现动态新增组件后不能滑动的问题 +## 1.4.0(2021-08-13) +- uni-calendar 修复 弹出层被 tabbar 遮盖 bug +- uni-data-checkbox 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-dateformat 调整 默认时间不再是当前时间,而是显示'-'字符 +- uni-datetime-picker 新增 适配 vue3 +- uni-datetime-picker 新增 支持作为 uni-forms 子组件相关功能 +- uni-datetime-picker 修复 在 uni-forms 中使用时,选择时间报 NAN 错误的 bug +- uni-datetime-picker 修复 type 属性动态赋值无效的 bug +- uni-datetime-picker 修复 ‘确认’按钮被 tabbar 遮盖 bug +- uni-datetime-picker 修复 组件未赋值时范围选左、右日历相同的 bug +- uni-datetime-picker 修复 范围选未正确显示当前值的 bug +- uni-datetime-picker 修复 h5 平台(移动端)报错 'cale' of undefined 的 bug +- uni-easyinput 修复 在 uni-forms 中重置表单,错误信息无法清除的问题 +- uni-file-picker 修复 return-type="object" 时,无法删除文件的Bug +- uni-file-picker 修复 auto-upload 属性失效的Bug +- uni-forms 修复 没有添加校验规则的字段依然报错的Bug +- uni-forms 修复 重置表单错误信息无法清除的问题 +- uni-forms 优化 组件文档 +- uni-forms 修复 表单验证只生效一次的问题 +- uni-tag type 不是 default 时,size 为 small 字体大小显示不正确 +## 1.3.9(2021-08-02) +- uni-datetime-picker 新增 return-type 属性支持返回 date 日期对象 +- uni-file-picker 修复 fileExtname属性不指定值报错的Bug +- uni-file-picker 修复 在某种场景下图片不回显的Bug +- uni-link 支持自定义插槽 +## 1.3.8(2021-07-31) +- uni-ui 组件兼容 vue3 +- uni-collapse 修复 由1.2.0版本引起的 change 事件返回 undefined 的Bug +- uni-collapse 优化 组件示例 +- uni-collapse 新增 组件折叠动画 +- uni-collapse 新增 value\v-model 属性 ,动态修改面板折叠状态 +- uni-collapse 新增 title 插槽 ,可定义面板标题 +- uni-collapse 新增 border 属性 ,显示隐藏面板内容分隔线 +- uni-collapse 新增 title-border 属性 ,显示隐藏面板标题分隔线 +- uni-collapse 修复 resize 方法失效的Bug +- uni-collapse 修复 change 事件返回参数不正确的Bug +- uni-collapse 优化 H5、App 平台自动更具内容更新高度,无需调用 reszie() 方法 +- uni-data-checkbox 优化 在uni-forms组件,与label不对齐的问题 +- uni-data-checkbox 修复 单选默认值为0不能选中的Bug +- uni-easyinput 优化 errorMessage 属性支持 Boolean 类型 +- uni-file-picker 修复 return-type为object下,返回值不正确的Bug +- uni-file-picker 修复(重要) H5 平台下如果和uni-forms组件一同使用导致页面卡死的问题 +- uni-file-picker 优化 h5平台下上传文件导致页面卡死的问题 +- uni-forms 修复 vue2 下条件编译导致destroyed生命周期失效的Bug +- uni-forms 修复 1.2.1 引起的示例在小程序平台报错的Bug +- uni-forms 修复 动态校验表单,默认值为空的情况下校验失效的Bug +- uni-forms 修复 不指定name属性时,运行报错的Bug +- uni-forms 优化 label默认宽度从65调整至70,使required为true且四字时不换行 +- uni-forms 优化 组件示例,新增动态校验示例代码 +- uni-forms 优化 组件文档,使用方式更清晰 +- uni-list 修复 与其他组件嵌套使用时,点击失效的Bug +- uni-swipe-action 修复 跨页面修改组件数据 ,导致不能滑动的问题 +## 1.3.7(2021-07-16) +- uni-ui 兼容 vue3,如何创建vue3项目,详见 [uni-app 项目支持 vue3 介绍](https://ask.dcloud.net.cn/article/37834) +- uni-datetime-picker 修复 单选日期类型,初始赋值后不在当前日历的 bug +- uni-datetime-picker 新增 clearIcon 属性,显示框的清空按钮可配置显示隐藏(仅 pc 有效) +- uni-datetime-picker 优化 移动端移除显示框的清空按钮,无实际用途 +- uni-datetime-picker 修复 组件赋值为空,界面未更新的 bug +- uni-datetime-picker 修复 start 和 end 不能动态赋值的 bug +- uni-datetime-picker 修复 范围选类型,用户选择后再次选择右侧日历(结束日期)显示不正确的 bug +## 1.3.6(2021-07-09) +- uni-data-checkbox 优化 删除无用日志 +- uni-data-checkbox 修复 由 0.1.9 引起的非 nvue 端图标不显示的问题 +- uni-data-checkbox 修复 nvue 黑框样式问题 +- uni-datetime-picker 修复 范围选择不能动态赋值的 bug +- uni-datetime-picker 修复 范围选择的初始时间在一个月内时,造成无法选择的bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘定位不准确的问题 +- uni-datetime-picker 修复 范围起始点样式的背景色与今日样式的字体前景色融合,导致日期字体看不清的 bug +- uni-datetime-picker 优化 弹出层在超出视窗边缘被遮盖的问题 +- uni-datetime-picker 新增 maskClick 事件 +- uni-datetime-picker 修复 特殊情况日历 rpx 布局错误的 bug,rpx -> px +- uni-datetime-picker 修复 范围选择时清空返回值不合理的bug,['', ''] -> [] +- uni-datetime-picker 新增 日期时间显示框支持插槽 +- uni-file-picker 修复 sourceType 缺少默认值导致 ios 无法选择文件 +- uni-file-picker 优化 解耦与uniCloud的强绑定关系 ,如不绑定服务空间,默认autoUpload为false且不可更改 +- uni-table 新增 uni-th 支持 date 日期筛选范围 +- uni-table 新增 uni-th 支持 range 筛选范围 +- uni-table 新增 uni-th 筛选功能 +## 1.3.5(2021-07-02) +- uni-card 优化 图文卡片无图片加载时,提供占位图标 +- uni-card 新增 header 插槽,自定义卡片头部( 图文卡片 mode="style" 时,不支持) +- uni-card 修复 thumbnail 不存在仍然占位的 bug +- uni-data-checkbox 修复 selectedTextColor 属性不生效的Bug +- uni-datetime-picker 优化 添加 uni-icons 依赖 +- uni-easyinput 修复 confirmType 属性(仅 type="text" 生效)导致多行文本框无法换行的 bug +- uni-file-picker 修复 由 0.0.10 版本引发的 returnType 属性失效的问题 +- uni-file-picker 优化 文件上传后进度条消失时机 +- uni-file-picker 修复 在uni-forms 中,删除文件 ,获取的值不对的Bug +- uni-forms 修复 pattern 属性在微信小程序平台无效的问题 +## 1.3.4(2021-06-25) +- uni-badge 优化 示例项目 +- uni-countdown 修复 uni-countdown 重复赋值跳两秒的 bug +- uni-easyinput 修复 passwordIcon 属性拼写错误的 bug +- uni-forms 修复 validate-trigger属性为submit且err-show-type属性为toast时不能弹出的Bug +- uni-forms 修复 只写setRules方法而导致校验不生效的Bug +- uni-forms 修复 由上个办法引发的错误提示文字错位的Bug +- uni-forms 修复 不设置 label 属性 ,无法设置label插槽的问题 +- uni-forms 修复 不设置label属性,label-width属性不生效的bug +- uni-forms 修复 setRules 方法与rules属性冲突的问题 +- uni-link 新增 download 属性,H5平台下载文件名 +- uni-popup 新增 mask-click 遮罩层点击事件 +- uni-popup 修复 nvue 平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-tag 修复 uni-tag 在字节跳动小程序上 css 类名编译错误的 bug +## 1.3.3(2021-06-18) +- uni-easyinput 新增 passwordIcon 属性,当type=password时是否显示小眼睛图标 +- uni-easyinput 修复 confirmType 属性不生效的问题 +- uni-easyinput 修复 disabled 状态可清出内容的 bug +- uni-file-picker 修复 删除文件时无法触发 v-model 的Bug +- uni-popup 修复 H5平台中间弹出后,点击内容,再点击遮罩无法关闭的Bug +- uni-popup 修复 错误的 watch 字段 +- uni-popup 修复 safeArea 属性不生效的问题 +- uni-popup 修复 点击内容,再点击遮罩无法关闭的Bug +## 1.3.2(2021-06-04) +- uni-data-checkbox 新增 map 属性,可以方便映射text/value属性 +- uni-data-checkbox 修复 不关联服务空间的情况下组件报错的Bug +- uni-data-picker 修复 上个版本引出的本地数据无法选择带有children的2级节点 +- uni-forms 修复 动态删减数据导致报错的问题 +- uni-forms 新增 modelValue 属性 ,value 即将废弃 +- uni-forms 新增 uni-forms-item 可以设置单独的 rules +- uni-forms 新增 validate 事件增加 keepitem 参数,可以选择那些字段不过滤 +- uni-forms 优化 submit 事件重命名为 validate +- uni-data-picker 修复 无法加载云端数据的问题 +- uni-data-picker 修复 v-model无效问题 +- uni-data-picker 修复 loaddata 为空数据组时加载时间过长问题 +- uni-datetime-picker 修复 图标在小程序上不显示的 bug +- uni-datetime-picker 优化 重命名引用组件,避免潜在组件命名冲突 +- uni-datetime-picker 优化 代码目录扁平化 +- uni-tag 修复 未定义 sass 变量 "$uni-color-royal" 的bug +## 1.3.1(2021-05-14) +- uni-badge 新增 uni-badge 的 absolute 属性,支持定位 +- uni-badge 新增 uni-badge 的 offset 属性,支持定位偏移 +- uni-badge 新增 uni-badge 的 is-dot 属性,支持仅显示有一个小点 +- uni-badge 新增 uni-badge 的 max-num 属性,支持自定义封顶的数字值,超过 99 显示99+ +- uni-badge 优化 uni-badge 属性 custom-style, 支持以对象形式自定义样式 +- uni-badge 修复 uni-badge 在 App 端,数字小于10时不是圆形的bug +- uni-badge 修复 uni-badge 在父元素不是 flex 布局时,宽度缩小的bug +- uni-badge 新增 uni-badge 属性 custom-style, 支持自定义样式 +- uni-datetime-picker 修复 ios 下不识别 '-' 日期格式的 bug +- uni-datetime-picker 优化 pc 下弹出层添加边框和阴影 +- uni-datetime-picker 修复 在 admin 中获取弹出层定位错误的bug +- uni-datetime-picker 修复 type 属性向下兼容,默认值从 date 变更为 datetime +- uni-datetime-picker 支持日历形式的日期+时间的范围选择 +- uni-steps 修复 uni-steps 横向布局时,多行文字高度不合理的 bug +- uni-countdown 修复 uni-countdown 不能控制倒计时的 bug +- uni-tag 修复 royal 类型无效的bug +- uni-tag 修复 uni-tag 宽度不自适应的bug +- uni-tag 新增 uni-tag 支持属性 custom-style 自定义样式 +- uni-link 新增 href 属性支持 tel:|mailto: +- uni-popup 修复 组件内放置 input 、textarea 组件,无法聚焦的问题 +- uni-popup 新增 type 属性的 left\right 值,支持左右弹出 +- uni-popup 新增 open(String:type) 方法参数 ,可以省略 type 属性 ,直接传入类型打开指定弹窗 +- uni-popup 新增 backgroundColor 属性,可定义主窗口背景色,默认不显示背景色 +- uni-popup 新增 safeArea 属性,是否适配底部安全区 +- uni-popup 修复 App\h5\微信小程序底部安全区占位不对的Bug +- uni-popup 修复 App 端弹出等待的Bug +- uni-popup 优化 提升低配设备性能,优化动画卡顿问题 +- uni-popup 优化 更简单的组件自定义方式 +- uni-table 修复 示例项目缺少组件的Bug +- uni-forms 修复 自定义检验器失效的问题 +- uni-title 修复 示例项目缺少组件的Bug +- uni-transition 修复 示例项目缺少组件的Bug +- uni-swiper-dot 修复 示例项目缺少组件的Bug +- uni-ui 新增 组件示例地址 +## 1.3.0(2021-04-23) +- uni-combox 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-data-picker 修复 非树形数据有 where 属性查询报错的问题 +- uni-fav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-goods-nav 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-nav-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-notice-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-number-box 修复 uni-number-box 浮点数运算不精确的 bug +- uni-number-box 修复 uni-number-box change 事件触发不正确的 bug +- uni-number-box 新增 uni-number-box v-model 双向绑定 +- uni-rate 修复 布局变化后 uni-rate 星星计算不准确的 bug +- uni-rate 优化 添加依赖 uni-icons, 导入 uni-rate 自动下载依赖 +- uni-search-bar 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-steps 优化 添加依赖 uni-icons, 导入后自动下载依赖 +- uni-transition 新增 通过方法自定义动画 +- uni-transition 新增 custom-class 非 NVUE 平台支持自定义 class 定制样式 +- uni-transition 优化 动画触发逻辑,使动画更流畅 +- uni-transition 优化 支持单独的动画类型 +- uni-transition 优化 文档示例 +## 1.2.13(2021-04-16) +- uni-ui 新增 uni-data-picker 支持云端非树形表结构数据 +- uni-ui 修复 uni-data-checkbox nvue 下无法选中的问题 +- uni-ui 修复 uni-data-picker 根节点 parent_field 字段等于null时选择界面错乱问题 +- uni-ui 修复 uni-file-picker 选择的文件非 file-extname 字段指定的扩展名报错的Bug +- uni-ui 修复 uni-swipe-action 报错 nv_navigator is not defined 的bug +- uni-ui 修复 uni-load-more 在首页使用时,h5 平台报 'uni is not defined' 的 bug +- uni-ui 优化 uni-file-picker file-extname 字段支持字符串写法,多个扩展名需要用逗号分隔 +- uni-ui 优化 uni-pagination PC 和 移动端适配不同的 ui +- uni-ui 更新 uni-file-picker 组件示例 +- uni-ui 修复 uni-nav-bar 当 fixed 属性为 true 时铺不满屏幕的 bug +- uni-ui 新增 uni-search-bar 的 focus 事件 +- uni-ui 修复 uni-rate 属性 margin 值为 string 组件失效的 bug +- uni-data-picker 修复 本地数据概率无法回显时问题 +- uni-table 新增 sortable 属性,是否开启单列排序 +- uni-table 优化 表格多选逻辑 +## 1.2.12(2021-03-23) +- uni-ui 新增 uni-datetime-picker 的 hide-second 属性、border 属性; +- uni-ui 修复 uni-datetime-picker 选择跟显示的日期不一样的 bug, +- uni-ui 修复 uni-datetime-picker change事件触发2次的 bug +- uni-ui 修复 uni-datetime-picker 分、秒 end 范围错误的 bug +- uni-ui 新增 uni-tr selectable 属性,用于 type=selection 时,设置某行是否可由全选按钮控制 +- uni-ui 新增 uni-data-checkbox 新增 disabled属性,支持nvue +- uni-ui 优化 uni-data-checkbox 无选项时提示“暂无数据” +- uni-ui 优化 uni-data-checkbox 默认颜色显示 +- uni-ui 新增 uni-link href 属性支持 tel:|mailto: +- uni-ui 新增 uni-table 示例demo +- uni-ui 修复 uni-data-picker 微信小程序某些情况下无法选择的问题,事件无法触发的问题 +- uni-ui 修复 uni-nav-bar easycom 下,找不到 uni-status-bar 的bug +- uni-ui 修复 uni-easyinput 示例在 qq 小程序上的bug +- uni-ui 修复 uni-forms 动态显示uni-forms-item的情况下,submit 方法获取值错误的Bug +- uni-ui 调整 cli 项目 建议使用 easycom 方式引用组件,如使用按需引用,需手动维护组件内部引用 + +## 1.2.11(2021-02-24) +- 调整为uni_modules目录规范 +- uni-data-picker 新增 数据驱动的picker选择器 +- uni-file-picker 新增 文件选择上传 +- uni-row 新增 栅格系统 +- uni-data-checkbox 优化 支持 nvue +- uni-forms 修复 偶发性获取表单值错误的Bug +- uni-forms 修复 校验 uni-data-picker value 为 0 时,返回值错误的Bug +- uni-forms 修复 uni-forms-item 组件隐藏时依然触发校验的bug +- uni-forms 优化 实时校验 +- uni-forms 优化 兼容nvue页面 +- uni-easyinput 优化 兼容nvue页面 +- uni-group 优化 兼容nvue页面 +- uni-popup 优化 组件适配 PC +- uni-fab 优化 适配 PC +- uni-swiper-dot 优化 适配 PC +- uni-rate 优化 适配 PC +- uni-notice-bar 优化 适配 PC +- uni-indexed-list 优化 适配 PC +- uni-combox 优化 适配 PC +- uni-transition 优化 适配 PC +- uni-nav-bar 优化 适配 PC +- uni-swipe-action 优化 适配 PC diff --git a/src/uni_modules/uni-ui/components/uni-ui/uni-ui.vue b/src/uni_modules/uni-ui/components/uni-ui/uni-ui.vue new file mode 100644 index 0000000..0970892 --- /dev/null +++ b/src/uni_modules/uni-ui/components/uni-ui/uni-ui.vue @@ -0,0 +1,7 @@ + + + diff --git a/src/uni_modules/uni-ui/package.json b/src/uni_modules/uni-ui/package.json new file mode 100644 index 0000000..3001aab --- /dev/null +++ b/src/uni_modules/uni-ui/package.json @@ -0,0 +1,132 @@ +{ + "id": "uni-ui", + "displayName": "uni-ui", + "version": "1.5.7", + "description": "uni-ui 是基于uni-app的、全端兼容的、高性能UI框架", + "keywords": [ + "uni-ui", + "uniui", + "UI组件库", + "ui框架", + "ui库" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.10" + }, + "directories": { + "example": "../../temps/example_temps" + }, + "dcloudext": { + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "https://www.npmjs.com/package/@dcloudio/uni-ui", + "type": "component-vue" + }, + "uni_modules": { + "dependencies": [ + "uni-badge", + "uni-calendar", + "uni-card", + "uni-collapse", + "uni-combox", + "uni-countdown", + "uni-data-checkbox", + "uni-data-picker", + "uni-data-select", + "uni-dateformat", + "uni-datetime-picker", + "uni-drawer", + "uni-easyinput", + "uni-fab", + "uni-fav", + "uni-file-picker", + "uni-forms", + "uni-goods-nav", + "uni-grid", + "uni-group", + "uni-icons", + "uni-indexed-list", + "uni-link", + "uni-list", + "uni-load-more", + "uni-nav-bar", + "uni-notice-bar", + "uni-number-box", + "uni-pagination", + "uni-popup", + "uni-rate", + "uni-row", + "uni-search-bar", + "uni-section", + "uni-segmented-control", + "uni-steps", + "uni-swipe-action", + "uni-swiper-dot", + "uni-table", + "uni-tag", + "uni-title", + "uni-tooltip", + "uni-transition" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "y", + "aliyun": "y", + "alipay": "n" + }, + "client": { + "App": { + "app-vue": "y", + "app-nvue": "y", + "app-harmony": "u", + "app-uvue": "u" + }, + "H5-mobile": { + "Safari": "y", + "Android Browser": "y", + "微信浏览器(Android)": "y", + "QQ浏览器(Android)": "y" + }, + "H5-pc": { + "Chrome": "y", + "IE": "y", + "Edge": "y", + "Firefox": "y", + "Safari": "y" + }, + "小程序": { + "微信": "y", + "阿里": "y", + "百度": "y", + "字节跳动": "y", + "QQ": "y", + "京东": "u" + }, + "快应用": { + "华为": "u", + "联盟": "u" + }, + "Vue": { + "vue2": "y", + "vue3": "y" + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/uni-ui/readme.md b/src/uni_modules/uni-ui/readme.md new file mode 100644 index 0000000..23f8456 --- /dev/null +++ b/src/uni_modules/uni-ui/readme.md @@ -0,0 +1,247 @@ +> 当前插件不包含示例页面 ,如需示例请在 HBuiderX 中新建 `hello uni-app > 扩展组件` 中查看 +> +> 代码示例地址 :[https://ext.dcloud.net.cn/plugin?id=4941](https://ext.dcloud.net.cn/plugin?id=4941) +> +> 组件演示地址:[https://hellouniapp.dcloud.net.cn](https://hellouniapp.dcloud.net.cn/pages/extUI/badge/badge) +> +> 组件文档地址:[https://uniapp.dcloud.io/component/uniui/uni-ui](https://uniapp.dcloud.io/component/uniui/uni-ui) + +# uni-ui 介绍 + +## uni-ui产品特点 + +### 1. 高性能 + +目前为止,在小程序和混合app领域,暂时还没有比 `uni-ui` 更高性能的框架。 +- 自动差量更新数据 + +虽然uni-app支持小程序自定义组件,所有小程序的ui库都可以用。但小程序自定义组件的ui库都需要使用setData手动更新数据,在大数据量时、或高频更新数据时,很容易产生性能问题。 + +而 `uni-ui` 属于vue组件,uni-app引擎底层自动diff更新数据。当然其实插件市场里众多vue组件都具备这个特点。 +- 优化逻辑层和视图层通讯折损 + +非H5,不管是小程序还是App,不管是app的webview渲染还是原生渲染,全都是逻辑层和视图层分离的。这里就有一个逻辑层和视图层通讯的折损问题。 +比如在视图层拖动一个可跟手的组件,由于通讯的损耗,用js监听很难做到实时跟手。 + +这时就需要使用css动画以及平台底层提供的wxs、bindingx等技术。不过这些技术都比较复杂,所以 `uni-ui` 里做了封装,在需要跟手式操作的ui组件,比如swiperaction列表项左滑菜单,就在底层使用了这些技术,实现了高性能的交互体验 +- 背景停止 + +很多ui组件是会一直动的,比如轮播图、跑马灯。即便这个窗体被新窗体挡住,它在背景层仍然在消耗着硬件资源。在Android的webview版本为chrome66以上,背景操作ui会引发很严重的性能问题,造成前台界面明显卡顿。 + +而 `uni-ui` 的组件,会自动判断自己的显示状态,在组件不再可见时,不会再消耗硬件资源。 + +### 2. 全端 + + `uni-ui` 的组件都是多端自适应的,底层会抹平很多小程序平台的差异或bug。 + +比如导航栏navbar组件,会自动处理不同端的状态栏。 +比如swiperaction组件,在app和微信小程序上会使用交互体验更好的wxs技术,但在不支持wxs的其他小程序端会使用js模拟类似效果。 + + `uni-ui` 还支持nvue原生渲染,[详见](https://github.com/dcloudio/uni-ui/tree/nvue-uni-ui) + +未来 `uni-ui` 还会支持pc等大屏设备。 + +### 3. 与uni统计自动集成实现免打点 + +uni统计是优秀的多端统计平台,见[tongji.dcloud.net.cn](https://tongji.dcloud.net.cn)。 + +除了一张报表看全端,它的另一个重要特点是免打点。 +比如使用 `uni-ui` 的navbar标题栏、收藏、购物车等组件,均可实现自动打点,统计页面标题等各种行为数据。 +当然你也可以关闭uni统计,这不是强制的。 + +### 4. 主题扩展 + + `uni-ui` 支持[uni.scss](https://uniapp.dcloud.io/collocation/uni-scss),可以方便的切换App的风格。 + +ui是一种需求非常发散的产品,DCloud官方也无意用 `uni-ui` 压制第三方ui插件的空间,但官方有义务在性能和多端方面提供一个开源的标杆给大家。 + +我们欢迎更多优秀的ui组件出现,也欢迎更多人贡献 `uni-ui` 的主题风格,满足更多用户的需求。 + + +## 快速开始 + +uni-ui支持 HBuilderX直接新建项目模板、npm安装和单独导入个别组件等多种使用方式 + +### 在HBuilderX 新建uni-app项目的模板中,选择uni-ui模板 +![HBuilderX内创建uni-ui项目](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/create-uni-ui-project.jpg) + +由于uni-app独特的[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)技术,可以免引用、注册,直接使用各种符合规则的vue组件。 + +在代码区键入`u`,拉出各种内置或uni-ui的组件列表,选择其中一个,即可使用该组件。 + +光标放在组件名称上,按F1,可以查阅组件的文档。 + +![uni-ui代码块](https://img.cdn.aliyun.dcloud.net.cn/uni-app/doc/uni-ui-snippet.jpg) + +### 通过 uni_modules 单独安装组件 +如果你没有创建uni-ui项目模板,也可以在你的工程里,通过 uni_modules 单独安装需要的某个组件。下表为uni-ui的扩展组件清单,点击每个组件在详情页面可以导入组件到项目下,导入后直接使用即可,无需import和注册。 + +|组件名|组件说明| +|---|---| +|uni-badge|[数字角标](https://ext.dcloud.net.cn/plugin?name=uni-badge)| +|uni-calendar|[日历](https://ext.dcloud.net.cn/plugin?name=uni-calendar)| +|uni-card|[卡片](https://ext.dcloud.net.cn/plugin?name=uni-card)| +|uni-collapse|[折叠面板](https://ext.dcloud.net.cn/plugin?name=uni-collapse)| +|uni-combox|[组合框](https://ext.dcloud.net.cn/plugin?name=uni-combox)| +|uni-countdown|[倒计时](https://ext.dcloud.net.cn/plugin?name=uni-countdown)| +|uni-data-checkbox|[数据选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-checkbox)| +|uni-data-picker|[数据驱动的picker选择器](https://ext.dcloud.net.cn/plugin?name=uni-data-picker)| +|uni-dateformat|[日期格式化](https://ext.dcloud.net.cn/plugin?name=uni-dateformat)| +|uni-datetime-picker|[日期选择器](https://ext.dcloud.net.cn/plugin?name=uni-datetime-picker)| +|uni-drawer|[抽屉](https://ext.dcloud.net.cn/plugin?name=uni-drawer)| +|uni-easyinput|[增强输入框](https://ext.dcloud.net.cn/plugin?name=uni-easyinput)| +|uni-fab|[悬浮按钮](https://ext.dcloud.net.cn/plugin?name=uni-fab)| +|uni-fav|[收藏按钮](https://ext.dcloud.net.cn/plugin?name=uni-fav)| +|uni-file-picker|[文件选择上传](https://ext.dcloud.net.cn/plugin?name=uni-file-picker)| +|uni-forms|[表单](https://ext.dcloud.net.cn/plugin?name=uni-forms)| +|uni-goods-nav|[商品导航](https://ext.dcloud.net.cn/plugin?name=uni-goods-nav)| +|uni-grid|[宫格](https://ext.dcloud.net.cn/plugin?name=uni-grid)| +|uni-group|[分组](https://ext.dcloud.net.cn/plugin?name=uni-group)| +|uni-icons|[图标](https://ext.dcloud.net.cn/plugin?name=uni-icons)| +|uni-indexed-list|[索引列表](https://ext.dcloud.net.cn/plugin?name=uni-indexed-list)| +|uni-link|[超链接](https://ext.dcloud.net.cn/plugin?name=uni-link)| +|uni-list|[列表](https://ext.dcloud.net.cn/plugin?name=uni-list)| +|uni-load-more|[加载更多](https://ext.dcloud.net.cn/plugin?name=uni-load-more)| +|uni-nav-bar|[自定义导航栏](https://ext.dcloud.net.cn/plugin?name=uni-nav-bar)| +|uni-notice-bar|[通告栏](https://ext.dcloud.net.cn/plugin?name=uni-notice-bar)| +|uni-number-box|[数字输入框](https://ext.dcloud.net.cn/plugin?name=uni-number-box)| +|uni-pagination|[分页器](https://ext.dcloud.net.cn/plugin?name=uni-pagination)| +|uni-popup|[弹出层](https://ext.dcloud.net.cn/plugin?name=uni-popup)| +|uni-rate|[评分](https://ext.dcloud.net.cn/plugin?name=uni-rate)| +|uni-row|[布局-行](https://ext.dcloud.net.cn/plugin?name=uni-row)| +|uni-search-bar|[搜索栏](https://ext.dcloud.net.cn/plugin?name=uni-search-bar)| +|uni-segmented-control|[分段器](https://ext.dcloud.net.cn/plugin?name=uni-segmented-control)| +|uni-steps|[步骤条](https://ext.dcloud.net.cn/plugin?name=uni-steps)| +|uni-swipe-action|[滑动操作](https://ext.dcloud.net.cn/plugin?name=uni-swipe-action)| +|uni-swiper-dot|[轮播图指示点](https://ext.dcloud.net.cn/plugin?name=uni-swiper-dot)| +|uni-table|[表格](https://ext.dcloud.net.cn/plugin?name=uni-table)| +|uni-tag|[标签](https://ext.dcloud.net.cn/plugin?name=uni-tag)| +|uni-title|[章节标题](https://ext.dcloud.net.cn/plugin?name=uni-title)| +|uni-transition|[过渡动画](https://ext.dcloud.net.cn/plugin?name=uni-transition)| + + +使用 `uni_modules` 方式安装组件库,可以直接通过插件市场导入,通过右键菜单快速更新组件,不需要引用、注册,直接在页面中使用 `uni-ui` 组件。[点击安装 uni-ui 组件库](https://ext.dcloud.net.cn/plugin?id=55) + +**注意:下载最新的组件目前仅支持 uni_modules ,非 uni_modules 版本最高支持到组件的1.2.10版本** + +如不能升级到 `uni_modules` 版本,可以使用 `uni_modules` 安装好对应组件,将组件拷贝到对应目录。 + +例如需更新 `uni-list`和`uni-badge` ,将 `uni_modules>uni-list>components`和`uni_modules>uni-badege>components`下所有目录拷贝到如下目录即可: + + +**目录示例** + +```json +┌─components 组件目录 +│ ├─uni-list list 列表目录 +│ │ └─uni-list.vue list 组件文件 +│ ├─uni-list-item list-item 列表目录 +│ │ └─uni-list-item.vue list 组件文件 +│ ├─uni-badge badge 角标目录 +│ │ └─uni-badge.vue badge 组件文件 +│ └─ //.... 更多组件文件 +├─pages 业务页面文件存放的目录 +│ ├─index +│ │ └─index.vue index示例页面 +├─main.js Vue初始化入口文件 +├─App.vue 应用配置,用来配置App全局样式以及监听 应用生命周期 +├─manifest.json 配置应用名称、appid、logo、版本等打包信息,详见 +└─pages.json 配置页 + +``` + +### 通过 `uni_modules` 导入全部组件 +如果想一次把所有uni-ui组件导入到项目中,只需要导入一个 `uni-ui` 组件即可 [点击去导入](https://ext.dcloud.net.cn/plugin?id=55)。 + +如果没有自动导入其他组件,可以在 uni-ui 组件目录上右键选择 `安装三方插件依赖` 即可。 + + + +### npm安装 +在 `vue-cli` 项目中可以使用 `npm` 安装 `uni-ui` 库 ,或者直接在 `HBuilderX` 项目中使用 `npm` 。 + +> **注意** +> cli 项目默认是不编译 `node_modules` 下的组件的,导致条件编译等功能失效 ,导致组件异常 +> 需要在根目录创建 `vue.config.js` 文件 ,增加 `@dcloudio/uni-ui` 包的编译即可正常 +> ```javascript +> // vue.config.js +> module.exports = { +> transpileDependencies:['@dcloudio/uni-ui'] +> } +> ``` + + + +**准备 sass** + +`vue-cli` 项目请先安装 sass 及 sass-loader,如在 HBuliderX 中使用,可跳过此步。 + +- 安装 sass +``` + npm i sass -D 或 yarn add sass -D +``` + +- 安装 sass-loader +``` +npm i sass-loader@10.1.1 -D 或 yarn add sass-loader@10.1.1 -D +``` + +> 如果 `node` 版本小于 16 ,sass-loader 请使用低于 @11.0.0 的版本,[sass-loader@11.0.0 不支持 vue@2.6.12 ](https://stackoverflow.com/questions/66082397/typeerror-this-getoptions-is-not-a-function) +> 如果 `node` 版本大于 16 , `sass-loader` 建议使用 `v8.x` 版本 + +**安装 uni-ui** + +``` +npm i @dcloudio/uni-ui 或 yarn add @dcloudio/uni-ui +``` + + + +**配置easycom** + +使用 `npm` 安装好 `uni-ui` 之后,需要配置 `easycom` 规则,让 `npm` 安装的组件支持 `easycom` + +打开项目根目录下的 `pages.json` 并添加 `easycom` 节点: + +```javascript +// pages.json +{ + "easycom": { + "autoscan": true, + "custom": { + // uni-ui 规则如下配置 + "^uni-(.*)": "@dcloudio/uni-ui/lib/uni-$1/uni-$1.vue" + } + }, + + // 其他内容 + pages:[ + // ... + ] +} + +``` + +在 ``template`` 中使用组件: + +```html + + + +``` + + **注意** + - uni-ui 现在只推荐使用 `easycom` ,如自己引用组件,可能会出现组件找不到的问题 + - 使用 npm 安装的组件,默认情况下 babel-loader 会忽略所有 node_modules 中的文件 ,导致条件编译失效,需要通过配置 `vue.config.js` 解决: + ```javascript + // 在根目录创建 vue.config.js 文件,并配置如下 + module.exports = { + transpileDependencies: ['@dcloudio/uni-ui'] + } + ``` + - uni-ui 是uni-app内置组件的扩展。注意与web开发不同,uni-ui不包括基础组件,它是基础组件的补充。web开发中有的开发者习惯用一个ui库完成所有开发,但在uni-app体系中,推荐开发者首先使用性能更高的基础组件,然后按需引入必要的扩展组件。 + - `uni-ui` 不支持使用 `Vue.use()` 的方式安装 + + +### 贡献代码 +在使用 `uni-ui` 中,如遇到无法解决的问题,请提 [Issues](https://github.com/dcloudio/uni-ui/issues) 给我们,假如您有更好的点子或更好的实现方式,也欢迎给我们提交 [PR](https://github.com/dcloudio/uni-ui/pulls) \ No newline at end of file diff --git a/src/uni_modules/uv-parse/changelog.md b/src/uni_modules/uv-parse/changelog.md new file mode 100644 index 0000000..4575e07 --- /dev/null +++ b/src/uni_modules/uv-parse/changelog.md @@ -0,0 +1,13 @@ +## 1.0.4(2023-07-17) +1. 优化文档 +2. 优化其他 +## 1.0.3(2023-06-19) +1. 修复nvue模式下不显示的BUG +## 1.0.2(2023-06-02) +1. 修复可能存在的BUG +2. 优化 +## 1.0.1(2023-05-16) +1. 优化组件依赖,修改后无需全局引入,组件导入即可使用 +2. 优化部分功能 +## 1.0.0(2023-05-10) +uv-parse 富文本解析器 diff --git a/src/uni_modules/uv-parse/components/uv-parse/node/node.vue b/src/uni_modules/uv-parse/components/uv-parse/node/node.vue new file mode 100644 index 0000000..5857077 --- /dev/null +++ b/src/uni_modules/uv-parse/components/uv-parse/node/node.vue @@ -0,0 +1,576 @@ +