From 1bf7232929b1a7cb08a2d95c465e4348ee5bbb36 Mon Sep 17 00:00:00 2001 From: "evan.liu" <583229071@qq.com> Date: Wed, 2 Sep 2026 16:10:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=88=9D=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .hbuilderx/launch.json | 15 + App.uvue | 98 + api/httpInstance.uts | 90 + api/requestApi.uts | 80 + api/responseData.uts | 32 + common/auth.uts | 164 + common/bleInfo.uts | 41 + ...¿®改记录_2026-07-17_服务器切换与记住密码.md | 52 + .../修改记录_2026-07-17_登录页历史账号选择.md | 31 + docs/修改记录_2026-09-02_母乳杯蓝牙改造.md | 77 + index.html | 20 + main.uts | 9 + manifest.json | 97 + pages.json | 111 + .../bleTest/bluetoothList/bluetoothList.uvue | 142 + .../bluetoothOperation.uvue | 321 ++ pages/displayUserInfo/displayUserInfo.uvue | 35 + pages/login/login.uvue | 408 ++ pages/register/register.uvue | 344 ++ pages/tabbar/home.uvue | 429 ++ pages/tabbar/my.uvue | 252 ++ pages/tabbar/ota.uvue | 380 ++ pages/tabbar/sysStatus.uvue | 196 + platformConfig.json | 7 + src/BluetoothManager.uts | 171 + src/commonFunctions.uts | 49 + src/mcm/Crc.uts | 47 + src/mcm/FrameCodec.uts | 113 + src/mcm/McmChannel.uts | 209 + src/mcm/McmCommands.uts | 65 + src/mcm/OtaManager.uts | 214 + static/androidApp.png | Bin 0 -> 617953 bytes static/androidApp22.png | Bin 0 -> 164522 bytes static/charge/UnAvailable.png | Bin 0 -> 15535 bytes static/charge/Unkonw.png | Bin 0 -> 15678 bytes static/charge/addDevice.png | Bin 0 -> 9945 bytes static/charge/charging.png | Bin 0 -> 30734 bytes static/charge/connectGun.png | Bin 0 -> 28983 bytes static/charge/error.png | Bin 0 -> 15358 bytes static/charge/finishing.png | Bin 0 -> 29434 bytes static/charge/insertGun.png | Bin 0 -> 29767 bytes static/charge/noDevice.png | Bin 0 -> 14957 bytes static/charge/reserve.png | Bin 0 -> 29402 bytes static/charge/scanCode.png | Bin 0 -> 6515 bytes static/logo.png | Bin 0 -> 4023 bytes static/miniApp.png | Bin 0 -> 617953 bytes static/miniApp22.png | Bin 0 -> 38943 bytes static/tabbar/chargeActive.png | Bin 0 -> 18491 bytes static/tabbar/chargeDefault.png | Bin 0 -> 38804 bytes static/tabbar/homeActive.png | Bin 0 -> 15043 bytes static/tabbar/homeDefault.png | Bin 0 -> 12080 bytes static/tabbar/mapActive.png | Bin 0 -> 15364 bytes static/tabbar/mapDefault.png | Bin 0 -> 12938 bytes static/tabbar/myActive.png | Bin 0 -> 35584 bytes static/tabbar/myDefault.png | Bin 0 -> 34636 bytes static/tabbar/orderActive.png | Bin 0 -> 17518 bytes static/tabbar/orderDefault.png | Bin 0 -> 15126 bytes static/tabbar/scanCode.png | Bin 0 -> 11336 bytes static/user.png | Bin 0 -> 31734 bytes static/userDefault.png | Bin 0 -> 28123 bytes uni.scss | 76 + uni_modules/android-ble/changelog.md | 170 + uni_modules/android-ble/encrypt | 1 + uni_modules/android-ble/old.md | 126 + uni_modules/android-ble/package.json | 111 + uni_modules/android-ble/readme.md | 1240 ++++++ .../utssdk/app-android/AndroidManifest.xml | 13 + .../utssdk/app-android/Result.java | 7 + .../app-android/com/clj/fastble/BleHelper.kt | Bin 0 -> 36752 bytes .../com/clj/fastble/BleManager.java | Bin 0 -> 32880 bytes .../app-android/com/clj/fastble/ByteUtil.java | Bin 0 -> 7744 bytes .../clj/fastble/bluetooth/BleBluetooth.java | Bin 0 -> 27664 bytes .../clj/fastble/bluetooth/BleConnector.java | Bin 0 -> 27520 bytes .../MultipleBluetoothController.java | Bin 0 -> 4896 bytes .../clj/fastble/bluetooth/SplitWriter.java | Bin 0 -> 8512 bytes .../clj/fastble/callback/BleBaseCallback.java | Bin 0 -> 448 bytes .../clj/fastble/callback/BleGattCallback.java | Bin 0 -> 752 bytes .../fastble/callback/BleIndicateCallback.java | Bin 0 -> 336 bytes .../callback/BleMtuChangedCallback.java | Bin 0 -> 288 bytes .../fastble/callback/BleNotifyCallback.java | Bin 0 -> 336 bytes .../clj/fastble/callback/BleReadCallback.java | Bin 0 -> 272 bytes .../clj/fastble/callback/BleRssiCallback.java | 3 + .../callback/BleScanAndConnectCallback.java | Bin 0 -> 304 bytes .../clj/fastble/callback/BleScanCallback.java | Bin 0 -> 304 bytes .../fastble/callback/BleScanPresenterImp.java | 2 + .../fastble/callback/BleWriteCallback.java | Bin 0 -> 368 bytes .../callback/NotificationCallback.java | Bin 0 -> 368 bytes .../data/BleConnectStateParameter.java | Bin 0 -> 496 bytes .../com/clj/fastble/data/BleDevice.java | Bin 0 -> 2576 bytes .../com/clj/fastble/data/BleMsg.java | Bin 0 -> 2368 bytes .../com/clj/fastble/data/BleScanState.java | 2 + .../com/clj/fastble/data/BleWriteState.java | 1 + .../com/clj/fastble/entity/MessageEntity.java | Bin 0 -> 1600 bytes .../clj/fastble/entity/UserInfoEntity.java | Bin 0 -> 1440 bytes .../clj/fastble/exception/BleException.java | Bin 0 -> 1104 bytes .../fastble/exception/ConnectException.java | Bin 0 -> 1088 bytes .../clj/fastble/exception/GattException.java | Bin 0 -> 640 bytes .../clj/fastble/exception/OtherException.java | Bin 0 -> 208 bytes .../fastble/exception/TimeoutException.java | 1 + .../clj/fastble/scan/BleScanPresenter.java | Bin 0 -> 7360 bytes .../clj/fastble/scan/BleScanRuleConfig.java | Bin 0 -> 2384 bytes .../com/clj/fastble/scan/BleScanner.java | Bin 0 -> 5104 bytes .../com/clj/fastble/utils/BleLog.java | Bin 0 -> 672 bytes .../com/clj/fastble/utils/BleLruHashMap.java | Bin 0 -> 896 bytes .../com/clj/fastble/utils/HexUtil.java | Bin 0 -> 3632 bytes .../utssdk/app-android/config.json | 6 + .../android-ble/utssdk/app-android/index.uts | Bin 0 -> 41296 bytes .../android-ble/utssdk/app-harmony/index.uts | Bin 0 -> 50288 bytes .../utssdk/app-harmony/module.json5 | 45 + .../resources/base/element/string.json | 24 + .../android-ble/utssdk/app-ios/bt.swift | Bin 0 -> 36640 bytes .../android-ble/utssdk/app-ios/config.json | 3 + .../android-ble/utssdk/app-ios/index.uts | Bin 0 -> 34384 bytes .../android-ble/utssdk/app-ios/info.plist | 15 + uni_modules/android-ble/utssdk/interface.uts | 110 + uni_modules/android-ble/utssdk/mp-weixin.zip | Bin 0 -> 6986 bytes .../android-ble/utssdk/mp-weixin/index.uts | Bin 0 -> 28544 bytes uni_modules/lime-color/changelog.md | 27 + uni_modules/lime-color/common/color.uts | 646 +++ uni_modules/lime-color/common/conversion.uts | 307 ++ .../lime-color/common/css-color-names.uts | 156 + .../lime-color/common/format-input.uts | 388 ++ uni_modules/lime-color/common/generate.uts | 240 + uni_modules/lime-color/common/test.uts | 211 + uni_modules/lime-color/common/util.uts | 198 + .../components/lime-color/lime-color.vue | 10 + uni_modules/lime-color/index.ts | 5 + uni_modules/lime-color/index.uts | 6 + uni_modules/lime-color/interface.uts | 87 + uni_modules/lime-color/package.json | 108 + uni_modules/lime-color/readme - 副本.md | 557 +++ uni_modules/lime-color/readme.md | 342 ++ .../utssdk/app-android-o/config.json | 3 + .../lime-color/utssdk/app-android-o/index.uts | 2 + .../lime-color/utssdk/app-js-o/config.json | 3 + .../lime-color/utssdk/app-js-o/index.uts | 2 + uni_modules/lime-color/utssdk/index-o.uts | 3 + uni_modules/lime-color/utssdk/interface.uts | 93 + uni_modules/lime-color/utssdk/unierror.uts | 41 + .../lime-date-time-picker/changelog.md | 30 + .../components/l-date-time-picker/constant.ts | 56 + .../l-date-time-picker.uvue | 313 ++ .../l-date-time-picker/l-date-time-picker.vue | 321 ++ .../components/l-date-time-picker/props.ts | 140 + .../components/l-date-time-picker/type.ts | 67 + .../components/l-date-time-picker/utils.ts | 89 + .../lime-date-time-picker.uvue | 205 + .../lime-date-time-picker.vue | 179 + uni_modules/lime-date-time-picker/index.ts | 2 + .../lime-date-time-picker/package.json | 110 + uni_modules/lime-date-time-picker/readme.md | 234 + .../lime-date-time-picker/readme_old.md | 136 + uni_modules/lime-dayuts/changelog.md | 43 + uni_modules/lime-dayuts/common/constant.ts | 32 + uni_modules/lime-dayuts/common/dates.ts | 194 + uni_modules/lime-dayuts/common/index.ts | 1104 +++++ .../lime-dayuts/common/locale/en/index.ts | 57 + .../lime-dayuts/common/locale/zh-cn/index.ts | 75 + uni_modules/lime-dayuts/common/test.ts | 110 + uni_modules/lime-dayuts/common/use.ts | 63 + uni_modules/lime-dayuts/common/utils.ts | 106 + uni_modules/lime-dayuts/index.ts | 6 + uni_modules/lime-dayuts/package.json | 107 + uni_modules/lime-dayuts/readme - 副本.md | 445 ++ uni_modules/lime-dayuts/readme.md | 462 ++ .../lime-dayuts/utssdk/app-js/config.json | 3 + .../lime-dayuts/utssdk/app-js/index.uts | 3 + uni_modules/lime-dayuts/utssdk/interface.uts | 405 ++ uni_modules/lime-dayuts/utssdk/unierror.uts | 39 + uni_modules/lime-loading/changelog.md | 44 + .../components/l-loading/index-u.scss | 252 ++ .../components/l-loading/index.scss | 246 ++ .../components/l-loading/l-loading.uvue | 122 + .../components/l-loading/l-loading.vue | 79 + .../components/l-loading/props.ts | 28 + .../lime-loading/components/l-loading/type.ts | 18 + .../components/lime-loading/lime-loading.uvue | 132 + .../components/lime-loading/lime-loading.vue | 52 + uni_modules/lime-loading/index.uts | 439 ++ uni_modules/lime-loading/package.json | 110 + uni_modules/lime-loading/readme.md | 114 + uni_modules/lime-picker/changelog.md | 76 + .../components/l-cascade/l-cascade.uvue | 129 + .../components/l-cascade/l-cascade.vue | 154 + .../lime-picker/components/l-cascade/type.ts | 58 + .../components/l-cascade/utils.uts | 123 + .../l-picker-item/PickerRenderer.uts | 187 + .../components/l-picker-item/index.scss | 82 + .../l-picker-item/l-picker-item-old.uvue | 324 ++ .../l-picker-item/l-picker-item.uvue | 297 ++ .../l-picker-item/l-picker-item.vue | 212 + .../components/l-picker-item/props.ts | 15 + .../components/l-picker-item/type.ts | 13 + .../components/l-picker-item/usePickerMask.ts | 86 + .../components/l-picker-view/index.scss | 191 + .../l-picker-view/l-picker-view.uvue | 285 ++ .../l-picker-view/l-picker-view.vue | 173 + .../components/l-picker-view/props.ts | 128 + .../components/l-picker-view/type.ts | 10 + .../components/l-picker-view/usePickerView.ts | 339 ++ .../components/l-picker/index.scss | 149 + .../components/l-picker/l-picker.uvue | 269 ++ .../components/l-picker/l-picker.vue | 271 ++ .../lime-picker/components/l-picker/props.ts | 126 + .../lime-picker/components/l-picker/type.ts | 87 + .../lime-picker/components/l-picker/utils.ts | 36 + .../components/lime-picker/lime-picker.uvue | 411 ++ .../components/lime-picker/lime-picker.vue | 398 ++ uni_modules/lime-picker/index.uts | 6 + uni_modules/lime-picker/package.json | 110 + uni_modules/lime-picker/readme.md | 573 +++ uni_modules/lime-picker/readme_old.md | 555 +++ uni_modules/lime-shared/addSeparator/index.ts | 10 + uni_modules/lime-shared/addUnit/index.ts | 41 + uni_modules/lime-shared/animation/bezier.ts | 83 + uni_modules/lime-shared/animation/ease.ts | 4 + uni_modules/lime-shared/animation/index.ts | 10 + .../lime-shared/animation/useTransition.ts | 110 + uni_modules/lime-shared/animation/uvue.ts | 119 + uni_modules/lime-shared/animation/uvue.uts | 119 + uni_modules/lime-shared/animation/vue.ts | 123 + .../lime-shared/areaData/city-china.json | 3888 +++++++++++++++++ uni_modules/lime-shared/areaData/index.ts | 71 + .../lime-shared/arrayBufferToFile/index.ts | 10 + .../lime-shared/arrayBufferToFile/uvue.ts | 10 + .../lime-shared/arrayBufferToFile/uvue.uts | 10 + .../lime-shared/arrayBufferToFile/vue.ts | 63 + uni_modules/lime-shared/arrayEqual/index.ts | 13 + .../lime-shared/assignAtIndex/index.ts | 42 + .../lime-shared/base64ToArrayBuffer/index.ts | 13 + uni_modules/lime-shared/base64ToPath/index.ts | 11 + uni_modules/lime-shared/base64ToPath/uvue.ts | 22 + uni_modules/lime-shared/base64ToPath/uvue.uts | 22 + uni_modules/lime-shared/base64ToPath/vue.ts | 75 + uni_modules/lime-shared/bem/index.ts | 289 ++ uni_modules/lime-shared/camelCase/index.ts | 22 + .../lime-shared/canIUseCanvas2d/index.ts | 67 + .../lime-shared/capitalizedAmount/index.ts | 111 + uni_modules/lime-shared/changelog.md | 126 + .../lime-shared/characterLimit/index.ts | 63 + uni_modules/lime-shared/clamp/index.ts | 16 + uni_modules/lime-shared/classNames/index.ts | 96 + uni_modules/lime-shared/cloneDeep/index.ts | 10 + uni_modules/lime-shared/cloneDeep/uvue.ts | 44 + uni_modules/lime-shared/cloneDeep/uvue.uts | 39 + uni_modules/lime-shared/cloneDeep/vue.ts | 103 + uni_modules/lime-shared/closest/index.ts | 22 + uni_modules/lime-shared/coalesce/index.ts | 27 + .../components/lime-shared/lime-shared.vue | 407 ++ uni_modules/lime-shared/computed/index.ts | 16 + .../lime-shared/createAnimation/index.ts | 11 + .../lime-shared/createAnimation/type.ts | 25 + .../lime-shared/createAnimation/uvue.ts | 5 + .../lime-shared/createAnimation/uvue.uts | 5 + .../lime-shared/createAnimation/vue.ts | 148 + uni_modules/lime-shared/createCanvas/index.ts | 72 + .../createCanvasContextAsync/index.ts | 329 ++ uni_modules/lime-shared/createImage/index.ts | 70 + uni_modules/lime-shared/cssToObj/index.ts | 50 + uni_modules/lime-shared/debounce/index.ts | 11 + uni_modules/lime-shared/debounce/uvue.ts | 36 + uni_modules/lime-shared/debounce/uvue.uts | 36 + uni_modules/lime-shared/debounce/vue.ts | 40 + uni_modules/lime-shared/dom/index.ts | 18 + uni_modules/lime-shared/exif/index.ts | 11 + uni_modules/lime-shared/exif/uvue.ts | 7 + uni_modules/lime-shared/exif/uvue.uts | 7 + uni_modules/lime-shared/exif/vue.ts | 1057 +++++ uni_modules/lime-shared/fillArray/index.ts | 18 + uni_modules/lime-shared/fillZero/index.ts | 11 + .../lime-shared/findLastIndex/index.ts | 23 + uni_modules/lime-shared/floatAdd/index.ts | 27 + uni_modules/lime-shared/floatDiv/index.ts | 45 + uni_modules/lime-shared/floatMul/index.ts | 44 + uni_modules/lime-shared/floatSub/index.ts | 32 + uni_modules/lime-shared/getClassStr/index.ts | 53 + .../lime-shared/getCurrentPage/index.ts | 9 + .../lime-shared/getCurrentPage/uvue.ts | 5 + .../lime-shared/getCurrentPage/uvue.uts | 5 + uni_modules/lime-shared/getCurrentPage/vue.ts | 6 + .../lime-shared/getDeviceInfo/index.ts | 13 + .../lime-shared/getLocalFilePath/index.ts | 64 + uni_modules/lime-shared/getRect/index.ts | 136 + uni_modules/lime-shared/getRect/uvue.ts | 35 + uni_modules/lime-shared/getRect/uvue.uts | 17 + uni_modules/lime-shared/getRect/vue.ts | 130 + uni_modules/lime-shared/getStyleStr/index.ts | 54 + .../lime-shared/getWindowInfo/index.ts | 13 + uni_modules/lime-shared/guid/index.ts | 36 + uni_modules/lime-shared/hasOwn/index.ts | 9 + uni_modules/lime-shared/hasOwn/uvue.ts | 43 + uni_modules/lime-shared/hasOwn/uvue.uts | 43 + uni_modules/lime-shared/hasOwn/vue.ts | 30 + uni_modules/lime-shared/index.ts | 43 + uni_modules/lime-shared/index.uts | 0 uni_modules/lime-shared/isBase64/index.ts | 23 + uni_modules/lime-shared/isBoolean/index.ts | 25 + uni_modules/lime-shared/isBrowser/index.ts | 8 + uni_modules/lime-shared/isByteLength/index.ts | 86 + uni_modules/lime-shared/isDate/index.ts | 189 + uni_modules/lime-shared/isDef/index.ts | 23 + uni_modules/lime-shared/isEmail/index.ts | 11 + uni_modules/lime-shared/isEmpty/index.ts | 81 + uni_modules/lime-shared/isFunction/index.ts | 16 + uni_modules/lime-shared/isIP/index.ts | 64 + uni_modules/lime-shared/isNumber/index.ts | 26 + uni_modules/lime-shared/isNumeric/index.ts | 33 + uni_modules/lime-shared/isObject/index.ts | 19 + uni_modules/lime-shared/isPromise/index.ts | 22 + uni_modules/lime-shared/isRegExp/index.ts | 33 + uni_modules/lime-shared/isString/index.ts | 19 + uni_modules/lime-shared/isURL/index.ts | 198 + .../lime-shared/isValidDomain/index.ts | 90 + uni_modules/lime-shared/kebabCase/index.ts | 24 + uni_modules/lime-shared/merge/index.ts | 33 + uni_modules/lime-shared/obj2url/index.ts | 61 + uni_modules/lime-shared/objToCss/index.ts | 49 + uni_modules/lime-shared/package.json | 111 + uni_modules/lime-shared/parseStyle/index.ts | 50 + uni_modules/lime-shared/pathToBase64/index.ts | 9 + uni_modules/lime-shared/pathToBase64/uvue.ts | 17 + uni_modules/lime-shared/pathToBase64/uvue.uts | 17 + uni_modules/lime-shared/pathToBase64/vue.ts | 142 + uni_modules/lime-shared/platform/index.ts | 34 + uni_modules/lime-shared/raf/index.ts | 12 + uni_modules/lime-shared/raf/uvue.ts | 26 + uni_modules/lime-shared/raf/uvue.uts | 48 + uni_modules/lime-shared/raf/vue.ts | 32 + uni_modules/lime-shared/random/index.ts | 24 + uni_modules/lime-shared/range/index.ts | 36 + uni_modules/lime-shared/readme.md | 353 ++ .../lime-shared/selectAllComponent/index.ts | 8 + .../lime-shared/selectAllComponent/uvue.ts | 39 + .../lime-shared/selectAllComponent/uvue.uts | 39 + .../lime-shared/selectAllComponent/vue.ts | 151 + .../lime-shared/selectComponent/index.ts | 7 + .../lime-shared/selectComponent/uvue.ts | 75 + .../lime-shared/selectComponent/uvue.uts | 75 + .../lime-shared/selectComponent/vue.ts | 149 + .../lime-shared/selectElement/index.ts | 277 ++ uni_modules/lime-shared/shuffle/index.ts | 16 + uni_modules/lime-shared/sleep/index.ts | 44 + .../lime-shared/stringifyStyle/index.ts | 158 + uni_modules/lime-shared/throttle/index.ts | 89 + uni_modules/lime-shared/throttle/index_old.ts | 112 + uni_modules/lime-shared/toArray/index.ts | 21 + uni_modules/lime-shared/toBoolean/index.ts | 36 + uni_modules/lime-shared/toNumber/index.ts | 28 + uni_modules/lime-shared/uniqid/index.ts | 17 + uni_modules/lime-shared/unitConvert/index.ts | 94 + uni_modules/lime-shared/useVModel/index.ts | 38 + uni_modules/lime-shared/vue/index.ts | 105 + uni_modules/lime-shared/while/index.ts | 55 + uni_modules/lime-style/changelog.md | 50 + .../lime-style/color/colorPalette.scss | 236 + uni_modules/lime-style/color/colors.scss | 18 + uni_modules/lime-style/functions.scss | 11 + uni_modules/lime-style/hairline.uts | 153 + uni_modules/lime-style/index.scss | 7 + uni_modules/lime-style/index.uts | 3 + uni_modules/lime-style/mixins/bem.scss | 0 uni_modules/lime-style/mixins/create.scss | 235 + .../mixins/directionalProperty.scss | 401 ++ uni_modules/lime-style/mixins/ellipsis.scss | 22 + uni_modules/lime-style/mixins/flex.scss | 20 + uni_modules/lime-style/mixins/hairline.scss | 66 + uni_modules/lime-style/mixins/platform.scss | 17 + uni_modules/lime-style/mixins/useTheme.scss | 60 + uni_modules/lime-style/mixins/utilities.scss | 7 + uni_modules/lime-style/package.json | 103 + uni_modules/lime-style/readme.md | 16 + uni_modules/lime-style/theme/dark.scss | 638 +++ uni_modules/lime-style/theme/default.scss | 181 + uni_modules/lime-style/token/dark.uts | 67 + .../lime-style/token/genFontMapToken.uts | 49 + uni_modules/lime-style/token/genFontSizes.uts | 30 + uni_modules/lime-style/token/genRadius.uts | 63 + .../lime-style/token/genSizeMapToken.uts | 20 + uni_modules/lime-style/token/interface.uts | 184 + uni_modules/lime-style/token/light.uts | 66 + uni_modules/lime-style/token/shared.uts | 24 + uni_modules/lime-style/token/useThemeMode.uts | 126 + uni_modules/lime-style/token/useThemeVars.uts | 123 + uni_modules/lime-style/token/vue.ts | 13 + uni_modules/lime-style/var.scss | 64 + uni_modules/uni-icons/changelog.md | 46 + .../components/uni-icons/uni-icons.uvue | 88 + .../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 +++ uni_modules/uni-icons/package.json | 112 + uni_modules/uni-icons/readme.md | 8 + uni_modules/uni-scss/changelog.md | 8 + uni_modules/uni-scss/index.scss | 1 + uni_modules/uni-scss/package.json | 82 + uni_modules/uni-scss/readme.md | 4 + 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 + uni_modules/uni-scss/theme.scss | 31 + uni_modules/uni-scss/variables.scss | 62 + uni_modules/uni-wifi/changelog.md | 14 + uni_modules/uni-wifi/package.json | 147 + uni_modules/uni-wifi/readme.md | 145 + .../uni-wifi/utssdk/app-android/config.json | 3 + .../uni-wifi/utssdk/app-android/index.uts | 803 ++++ .../uni-wifi/utssdk/app-ios/Info.plist | 8 + .../uni-wifi/utssdk/app-ios/UTS.entitlements | 8 + .../uni-wifi/utssdk/app-ios/config.json | 7 + uni_modules/uni-wifi/utssdk/app-ios/index.uts | 322 ++ uni_modules/uni-wifi/utssdk/index.d.ts | 388 ++ uni_modules/uni-wifi/utssdk/interface.uts | 444 ++ uni_modules/uni-wifi/utssdk/uni.autotest.js | 35 + uni_modules/uni-wifi/utssdk/unierror.uts | 59 + 423 files changed, 43750 insertions(+) create mode 100644 .gitignore create mode 100644 .hbuilderx/launch.json create mode 100644 App.uvue create mode 100644 api/httpInstance.uts create mode 100644 api/requestApi.uts create mode 100644 api/responseData.uts create mode 100644 common/auth.uts create mode 100644 common/bleInfo.uts create mode 100644 docs/修改记录_2026-07-17_服务器切换与记住密码.md create mode 100644 docs/修改记录_2026-07-17_登录页历史账号选择.md create mode 100644 docs/修改记录_2026-09-02_母乳杯蓝牙改造.md create mode 100644 index.html create mode 100644 main.uts create mode 100644 manifest.json create mode 100644 pages.json create mode 100644 pages/bleTest/bluetoothList/bluetoothList.uvue create mode 100644 pages/bleTest/bluetoothOperation/bluetoothOperation.uvue create mode 100644 pages/displayUserInfo/displayUserInfo.uvue create mode 100644 pages/login/login.uvue create mode 100644 pages/register/register.uvue create mode 100644 pages/tabbar/home.uvue create mode 100644 pages/tabbar/my.uvue create mode 100644 pages/tabbar/ota.uvue create mode 100644 pages/tabbar/sysStatus.uvue create mode 100644 platformConfig.json create mode 100644 src/BluetoothManager.uts create mode 100644 src/commonFunctions.uts create mode 100644 src/mcm/Crc.uts create mode 100644 src/mcm/FrameCodec.uts create mode 100644 src/mcm/McmChannel.uts create mode 100644 src/mcm/McmCommands.uts create mode 100644 src/mcm/OtaManager.uts create mode 100644 static/androidApp.png create mode 100644 static/androidApp22.png create mode 100644 static/charge/UnAvailable.png create mode 100644 static/charge/Unkonw.png create mode 100644 static/charge/addDevice.png create mode 100644 static/charge/charging.png create mode 100644 static/charge/connectGun.png create mode 100644 static/charge/error.png create mode 100644 static/charge/finishing.png create mode 100644 static/charge/insertGun.png create mode 100644 static/charge/noDevice.png create mode 100644 static/charge/reserve.png create mode 100644 static/charge/scanCode.png create mode 100644 static/logo.png create mode 100644 static/miniApp.png create mode 100644 static/miniApp22.png create mode 100644 static/tabbar/chargeActive.png create mode 100644 static/tabbar/chargeDefault.png create mode 100644 static/tabbar/homeActive.png create mode 100644 static/tabbar/homeDefault.png create mode 100644 static/tabbar/mapActive.png create mode 100644 static/tabbar/mapDefault.png create mode 100644 static/tabbar/myActive.png create mode 100644 static/tabbar/myDefault.png create mode 100644 static/tabbar/orderActive.png create mode 100644 static/tabbar/orderDefault.png create mode 100644 static/tabbar/scanCode.png create mode 100644 static/user.png create mode 100644 static/userDefault.png create mode 100644 uni.scss create mode 100644 uni_modules/android-ble/changelog.md create mode 100644 uni_modules/android-ble/encrypt create mode 100644 uni_modules/android-ble/old.md create mode 100644 uni_modules/android-ble/package.json create mode 100644 uni_modules/android-ble/readme.md create mode 100644 uni_modules/android-ble/utssdk/app-android/AndroidManifest.xml create mode 100644 uni_modules/android-ble/utssdk/app-android/Result.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/BleHelper.kt create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/BleManager.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/ByteUtil.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/BleBluetooth.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/BleConnector.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/MultipleBluetoothController.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/SplitWriter.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleBaseCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleGattCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleIndicateCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleMtuChangedCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleNotifyCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleReadCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleRssiCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanAndConnectCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanPresenterImp.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleWriteCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/NotificationCallback.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleConnectStateParameter.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleDevice.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleMsg.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleScanState.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleWriteState.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/MessageEntity.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/UserInfoEntity.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/BleException.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/ConnectException.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/GattException.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/OtherException.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/TimeoutException.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanPresenter.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanRuleConfig.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanner.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLog.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLruHashMap.java create mode 100644 uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/HexUtil.java create mode 100644 uni_modules/android-ble/utssdk/app-android/config.json create mode 100644 uni_modules/android-ble/utssdk/app-android/index.uts create mode 100644 uni_modules/android-ble/utssdk/app-harmony/index.uts create mode 100644 uni_modules/android-ble/utssdk/app-harmony/module.json5 create mode 100644 uni_modules/android-ble/utssdk/app-harmony/resources/base/element/string.json create mode 100644 uni_modules/android-ble/utssdk/app-ios/bt.swift create mode 100644 uni_modules/android-ble/utssdk/app-ios/config.json create mode 100644 uni_modules/android-ble/utssdk/app-ios/index.uts create mode 100644 uni_modules/android-ble/utssdk/app-ios/info.plist create mode 100644 uni_modules/android-ble/utssdk/interface.uts create mode 100644 uni_modules/android-ble/utssdk/mp-weixin.zip create mode 100644 uni_modules/android-ble/utssdk/mp-weixin/index.uts create mode 100644 uni_modules/lime-color/changelog.md create mode 100644 uni_modules/lime-color/common/color.uts create mode 100644 uni_modules/lime-color/common/conversion.uts create mode 100644 uni_modules/lime-color/common/css-color-names.uts create mode 100644 uni_modules/lime-color/common/format-input.uts create mode 100644 uni_modules/lime-color/common/generate.uts create mode 100644 uni_modules/lime-color/common/test.uts create mode 100644 uni_modules/lime-color/common/util.uts create mode 100644 uni_modules/lime-color/components/lime-color/lime-color.vue create mode 100644 uni_modules/lime-color/index.ts create mode 100644 uni_modules/lime-color/index.uts create mode 100644 uni_modules/lime-color/interface.uts create mode 100644 uni_modules/lime-color/package.json create mode 100644 uni_modules/lime-color/readme - 副本.md create mode 100644 uni_modules/lime-color/readme.md create mode 100644 uni_modules/lime-color/utssdk/app-android-o/config.json create mode 100644 uni_modules/lime-color/utssdk/app-android-o/index.uts create mode 100644 uni_modules/lime-color/utssdk/app-js-o/config.json create mode 100644 uni_modules/lime-color/utssdk/app-js-o/index.uts create mode 100644 uni_modules/lime-color/utssdk/index-o.uts create mode 100644 uni_modules/lime-color/utssdk/interface.uts create mode 100644 uni_modules/lime-color/utssdk/unierror.uts create mode 100644 uni_modules/lime-date-time-picker/changelog.md create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/constant.ts create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.uvue create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.vue create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/props.ts create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/type.ts create mode 100644 uni_modules/lime-date-time-picker/components/l-date-time-picker/utils.ts create mode 100644 uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.uvue create mode 100644 uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.vue create mode 100644 uni_modules/lime-date-time-picker/index.ts create mode 100644 uni_modules/lime-date-time-picker/package.json create mode 100644 uni_modules/lime-date-time-picker/readme.md create mode 100644 uni_modules/lime-date-time-picker/readme_old.md create mode 100644 uni_modules/lime-dayuts/changelog.md create mode 100644 uni_modules/lime-dayuts/common/constant.ts create mode 100644 uni_modules/lime-dayuts/common/dates.ts create mode 100644 uni_modules/lime-dayuts/common/index.ts create mode 100644 uni_modules/lime-dayuts/common/locale/en/index.ts create mode 100644 uni_modules/lime-dayuts/common/locale/zh-cn/index.ts create mode 100644 uni_modules/lime-dayuts/common/test.ts create mode 100644 uni_modules/lime-dayuts/common/use.ts create mode 100644 uni_modules/lime-dayuts/common/utils.ts create mode 100644 uni_modules/lime-dayuts/index.ts create mode 100644 uni_modules/lime-dayuts/package.json create mode 100644 uni_modules/lime-dayuts/readme - 副本.md create mode 100644 uni_modules/lime-dayuts/readme.md create mode 100644 uni_modules/lime-dayuts/utssdk/app-js/config.json create mode 100644 uni_modules/lime-dayuts/utssdk/app-js/index.uts create mode 100644 uni_modules/lime-dayuts/utssdk/interface.uts create mode 100644 uni_modules/lime-dayuts/utssdk/unierror.uts create mode 100644 uni_modules/lime-loading/changelog.md create mode 100644 uni_modules/lime-loading/components/l-loading/index-u.scss create mode 100644 uni_modules/lime-loading/components/l-loading/index.scss create mode 100644 uni_modules/lime-loading/components/l-loading/l-loading.uvue create mode 100644 uni_modules/lime-loading/components/l-loading/l-loading.vue create mode 100644 uni_modules/lime-loading/components/l-loading/props.ts create mode 100644 uni_modules/lime-loading/components/l-loading/type.ts create mode 100644 uni_modules/lime-loading/components/lime-loading/lime-loading.uvue create mode 100644 uni_modules/lime-loading/components/lime-loading/lime-loading.vue create mode 100644 uni_modules/lime-loading/index.uts create mode 100644 uni_modules/lime-loading/package.json create mode 100644 uni_modules/lime-loading/readme.md create mode 100644 uni_modules/lime-picker/changelog.md create mode 100644 uni_modules/lime-picker/components/l-cascade/l-cascade.uvue create mode 100644 uni_modules/lime-picker/components/l-cascade/l-cascade.vue create mode 100644 uni_modules/lime-picker/components/l-cascade/type.ts create mode 100644 uni_modules/lime-picker/components/l-cascade/utils.uts create mode 100644 uni_modules/lime-picker/components/l-picker-item/PickerRenderer.uts create mode 100644 uni_modules/lime-picker/components/l-picker-item/index.scss create mode 100644 uni_modules/lime-picker/components/l-picker-item/l-picker-item-old.uvue create mode 100644 uni_modules/lime-picker/components/l-picker-item/l-picker-item.uvue create mode 100644 uni_modules/lime-picker/components/l-picker-item/l-picker-item.vue create mode 100644 uni_modules/lime-picker/components/l-picker-item/props.ts create mode 100644 uni_modules/lime-picker/components/l-picker-item/type.ts create mode 100644 uni_modules/lime-picker/components/l-picker-item/usePickerMask.ts create mode 100644 uni_modules/lime-picker/components/l-picker-view/index.scss create mode 100644 uni_modules/lime-picker/components/l-picker-view/l-picker-view.uvue create mode 100644 uni_modules/lime-picker/components/l-picker-view/l-picker-view.vue create mode 100644 uni_modules/lime-picker/components/l-picker-view/props.ts create mode 100644 uni_modules/lime-picker/components/l-picker-view/type.ts create mode 100644 uni_modules/lime-picker/components/l-picker-view/usePickerView.ts create mode 100644 uni_modules/lime-picker/components/l-picker/index.scss create mode 100644 uni_modules/lime-picker/components/l-picker/l-picker.uvue create mode 100644 uni_modules/lime-picker/components/l-picker/l-picker.vue create mode 100644 uni_modules/lime-picker/components/l-picker/props.ts create mode 100644 uni_modules/lime-picker/components/l-picker/type.ts create mode 100644 uni_modules/lime-picker/components/l-picker/utils.ts create mode 100644 uni_modules/lime-picker/components/lime-picker/lime-picker.uvue create mode 100644 uni_modules/lime-picker/components/lime-picker/lime-picker.vue create mode 100644 uni_modules/lime-picker/index.uts create mode 100644 uni_modules/lime-picker/package.json create mode 100644 uni_modules/lime-picker/readme.md create mode 100644 uni_modules/lime-picker/readme_old.md create mode 100644 uni_modules/lime-shared/addSeparator/index.ts create mode 100644 uni_modules/lime-shared/addUnit/index.ts create mode 100644 uni_modules/lime-shared/animation/bezier.ts create mode 100644 uni_modules/lime-shared/animation/ease.ts create mode 100644 uni_modules/lime-shared/animation/index.ts create mode 100644 uni_modules/lime-shared/animation/useTransition.ts create mode 100644 uni_modules/lime-shared/animation/uvue.ts create mode 100644 uni_modules/lime-shared/animation/uvue.uts create mode 100644 uni_modules/lime-shared/animation/vue.ts create mode 100644 uni_modules/lime-shared/areaData/city-china.json create mode 100644 uni_modules/lime-shared/areaData/index.ts create mode 100644 uni_modules/lime-shared/arrayBufferToFile/index.ts create mode 100644 uni_modules/lime-shared/arrayBufferToFile/uvue.ts create mode 100644 uni_modules/lime-shared/arrayBufferToFile/uvue.uts create mode 100644 uni_modules/lime-shared/arrayBufferToFile/vue.ts create mode 100644 uni_modules/lime-shared/arrayEqual/index.ts create mode 100644 uni_modules/lime-shared/assignAtIndex/index.ts create mode 100644 uni_modules/lime-shared/base64ToArrayBuffer/index.ts create mode 100644 uni_modules/lime-shared/base64ToPath/index.ts create mode 100644 uni_modules/lime-shared/base64ToPath/uvue.ts create mode 100644 uni_modules/lime-shared/base64ToPath/uvue.uts create mode 100644 uni_modules/lime-shared/base64ToPath/vue.ts create mode 100644 uni_modules/lime-shared/bem/index.ts create mode 100644 uni_modules/lime-shared/camelCase/index.ts create mode 100644 uni_modules/lime-shared/canIUseCanvas2d/index.ts create mode 100644 uni_modules/lime-shared/capitalizedAmount/index.ts create mode 100644 uni_modules/lime-shared/changelog.md create mode 100644 uni_modules/lime-shared/characterLimit/index.ts create mode 100644 uni_modules/lime-shared/clamp/index.ts create mode 100644 uni_modules/lime-shared/classNames/index.ts create mode 100644 uni_modules/lime-shared/cloneDeep/index.ts create mode 100644 uni_modules/lime-shared/cloneDeep/uvue.ts create mode 100644 uni_modules/lime-shared/cloneDeep/uvue.uts create mode 100644 uni_modules/lime-shared/cloneDeep/vue.ts create mode 100644 uni_modules/lime-shared/closest/index.ts create mode 100644 uni_modules/lime-shared/coalesce/index.ts create mode 100644 uni_modules/lime-shared/components/lime-shared/lime-shared.vue create mode 100644 uni_modules/lime-shared/computed/index.ts create mode 100644 uni_modules/lime-shared/createAnimation/index.ts create mode 100644 uni_modules/lime-shared/createAnimation/type.ts create mode 100644 uni_modules/lime-shared/createAnimation/uvue.ts create mode 100644 uni_modules/lime-shared/createAnimation/uvue.uts create mode 100644 uni_modules/lime-shared/createAnimation/vue.ts create mode 100644 uni_modules/lime-shared/createCanvas/index.ts create mode 100644 uni_modules/lime-shared/createCanvasContextAsync/index.ts create mode 100644 uni_modules/lime-shared/createImage/index.ts create mode 100644 uni_modules/lime-shared/cssToObj/index.ts create mode 100644 uni_modules/lime-shared/debounce/index.ts create mode 100644 uni_modules/lime-shared/debounce/uvue.ts create mode 100644 uni_modules/lime-shared/debounce/uvue.uts create mode 100644 uni_modules/lime-shared/debounce/vue.ts create mode 100644 uni_modules/lime-shared/dom/index.ts create mode 100644 uni_modules/lime-shared/exif/index.ts create mode 100644 uni_modules/lime-shared/exif/uvue.ts create mode 100644 uni_modules/lime-shared/exif/uvue.uts create mode 100644 uni_modules/lime-shared/exif/vue.ts create mode 100644 uni_modules/lime-shared/fillArray/index.ts create mode 100644 uni_modules/lime-shared/fillZero/index.ts create mode 100644 uni_modules/lime-shared/findLastIndex/index.ts create mode 100644 uni_modules/lime-shared/floatAdd/index.ts create mode 100644 uni_modules/lime-shared/floatDiv/index.ts create mode 100644 uni_modules/lime-shared/floatMul/index.ts create mode 100644 uni_modules/lime-shared/floatSub/index.ts create mode 100644 uni_modules/lime-shared/getClassStr/index.ts create mode 100644 uni_modules/lime-shared/getCurrentPage/index.ts create mode 100644 uni_modules/lime-shared/getCurrentPage/uvue.ts create mode 100644 uni_modules/lime-shared/getCurrentPage/uvue.uts create mode 100644 uni_modules/lime-shared/getCurrentPage/vue.ts create mode 100644 uni_modules/lime-shared/getDeviceInfo/index.ts create mode 100644 uni_modules/lime-shared/getLocalFilePath/index.ts create mode 100644 uni_modules/lime-shared/getRect/index.ts create mode 100644 uni_modules/lime-shared/getRect/uvue.ts create mode 100644 uni_modules/lime-shared/getRect/uvue.uts create mode 100644 uni_modules/lime-shared/getRect/vue.ts create mode 100644 uni_modules/lime-shared/getStyleStr/index.ts create mode 100644 uni_modules/lime-shared/getWindowInfo/index.ts create mode 100644 uni_modules/lime-shared/guid/index.ts create mode 100644 uni_modules/lime-shared/hasOwn/index.ts create mode 100644 uni_modules/lime-shared/hasOwn/uvue.ts create mode 100644 uni_modules/lime-shared/hasOwn/uvue.uts create mode 100644 uni_modules/lime-shared/hasOwn/vue.ts create mode 100644 uni_modules/lime-shared/index.ts create mode 100644 uni_modules/lime-shared/index.uts create mode 100644 uni_modules/lime-shared/isBase64/index.ts create mode 100644 uni_modules/lime-shared/isBoolean/index.ts create mode 100644 uni_modules/lime-shared/isBrowser/index.ts create mode 100644 uni_modules/lime-shared/isByteLength/index.ts create mode 100644 uni_modules/lime-shared/isDate/index.ts create mode 100644 uni_modules/lime-shared/isDef/index.ts create mode 100644 uni_modules/lime-shared/isEmail/index.ts create mode 100644 uni_modules/lime-shared/isEmpty/index.ts create mode 100644 uni_modules/lime-shared/isFunction/index.ts create mode 100644 uni_modules/lime-shared/isIP/index.ts create mode 100644 uni_modules/lime-shared/isNumber/index.ts create mode 100644 uni_modules/lime-shared/isNumeric/index.ts create mode 100644 uni_modules/lime-shared/isObject/index.ts create mode 100644 uni_modules/lime-shared/isPromise/index.ts create mode 100644 uni_modules/lime-shared/isRegExp/index.ts create mode 100644 uni_modules/lime-shared/isString/index.ts create mode 100644 uni_modules/lime-shared/isURL/index.ts create mode 100644 uni_modules/lime-shared/isValidDomain/index.ts create mode 100644 uni_modules/lime-shared/kebabCase/index.ts create mode 100644 uni_modules/lime-shared/merge/index.ts create mode 100644 uni_modules/lime-shared/obj2url/index.ts create mode 100644 uni_modules/lime-shared/objToCss/index.ts create mode 100644 uni_modules/lime-shared/package.json create mode 100644 uni_modules/lime-shared/parseStyle/index.ts create mode 100644 uni_modules/lime-shared/pathToBase64/index.ts create mode 100644 uni_modules/lime-shared/pathToBase64/uvue.ts create mode 100644 uni_modules/lime-shared/pathToBase64/uvue.uts create mode 100644 uni_modules/lime-shared/pathToBase64/vue.ts create mode 100644 uni_modules/lime-shared/platform/index.ts create mode 100644 uni_modules/lime-shared/raf/index.ts create mode 100644 uni_modules/lime-shared/raf/uvue.ts create mode 100644 uni_modules/lime-shared/raf/uvue.uts create mode 100644 uni_modules/lime-shared/raf/vue.ts create mode 100644 uni_modules/lime-shared/random/index.ts create mode 100644 uni_modules/lime-shared/range/index.ts create mode 100644 uni_modules/lime-shared/readme.md create mode 100644 uni_modules/lime-shared/selectAllComponent/index.ts create mode 100644 uni_modules/lime-shared/selectAllComponent/uvue.ts create mode 100644 uni_modules/lime-shared/selectAllComponent/uvue.uts create mode 100644 uni_modules/lime-shared/selectAllComponent/vue.ts create mode 100644 uni_modules/lime-shared/selectComponent/index.ts create mode 100644 uni_modules/lime-shared/selectComponent/uvue.ts create mode 100644 uni_modules/lime-shared/selectComponent/uvue.uts create mode 100644 uni_modules/lime-shared/selectComponent/vue.ts create mode 100644 uni_modules/lime-shared/selectElement/index.ts create mode 100644 uni_modules/lime-shared/shuffle/index.ts create mode 100644 uni_modules/lime-shared/sleep/index.ts create mode 100644 uni_modules/lime-shared/stringifyStyle/index.ts create mode 100644 uni_modules/lime-shared/throttle/index.ts create mode 100644 uni_modules/lime-shared/throttle/index_old.ts create mode 100644 uni_modules/lime-shared/toArray/index.ts create mode 100644 uni_modules/lime-shared/toBoolean/index.ts create mode 100644 uni_modules/lime-shared/toNumber/index.ts create mode 100644 uni_modules/lime-shared/uniqid/index.ts create mode 100644 uni_modules/lime-shared/unitConvert/index.ts create mode 100644 uni_modules/lime-shared/useVModel/index.ts create mode 100644 uni_modules/lime-shared/vue/index.ts create mode 100644 uni_modules/lime-shared/while/index.ts create mode 100644 uni_modules/lime-style/changelog.md create mode 100644 uni_modules/lime-style/color/colorPalette.scss create mode 100644 uni_modules/lime-style/color/colors.scss create mode 100644 uni_modules/lime-style/functions.scss create mode 100644 uni_modules/lime-style/hairline.uts create mode 100644 uni_modules/lime-style/index.scss create mode 100644 uni_modules/lime-style/index.uts create mode 100644 uni_modules/lime-style/mixins/bem.scss create mode 100644 uni_modules/lime-style/mixins/create.scss create mode 100644 uni_modules/lime-style/mixins/directionalProperty.scss create mode 100644 uni_modules/lime-style/mixins/ellipsis.scss create mode 100644 uni_modules/lime-style/mixins/flex.scss create mode 100644 uni_modules/lime-style/mixins/hairline.scss create mode 100644 uni_modules/lime-style/mixins/platform.scss create mode 100644 uni_modules/lime-style/mixins/useTheme.scss create mode 100644 uni_modules/lime-style/mixins/utilities.scss create mode 100644 uni_modules/lime-style/package.json create mode 100644 uni_modules/lime-style/readme.md create mode 100644 uni_modules/lime-style/theme/dark.scss create mode 100644 uni_modules/lime-style/theme/default.scss create mode 100644 uni_modules/lime-style/token/dark.uts create mode 100644 uni_modules/lime-style/token/genFontMapToken.uts create mode 100644 uni_modules/lime-style/token/genFontSizes.uts create mode 100644 uni_modules/lime-style/token/genRadius.uts create mode 100644 uni_modules/lime-style/token/genSizeMapToken.uts create mode 100644 uni_modules/lime-style/token/interface.uts create mode 100644 uni_modules/lime-style/token/light.uts create mode 100644 uni_modules/lime-style/token/shared.uts create mode 100644 uni_modules/lime-style/token/useThemeMode.uts create mode 100644 uni_modules/lime-style/token/useThemeVars.uts create mode 100644 uni_modules/lime-style/token/vue.ts create mode 100644 uni_modules/lime-style/var.scss create mode 100644 uni_modules/uni-icons/changelog.md create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.uvue create mode 100644 uni_modules/uni-icons/components/uni-icons/uni-icons.vue create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.css create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons.ttf create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file.ts create mode 100644 uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js create mode 100644 uni_modules/uni-icons/package.json create mode 100644 uni_modules/uni-icons/readme.md create mode 100644 uni_modules/uni-scss/changelog.md create mode 100644 uni_modules/uni-scss/index.scss create mode 100644 uni_modules/uni-scss/package.json create mode 100644 uni_modules/uni-scss/readme.md create mode 100644 uni_modules/uni-scss/styles/index.scss create mode 100644 uni_modules/uni-scss/styles/setting/_border.scss create mode 100644 uni_modules/uni-scss/styles/setting/_color.scss create mode 100644 uni_modules/uni-scss/styles/setting/_radius.scss create mode 100644 uni_modules/uni-scss/styles/setting/_space.scss create mode 100644 uni_modules/uni-scss/styles/setting/_styles.scss create mode 100644 uni_modules/uni-scss/styles/setting/_text.scss create mode 100644 uni_modules/uni-scss/styles/setting/_variables.scss create mode 100644 uni_modules/uni-scss/styles/tools/functions.scss create mode 100644 uni_modules/uni-scss/theme.scss create mode 100644 uni_modules/uni-scss/variables.scss create mode 100644 uni_modules/uni-wifi/changelog.md create mode 100644 uni_modules/uni-wifi/package.json create mode 100644 uni_modules/uni-wifi/readme.md create mode 100644 uni_modules/uni-wifi/utssdk/app-android/config.json create mode 100644 uni_modules/uni-wifi/utssdk/app-android/index.uts create mode 100644 uni_modules/uni-wifi/utssdk/app-ios/Info.plist create mode 100644 uni_modules/uni-wifi/utssdk/app-ios/UTS.entitlements create mode 100644 uni_modules/uni-wifi/utssdk/app-ios/config.json create mode 100644 uni_modules/uni-wifi/utssdk/app-ios/index.uts create mode 100644 uni_modules/uni-wifi/utssdk/index.d.ts create mode 100644 uni_modules/uni-wifi/utssdk/interface.uts create mode 100644 uni_modules/uni-wifi/utssdk/uni.autotest.js create mode 100644 uni_modules/uni-wifi/utssdk/unierror.uts diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..165c177 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/unpackage \ No newline at end of file diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..7bdd7d6 --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,15 @@ +{ + "version" : "1.0", + "configurations" : [ + { + "customPlaygroundType" : "local", + "playground" : "custom", + "type" : "uni-app:app-android" + }, + { + "customPlaygroundType" : "local", + "playground" : "custom", + "type" : "uni-app:app-ios" + } + ] +} diff --git a/App.uvue b/App.uvue new file mode 100644 index 0000000..3d59d38 --- /dev/null +++ b/App.uvue @@ -0,0 +1,98 @@ + + + \ No newline at end of file diff --git a/api/httpInstance.uts b/api/httpInstance.uts new file mode 100644 index 0000000..52d39b9 --- /dev/null +++ b/api/httpInstance.uts @@ -0,0 +1,90 @@ +import { getToken } from "../common/auth" +import { clearAllData } from "../common/auth" + +// 可选后台服务器列表 +export type ServerItem = { + name: string + url: string +} + +export const SERVER_LIST: ServerItem[] = [ + { name: "正式 ssl (evmtapp.clenergy.com)", url: "https://evmtapp.clenergy.com:20096" } as ServerItem, + { name: "测试 (47.107.245.120)", url: "http://47.107.245.120:30081" } as ServerItem, + { name: "DEBUG (192.168.13.158)", url: "http://192.168.13.158:30081" } as ServerItem +] + +let recordBaseUrl: string | null = null + +// 读取当前后台服务器地址(内存 + 本地),未选择过则默认第一个 +export function getBaseUrl(): string { + if (recordBaseUrl != null && (recordBaseUrl as string).length > 0) { + return recordBaseUrl as string + } + const t = uni.getStorageSync('serverBaseUrl') as string | null + if (t != null && t.length > 0) { + recordBaseUrl = t + return t + } + return SERVER_LIST[0].url +} + +// 保存后台服务器地址(内存 + 本地),下次启动直接加载 +export function setBaseUrl(url: string) { + recordBaseUrl = url + uni.setStorageSync('serverBaseUrl', url) +} + +export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" + +// 请求参数类型 +export type HttpRequest = { + url: string + method?: HttpMethod + data?: any + header?: UTSJSONObject // 这里用 UTSJSONObject +} + +// 封装请求 +export function $http(params: HttpRequest): Promise { + return new Promise((resolve, reject) => { + + // 1. 准备 header + let baseHeader: UTSJSONObject = params.header ?? {} as UTSJSONObject + + baseHeader["Content-Type"] = "application/json" + + // 2. 读 token,有就加 Authorization + const token = getToken() + if (token != null && token.length > 0) { + baseHeader["Authorization"] = token + } + // console.log("url = ", getBaseUrl() + params.url) + // console.log("method = ", params.method) + // console.log("data = ", params.data) + // console.log("header = ", baseHeader) + + // 3. 发请求 + uni.request({ + url: getBaseUrl() + params.url, + method: params.method ?? "GET", + data: params.data ?? {} as UTSJSONObject, + header: baseHeader, + success: (res) => { + if(res.statusCode == 401) { + clearAllData() + uni.reLaunch({ + url: '/pages/login/login' + }) + } + const result: UTSJSONObject = { + statusCode: res.statusCode, + data: res.data + } as UTSJSONObject + resolve(result) + }, + fail: (err) => { + reject(err) + } + }) + }) +} \ No newline at end of file diff --git a/api/requestApi.uts b/api/requestApi.uts new file mode 100644 index 0000000..2a10dad --- /dev/null +++ b/api/requestApi.uts @@ -0,0 +1,80 @@ +import { $http } from "@/api/httpInstance.uts" + +export type RegisteredUserReq = { + userName: string, + userPassword: string, + rndcode: string +} +// 获取pinCode +export async function GetPindCodeReqApi(params: RegisteredUserReq): Promise{ + const body: UTSJSONObject = { + userName: params.userName, + userPassword: params.userPassword, + rndcode: params.rndcode + } as UTSJSONObject + + const res = await $http({ + url: "/ocpp-mtapp-api/api/v1/users/getPinCode", + method: "POST", + data: body + }) + return res +} + +// 注册用户 +export async function RegisteredUserReqApi(params: RegisteredUserReq): Promise{ + const body: UTSJSONObject = { + userName: params.userName, + userPassword: params.userPassword, + rndcode: params.rndcode + } as UTSJSONObject + + const res = await $http({ + url: "/ocpp-mtapp-api/api/v1/users/add", + method: "POST", + data: body + }) + return res +} + +export type LoginReq = { + username: string + password: string +} +// 登录请求 +export async function LoginReqApi(params: LoginReq): Promise{ + const body: UTSJSONObject = { + username: params.username, + password: params.password, + expirationTime: 0 + } as UTSJSONObject + + const res = await $http({ + url: "/ocpp-mtapp-api/api/v1/auth/login", + method: "POST", + data: body + }) + return res +} + +export type ModifyUserInfoReq = { + name?: string | null, + phone?: string | null, + password?: string | null, + nickName?: string | null +} +// 修改用户信息 +export async function ModifyUserInfoReqApi(params: ModifyUserInfoReq): Promise{ + const body: UTSJSONObject = { + name: params.name, + phone: params.phone, + password: params.password + } as UTSJSONObject + + const res = await $http({ + url: `/ocpp-mtapp-api/api/v1/users/${params.name}`, + method: "GET", + data: body + }) + return res +} diff --git a/api/responseData.uts b/api/responseData.uts new file mode 100644 index 0000000..14bce7c --- /dev/null +++ b/api/responseData.uts @@ -0,0 +1,32 @@ + +// 注册用户信息 +export type RegisteredUserResponse = { + result: string | null +} + +// 登录应答 +export type LoginResponse = { + refresh_token: string + token_type: string + username: string + token: string +} + +// 修改用户信息应答 +export type ModifyUserInfoResponse = { + userName: string | null, + userPassword: string | null, + salt: string | null, + sessionKey: string | null, + nickName: string | null, + avatarUrl: string | null, + gender: string | null, + country: string | null, + province: string | null, + city: string | null, + language: string | null, + created: string | null, + timestamp: string | null, + email: string | null, + phone: string | null +} diff --git a/common/auth.uts b/common/auth.uts new file mode 100644 index 0000000..a31b38d --- /dev/null +++ b/common/auth.uts @@ -0,0 +1,164 @@ +let recordToken: string | null = null +let recordUserName: string | null = null +let recordCharging: string | null = null + +// 保存 token(内存 + 本地) +export function setToken(token: string) { + recordToken = token + uni.setStorageSync('loginToken', token) +} + +// 读取 token +export function getToken(): string | null { + if (recordToken != null) { + return recordToken + } + const t = uni.getStorageSync('loginToken') as string | null + recordToken = t ?? null + return recordToken +} + +// 退出登录时清掉 +export function clearAllData() { + recordToken = null + recordUserName = null + recordCharging = null + uni.removeStorageSync('loginToken') + uni.removeStorageSync('loginUserName') + uni.removeStorageSync('ChargingFlag') + +} + +export function checkToken(): boolean { + const t = getToken() + if(t == null || (t.length) == 0) { + return false; + } + return true; +} + + +// 保存用户名 +export function setUserName(userName: string) { + recordUserName = userName + uni.setStorageSync('loginUserName', userName) +} + +// 读取用户名 +export function getUserName(): string | null { + if (recordUserName != null) { + return recordUserName + } + const t = uni.getStorageSync('loginUserName') as string | null + recordUserName = t ?? null + return recordUserName +} + + +// 保存充电标记 +export function setCharging(flag: string) { + recordCharging = flag + uni.setStorageSync('ChargingFlag', flag) +} + +// 读取充电标记 +export function getCharging(): string | null { + if (recordCharging != null) { + return recordCharging + } + const t = uni.getStorageSync('ChargingFlag') as string | null + recordCharging = t ?? null + return recordCharging +} + +// 清除充电标记 +export function clearCharging() { + recordCharging = null + uni.removeStorageSync('ChargingFlag') +} + +// 保存登录账号密码(记住密码) +export function setSavedAccount(account: string, password: string) { + uni.setStorageSync('savedAccount', account) + uni.setStorageSync('savedPassword', password) +} + +// 读取保存的账号 +export function getSavedAccount(): string { + const t = uni.getStorageSync('savedAccount') as string | null + return t ?? "" +} + +// 读取保存的密码 +export function getSavedPassword(): string { + const t = uni.getStorageSync('savedPassword') as string | null + return t ?? "" +} + +// 清除保存的账号密码 +export function clearSavedAccount() { + uni.removeStorageSync('savedAccount') + uni.removeStorageSync('savedPassword') +} + +// 历史账号记录 +export type AccountRecord = { + account: string, + password: string +} + +const ACCOUNT_HISTORY_MAX = 5 + +// 读取历史账号(最新登录的在前) +export function getAccountHistory(): AccountRecord[] { + const result: AccountRecord[] = [] + const raw = uni.getStorageSync('accountHistory') as string | null + if (raw == null || raw.length == 0) { + return result + } + try { + const arr = JSON.parse(raw) as UTSJSONObject[] | null + if (arr == null) return result + for (let i = 0; i < arr.length; i++) { + const obj = arr[i] + const acc = obj["account"] as string | null + const pwd = obj["password"] as string | null + if (acc != null && pwd != null) { + const rec: AccountRecord = { account: acc, password: pwd } + result.push(rec) + } + } + } catch (e: any) { + console.log('parse accountHistory error = ', e) + } + return result +} + +// 保存一条历史账号(同账号去重置顶,最多保留 5 条) +export function addAccountHistory(account: string, password: string) { + const old = getAccountHistory() + const list: AccountRecord[] = [] + const first: AccountRecord = { account: account, password: password } + list.push(first) + for (let i = 0; i < old.length && list.length < ACCOUNT_HISTORY_MAX; i++) { + const item = old[i] + if (item.account != account) { + list.push(item) + } + } + uni.setStorageSync('accountHistory', JSON.stringify(list)) +} + +// 删除指定账号的历史记录 +export function removeAccountHistory(account: string) { + const old = getAccountHistory() + const list: AccountRecord[] = [] + for (let i = 0; i < old.length; i++) { + const item = old[i] + if (item.account != account) { + list.push(item) + } + } + uni.setStorageSync('accountHistory', JSON.stringify(list)) +} + diff --git a/common/bleInfo.uts b/common/bleInfo.uts new file mode 100644 index 0000000..f58fc2a --- /dev/null +++ b/common/bleInfo.uts @@ -0,0 +1,41 @@ +let bleName: string | null = null +let bleMac: string | null = null + +// 保存蓝牙名字 +export function setName(name: string) { + bleName = name + uni.setStorageSync('bleName', name) +} + +// 读取蓝牙名字 +export function getName(): string | null { + if (bleName != null) { + return bleName + } + const t = uni.getStorageSync('bleName') as string | null + bleName = t ?? null + return bleName +} + +// 保存蓝牙mac +export function setMac(mac: string) { + bleMac = mac + uni.setStorageSync('bleMac', mac) +} + +// 读取蓝牙mac +export function getMac(): string | null { + if (bleMac != null) { + return bleMac + } + const t = uni.getStorageSync('bleMac') as string | null + bleMac = t ?? null + return bleMac +} + +export function clearAllData() { + bleName = null + bleMac = null + uni.removeStorageSync('bleName') + uni.removeStorageSync('bleMac') +} \ No newline at end of file diff --git a/docs/修改记录_2026-07-17_服务器切换与记住密码.md b/docs/修改记录_2026-07-17_服务器切换与记住密码.md new file mode 100644 index 0000000..97f76b4 --- /dev/null +++ b/docs/修改记录_2026-07-17_服务器切换与记住密码.md @@ -0,0 +1,52 @@ +# 修改记录:后台服务器切换 + 登录记住密码 + +日期:2026-07-17 + +本次未提交的修改主要包含两块功能:**我的页面可切换后台服务器**、**登录页记住密码**,另附登录页图标颜色调整。 + +## 1. 后台服务器动态切换 + +### `api/httpInstance.uts` + +- 原固定常量 `BASE_URL` 移除,改为可配置的服务器列表 `SERVER_LIST`: + - 正式 ssl(evmtapp.clenergy.com:20096,默认) + - 正式(47.107.245.120:30081) + - 测试 ssl(miniapp.test.springecloud.com:20095) + - 测试(192.168.13.243:30081) +- 新增 `getBaseUrl()`:按「内存缓存 → 本地存储(`serverBaseUrl`)→ 列表第一项」的顺序取当前服务器地址。 +- 新增 `setBaseUrl(url)`:同时写入内存和本地存储,下次启动直接生效。 +- `$http()` 请求地址由 `BASE_URL + params.url` 改为 `getBaseUrl() + params.url`。 + +### `pages/tabbar/my.uvue` + +- 「我的」页面新增「后台服务器」卡片,显示当前服务器名称。 +- 点击弹出 ActionSheet 选择服务器,选择后调用 `setBaseUrl()` 保存并 Toast 提示。 +- `onShow` 中调用 `initServerList()` 回显当前选择。 + +## 2. 登录页记住密码 + +### `common/auth.uts` + +新增 4 个本地存储方法: + +- `setSavedAccount(account, password)`:保存账号密码(`savedAccount` / `savedPassword`)。 +- `getSavedAccount()` / `getSavedPassword()`:读取,无则返回空串。 +- `clearSavedAccount()`:清除保存的账号密码。 + +### `pages/login/login.uvue` + +- 密码登录表单下方新增「remember password」勾选行(`rememberPwd`)。 +- `onLoad` 时若本地已保存密码,则自动勾选并回填账号、密码。 +- 登录成功后:勾选则 `setSavedAccount()` 保存,未勾选则 `clearSavedAccount()` 清除。 +- 顺带调整:输入框及眼睛图标的 `uni-icons` 统一加上 `color="#3A6FA1"`,并新增 `.remember-row` / `.remember-text` 样式。 + +## 3. 其他新增文件(未跟踪) + +- `static/androidApp22.png` +- `static/miniApp22.png` +- `uni_modules/android-ble/utssdk/mp-weixin.zip` + +## 注意事项 + +- 密码以**明文**存储在本地 storage(`savedPassword`),仅适合内部测试用途;如需对外发布,建议改为加密存储或仅保存账号。 +- 服务器地址本地存储 key 为 `serverBaseUrl`,清除应用数据后会恢复默认(列表第一项)。 diff --git a/docs/修改记录_2026-07-17_登录页历史账号选择.md b/docs/修改记录_2026-07-17_登录页历史账号选择.md new file mode 100644 index 0000000..9d2f319 --- /dev/null +++ b/docs/修改记录_2026-07-17_登录页历史账号选择.md @@ -0,0 +1,31 @@ +# 修改记录:登录页历史账号选择 + +日期:2026-07-17 + +本次修改在登录页新增**历史账号记录**功能:登录成功的账号密码都会保存到本地历史列表,下次登录时可直接选择回填,无需再次输入。 + +## 1. 历史账号存储层 + +### `common/auth.uts` + +新增 `AccountRecord` 类型(`account` + `password`)及 3 个方法: + +- `getAccountHistory()`:读取历史账号列表(最新登录的在前)。数据以 JSON 字符串存于本地存储 key `accountHistory`,解析失败时安全返回空数组。 +- `addAccountHistory(account, password)`:保存一条历史记录,同账号去重并置顶,最多保留 5 条(`ACCOUNT_HISTORY_MAX`)。 +- `removeAccountHistory(account)`:删除指定账号的历史记录。 + +## 2. 登录页 UI 与逻辑 + +### `pages/login/login.uvue` + +- 密码登录表单「remember password」下方新增「saved accounts (n)」折叠行,点击展开/收起历史账号列表(`historyOpen`);无历史记录时整个入口不显示。 +- 点击列表中某条账号:自动回填账号 + 密码,自动勾选「remember password」,并收起列表(`onPickHistory`)。 +- 每条记录右侧「✕」可单独删除该条历史(`onRemoveHistory`,`@tap.stop` 阻止触发选中)。 +- `onLoad` 时调用 `getAccountHistory()` 加载历史列表(`historyList`)。 +- 密码登录成功后无条件调用 `addAccountHistory()` 写入历史;原有单账号「记住密码」(`savedAccount` / `savedPassword`)逻辑保持不变。 +- 新增样式:`.history-row` / `.history-text` / `.history-list` / `.history-item` / `.history-account` / `.history-del`。 + +## 注意事项 + +- 历史账号的密码以**明文**存储在本地 storage(`accountHistory`),与已有 `savedPassword` 相同,仅适合内部测试用途;如需对外发布,建议改为加密存储或仅保存账号。 +- 历史列表上限 5 条,超出时最旧的记录被移除;清除应用数据后历史记录丢失。 diff --git a/docs/修改记录_2026-09-02_母乳杯蓝牙改造.md b/docs/修改记录_2026-09-02_母乳杯蓝牙改造.md new file mode 100644 index 0000000..dea101c --- /dev/null +++ b/docs/修改记录_2026-09-02_母乳杯蓝牙改造.md @@ -0,0 +1,77 @@ +# 修改记录 2026-09-02:母乳杯(CAIIC-MCM)蓝牙改造 + +将原充电桩 App 改造为母乳杯设备 App:通过蓝牙显示设备参数(温度、风扇转速)、 +查询设备系统运行状态、本地固件文件经 BLE OTA 升级设备。 +设备协议依据 `D:\caic-workspace\mothercup\mcm-ddc-04\docs\ble_protocol.md`(CAIIC BLE 通信协议 V1.0)。 + +## 协议要点(设备侧已实现) + +- GATT:Service `0000CA10-CA11-4B11-8000-CA11CA11CA11`,下行写特征 `...CA11...` + (**仅 Write Without Response**),上行 notify `...CA12...`;广播名 `CAIIC-MCM`;建议 MTU=247。 +- 二进制帧(小端):`[0xCA, TYPE, SEQ, LEN(u16), PAYLOAD, CRC16-CCITT(0x1021/初值0xFFFF)]`, + 开销 7 字节,payload ≤480;一帧可跨多次 BLE 写入,设备按字节流重组。 +- 帧类型:0x01 CLI_REQ / 0x02 CLI_RSP / 0x03 CLI_RSP_END;0x10 OTA_BEGIN / + 0x11 OTA_DATA / 0x12 OTA_END / 0x1F OTA_RSP。 +- OTA:双 bank 直写,设备 4KB 扇区缓冲,满扇区回 OTA_RSP(0x11) 作流控;status=2 按应答 + offset 重发重同步;OTA_END 整镜像 CRC32(zlib/IEEE)校验通过后设备 200ms 自动复位切 bank。 + +## 新增文件 + +- `src/mcm/Crc.uts` — CRC16-CCITT 与 CRC32-IEEE(zlib)实现。注意 uts number 位运算按 + 32 位有符号处理,CRC32 中间值保持在 Int 范围、无符号右移用 `(x>>1)&0x7FFFFFFF`, + 多项式用补码字面量 `-306674912`(0xEDB88320)。 +- `src/mcm/FrameCodec.uts` — 帧常量、`encodeFrame` 组帧、`FrameDecoder` 字节流重组 + (找 SOF → 头 → payload+CRC,错帧静默丢弃重找)、`pushU32LE/readU32LE`(纯算术实现, + 避免大数值位运算符号问题)。 +- `src/mcm/McmChannel.uts` — 连接级单例通道:`attach()` 挂全局 `bleData/bleState` 事件; + `sendFrame` 写队列串行化、整帧按 (att_mtu-3) 切片、写类型 WRITE_NO_RESPONSE; + `sendCli` CLI 命令透传串行执行(聚合 CLI_RSP 至 CLI_RSP_END,超时/断开兜底); + OTA_RSP 转发给 OtaManager。所有 Promise 只 resolve 不 reject。 +- `src/mcm/McmCommands.uts` — 业务命令:version/sysinfo/bankinfo/temp/fan, + 命令名集中在顶部常量。**温度/风扇命令(默认 temp/fan)固件尚未实现,解析失败页面显示 `--`**。 +- `src/mcm/OtaManager.uts` — OTA 状态机:BEGIN→按 4KB 扇区发 DATA 等 ack(流控/重同步)→END; + 断连或 `abort()` 协作式中止;进度/状态回调。 +- `pages/tabbar/sysStatus.uvue` — 系统状态页:version/bankinfo 概要 + sysinfo 原文控制台 + (运行时间/任务数/heap/任务表),下拉刷新。 +- `pages/tabbar/ota.uvue` — 固件升级页:手动输入本地 bin 路径(默认 + `/sdcard/Download/embeddedSrc.bin`),UTS 直调 Android `java.io.File/FileInputStream` + 读文件(`#ifdef APP-ANDROID`);显示大小与 CRC32;输入目标版本号(如 1.00.02→0x010002); + 进度条 + 日志;升级期间禁止断连/退出,离开页面自动中止。 + +## 修改文件 + +- `src/BluetoothManager.uts` — 新增 `sendDataBytes(data, writeType, cb)`(显式写类型, + 设备下行特征必须 writeType=1)与 `selectService(uuidPrefix)`(按服务 UUID 前缀 + `0000CA10` 选择 service+notify+write 组合,规避自动识别选错)。 +- `App.uvue` — `ConnectBle()` 在 scanServices 后先 `selectService("0000CA10")` 再订阅 notify; + `onLaunch` 调 `McmChannel.attach()`。 +- `pages/tabbar/home.uvue` — 重写为设备主页:扫描(过滤 CAIIC-MCM)/连接/断开; + 连接后温度、风扇转速每 2s 轮询显示,固件版本与运行 Bank 展示;notify 订阅成功 + (bleData type=1000)后协商 MTU=247。 +- `pages/tabbar/my.uvue` — 删除充电/离线行为入口(原已注释),启用"CLI 调试终端"入口。 +- `pages/bleTest/bluetoothOperation.uvue` — 重写为 CLI 调试终端:inline 命令输入 + + 应答文本流展示,复用全局 ConnectBle 连接流程。 +- `pages.json` — tabbar 改为 设备/状态/升级/my 四 tab(图标复用 static/tabbar 现有资源); + 移除 charge/order 及全部充电页面注册。 +- `manifest.json` — 应用名改为"母乳杯助手";iOS 蓝牙用途文案改为母乳杯描述。 +- `api/requestApi.uts` — 仅保留用户类接口(登录/注册/pinCode/修改资料),删除全部 + OCPP 充电与蓝牙绑定分享接口。 +- `api/responseData.uts` — 仅保留用户类响应类型。 + +## 删除 + +- 目录:`pages/startCharge/`、`pages/stopCharge/`、`pages/orderDetails/`、 + `pages/offlineBehavior/`、`pages/tabbar/charge.uvue`、`pages/tabbar/order.uvue`、 + `src/espBlufi/`(充电桩 JSON 分片协议,与 CAIIC 二进制帧协议不兼容)。 + +## 遗留事项 + +- **固件需新增温度/风扇 CLI 命令**(设备仓库 `D:\caic-workspace\mothercup`, + 在 `cli_core.c` 命令表注册;当前 APP 侧默认命令名 `temp`/`fan`,定名不同改 + `McmCommands.uts` 顶部常量即可)。 +- **云端固件接口未接入**:本期为本地 bin 文件升级;`api/httpInstance.uts`($http/token/ + 服务器切换)保留,后续按约定接口(查询最新版本 + 下载 URL)接入 ota 页。 +- uni-app x 无 CLI 构建手段,需在 HBuilderX 编译并真机(Android)验证: + version/sysinfo/bankinfo 显示、temp/fan(待固件)、本地 bin OTA 后 bankinfo 确认切 bank。 +- OTA 大数据量发送走 Write Without Response + 扇区级 ack 流控,若实测丢包导致 + status=2 重同步频繁,可在 OtaManager 扇区内加小窗口节流。 diff --git a/index.html b/index.html new file mode 100644 index 0000000..8793fef --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/main.uts b/main.uts new file mode 100644 index 0000000..8bdcc86 --- /dev/null +++ b/main.uts @@ -0,0 +1,9 @@ +import App from './App.uvue' + +import { createSSRApp } from 'vue' +export function createApp() { + const app = createSSRApp(App) + return { + app + } +} \ No newline at end of file diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..a4865e1 --- /dev/null +++ b/manifest.json @@ -0,0 +1,97 @@ +{ + "name": "smartassister", + "appid": "__UNI__884AC41", + "description": "", + "versionName": "1.0.1", + "versionCode": "110", + "uni-app-x": {}, + /* 快应用特有相关 */ + "quickapp": {}, + /* 小程序特有相关 */ + "mp-weixin": { + "appid": "wx50ffc3eab938ff4c", + "setting": { + "urlCheck": true, + "minified": true + }, + "usingComponents": true, + "permission": {} + }, + "mp-alipay": { + "usingComponents": true + }, + "mp-baidu": { + "usingComponents": true + }, + "mp-toutiao": { + "usingComponents": true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion": "3", + "app": { + "distribute": { + "icons": { + "android": { + "hdpi": "", + "xhdpi": "", + "xxhdpi": "", + "xxxhdpi": "" + } + } + } + }, + "app-android": { + "distribute": { + "modules": {}, + "icons": { + "hdpi": "/static/androidApp.png", + "xhdpi": "/static/androidApp.png", + "xxhdpi": "/static/androidApp.png", + "xxxhdpi": "/static/androidApp.png" + }, + "splashScreens": { + "default": {} + }, + "permissions": [ + "", + "", + "", + "" + ] + } + }, + "app-ios": { + "distribute": { + "modules": { + "uni-location": {}, + "uni-barcode-scanning": {} + }, + "icons": { + "appstore": "/static/androidApp.png" + }, + "splashScreens": {}, + "privacyDescription": { + "NSBluetoothPeripheralUsageDescription": "请允许使用蓝牙功能。该功能用于:连接母乳杯设备,显示温度、风扇转速等运行参数,查询设备系统状态,并通过蓝牙为设备升级固件。", + "NSBluetoothAlwaysUsageDescription": "请允许使用蓝牙功能。该功能用于:连接母乳杯设备,显示温度、风扇转速等运行参数,查询设备系统状态,并通过蓝牙为设备升级固件。", + "NSLocationWhenInUseUsageDescription": "Please allow the use of location services to identify the position of charging stations. This app promises that this function will not be used for any other purposes.", + "NSLocalNetworkUsageDescription": "Please allow the use of network connectivity for communication between the app and the cloud service backend to enable charging-related features. This app promises that it will only be used to complete charging-related services with the cloud backend and will not be utilized for any other purposes.", + "NSCameraUsageDescription": "Please allow the use of the camera function. This function is solely used for scanning the QR codes on charging piles to obtain information corresponding to the QR codes. This app promises that the function will not be used for any other purposes." + }, + "urltypes": "", + "capabilities": { + "entitlements": { + "com.apple.developer.associated-domains": [] + } + }, + "urlschemewhitelist": "", + "UIBackgroundModes": "" + } + }, + "web": { + "router": { + "mode": "" + } + } +} \ No newline at end of file diff --git a/pages.json b/pages.json new file mode 100644 index 0000000..71eb819 --- /dev/null +++ b/pages.json @@ -0,0 +1,111 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://doc.dcloud.net.cn/uni-app-x/collocation/pagesjson.html + { + "path": "pages/tabbar/home", + "style": { + "navigationBarTitleText": "母乳杯设备", + "navigationBarBackgroundColor": "#3A6FA1", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/tabbar/sysStatus", + "style": { + "navigationBarTitleText": "系统状态", + "navigationBarBackgroundColor": "#3A6FA1", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/tabbar/ota", + "style": { + "navigationBarTitleText": "固件升级", + "navigationBarBackgroundColor": "#3A6FA1" + } + }, + { + "path": "pages/tabbar/my", + "style": { + "navigationBarTitleText": "my", + "navigationBarBackgroundColor": "#3A6FA1" + } + }, + { + "path": "pages/register/register", + "style": { + "navigationBarTitleText": "register", + "navigationStyle": "default", + "navigationBarBackgroundColor": "#3A6FA1" + } + }, + { + "path": "pages/login/login", + "style": { + "navigationBarTitleText": "login", + "navigationStyle": "default", + "navigationBarBackgroundColor": "#3A6FA1" + } + }, + { + "path": "pages/displayUserInfo/displayUserInfo", + "style": { + "navigationBarTitleText": "user info", + "navigationBarBackgroundColor": "#3A6FA1" + } + }, + { + "path": "pages/bleTest/bluetoothList/bluetoothList", + "style": { + "navigationBarTitleText": "bluetooth list", + "enablePullDownRefresh": true + } + }, + { + "path": "pages/bleTest/bluetoothOperation/bluetoothOperation", + "style": { + "navigationBarTitleText": "CLI 调试终端" + } + } + ], + "tabBar": { + "color": "#999999", + "selectedColor": "#3A6FA1", + "backgroundColor": "#ffffff", + "borderStyle": "black", + "list": [ + { + "pagePath": "pages/tabbar/home", + "text": "设备", + "iconPath": "/static/tabbar/homeDefault.png", + "selectedIconPath": "/static/tabbar/homeActive.png" + }, + { + "pagePath": "pages/tabbar/sysStatus", + "text": "状态", + "iconPath": "/static/tabbar/mapDefault.png", + "selectedIconPath": "/static/tabbar/mapActive.png" + }, + { + "pagePath": "pages/tabbar/ota", + "text": "升级", + "iconPath": "/static/tabbar/chargeDefault.png", + "selectedIconPath": "/static/tabbar/chargeActive.png" + }, + { + "pagePath": "pages/tabbar/my", + "text": "my", + "iconPath": "/static/tabbar/myDefault.png", + "selectedIconPath": "/static/tabbar/myActive.png" + } + ] + } + }, + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app x", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8", + "navigationStyle": "default" + }, + "uniIdRouter": {} +} diff --git a/pages/bleTest/bluetoothList/bluetoothList.uvue b/pages/bleTest/bluetoothList/bluetoothList.uvue new file mode 100644 index 0000000..1480fcd --- /dev/null +++ b/pages/bleTest/bluetoothList/bluetoothList.uvue @@ -0,0 +1,142 @@ + + + + + diff --git a/pages/bleTest/bluetoothOperation/bluetoothOperation.uvue b/pages/bleTest/bluetoothOperation/bluetoothOperation.uvue new file mode 100644 index 0000000..42f11ee --- /dev/null +++ b/pages/bleTest/bluetoothOperation/bluetoothOperation.uvue @@ -0,0 +1,321 @@ + + + + + diff --git a/pages/displayUserInfo/displayUserInfo.uvue b/pages/displayUserInfo/displayUserInfo.uvue new file mode 100644 index 0000000..b27ff23 --- /dev/null +++ b/pages/displayUserInfo/displayUserInfo.uvue @@ -0,0 +1,35 @@ + + + + + diff --git a/pages/login/login.uvue b/pages/login/login.uvue new file mode 100644 index 0000000..6cffa76 --- /dev/null +++ b/pages/login/login.uvue @@ -0,0 +1,408 @@ + + + + + diff --git a/pages/register/register.uvue b/pages/register/register.uvue new file mode 100644 index 0000000..5aebe43 --- /dev/null +++ b/pages/register/register.uvue @@ -0,0 +1,344 @@ + + + + + diff --git a/pages/tabbar/home.uvue b/pages/tabbar/home.uvue new file mode 100644 index 0000000..81aeca1 --- /dev/null +++ b/pages/tabbar/home.uvue @@ -0,0 +1,429 @@ + + + + + diff --git a/pages/tabbar/my.uvue b/pages/tabbar/my.uvue new file mode 100644 index 0000000..57584a0 --- /dev/null +++ b/pages/tabbar/my.uvue @@ -0,0 +1,252 @@ + + + + + \ No newline at end of file diff --git a/pages/tabbar/ota.uvue b/pages/tabbar/ota.uvue new file mode 100644 index 0000000..b72b984 --- /dev/null +++ b/pages/tabbar/ota.uvue @@ -0,0 +1,380 @@ + + + + + diff --git a/pages/tabbar/sysStatus.uvue b/pages/tabbar/sysStatus.uvue new file mode 100644 index 0000000..5c1b53a --- /dev/null +++ b/pages/tabbar/sysStatus.uvue @@ -0,0 +1,196 @@ + + + + + diff --git a/platformConfig.json b/platformConfig.json new file mode 100644 index 0000000..896f669 --- /dev/null +++ b/platformConfig.json @@ -0,0 +1,7 @@ + +// 参考链接 https://doc.dcloud.net.cn/uni-app-x/tutorial/ls-plugin.html#setting +{ + "targets": [ + "APP-ANDROID" + ] +} \ No newline at end of file diff --git a/src/BluetoothManager.uts b/src/BluetoothManager.uts new file mode 100644 index 0000000..2f722ac --- /dev/null +++ b/src/BluetoothManager.uts @@ -0,0 +1,171 @@ +import {BleLib,MyApiResult,BleScanResult,BleServices,ScanRssiBR,WNuuid,ScanPara,WriteData} from "@/uni_modules/android-ble" + +// 统一拿到全局 ble 单例(仍然是 App.globalData.ble) +function ble(): BleLib { + const app = getApp() + return app.globalData.ble as BleLib +} + +// 手机蓝牙是否打开 true-打开 false-未打开 +export function isEnabled(): boolean { + return ble().isEnabled() +} + +// 监听系统蓝牙开关状态 res.data的值为true-打开 false-关闭 +export function OpenStateListener(cb: (res: MyApiResult) => void) { + ble().onBtOpenStateListener(cb) +} + +// 开始蓝牙扫描 +export function startScan(timeoutMs: number, cb: (res: MyApiResult) => void) { + // ble().startScanBleDevice(timeoutMs, cb) // 旧版本 + ble().onStartScanBle({ + scantime:timeoutMs, // 超时时间 ms + showEmptyName:0, // 0表示 不返回空的名称 1 表示可返回空名称蓝牙 + btNameFilter:"", // showEmptyName 为0有效 代表过滤相关的名字 为空表示不过滤 + onScanResult:(cb) + } as ScanPara) +} + +// 蓝牙扫描时监听蓝牙广播信号变化 实时回掉 多次 +export function scanDataListener(cb: (res: MyApiResult) => void) { + ble().onScanDataListener(cb) +} + +// 停止蓝牙扫描 +export function stopScan() { + ble().stopScanBle() +} + +// 蓝牙是否已连接 +export function isConnected(): boolean { + return ble().isConnected() +} + +// 获取已连接设备id +export function getConnectMac(): string { + return ble().getConnectMac() +} + +// 打开安卓蓝牙 +export function openBluetooth(cb: (res: MyApiResult) => void) { + ble().openBtBluetooth(cb) +} + + +// 连接蓝牙 +export function connect(mac: string, autoReconnect: boolean, cb: (res: MyApiResult) => void) { + ble().connect(mac, autoReconnect, cb) +} + +// 设置蓝牙超时时间 +export function connectTimeout(timeout: number): void { + ble().setBtConnectTimeout(timeout) +} + +// 设置自动连接间隔 +export function setBtAutoConnectTime(timeout: number): void { + ble().setBtAutoConnectTime(timeout) +} + +// 取消自动连接蓝牙 +export function cancelAutoConnectBt(): void { + ble().cancelAutoConnectBt() +} + +// 连接蓝牙后需要获扫描蓝牙与特征值 +export function scanServices(cb: (res: MyApiResult) => void) { + ble().scanServices(cb) +} + +// 选择可用服务 +export function setSelectUUID(len: number): void { + ble().setSelectUUID(len) // 长度不可超过 +} + +// 获取可用写通知服务 +export function getUUIDs(): string { + return ble().getUUIDs() +} + +// 断开蓝牙 +export function disConnect() { + ble().close() +} + +// 开启服务消息通知 +export function onNotityReadBleData(readNotification: boolean , cb: (res: MyApiResult) => void) { + const cBle = ble() + cBle.onNotityReadBleData(cBle.getSericUUID(), cBle.getNotityUUID(), readNotification, cb) +} + +// 获取自动识别读写服务uuid +export function getSericUUID(): string { + return ble().getSericUUID() +} + +// 获取自动识别通知uuid +export function getNotityUUID(): string { + return ble().getNotityUUID() +} + +// 获取自动识写入uuid +export function getwriteUUID(): string { + return ble().getwriteUUID() +} + + +// 发送数据 16进制数组 b:number[]=[0x55,0xff,0xAA] as number[]; +export function sendData(data: number[], cb: (res: MyApiResult) => void) { + const b = ble() + b.writeDataToBle(b.getSericUUID(), b.getwriteUUID(), data, cb) +} + +// 发送数据(显式写类型):writeType 0=WRITE(有响应) 1=WRITE_NO_RESPONSE(无响应) +// CAIIC-MCM 设备的下行特征仅支持 Write Without Response,必须用 writeType=1 +export function sendDataBytes(data: number[], writeType: number, cb: (res: MyApiResult) => void) { + const b = ble() + const wd: WriteData = { + serviceId: b.getServiceUUID(), + characteristicId: b.getWriteUUID(), + writeType: writeType, + data: data, + fenbao: false + } as WriteData + b.sendData(wd, cb) +} + +// 按服务 UUID 前缀选择 service+notify+write 组合(如 "0000CA10"),找到返回 true +export function selectService(serviceUuidPrefix: string): boolean { + const b = ble() + const list = b.getUUIDs() as any as WNuuid[] + if (list == null) return false + const prefix = serviceUuidPrefix.toUpperCase() + for (let i = 0; i < list.length; i++) { + if (list[i].serviceId.toUpperCase().indexOf(prefix) == 0) { + b.setSelectUUID(i) + return true + } + } + return false +} + +// 发送16进制字符数据 var d="00FFAABB" +export function sendHexString(data: string, cb: (res: MyApiResult) => void) { + const b = ble() + b.writeStringDataToBle(b.getSericUUID(), b.getwriteUUID(), data, cb) +} + +// 设置mtu(仅安卓) +export function setMtu(len: number, cb: (res: MyApiResult) => void) { + ble().setMtu(len, cb) +} + +// 读取rssi 信号 需要蓝牙已经连接 +export function readRssi(cb: (res: MyApiResult) => void) { + ble().readRssi(cb) +} + +// 字符转16进制拼接字符 string2ByteStrWithCharset +// 进制拼接字符转文本 byte2StringWithCharset +// 判断对端蓝牙设备的虚拟MAC地址是否有效(鸿蒙) isValidRandomDeviceId \ No newline at end of file diff --git a/src/commonFunctions.uts b/src/commonFunctions.uts new file mode 100644 index 0000000..954ce65 --- /dev/null +++ b/src/commonFunctions.uts @@ -0,0 +1,49 @@ +export function bytesToAscii(bytes: number[]): string { + let s = '' + for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i] & 0xFF) + return s +} + +export function asciiToBytes(s: string): Array { + const out = [] as Array + for (let i = 0; i < s.length; i++) { + const c = s.charCodeAt(i) + out.push(c == null ? 0 : c) + } + return out +} + +export function bytesToHex(bytes: number[]): string { + let s = '' + for (let i = 0; i < bytes.length; i++) { + const v = bytes[i] & 0xFF + s += (v < 16 ? '0' : '') + v.toString(16) + } + return s +} + +// "4D 00 00 01 01" => 0x4d 0x00 0x00 0x01 0x01 +export function parseHexBytes(input: string): Array | null { + let s = input.trim() + if (s.length == 0) return [] as Array + + // 逗号、换行、制表符 全部变空格(全局) + s = s.replace(/[,\n\t]/g, " ") + + // 去掉 0x / 0X(全局) + s = s.replace(/0x/ig, "") + + const parts = s.split(" ") + const out = [] as Array + + for (let i = 0; i < parts.length; i++) { + const p = parts[i].trim() + if (p.length == 0) continue + + const token = (p.length == 1) ? ("0" + p) : p + const v = parseInt(token, 16) + if (isNaN(v) || v < 0 || v > 255) return null + out.push(v) + } + return out +} \ No newline at end of file diff --git a/src/mcm/Crc.uts b/src/mcm/Crc.uts new file mode 100644 index 0000000..6795e13 --- /dev/null +++ b/src/mcm/Crc.uts @@ -0,0 +1,47 @@ +/** + * CRC 校验算法(CAIIC BLE 协议 V1.0) + * - crc16Ccitt: 帧校验,CRC16-CCITT poly 0x1021 初值 0xFFFF + * - crc32Ieee : 固件镜像校验,zlib CRC32 poly 0xEDB88320 初值/异或出 0xFFFFFFFF + * + * 注意:uts number 位运算按 32 位有符号处理,CRC32 中间值全部保持在 Int 范围内, + * 无符号右移用 (x >> 1) & 0x7FFFFFFF 实现;最终返回值转为无符号(0..2^32-1)。 + */ + +// 0xEDB88320 的 32 位补码形式(避免字面量超出 Int 范围) +const CRC32_POLY = -306674912 + +export function crc16Ccitt(data: number[], offset: number, len: number): number { + let crc = 0xFFFF + for (let i = offset; i < offset + len; i++) { + crc = crc ^ ((data[i] & 0xFF) << 8) + for (let k = 0; k < 8; k++) { + if ((crc & 0x8000) != 0) { + crc = ((crc << 1) ^ 0x1021) & 0xFFFF + } else { + crc = (crc << 1) & 0xFFFF + } + } + } + return crc +} + +export function crc32Ieee(data: number[]): number { + let crc = -1 // 0xFFFFFFFF + for (let i = 0; i < data.length; i++) { + crc = crc ^ (data[i] & 0xFF) + for (let k = 0; k < 8; k++) { + const shifted = (crc >> 1) & 0x7FFFFFFF + if ((crc & 1) != 0) { + crc = shifted ^ CRC32_POLY + } else { + crc = shifted + } + } + } + crc = crc ^ -1 + // 转为无符号返回值(避免后续 >> 算术右移出问题) + if (crc < 0) { + return crc + 4294967296 + } + return crc +} diff --git a/src/mcm/FrameCodec.uts b/src/mcm/FrameCodec.uts new file mode 100644 index 0000000..ea7c6a9 --- /dev/null +++ b/src/mcm/FrameCodec.uts @@ -0,0 +1,113 @@ +/** + * CAIIC BLE 协议 V1.0 帧编解码 + * 帧格式(小端):[0]=0xCA SOF, [1]=TYPE, [2]=SEQ, [3:4]=LEN(u16 LE), + * [5..]=PAYLOAD(LEN 字节), 末尾 2B CRC16-CCITT(覆盖 TYPE..PAYLOAD, LE) + * 帧开销 7 字节(头 5 + CRC 2),payload 上限 480。 + * 一个协议帧可跨多次 BLE 写入传输,接收侧按字节流重组。 + */ +import { crc16Ccitt } from "./Crc.uts" + +export const FRAME_SOF = 0xCA +export const FRAME_OVERHEAD = 7 +export const MAX_PAYLOAD = 480 + +// 帧类型 +export const TYPE_CLI_REQ = 0x01 // 手机→设备 命令文本(≤63B) +export const TYPE_CLI_RSP = 0x02 // 设备→手机 应答文本分块 +export const TYPE_CLI_RSP_END = 0x03 // 设备→手机 {status u8} 0=ok 1=未知命令/行超长 +export const TYPE_OTA_BEGIN = 0x10 // {total_size u32, image_crc32 u32, version u32} +export const TYPE_OTA_DATA = 0x11 // {offset u32, data…} +export const TYPE_OTA_END = 0x12 // {crc32 u32} +export const TYPE_OTA_RSP = 0x1F // {cmd_echo u8, status u8, offset u32} + +export type BleFrame = { + type: number, + seq: number, + payload: number[] +} + +/** 组帧:SOF + TYPE + SEQ + LEN + PAYLOAD + CRC16 */ +export function encodeFrame(type: number, seq: number, payload: number[]): number[] { + const len = payload.length + const out = [] as number[] + out.push(FRAME_SOF) + out.push(type & 0xFF) + out.push(seq & 0xFF) + out.push(len & 0xFF) + out.push((len >> 8) & 0xFF) + for (let i = 0; i < len; i++) { + out.push(payload[i] & 0xFF) + } + // CRC 覆盖 TYPE..PAYLOAD,即 out 中索引 [1, 5+len) + const crc = crc16Ccitt(out, 1, 4 + len) + out.push(crc & 0xFF) + out.push((crc >> 8) & 0xFF) + return out +} + +/** 字节流组包器:跨 notify 分片重组,CRC 错/超长静默丢弃并重新找 SOF */ +export class FrameDecoder { + buf = [] as number[] + + reset() { + this.buf = [] as number[] + } + + feed(data: number[]): BleFrame[] { + const frames = [] as BleFrame[] + for (let i = 0; i < data.length; i++) { + this.buf.push(data[i] & 0xFF) + } + while (true) { + // 重新找 SOF + while (this.buf.length > 0 && this.buf[0] != FRAME_SOF) { + this.buf.shift() + } + if (this.buf.length < 5) break + const len = this.buf[3] | (this.buf[4] << 8) + if (len > MAX_PAYLOAD) { + this.buf.shift() // 非法长度,丢弃该 SOF 继续找 + continue + } + const total = 5 + len + 2 + if (this.buf.length < total) break // 帧未收完,等下一包 + const crc = crc16Ccitt(this.buf, 1, 4 + len) + const rxCrc = this.buf[5 + len] | (this.buf[5 + len + 1] << 8) + if (crc != rxCrc) { + this.buf.shift() // CRC 错,丢弃该 SOF 重新找 + continue + } + const payload = [] as number[] + for (let i = 0; i < len; i++) { + payload.push(this.buf[5 + i]) + } + frames.push({ + type: this.buf[1], + seq: this.buf[2], + payload: payload + } as BleFrame) + this.buf.splice(0, total) + } + return frames + } +} + +/** 小端 u32 打包(纯算术实现,避免大数值位运算的符号问题) */ +export function pushU32LE(out: number[], v: number) { + let x = v % 4294967296 + out.push(x % 256) + x = Math.floor(x / 256) + out.push(x % 256) + x = Math.floor(x / 256) + out.push(x % 256) + x = Math.floor(x / 256) + out.push(x % 256) +} + +/** 小端 u32 解包(纯算术实现) */ +export function readU32LE(data: number[], offset: number): number { + return (data[offset] & 0xFF) + + (data[offset + 1] & 0xFF) * 256 + + (data[offset + 2] & 0xFF) * 65536 + + (data[offset + 3] & 0xFF) * 16777216 +} diff --git a/src/mcm/McmChannel.uts b/src/mcm/McmChannel.uts new file mode 100644 index 0000000..7504f20 --- /dev/null +++ b/src/mcm/McmChannel.uts @@ -0,0 +1,209 @@ +/** + * CAIIC-MCM 连接级通道(单例) + * - 经 uni.$on("bleData") 接收原始字节,FrameDecoder 字节流重组后按帧类型分发 + * - sendFrame:整帧按 (att_mtu-3) 切片串行写入(写特征为 Write Without Response) + * - sendCli :CLI 命令透传,串行执行(协议要求一条命令应答完再发下一条) + * - OTA_RSP 帧转发给 OtaManager 注册的 handler + * + * 约定:所有接口的 Promise 只 resolve 不 reject,失败通过返回值表达(uts 兼容性考虑)。 + */ +import * as Ble from "../BluetoothManager.uts" +import { MyApiResult } from "@/uni_modules/android-ble" +import { + FrameDecoder, BleFrame, encodeFrame, + TYPE_CLI_REQ, TYPE_CLI_RSP, TYPE_CLI_RSP_END, TYPE_OTA_RSP +} from "./FrameCodec.uts" +import { asciiToBytes, bytesToAscii } from "../commonFunctions.uts" + +export type CliResult = { + text: string, // 聚合的应答文本 + status: number // 0=ok 1=未知命令/行超长 -1=超时 -2=命令超长 -3=发送失败 -4=连接断开 +} + +type CliJob = { + textChunks: string[], + resolve: (r: CliResult) => void, + timer: number +} + +const CLI_MAX_CMD_BYTES = 63 + +let txSeq = 0 +let maxWriteBytes = 20 // 单次 BLE 写入上限 = att_mtu - 3,未协商 MTU 时按 20 兼容 +let decoder = new FrameDecoder() +let attached = false + +let cliJob: CliJob | null = null +let cliChain: Promise = Promise.resolve(true) +let writeChain: Promise = Promise.resolve(true) + +let otaRspHandler: ((payload: number[]) => void) | null = null +let disconnectHandler: (() => void) | null = null + +// ================= 接收 ================= + +function dispatchFrame(frame: BleFrame) { + if (frame.type == TYPE_CLI_RSP) { + const job = cliJob + if (job != null) { + job.textChunks.push(bytesToAscii(frame.payload)) + } + } else if (frame.type == TYPE_CLI_RSP_END) { + const job = cliJob + if (job != null) { + cliJob = null + clearTimeout(job.timer) + let text = "" + for (let i = 0; i < job.textChunks.length; i++) { + text += job.textChunks[i] + } + const status = frame.payload.length > 0 ? frame.payload[0] : 1 + job.resolve({ text: text, status: status } as CliResult) + } + } else if (frame.type == TYPE_OTA_RSP) { + const h = otaRspHandler + if (h != null) { + h(frame.payload) + } + } +} + +function onBleData(res: MyApiResult) { + if (res.type != 0) return + const data = res.data as number[] + const frames = decoder.feed(data) + for (let i = 0; i < frames.length; i++) { + dispatchFrame(frames[i]) + } +} + +function onBleState(state: number) { + // 10000=连接失败 10001=已断开(见 home 页既有约定) + if (state == 10000 || state == 10001) { + resetChannel() + const h = disconnectHandler + if (h != null) h() + } +} + +/** 断连/异常时复位通道:挂起的 CLI 命令以 -4 结束 */ +export function resetChannel() { + decoder.reset() + txSeq = 0 + const job = cliJob + if (job != null) { + cliJob = null + clearTimeout(job.timer) + let text = "" + for (let i = 0; i < job.textChunks.length; i++) { + text += job.textChunks[i] + } + job.resolve({ text: text, status: -4 } as CliResult) + } +} + +// ================= 生命周期 ================= + +/** 注册全局蓝牙事件监听(幂等,App onLaunch 时调用一次) */ +export function attach() { + if (attached) return + attached = true + uni.$on("bleData", (res: any) => onBleData(res as MyApiResult)) + uni.$on("bleState", (state: any) => onBleState(state as number)) +} + +/** 记录协商后的 att_mtu,写切片大小 = mtu - 3(协议上限 244) */ +export function setMtuSize(mtu: number) { + let w = mtu - 3 + if (w > 244) w = 244 + if (w < 20) w = 20 + maxWriteBytes = w +} + +export function getMaxWriteBytes(): number { + return maxWriteBytes +} + +export function setOtaRspHandler(h: ((payload: number[]) => void) | null) { + otaRspHandler = h +} + +export function setDisconnectHandler(h: (() => void) | null) { + disconnectHandler = h +} + +// ================= 发送 ================= + +function sendOnce(chunk: number[]): Promise { + return new Promise((resolve) => { + // 设备下行特征仅支持 Write Without Response → writeType=1 + Ble.sendDataBytes(chunk, 1, (res: MyApiResult) => resolve(res)) + }) +} + +async function sendFrameImpl(type: number, payload: number[]): Promise { + const frame = encodeFrame(type, txSeq & 0xFF, payload) + txSeq = (txSeq + 1) & 0xFF + let offset = 0 + while (offset < frame.length) { + const chunkLen = Math.min(frame.length - offset, maxWriteBytes) + const chunk = [] as number[] + for (let i = 0; i < chunkLen; i++) { + chunk.push(frame[offset + i]) + } + const res = await sendOnce(chunk) + if (res.type != 0) { + return false + } + offset += chunkLen + } + return true +} + +/** 发送一个协议帧(写队列串行化,帧间不会交错) */ +export function sendFrame(type: number, payload: number[]): Promise { + const p = writeChain.then((): Promise => sendFrameImpl(type, payload)) + writeChain = p + return p +} + +function sendCliImpl(cmd: string, timeoutMs: number): Promise { + return new Promise((resolve) => { + const payload = asciiToBytes(cmd) + if (payload.length > CLI_MAX_CMD_BYTES) { + resolve({ text: "", status: -2 } as CliResult) + return + } + const job: CliJob = { + textChunks: [] as string[], + resolve: resolve, + timer: 0 + } as CliJob + job.timer = setTimeout(() => { + if (cliJob == job) { + cliJob = null + let text = "" + for (let i = 0; i < job.textChunks.length; i++) { + text += job.textChunks[i] + } + resolve({ text: text, status: -1 } as CliResult) + } + }, timeoutMs) + cliJob = job + sendFrame(TYPE_CLI_REQ, payload).then((ok) => { + if (!ok && cliJob == job) { + cliJob = null + clearTimeout(job.timer) + resolve({ text: "", status: -3 } as CliResult) + } + }) + }) +} + +/** CLI 命令透传:串行执行,聚合 CLI_RSP 文本直到 CLI_RSP_END;只 resolve 不 reject */ +export function sendCli(cmd: string, timeoutMs: number = 3000): Promise { + attach() + const p = cliChain.then((): Promise => sendCliImpl(cmd, timeoutMs)) + cliChain = p.then((): boolean => true) + return p +} diff --git a/src/mcm/McmCommands.uts b/src/mcm/McmCommands.uts new file mode 100644 index 0000000..490c8ca --- /dev/null +++ b/src/mcm/McmCommands.uts @@ -0,0 +1,65 @@ +/** + * CAIIC-MCM 业务命令封装(基于 CLI 透传) + * 命令名集中在顶部常量,固件侧命令定名后只需改这里。 + * 注意:固件当前已实现 version/sysinfo/bankinfo; + * 温度/风扇命令(默认 temp/fan)待固件新增,解析失败返回 null 由页面显示 "--"。 + */ +import { sendCli, CliResult } from "./McmChannel.uts" + +const CMD_VERSION = "version" +const CMD_SYSINFO = "sysinfo" +const CMD_BANKINFO = "bankinfo" +const CMD_TEMPERATURE = "temp" +const CMD_FAN_SPEED = "fan" + +/** 从应答文本中提取第一个数值(整数或小数),提取不到返回 null */ +function parseFirstNumber(text: string): number | null { + const m = text.match(/-?\d+(\.\d+)?/) + if (m == null) return null + const m0 = m[0] + if (m0 == null) return null + const v = parseFloat(m0) + if (isNaN(v)) return null + return v +} + +/** 固件版本号原文,如 "V1.00.01";失败返回 null */ +export async function getVersion(): Promise { + const r: CliResult = await sendCli(CMD_VERSION) + if (r.status != 0) return null + const t = r.text.trim() + return t.length > 0 ? t : null +} + +/** 系统运行状态原文(运行时间/任务数/heap/任务表),失败返回 null */ +export async function getSysInfo(): Promise { + const r: CliResult = await sendCli(CMD_SYSINFO, 5000) + if (r.status != 0) return null + return r.text +} + +/** bank 信息原文(当前运行 bank 与 bootsetting),失败返回 null */ +export async function getBankInfo(): Promise { + const r: CliResult = await sendCli(CMD_BANKINFO) + if (r.status != 0) return null + return r.text +} + +/** 温度(单位由固件定义,℃),失败返回 null */ +export async function getTemperature(): Promise { + const r: CliResult = await sendCli(CMD_TEMPERATURE) + if (r.status != 0) return null + return parseFirstNumber(r.text) +} + +/** 风扇转速(RPM),失败返回 null */ +export async function getFanSpeed(): Promise { + const r: CliResult = await sendCli(CMD_FAN_SPEED) + if (r.status != 0) return null + return parseFirstNumber(r.text) +} + +/** 通用 CLI 命令(调试终端用) */ +export async function execCli(cmd: string, timeoutMs: number = 5000): Promise { + return await sendCli(cmd, timeoutMs) +} diff --git a/src/mcm/OtaManager.uts b/src/mcm/OtaManager.uts new file mode 100644 index 0000000..7c33280 --- /dev/null +++ b/src/mcm/OtaManager.uts @@ -0,0 +1,214 @@ +/** + * CAIIC-MCM BLE OTA 升级状态机(协议第 5 节:双 bank 直写) + * 流程:OTA_BEGIN{size,crc32,version} → 等 OTA_RSP(0x10,ok) + * → OTA_DATA{offset,data} 按 4KB 扇区发送,满扇区等 OTA_RSP(0x11,ok) 作流控 + * (status=2 时按应答 offset 重发重同步) + * → OTA_END{crc32} → 等 OTA_RSP(0x12,ok) → 设备 200ms 后自动复位切 bank + * 约定:Promise 只 resolve 不 reject;断连或 abort() 协作式中止。 + */ +import { + sendFrame, setOtaRspHandler, setDisconnectHandler +} from "./McmChannel.uts" +import { + TYPE_OTA_BEGIN, TYPE_OTA_DATA, TYPE_OTA_END, + MAX_PAYLOAD, pushU32LE, readU32LE +} from "./FrameCodec.uts" +import { crc32Ieee } from "./Crc.uts" + +export type OtaCallbacks = { + onProgress: (percent: number) => void, // 0~100 + onState: (msg: string) => void +} + +type OtaAck = { + received: boolean, // false=超时 + status: number, // 0 ok / 1 bad_frame / 2 bad_state(offset 乱序) / 3 size_too_big / 4 crc_fail / 5 flash_fail + offset: number +} + +type OtaWaiter = { + echo: number, + timer: number, + resolve: (ack: OtaAck) => void +} + +const BANK_MAX = 0x38000 // 224KB bank 上限 +const SECTOR_SIZE = 4096 // 设备 4KB 扇区缓冲,攒满回 ack +const DATA_PER_FRAME = MAX_PAYLOAD - 4 // OTA_DATA 帧数据段上限(4 字节 offset + 476 数据 = 480) + +let waiter: OtaWaiter | null = null +let aborted = false +let running = false + +function statusText(status: number): string { + switch (status) { + case 1: return "bad_frame" + case 2: return "bad_state" + case 3: return "size_too_big" + case 4: return "crc_fail" + case 5: return "flash_fail" + } + return "unknown(" + status + ")" +} + +function onOtaRsp(payload: number[]) { + // payload: {cmd_echo u8, status u8, offset u32 LE} + if (payload.length < 6) return + const w = waiter + if (w == null) return + if (payload[0] != w.echo) return // 非当前等待的应答(如末扇区 ack 迟到),忽略 + waiter = null + clearTimeout(w.timer) + w.resolve({ received: true, status: payload[1], offset: readU32LE(payload, 2) } as OtaAck) +} + +function waitRsp(echo: number, timeoutMs: number): Promise { + return new Promise((resolve) => { + const w: OtaWaiter = { echo: echo, timer: 0, resolve: resolve } as OtaWaiter + w.timer = setTimeout(() => { + if (waiter == w) { + waiter = null + resolve({ received: false, status: -1, offset: 0 } as OtaAck) + } + }, timeoutMs) + waiter = w + }) +} + +export function isRunning(): boolean { + return running +} + +/** 协作式中止:发送循环在下一扇区边界停止 */ +export function abort() { + aborted = true + const w = waiter + if (w != null) { + waiter = null + clearTimeout(w.timer) + w.resolve({ received: false, status: -2, offset: 0 } as OtaAck) + } +} + +async function run(image: number[], version: number, cb: OtaCallbacks): Promise { + const total = image.length + const crc = crc32Ieee(image) + + // 1. OTA_BEGIN + const pb = [] as number[] + pushU32LE(pb, total) + pushU32LE(pb, crc) + pushU32LE(pb, version) + cb.onState("发送 OTA_BEGIN(" + total + " 字节)...") + if (!await sendFrame(TYPE_OTA_BEGIN, pb)) { + cb.onState("OTA_BEGIN 发送失败") + return false + } + let ack = await waitRsp(TYPE_OTA_BEGIN, 5000) + if (!ack.received) { + cb.onState(ack.status == -2 ? "升级已中止" : "等待 OTA_BEGIN 应答超时") + return false + } + if (ack.status != 0) { + cb.onState("设备拒绝升级: " + statusText(ack.status)) + return false + } + + // 2. OTA_DATA:按 4KB 扇区发送,满扇区等 ack(流控) + let offset = 0 + while (offset < total) { + if (aborted) { + cb.onState("升级已中止") + return false + } + const sectorEnd = Math.min(offset + SECTOR_SIZE, total) + let pos = offset + while (pos < sectorEnd) { + const n = Math.min(sectorEnd - pos, DATA_PER_FRAME) + const payload = [] as number[] + pushU32LE(payload, pos) + for (let i = 0; i < n; i++) { + payload.push(image[pos + i]) + } + if (!await sendFrame(TYPE_OTA_DATA, payload)) { + cb.onState("OTA_DATA 写入失败 offset=" + pos) + return false + } + pos += n + cb.onProgress(Math.floor(pos * 100 / total)) + } + if (sectorEnd - offset >= SECTOR_SIZE) { + // 满扇区:设备擦写完成后回 OTA_RSP(0x11)(擦写期间关中断数十 ms,超时给足) + ack = await waitRsp(TYPE_OTA_DATA, 8000) + if (!ack.received) { + cb.onState(ack.status == -2 ? "升级已中止" : "等待扇区应答超时 offset=" + offset) + return false + } + if (ack.status == 2) { + // offset 乱序:从设备期望的 offset 重发重同步 + offset = ack.offset + cb.onState("重同步至 offset=" + offset) + continue + } + if (ack.status != 0) { + cb.onState("设备写入错误: " + statusText(ack.status)) + return false + } + } + offset = sectorEnd + } + + // 3. OTA_END:设备 flush 尾部并整镜像回读校验 CRC32 + const pe = [] as number[] + pushU32LE(pe, crc) + cb.onState("发送 OTA_END,设备校验镜像 ...") + if (!await sendFrame(TYPE_OTA_END, pe)) { + cb.onState("OTA_END 发送失败") + return false + } + ack = await waitRsp(TYPE_OTA_END, 15000) + if (!ack.received) { + cb.onState(ack.status == -2 ? "升级已中止" : "等待 OTA_END 应答超时") + return false + } + if (ack.status != 0) { + cb.onState("镜像校验失败: " + statusText(ack.status)) + return false + } + cb.onProgress(100) + cb.onState("升级成功,设备约 200ms 后自动复位运行新固件,请重新连接") + return true +} + +/** + * 开始 OTA 升级 + * @param image 固件 bin 文件全部字节 + * @param version 版本号 u32,如 0x010002 表示 V1.00.02 + */ +export async function start(image: number[], version: number, cb: OtaCallbacks): Promise { + if (running) { + cb.onState("已有升级任务进行中") + return false + } + if (image.length < 4 || image.length > BANK_MAX) { + cb.onState("镜像大小非法(4 ~ " + BANK_MAX + " 字节)") + return false + } + running = true + aborted = false + setOtaRspHandler((payload: number[]) => onOtaRsp(payload)) + setDisconnectHandler(() => { + aborted = true + abort() + }) + const ok = await run(image, version, cb) + running = false + setOtaRspHandler(null) + setDisconnectHandler(null) + const w = waiter + if (w != null) { + waiter = null + clearTimeout(w.timer) + } + return ok +} diff --git a/static/androidApp.png b/static/androidApp.png new file mode 100644 index 0000000000000000000000000000000000000000..8737512f8422df41dd0a8c87b7d1c9fd80ec6c59 GIT binary patch literal 617953 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
2?7O?}~Ea^_Q<*IbT;hn``S=-ncyD+|u&g zzSJDpf9PW`##`oiJ}3u;8H@_*3#H%4FUWX<<&9PyNbCbZ**A>d-19dwDw~ND@MMq- zZHcN{NZJn>etqwY4jK&>po&HWk6^}>td2nj5(8kP0O z>ea9MoXAHoi7NLZF{Q|bMx(X17nsl1N7MLOy59CkMV?f?NiSWWZzUru>4mU{3xkT| zYG-HXd;jDⅇ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%0AK?-GC`gCOnl?G zifdFz&f}LO0rXbhaw)*^jxV%!#B4kmG4S3iy!EsV3%(Jse<_@))d&L4UVY6?UeD=9 z@ax_z-@im60-ORglMS>YZw+-_2GWXNX~DW=^@v)DS<&29Vx<*Um$w~_swVhdDmgwy zew*Pxr6q656IN_KMLNqGM6_C|47&^CR>l641|l*;8Y9}xnnx~nSRC6e*IaD7^1TUv z()o;2>xlw`{GEVG^*2h(E9IqZ99jTX9hRM`4I4%zFt0>YNQsG?E)_4V*_6xKa5Q3I zQeZ~(CK?!e{hjDQ53Ly{yao?zn;Dj!S;>B& z?RbqaDOP>DQu-?uoxeE^6u}JixQ*k#W-p4uY1Ct~ZgDLCs=h919i$<438JI=OQR!+ z`zu)(Jph>JpW#^XJ@?u7{fK|&%l5Ss60Z`h8k(2r5qSdum2E1&H+<(S^?N_t@1O6i z9jNdBD3G!-h}?D>C*owP9RLv$b`=_JTv_+s^EGxGEtECK6G?mJ+YJ zw5|7y><7qBf(U?(llMA1F*1HG9+KGuBi9A8l-#I8c}o^%P<^fVm*Tw3eyuVlwYM$n zXUpuXrQ(%u7hy5`@lV|I?|*)0W9F>i?#;o;`oWjae&c`m9siZDO{@9d<|IT9Wc81< zAkp~ksU(FWrSqM*$Z}^24FM9*)hLa5ih=6}(=}c{jE#-rFs*7J=jm(+fc1hi3G!`# z1Y{*u^=S9R){CH`D zRD9gj`(j_qimFGc14gYj8%>?KKV+P77#sjUi9h};pFMnJf4jZyqS@UYw)Tb!AhOFC z0&LH~q()UyZ^)VC12O42wnEqzR_I+3LTnTEG$P1bzVzhaM2O!%9hB4h=Ku zjOi=P^^4zNcGjMrU_c z%achVM-{I>VE5e%z_eRo>uD2uhKrYC|H`AX`Yw5#x(9Uem6covrS)=ri@qxTl>!1v zyH%1c!~$7VsgD4nC8i4A5ED@ZDjz`J=ope@_gO;D?4C8I1a$`TF_DddHEb;#n{^8d zKR%ylAkzZ?kgyL-;UKX3(iKTI#RXu+ zJ<<6J^8KY>_>xRe`V>KG{A9DgoNdw+NiHiw=Gy3!Pj1z6#(N`QO4?1>mv7X2-%4Br z#_ObVBol#essOzUiVOuWp?+7D2LOPH7}*@rVX$e5_uaKu_m8_5c&`Ou=5w0dsF@(I zRiWeG3MY;MaPR$CIC$rk{=C^b+duPvH(O_`$(3o;*jZyHwW}uB*r3fhPuH+9iy8PI zbA-3u)nLQv6<38TU++@+cFD{AKl90Z|C2B5Y$OStJ2o~BzI^uo`_KLxeC2DC$;NUr zc^hg%`)`kjAHm^A;^zAGc>Z291MuOG-SamdT00#2gN6Xi3;^ts`Cbgq+W7sS@O{cW zXIQJO-R^mJdtn(NEc(4S@#(p)2jFhK)!epUt~A!Rr>-)U>)5ifWUOH_6pgWt0Eqa6a~44G zJpgMf0E1Yc!fy@*-PHO2()f{<7e(Q{UDMRTRoK{Xh8|;F!KHf7dbvq>DVrD>b0<^X`;2!J&nKs@&C5Dnk| z06qE%e)5avwO1TD0A8b6`6I`s83+KZ33lgf_la^lv5M@I8Ir;PkjOr4Y-o25-1nibt|ZRN?Y8mM zaVNN)%00Ns{Z&Ayo)Jmk8UW%Ts9`|_lRrvnh$Xbl$wAQk001BWNkl*plfLR7`P8F7^$Q;l?VgJ`cL8V5 zb;z)3jA3)V4!viN_1XlEL+}7hZ~zD$#z+rS&^}gs7VEsfD?qedkRB`xX!7*JpaL8t zhF%&}tJ%o*TptPJ z08;*J?S+udFDh-fbZ*f|yz(S418{KxAjFyue#9O)0)UsVgx8*;=%brthe7d#XWqZs z7j$5m+GSE}r##TA=nUfO>$LYcuY{^MwYFPM4*|e<55Tw@KrqhMQ&y9NkvS~ zrnRx4_#vra|GrgT1BscvOAPB#>%8Miqo;8-KW}9o~(5GSt+fh zb!m)RLDqznXR5vkwzOyVmr1QGfXI@o+XEmgs`+x>V_+rzGv^;D&7V)IrJhLfvFiM0 z%K1%V)sjy@eCFzGvvOXQm@AaRDj%2pj~crxeuJo%f`jO048Xgh zETb#2!&i>F(zxfcC9Z%aAo(V)7lLaR+X0}BO*5ayc53#P*Xcz!L}|F~UifCT&fIff z_1-6jXTD@EoV~IqEVt?DFNaA5AW#i}z)VD9{EB2JjLGJ@1bB(N6vh!%p|bVcvp2hhuD1wn_KVbGW$QA zIpwx4ynaH18^6TmV5W&YZJNz)vHj?$9{v0;e}-Hafv&}CukEZJ(6K&kfT3|TnKkKL z`!*EWLHzXv=50M4ctE>@s|{CsdkP)=2;F)Vp~G;-pZ=;H_M&;`Ml`)qvGaX)Ho=a! zaAM|NEkyt*!KS#G2jE>$0+9nbQkK1ewg>@?fOf(DWu;1Rj6&l?HC8YEiRUCb^eGdY zF!{tD60Edv_>$xq6`a*3{cN$5A~NQe#mx&&kT~wif+QgOG)S;XiwqVdJsd8oH7P(p ziXx5R(8ACym{3ZAAR6{k|HL=tu^l)lZ;2??xEe@0{esE_(MT~$XFA!4#ez?BOXBo3 zh@&(RH2-yAIQYiaF@j7a$|46b0`Q@9nAG2jeJ}d!L;$R{Fo3|RKobIx7}6?Hf=jN19!MMuZE7-iCR#rEkx?kGRCu6x>k4jNQBR7I0CT$SG8w%E#)C`7_f05NB zNhqDD--s6oV}l{c$ggUL$j^N%#E5%uuip2;{%e2H>~4vUyVnfSRG;!iY-<2M1{g#* zWP~YNg^F1Rz>p1P2FVby0IX=n6M>jQC!OY8C5l5PvIqC=0Khs6WaVix0ERy1$3xN? zFS`I>(m05Z!6m+F&hS7Ok%=_*2|1D^jeJFV<={&jrexv@BjJ+GAZ4Z$4e3VDFAJb% zRQ+NvE)RU+^9O$8Z=9hX)41r&owE)17tcKT_x`ax-?oj+?g2>a9xF{SUSTX03|MmX zYCdbOjs@Vncvd-1)^PZ+yX{C{Q2;OuK+^0N9ewK!;t7DnF?_K=PKl z0)Y7(0HzH9%x3_Q@&U7}ra+0%dw1*S};34vDQLAm!Rs97KwxkT4Q10>^wwD&I*43bq2 zU{SV7Xr)3BwH6Th0YIo^ei6o9F9DZ~gqWm?hUAwZ0Bj9HY+$NpzKGo;KlaeS`%52X z>{VUpe0_dr&r~j^SSbsjve+Hk{rekCqpbp*v6uoFY{^@n^q>^ROsrR%!cQzrjdquY7PX?lX~;3EHB*72Nqi#6tg&2A4NPU{!A9>4A~2o7Itt`>PCEE_ z?l_P$0O*L0s2mDX{j`Lay*THGz9fS++!^PiWp&G|PYFjb_X~eQCKR-=xNmI11CelO12{Nhbb?tVN>!CnV<*Rh9h@7~3c1s+XFq z#Q8*IE`~)p>jso4FBwZlJ0v8MjZ2RtiYzN1U>b~Oe6LMks_IV)cULo4B5LwSGXSr& zB~8+4lq)J;LIy(m>~bozN((N%H}wvq3@b*?_iPBvH}e3zTgsvjCLLJb5LWztMaH*@ zl+oXC{Q(+k_u}bS4tLozpbVaH( zO_kHozGHx*s$VSp&c?s<+1q~eXV05NQon!Sdi>(k-~2EC=W20PQ|7V@-TQET_tD-U zP(=4S1nX*h+n+zhZ3hlCyUKjSuAat?I`Rg9Tko2E;qhA@bjyRQF#j{rKa05gmX%&M z9RTb)vk0@7UOkPjHQnB_fAb}y>e`{P^<8&$`TQ7mwucL6t+_5y5buyuH%-;d7t|bj z&+Hd}^%F640L);{pWEJDypF%bL^F(v`>uZbDw^<}t6z}gWJ3Gyz{Wmi>Mks?F_}Ml zG;AK^Y293C7vKCEc1~jXj?Nz(4;*do`Iz@DEspzFzH0leXl|q(iv0pW*xb+c#wfU) zbWlPP`MtU#DX8d;{gyY&jZ_$5aw+#%idGi8tz3!8Iw!2^m9DavF6Iad8$Q!|3pSs4 z?V|M|c^OT?p;f(dV5`_GigA_9MOmjzxnD{YbVRH@6ucy}@yc6r4p;fof(a#XK`c3) zBQSB}fMVm85|pnaDNiS5XaHa;s?6E`6Wgv}=bSJVX+3QRm-b0ml)(GR3}$4$HDd26 z1Y;N+d_hTtwVx4dsCMA-0DM4$zaEa>qhdo8!H(G4Py+}6^?h&D{UMhBCbTtumqov` z%ZytNn&wd4*~ZQ;fNBuiS~2Rx))ygbV`#Y}7&ax0Jd8ak&S=rBwdw7`r4GpaT4`dd z5TL*YfRosgP}rrxso%l^aEaes&^t+jCZk=Hk6rWtJRAVWVf^+~A5%O|IWk0#F_|3+ z`X2i_MHHwkeWL2)TtgW6*tbB4NA9mb{6zP)FE)#9paI~G0^$_bmE2%b6H~JPib9l( ztIP$I4j>@u`6Shd1Y^3fK8Rg~!TAVaH!>VGl4~~Q?gfzbMO6|^X_@Jy23YDDT^xF! zn32kv#Tpt)@I^rZDT_Ol8p=0T1xHCm{91K|?Ag#Mza@?W!BxK93(M)}K6B`|ere0} z0tDaL9Nhgs|KIQZy?<7Bbzcb*<4Y@r^8DPR1=C8bWf9&;z@G(R(%1ulz&@H7Zoj*J z&*O{fCXi9OS{mCDlUpu_Gso%tt_P@cggQ(tN1$>5V&i~({;M4T)D4iLP0&mMU{(Ww zMKzh4wYj%zaDL;KeZTav{qLK!hm81P7(j3E-58IBxF93UY~h;*wqw7i{Of{YC*(icEep)zsL1At)vq`2nJ0jSyqDx$mY>epxJw*jot zZ0D&j)#N&7M41X%p#mA3)LLz_2}Q-fm(k0v24MVv?A;|-kiwi7Trfg2Rw`k@GUjdZ z8l`v=;XMnESQWOnc!m?oDB3CM`BHN?wylf`=ciRu_3cpKKKaF8eWG#Q&XNF}zOY;l zKIeCrreXlWhsZTN+CbJhm?)l47Ywq`P<+&^^O>Z*n8r3-L6nuJG!?C&Z!<^QdekO5 zY61i3>?QMbMIw+&YeShM4LbF8X-~hTchs7^;+aW@Ei+b`S9TfsHwLoKUL`A41i+Q! z**-QEwobvU^R0%+M2=ihbZ`^v)~Z&ra0azoIZ-1F06aVZo75dCH!v6jF=80NL!?>x zE;VOa`Q@^Np8RWR0akiqS;9wn`2^$$9F-kHc>iWa3r-dV@y7VE4q5$%#{0FePxhCH z;yX%Q4BbfLMlMfC=e^QLavn~!TQy8l41@SUQrLuigoNd7EBmoR^bN?ql((il>5+Jq9bmyJ z#hd@W-`Sh4rho%=)gOdok- z`Q(?};@S%_y>3zJ&esOHkM95vK;_$ITuwgo;d}nh7q;hVxx1^{|JwiZf4um+e^k@; z;+=>2eE#4^hXZ#mtOc)nP|VEko(r#>7-#X> z#C!u6PVw1STGN1=;mnCM-+dOt0!-LBXWm|y<`tLykJ%%iw#8UXgT%wA{fCJf25OWpwpsH(aFu13ztW!QqDQmRtZE%tyz!>QfmE1 zS|F3rfP|+S;{bR>0M^jpVJaYIs#tRRc_1snOB>qqu9Sn5D6$8G2p$2}TdLs!a(-B3 zyEy_QIm7{=Nd=&8BX%xqP3QL0f8F2ra1RFc?Z!cT@F!q5r0!1RqtifnNX^h24JZ9I61}1_DR%eMu3{u|9;n2b6=!g5Se`)OTq@XvxZ^USg!c>&5lvYJR(soc7j45~t z8DhlrmS~ubcLqQcBY^Ei3K#~GUxi#mHaKHaxCa0)L4E7hkx^Lo}D-wc^l>-w{hkl z{Qk@T>;JW8*Y=tK0KUh#4k%yErPy1hfEL^(Dvfi?aB;UYF5dM%JoKSGS_3V>UaCG1 z05J5_zxoWn`jP=+HSsoQt`%Hg+}n*reI3;@<<0BAY`VC!jH?MG}6 z9A5v0_wRdTBOZh0!ng_*qG=j#Lt5VqfVt}% z#BE}>ZWwU(m94su9Q(Lzfy|qiC@BfE?iH1r4R7qj;X^}c8{+`%J@u^_+g`GWq*)`a z?EsjlOkY8%2Ni2!%1S6D=gTzX{gR6y?Q)?YWXUs@(kPexB{@N?1Cq8?dasP(fdH_C zyd?jdh+a)GK3e9NsR0-?08B-@v+fsu{U>ibJna_C*oS^EoZo9DV#?Oy?UWrs*7jx7~3{lM%I-|{$#~GPJRqok%X6@xX!XhiJ#LTuQ>!FEDbnT6PO8H z-Q`dW** zvxMq>tu{mIT%&b?bgqVkg9`py`F#(&_k0@DS$y?tc=69&yBpmsazUE)SFgTBKOewI zPEglV4hQ{PTyj534V5=wRjW#^JhJdLHIRIUymmltv3^N=y8wLK)w{dFRLm~2r|5>k zyAUNEBpdO=7y!`=>R-+kY|9$ki^3Za4LpI3)n}(nt&n|0_lW#gpBQm*TTyvVZU6?r zDRaDhIs-6?qhT-}&`^AO$*(TwRl4}e$v2{X4$7a9mHsdGW{58_o#jZKS2YKO)XFKS zydE2gb6@VyqCqs)2dX|PlM>1^Ir#yA@f;}su#zWAPKh+u6N%qZP6edeJUKInBi)Pv zc(;_8WDu|F$4X|)fd^nPu>ownEMTvnR_5^^@<$#nOrLfSvk4wL8hndxiM|5@mdl77 zh7~hGOA^*v2Qn}wEpyeB0oV!@5pysC6GG1JV@x`0n1*EwHvlY%^K}~l_z1%(Mvnlp z$v4jiCR>wH?U_F52!fE3-b>6E9LRuxm<_r9{P4oJ&2^K7Hrp@aIe2q4-g~cmZ|9%+ z>UDb2YT-Bd`{L5KzM5VhmK>bc6ngth_2~~D{EeU8UQY|%LuP*NcmK(W-}|F^vu|13 z@BiB?EiP_*vr#|%5!`ie%K-0!R$8e&^GY~#++1syPHSdpyS2mi7vDGg$OiU#uXTUF z8{^l#KX;8HZEi8v`v416lT$Avys}*DPQIsBnR#D)jF)Yxc;0@)ME3jrl9L@OOq?wZ}FwLhgkH|W&g4qMvZX?Be zvx@1J>qF%^RJiXeD#!^&l;6rhSwiuOHcNVr(U?bhep0Xz4}&Y(L`kO>#qLb_tICMX ziXCoLo;j^ql&YLt5m{B;nSxa$MOekClN0P9R$L5LGB}uYc1>86=+35`sSK=yW>zUz zZWIPtAdX-JW64?KXh0oHghLK3W&qYOfI;#QgV;3ot_Qsb_I7|VE2>9q;5ISe4+;PY z&I&RJ5nTWxA|Wzj1O=c5Q)-Rr6aboa0B9N@vmFHgOL4yavY0*&U2#f zwO98}9J9+M8D>{UTV}EF<4LrbDhq&J1;929fLN9B&oT?<4FEf>0T?puX5Ipu)h~SH z)(;=_ha+H|Oc5XPEW$UU-*$r2rg*9tEi%=lPk29#Lq^Lp%7Wo@!|#j3JTi>E;6oqH zt1q6%?xJ6`7$Of5fDwGU9{^xb`PT!xuJg^LzW>Piums$cP5bOqb8lfeP!EhcFcITS zkt`Nsv->gx1U?Xrj>OFN$y~>{dMDj$iyTXk_OcWqlc2@%p=ot>#bA>pN@+BR$Ba}B zh3gNPNga}&Oa&zWfMM8b>YFO|dyoC}2S54O9&eZ1!>(DJ_5dmr4~8J|))g1|q@qDX?E6tT=*m2dAAk0AUyy z0M`y?Kx2Y)b=LvtomyeE##$Bu1b}9OW(^#%*rx66024HuKXILJ}SuoV}7`digMeVsZ&k$$qqq_uxQ{v(Ju0pP)-nR2~}m_}*nq6t20%ft{oQ|mFX ziEwO;4TPjRCEx;wWT5*%a?8eqaJ_ zdH~)nh0Q3va#g=i1I!^LwPPkS{N~SE#DSK};d{^HL$|K{gPmaaRlM>%nmHzfW`bb= z19Ebd2e)zr_vMOb5CZ|QhzzzMz*t+^MxO}H%a{qfY%{yf=BP965Aft#ZesNVRP-V!$11BKGpWSlm5!`>&9{63i^x!uIH$M zPz8)ukpTc>KmwrfcxnSM8blyUc_$(P5s`r);o96S5Gzb3;436|PiB~{0l;FLc6P4h zm+zDk4?Je?|0K;eapuWz>|fVI8{G}1_uovpxp??RJGXI5{uY}mTs+LN_cPonTp9SsM{3!UnP=T>Xq5iN^L&dqw23DnjBS`Qj4FL)VeiG1_dtF`7|{!{gGCd` z5i*Z3smG)-5XWZK8U9G^gi)g!kpT4PKY+(Sfx92)*xT=Y1$hMWir+~oR48;OoBah_ z$^%opMh1XSQct1YeIY(O@ee=R-*GR{PM&`nK$p~l3(Atgrot1=qeNjyN!z~QbH; z#ddpt*2X+1)|P4 zn~zEnD}!+r=QCU2)5Ks^6cJoe`%z?(^o z^6g5=N*<)w1XA_%RQ_IZ7-)B)^l!N29`#J9Hc5GT3zod1nIpTNL<&VvG(5EBOEIX* zni!c(MP?G2zz7^GGNPO&JlW_OW6lbxgE}bKs%YU8)k}onOk_tnv}6T#uE=4InQJ$!}nbzr~ue+T`5f^2~yoi@vRmm$Y{BDH&u=N7|Ru z8Cab^wU>j7*CL&VQ{1f7pT{TUn`nG~RQ`E6XBxG!(aJfq_%vkS$#D+qtU{$dbGWWP zv6Ro1n5CS-fcRz%z`LnfGJ)fY4%cNCS%PJ&4uj7}1PYgn9aiT~#=ra`p7`;wF-w&1 zXTENpO^9{fEdVegu`v{wiNLYCft7#iGs;(D6#xJr07*naRNv~q34HM5IQp@;IB#D0 z-gSK0tIs;XzxOfR@o>NF>XXl3r}wO$-QE(+!$bg^ACL-A=a!S7{mJ;)qkS_VVso}O z`_4o3TD-Hhecqt>jR)_0M zy+UoX$)pWf`Lm$8D?I*Wn2ANDtrqz`VNBa9*ONw&@Ua-9Er{}*sO&t!bjd1?H5HpX zS^Z+eK_NrB_L^s(cwj)b)iNL`nz%sL&4989lazTv)Ff)O8tZ8U7hGZ4^7vY#u&d-x zNcOQbdco%`6n?A{)`@NE>M9zJ46-cAOtY<8fGnNHG4o}U^%)_a<2IPJHb!G&j~Fb+ z&PYDy$UOkB)tNfUoeTgKndhAFdw#WFNeI@8F6bDYJ=64Oc!_jl=x^%QuSOMvz4dkJp~X@f!C(=q+j)esT%;q-f$Fjv$lTGN2zUgy$JSSlre(f z?n)=eQS3dq2{17VzAHKv@~gglx8NC>z$_T8`mV$qP5_IlI*@%nIj<)HuuKDQS3mOj zfzN*CBrVWmvst_Kw14LB{{6MRZf|XK)a2onhA0e6jqP!ozok~f5S@x1MU36%EgK*G zQGf9M;06Fy-wnZUR2$*UOBbI0D=Ze#x|mU%G#mvj77u{T!IWRN0SoC zlLi3IX8`Kj#pzm@t^qju!0hu6tRIa7$gHKrrg7WQ%Lr${!ZNQsAv0n-0)P$%z#yvg zsy#FM4gf*<4JL>H4pIz+jtzjFbHFR-40i#&@K9vYA<E-sT1ZzBMbF~BIlP-5_N@u87oyCyB5740|x8Ix1czvd+? ztUZrO(Z52**MXD>BW33;USi)Zt9ld0+X_q+t%-;OMe&-7^GV)o64ogBPh@d104CAy z0>&_CFz5le#U21&>;W*#g|s;#>4>}3UvX@Qw40>sWo^tYEXr&IfGWpf$!8}Z#`*Iw zac~6_&FiEhuvu%GCK^M1i@j|i$Ny+1x0+zg7hlgSWZB0ve5|om8h@*On5)o)!k9@< z?DBRse8x;KAx`eL?|Fjv-H8j&h3Ed%_2=QLM7v7vX0_Vrl_B|%sa#o!NhtMK!)L54 zsryxgjLur1N=^q{FzmDhCVvi_YAwY|g(U!{dVG6UtqCB8?ctZkR&1g*6bwl+ucR?( z%ULTav&lLv9E8vV7)%4eqK`4c5^-FO1&-ryb9+g@%ehOnURp%~jPa9ly`1Z8;`h7p z2^qgvOBI#<$YrY+NE$(jO(0l%KI9>Lo71^YwGxN2&L`fAv@=P4fHDrtm^A9T)~Ga8 zW}K`H`Mb)gL+;o37^{Jsp09NMS;dYzHRRLzlgoKKpQGd(3$J0N6cx&w9)NdIsbPBr zBpT?I6_+A!9DvH3v~*tKW7f`|7+yPR!(iy5<1ijv{EmZfUyIGJ_z1i<4D zZv6J68+U|d&RGZm+lG#Ne$MfpF;}q;yiwWbd5jE+SbO#51-7ESY)G34&Efl6vH<4B z?HxODtt$4;EQ!3@cTMeVo=wJH*-V2qu(L_Cey?SHLGuV zv3Db`@^NyvIr3vzyPGb&5Wf4zZt>b%^LPGWim6ie3>p?Xc>SUhLE}l&unlj)D{E2c zKsU>cULrtboL2eG7{Az#z-ZH$!uLu>^2qDUh;_DM<%%-%m8&3Q>I&gYI;qK`P0twb z*Nm%#*@&I0uz981lYgoWE4g1`|H|&nHko?+rOL;ep`I|L@-CgnKuj>5A5PB|Ryb2u zED@_t{w^Y(*`{294#sD$+#@*sNO2j-9;fgHp&! zTI#qUl!U@s))Y;suh!9RIkQAT0uobSA&61&2$8ghC8h!ZSaNgv!JhnT|Kub*_Cw~; zAMT&>)wz=Z{0eWc;Np4g3A1qQ*j&`Hn-o$Ks~SMvcX;WWUFC51d#n2&3CF+bwzmKT z72~hDhG|Psi}i|*jm&Xd0ZA7tVGO1MP;s!-~Lbi z*mB?PJq7?ZR{`dB*PQ#>pY1*K^@(X(Th!7dolru^>Iz66!h{)1eqZsuNF26k|4*j? zc-jE48*>28RdKT3&E^0eePHtIk4_%8J*=I{bTj~P!o=rlETc6Mjlx!qjR1yd0JNeu zBj2z5r77wu7QCt_E8}6a;)?MaV~^e ze?M#iZqm0~FT5=16l<(B2~`vxE%7k+c#6~T-8eSlB{41eQ_HTA@)D@rGApR6V1znI zU1Q05rQfg9}$v*MJ({c;Q`NFw)6*wyvGC2eS88VT{4iVNE@icPEqzfSP z=>r3>5_=$e-HrfMDJ;@NW7#>jmM+QIp#41A3s-tD)nD4dmUStAGmZD>7AZ5DRyNCW zhSW!-jOW&c`vzSfmWnE~|3ETcX7G;)IiDRRc7uS01u z;clQjIJaS0XI9%&4rj7n5ip*yF}`=TkyM?N)}@TY(w<}}>MSZZ%MDs&K+8dJ#cH^s zlJ@>ka{$mA0#JQl6(CnP-{)Wd?J4%TzX;#@vN>>vdEY1e`hn~EE_&ff`|3->`aXN# z<8i)uo!;W9e)F3yqtMDCf89$r;ro95m%Dpz>v#d+?#aIMzyB{5fBMB{vfftLl7&zA zy=U_$e{Q+&_VJ3{nBTfKIrDG+_q}ib)x=z{c@d`@?PLz%;d|_FKDzdR^8jY5jZXm2 z0H@3~rq*u~&yt@U4b`ulVm`kx@v?O3P1^#P-+OnM=C$d}X}^8$+Sc$LSjf@n0h2DO zt_1%Vfo8VvxD8t1fArVaBXOO|FuC16^w+AxkMQ;j;X8lqwr)I66xq3%?7RH??U?5Z zK#cCK0r-}!y-v=}o8|2-%#sHHz=(tDXl_N8j-)wi#j41Ni@|8yCHtdTQJJ44HlJ8X zVv}8bU96VGeioZda$`46@<@H!HKhfK-s1!SF&xYT1a7&IX{3fw+bFW zsvQ#2EId)`0a#9AF33=Y&5}T4n057}B*3q>9(02fO69HI3 zd>sR@LjW*<0aU`j6l76w+|<``{B*|=fG0ElJrE)9omrWi$MzBA-iseeYL%?yNIXc> z6N8Bh)J8_ypKAxe3;_UF7C`L08XE#{iT|XaJ6WYZAm;|I5Ub-~Y8zu8dx9SM?heN5k z8uY9Y2$c&{1;4BF4VsON~sK?+QsuxS-0N%;M9NIx_+2;qUyppU3+j+uilv#kI-7<)3~1{2%_| ztXl7#ja+o%GcA-ae!g5y0XHBG!2=i!`3D}^|C!Hi&nAH)fM%$xW^KB4?$tm0 z13GcCne1!j{GIZ2+VM*@k}YvHVcGymH7GOw8vt=S2SC#a0Mj_Cr)FBkYS!*w1914D z{f!UY^5KaGY>dHK>th7)3h)iY(*_16@lX>77XZ2l080Q#-(JC6)Ja%FFGW@bXm!>Z;gQDd61x3qhiU7#*9}o+5#i$reM0fnG_E|-W2Wl z(N^3fGT9C!w70ZMs) zIVrHoK2_F`sM+eKWck&q=PA#L%Ab>02^B4%LuzETlo1;w|3H;~;|JQ?9$PpynD#L1 z2oSYXYnHQ?+v64Jvf!yJFC6WD}+C0UNfJ3C?Kbh2^`s}HWNV5R7EbosKmc5L zbJ)st{WaE9f6K*8r@%DUmcX*n(q6~Y8q_dA%WI!h(|qTv0l?8uSs;Gni>7_`n!loy z?|dB(q2Ig<56t=ax9Qvq*ZBF@Q0U<*G^wtlwB3Ox-hc2XK6SkFz1dxBW`|B*c2K|+_s`3xykbOo$;t4=ZnN6iWqMt24B_OFH z2$lwwHz38@r|h9|Y=>lgTCKTTu9IRt#_l>DzWEvqWAo}76@S*qvT8B&nh)5tW!d{%m0C?rxC(pz#sIm$Y$UEsB`$&o4 z9EpPy5|IpQG=W%%*nv2B0G^X4FOGy9X=GU)rHz^)0s!$1Ie`!yq-jVjERKeKal+j9 zv}l1TnrXp|jUS&1zfea@vSFelXiYDEN7`fb=`Zo;B|iI??eYSqD5^GwHSk$M({uk` z?ZcpBL*qARPk$YO0YJC9nEv5!;%9$JPTf!UKkUY3xOC2WHy}CRC^nO&EIa^-qs%&= ziZ6$aF%8P*3M#KiMnh=Zt>_$p&N%?<6afs(02HcDBLfy4!WqgX08&(B!f<8wo+{R_ z4NjdSl{O11pAdV-@~n+n0%RVowvSqhBCqd1`Kf>NTW9>x^C1}bjXTf(Z~tp|X~m1( z!3~%i+TtarDL2zcs#@4IG0fQJ0d(U4U`*s5|K<5V`6ris7DRDjceX7r{P_GI|EKQC zl{niSgVsp7;5tKFWb{sds+|hFz5AsW!C40K#De5ZiYC(5EiR0TQ~j7=QBgeDrWJ z`w=N#sOx7zZL_Ae17JR>-T@HR@>gFGmBKXCKLK!!F4jPvr<3<1vX6?b&#DKHdW}^` zUv>R8ADTY5*r>|>?*{<1wF8)jx@fd!-CAZ1fKhtQXG8{b*^xu-urO0hv2_3xLQyR{ zotuMqJ>bD`q?$Z3YXP|R3a|kxhU;quYG%1iZAfMVSK9@E9IwVq8lmK178Q?d;Z)sp z#)x)qsN~UQAV=>`0|2R%=xm;*;{BC9Z7MWf8UL~DfcghB&s1?3Heh{=)u1J>?F^;9 zHLk2HN#GHHV;&X{_%HviyZ7_y><`lq|Hv=TNeHPn%~worM4rl-%dGiV04#WFF;pWk z7rJ`h6u?TogsZkfX@NRUQC7Fp92x+i1+{lbXsO@FcmRUMs@Lc`isV*)j3yM@5iwkH z5bvb-iB_v&SjO5ylEw&_FO99+wq7v+iQ1<_3k32UT;vhi2jE?TXXIH~>-}pzO^8s} z^KukRcD|~xb5`_PKQH?CTEZMBUfU{69jNCSdsixRN^Kh1iMgCVvvH!b>ewMePsI+C zr&dZ+{$>SI?YmI3W;8BVwQHNEkcS!PHpaPP_TEfEWkh8yCX{+r8cig%|3<<7b9{g@ zZ!G3OD*Jn?;t)GP=%+5zaXa1ev>FM(m34ID0Oph<<6d`~1Sk`+cO!tclYZ~iu`mBR zfVe&n0PCS2Ij(vD@$e#m;a~+o#*xQ_7~!gzT7taK1PDV0fK77B`-o|0W_SlB7jc9D z8VF2=gnYi%o8J^Wry=`XH^MkT7;%{Z9IXI^!z0+0!|^amAh2yQWw+OvkrKfPF=ie2 zJpinF^S`{=L_hv^1e(u%B?9A5{;XN;e~{eXEv04w053mDK-}KKy${Z2OV-a){eFBllxndf(fhl+GMT2jB}rqZLJp9;vkrqvhz&A&UdySOqO zBH;e*Q>Xv;-yeVU%B%9nC~F*Y@7eX6L);`xZB<&O}z>HfN|cv7xsSyzB%k~8@zBX2|&^Y_x2Gk zzID;LP)?h(ImW|x`?|y{vxh%3-gN?U2w-PeUwrP_kDu212TBfNeG}MShdtF&vY$T# z@PGR;4%h-?FOD-9z%iR@Y*W}X}i_1f}_Q)%39{31mjn>B#3odZZa zjA03-)36@*Dr|!aUlz_m1TH`ra1fcgy!5rMTv#;Rj3c!?Tg5Wm&Ml6YT#d1{?nN|au#?4zc=4gdODK27Qy#e)A&pH4ONAi=u z7#FkVb6;>B^-uqKv%CO6`Qlvh9c#XRjwfBuwVKaI)`l4ou?W`V7+-k?pL+s#-PfNu zSt{2q7iwA(DM~gh22_9@yIAtu1PsaF}HIR?|v|3}CI)&{nZnM%I8* z6(ECgO`XZlIu~q)5`gGsOeqs(%Q(z2vlWzZRcinM#)6qiH*J_Qd+HpIZOv-#6{nQWr35VF0KVJS^&@;z>|Dl4@fEIo51D_5e7=`0y7` z{|MNd=57%+F7@f_L)FqIf-oHi=}bS(f0 zt#k`n%m4^Mx*0l;?QP8W05n^}|NQugZym!iq)s`n1ORVAp5ge0gNLabnMQ;NfWZU6 zB?jPDHeeMw1}5xLZ{G^@>3V2(#ROo70OB=dEkxLT`MCoetl5Eko%Ing&M|u33<@sA z4JXLXV~<=4F*F^3@y9=O%frEU0J0*Jj-Lv1wQeprw5^T$Oxu=rcB)}jfVCWdMy8t9 zst9J^FeQ*G#;VQ|?U!0d%T?H3wbf<)tD=2mGrF-6PR-oPdDwf7fCCG8j5!9W?U+?u z3qNxJqQztl&{5}tFp$JN4Q!inK#q%|P>3&O%d1?8tB`lYYQ6Q42Wso{5Hdp1`I9JqVF6W1g{nyC4{*94Wn4li& zX^ivx+}C~!4}NKU{YUcD{~ZoqgAb|3>FW)l*8j;+5ir43m7SsTpD~&j70f$FXs+H; zjzZYb8nU;$>USwWEuwShnjLm6hKm?3133mxquIDAgN@Uawg!nbUPKtl&0FeRx6{t{ z+M^@2g$kzmrCLdio+XNX)in-43|j*bC?*k(y?0snPpd2Ce3h5jYMr-Z zw~j_rXG&6PO4azWFlpEg4y10CYfDKTBH^j#fNaX-#+~mkHlCvESw~efD?w;a2iu|ailm1a~fl&8wpsz z$sBK70Qo}o(!xn5U@$`%r0|%I+5jTJWj8GSTtE&CFe8l+MjD{;O;R?GHXd7BXgeHh z0bDoA_RcA(ZQ*8ozdF2y~a^ARdmSgLtXBC`HHRsx59}l9|LFA zU?B79?N(Yp55RoDH`M(t6)b@(_1xN4ps!J_ajs&;8JE%U!qPrD=0M3km${%9-cT;R zM`}%}l(6DNYF`-ITJ=%(Z6^S2h^y!sSjFg^6N!3XOopke?GMQJ?CgD^3_kz}9*L7k zf^ecF?dVyySQb|<1CV|NAojx?SoLcFyz1vb-yZ@P`&9#^)gfT)SW&$fMF+VY`s>)e zcIl20(}?mj07yLmE8{l zfLbS~d^)jdbsR#=3A!S3z5oCq07*naRG_(ZHm+ABYXDCDI#j2x?EvGK6Lo;8i->Qm z2|T;hq>z0cW^=cgaW|(J{lR**jD7F`8cqO~%iBoFByO>KXn<cl-1EZoA!Djj#U4|6_5qURPsa zgIQZKU+o^G2dqZ%&VWqW^)Uiq=6>hSy?^>Umts5m2w)BmVEfFO3xEEH;nHPp7h@Ti zdDT)Sd$qs0831Zq09-NtRc*s9Isi$J{`2|NcW$xEoyVd>!tPG`w~uZA#$H%B%!LIQ zJOMb3_)Ovp$|8+rl{UW`jr+^AVp_U_6{QN?%;GT>mgxXsbO3N%WQTbs*v|o%Uwi2a zt|Xr#`c*Qee*xh72pDV64!G=^)euFt9{>ElEFq3L_?KR9-nxi(uGX-?9za4_E$x_M zgQDD1^Pb@Vkon>0dYDQtCs!)wulDrVus+oca*K5;<*(Jd?7OP%Qz^PcWxZGS3Q=o7 z(*edjZlnV+h6R%ViM(TCM`qm8y(3jNz%8HC^RI~^iz?-w&bQjUeGMcvB56E^j-ODD2&gxsK z#Ow2zvUH!Zc5EP3+eU^6D)~>Y6G+)YRzRJ^Dctby}Jig(N zM-wgkcKVnnfs7_=bu(Yj-qD0CzPa|i_1@q4IY?<(-W+opK;U!f=|6UWJoLGM-x#0z z!)E!R_yYh4s{@hIiwBWF+_-`Oo zaBJcK06+?P$G-Jx@#tgyz4!IJ0&r@T&i%n3`4?YB*tu2t_g&ll^0$t*@2EfAIyk!U z=YL3VokzGe*#A2xKLfC{OaJz?fe>+Q@5 z`+5A2aq-IOx4@`P?kyKwu@JQ+UbZ1S5(g5co*rW=&Q%AA6m z$7^pWQP-t*8#~9bz9Im9Fe~Uso`(5dvtRmG?*6Z?Pd`OZ{Xui#HEw=NEqTk5-$8c_ z0EPqZFWq!DCiI>dQQ|6Y&2DCG_kEvcGbQGI+}iPWdbcDbF60|Vednm|6V+dh-EMxw z1+77K_i`H;TY275tqf4z?JCbq!+R<{)cU5F?}+-J3bU^vgDMi9A|;s*3go+E)>SQt zZ;h>HURS}2OmC--gi!I!e9f~|6B~QL^jQhzPO1Lap}Lz|y{vu8?M_uhbm`9_EM>~A z)>g95opX+49QFI;oFY;gQXyonKi66-dg#wwb_SA=AOb-tI5Bu`fUN7Hy8en2#F-!~ zSgSEGwG9C7SHN_=)xTnD8M73b;s*n!EiHy#7~c`o{nd^O8~5IlOtD_3)=*XB+;`Vt z%(?+@ICcQQrnZAjErxY0C3h8Kw4vcpL8;aw01(ydf4q>M`Y+T79(pXKZ;jvolQ0|t zNUG{x*?jE1)=HRK38rUNUqZ?owMC*?EoNz&v#OV37ebGWrYqM|V~A2PWhB7#%Q=KL zbgl_NbWYa8Ix#K4+6+oa(5Ty{cdhz{RivZLj3neMWun9wm{dVrwbCn)S--4m6&aA9 z+GGP7Q*2mg7R;+hj_)qM^p*1xanu9oUwo0Deuld30m9~*pkJ-WL*Xb(g&>k?S8Mq_ zfFTHg*;l_6@B4+wO8~RJ1<)L>FMjXa;le(eW(W+J`i;dfwrJU!e*>6~lUk_EilrgR zx*34fwg70+0YK{kkcVp*al3`Y-JR}tAKm%p9_Bo{Tk#mfO3mz6L zbbkpt0+t|%M2+K7jdQyY7!|o-|M`q60Ct!in1m0AndYya0nV*mgYn7|MA;7~0pM{2 z;0Cq+0f3kFkcRf*FRdD{*FSpuGQIiw3eD8!NoxF_r}2~BN)!=S(683$(7B`iSbPA; z>~b+@Z%a?j3*WE-R(21n^t>(Ex~h8ZrQNdFRRF;3kk^0KQLWYqjqspTwiPeY3A`{1 z)wP_C+r#Zsshfv&Lz)R8DO>6W1DHZ=%y z+;IxWPXhN~|3D7*5f9T^{WL}(8~dcP1Jrucb)19^e7(YhYdgQC(x=mwR{dUQP-b+k zs8gfto^=GKwEKYn>Tjn{ePuZPBYE-#eQcxhtuTG|a2CMxG`sl0&dhs;m4SPS{K1>j?!R#DA!rfPh1 zaR79lJMqLbAPU_c7`Gs~bdjI@3j*S&o(O<^?@x%|RWjuxPeWXH?KS}TjpO$RNp$UA zb!$@U9(&^amTB*t>T%((ztbi3{=L6-1Iaz|<@DJvUG?GN_rC33dOn-lZ+&v@BFlJzO_uI>_^Uq#1<@Zg_FF0&rIA_tmK0sn5z$q6| zVg^2daUE|cWI4~~Zi5hhJAJ%Ugan~b---+=G|hOsEC3UG8_54`XxS>A(v{nZ@prl0 z?eg;iz*o%9d=)Iu=cG4F0!&P>qJ(V#2Q@ZR^Z7O~b;WY*b4EVz)>ydNG_(b3zT?IX zetO47Ih}E>sCuuP3auES-MzTNW$oHu;laKDblIm{5k3dNNhzV}$yBN`tpJ5UdcOg) zOj&{``$aeaF*33)kU@p2CXsLINfHr}3yjf0{OBBlGkpvI7>&EhQ^`GwR;QB@K&sl@ zI&3T&-ZjTpZ|a=t1}(UYZ1C($JDW{I@md{F)eW8%OKwUWWwZeROkh1b+ zUoacv{3*LvwcE|7LZ&{-m|Sgy!t}eckp1v>dh##HZ>Rfz5&M_@^MBinYXF1k!4sy@ zs1}myaB1VVUUE0^s;R;9STbLTs~)jMpXF*>ikR}1*Dr*2rjaNdag-pE;4Er{SC+hL z|0|?eran|(D46aRx~^?J16U<;VWyf?3NKq!dTUz%sN*#%McRI^u%Fue79;`Sd++fN zKc+pn)hzbE^Z&Lh=8!Qh>&8lW*=Dq#+F3O&*fRj<>ySVW0Pg!N9{c53VaXk1{gWrd ztFOQ}L$E;)Ky(afuW3vPedBBfSd6#sb60&b-v%t=uQblhy4X6j0Xz7uCyssd zPCDuQHUna_>~)7%gqCn2nI507fKg37a0tJuF-YUQ0zgb>^5c-BLFbjfjqnbi=i$YF|nB|Y|rLhHQrohm#~Ff z@mHJg06<`B=4SlU_G}se;&epKkQkv&)DXnMk1ovuB|}>UfC|-^*-zi70aUbsI|mn= z;NW~10`eN3cO~6HBCu)aG@FKCn&+v^IDJ``><<8VzQEodcJD?zha@cn60W?-PyS!w${Xw{n*E_#L~8$m+9p6%i`90CGF{&3d9zk&!K=Mb zLF{aNFYTtIu8ssuRS5-Xcg1%!9*CX(-PJ!U<(!O*Ytpqy0Jt8|tt=%^bKfk6$m9`u zbP)AWGBfiifT{gxTnp7$Q(qltqJ!SWfg2Y+vnN3yqXU(_&$d%-6IaeH+0;>4In>r# zDUxNo0RhG`@V=Z9&FX6-O}j|#8;V-G+^Cz1Iu&O`s`H-e@dsa_=~QeT`NT`WWJM`s z(ya9MUQBh*yclh(aw@a)WW}km6{9MTuk2$R{;So|DMwr`=Rm6WbRB?FRa{4Bt+-C^@*B6}KR3w_XXX2UhO=+r(Ql;B ze*L2^&by{Klo+4pt9?_dQtPz^T6Q0rhROC5U+EV%INO(=8=rd?z)Efn!W@t7&7Sx= z&x#Rj?mBtx`SIBw+>-p?F}Ycnx(;23UHr?>@BPMI-6`i5m5$O`k{1%r`}gUQLwr!{ z#3IVETI9noPQSj!>bg*9vU{9_`|m9uo2xzrckMu-qk8V***`hVEoyFA?2xReOG^j+@5awnWcnF zo8%TzW|(r$5ZBp;w z#~W#u5%+iO+o7{p!D@$G9O(<9@!2aa6E~*oULHm;dl2B^gX}!w9N? z`3$I5468LGD4V|l;2IAgg#f^-!q03Q0CygM?^*z%>j1=N2Dd;r{MsXX|NW=B2VC4` z0vQ$W0^u#B3*?Ahu!zpp90vfb$sHy+w8j$vgIO;X6Dk;$Ca$=%wVpQznF}b|TD@G+ z{<#A*ZrEP|z&HYcQh`*(YfJ!~QpA&Zis{&#_x7;v0nBIJ@bYUd6M!`p3zBuX@qGm_ z+m|YSn9qq~km}Q7{u|d|_SITypF|zi0eOAM(Q3mqt~SPArOo217@XeMMrQzq4O3S5 zrnu&IfsAx&xIM+Bg-7ofNrn*g&rCtMbutL@I!_J;NzQZTFV-MbY;^bbt(@H;F zy0kub`Venl!o3lvdvdz~#MJIPq-1lS8RCHm2Fo;(R9!ga-DZxOPo%4vP(D$p+&u#c;y_L;)hdzl{67g1E*{{v^Elw{Yf*g?ddu zHQejTQ~!>uAGbvB@_X$GR_`erVmFG;Ui;T-GEjrCL+!49K+TrzWrfR5d0+5ow!yu$ z3u`7O>gGBg;FIGdvlcu`a54*?Bw{Jvv19Lm;8m+CB?rI<^Lk^)^@?ZOpl^Y6hW#<)gNKs6Pw{Krl@nKmBzxu9Qq|qA@)}c4oTz`C6~i z)(QsR!OydfC*Z1+WIme}(@)Jn$+5FaKIT_Ydq-41v-=@e`IjA^>Tg+=Rr%|oq($Je z2Whc5&voQ=(&B7XwvkNPApk*0ZmR%&Vv?G4!%aB=0Psv^7~%j7KP~ZzpQ98GUW(uS zGxv>eg(rS30^#)!5l;SqNwOVDSdWP}V+Q~LH1Ge&4W{V)i6_2siG0LS+brVupT>oA zaJNkP$3OUp-1jM9m_FH#a`b~IY55`QqR4z6n=Jsp_W0hveqix{=k2P=4}q5vU*q>N z?;R#NV)@_z-41Vl?7Tkl`Ji2e$9SC;GR_^x9D(B1#(!FRwBfHpPzFTeD27X23h zQXmY3e5r6Z4&--m!M?j-SpvYU6A%q6TI>J>jwB9}1Z2dUBmiY84hFldpG*w$O#>h{ z4ipINw~om@ck{9NXTI^d2kt*HuE&682=w56d*|+5e*e3`_6Yz?9g@TDNk~4M_y9OK zf?sHe*?bx#Opuf4-6kQ!Myw|kM_?jzB98z_Wuqm59Yk4xc4h$@(1_$gsyU#C-2`}x z8IKV_)6P@7$9wkz9xweBUjN>WHucX$3OjCghX%;gkpl7!n<{QD8>6n& zqLSyy$Yu4{tVinsG$E~`3rC<;Twv3EiWg<1Ie zDpsFUbgf?jV2e>80H_TBWUW}8B6+33Htww2SXQmN!l>G|`W%J#pZzq-Xtd93-<1uY zfx01d19MZ~+3%)=N~MGw$T0yMEOxuWn?kyo%t~FVp=_Ky=K+MXKZ$=g^S|=X+!ud2 z_6O~S)B2XEmZdW743idP&C--*tr=`hr7z6R4JdO&H)EOF(>!@<-2=m8v_0MQiD!ln zKw3I#ndglghXf#4fHtiW0MnIn8~`L;J(OLlvy#QT&Pj>(AQb|aH4{o(Y5Y`Gl+V7C zYD&-+_QcEPfk*pO_eQq_!q&y*!P9@!gku0QN4bWfN^jPB4%)WaG`bAQC9A}73e+r(02>Sg1vha!n+%Y#}N;t0U)9tW744#5kefJ745IJeF- zfKk_z${R}aSGz~=1&HJW+J;jPY#VkMlgxK=yag2$)A;lZ05i2e6l+OTFC&ZR+M%1# zT_-~~Q^08KX5F1TpS^bv%yIAuoS57&-hHgY*0%Ruy35hxl;e<0WFi5DbOV(mzD#>f(Wa(7^P7pK-6L-K#m42N!SAfW?gkDvcSVdh>YWa z;1F8(+LQd^UphXFezF@(y;P&`Q>A`%$WVWc_YxKmF>SY|0g$?mLhFYhw zE+sfX;D&JsUA1@XELMzMbJqE&<41Q2=fpYjUc9eQPn&yF*;(@0PxCJgO4Tk|cZHq1 z>_0j}bZ;vCVrq~T%#n2?tIKC~9;*S73~Q;UM7>j#l;d0hfOn~s$M#u$M*HvT6NoQW zoN5Z>vykoMb&RZfyiK!XTAk`b+cCtltLl#F&!!PX<)n1&k(%oByaUT^3&1BJsZ15A z{OHYOP$mH>@Z0GxH6xU~{M#7h9jp7`?FHi5D0n)OqE>JQgwwr@%Pec<^ckFB~5o$UE?IC}A! zZWz|#*2PB1$76QoC_}7&>E)eM_hx?&RDn5 z8rw}194#=kEdf^z>%DCcVAV5XoV8(?&k%M2gamPJa<~+dCbr2lz(5ox5J*5W`jOZr zk?0tbJP^et03nf{?ExS;kb{f>n$ahMOClf|b>&F_no-09EXf5*dOQW-d<-!V8TGUU zkWvF+eDxWA{AUEaDwbr{78-lNKTvqH*OTtsjSg11E*-|Q8yk@*? zpcDl?)v|5I$*y4{MT>d*-J&GU2mrnE<5g%Ezx>VRmnr`3x4SEEI!*va^BE|}VvTAj z(o>ft&ljp*UNNEd-R5KCrq;*^Yt;@p-XQ_bVjD*nD3Bi-gfRjLtw$aM(W>PD1Rb{; z|9Io}DFDzo=c3LOW9MtnlG+5^ROUPoY5GKR07f7)KF8QS_C&h#9v3+={N*>smtOO2 zx7yGMr~D&ZKYX!T)Db^yH86b=2Y?=WL{6QuI9DD3j`{B3x&Io3V-sw|s?UHH&FlbS zY7J>ilwTXAix~jvwg5=m0Kj|!U_RdhAhTKD?xN{G^^p5_pFj46HqJOX7g`nohlH09 zUt;b}SOS5Im8lU1uq1z;={!ed2q4*FrhWnrK#IDG3ShA^EFN%WM^byv47?-U5{?pj z2!IP`Bi1pxC@vZ5za9Zocae&H+YAg~bgp~w7uIeK0I7ACE;etz4etkA{Ag-<9d+Ip z)qK~F$SAl-BCxYKyBeoLyVn6oGEPHGb%b75}bgAh`n>=@TKds>a*!5q0C1MV+~F>wn3K_h>g^*&hbTvCM=joM*H_BaBdgM9$wdcZ6WixXIE$?nd`I67F* zTfehtFRyzS+Q`kbufKuyayVN0vv1Fw8*t#SECKL1B3*Io9)OH+v~*~Qna%rX1d!4Q zSafQ&mWTktQKP)4KoE{aZ(z-ZFfOX)pAvv0){#b3fCLZ9JGeB+mTewJ0CIE=dCX^X zs-OBd8|y1*bmL+r(+J6{Q1$snDr*$#wbvf6Z3xwFQbnXTWX(<>jqmP8y9X8-m%M%p zsRwNJP>#N`2D05-_dy-u9RRov0Hq}Wgv-cCaNsq7I6uBPaaWilN`x2oDR{@^9g*`K zx$I)5`J>~!vQFsIqhZtpQACj7co58h>{(RN|MR)1J`n*huS+GW@y5A}Fdew;Nt#Mk zb11T(XKC)*DbLPDm1jcU-W~F`WBa@PRD1Zi&zJg2 zHPo`c86yu&JA35vRyhDy9WCoPzPeVpYd)uP&di>@VX8G%XA)wFyKMpZL?j7LuS5Q3 z;UXt4>oTHI4?ITf`*(bphYdck4A(;szMU*J?qGc3>E(Raed#Ow_&3%+{BC>j)<<0^ z0F`agm1SsogYf@)6}x#^Rp{Cc^k!4)7TaI?)$_uMk9MQq|EurJ(h~kw2vw!S;pBa@ z&ws7{Z05T4^H2FRr?bNDElx6DteRZ_pL)psFHao*LK}C1fUpY}!2n)De2!`Po|&9y zy2!W8Qg@uw&d6w;i0yl4&h!|YtXOHut=I3?t6}>j?;ckViq^U1voGGH7f3r70OQAa zVM*OKj?U}vM2>FII4cPG><9qNM>tvo!2UVEUc<2yi5wkBgb2bSU=|ZF=!ppeh=|@m z01{zIAn!9#=K=r#AOJ~3K~&ugK=K}UKZr-axVk9c{r;<;e(3HKcL;#9=Y}7@ac1@M zTbS>}e|Rdr_G%mt(>NflXdJ+?NonAL1gu;^BmkVa5$atcI0kuvKm?-U$5W<2IB_tM z(By@fSU^G`AtFu$Cm<0)5|9W;h_g7R6JnQduHsk&R|8~EfZ=0UXi>}%V6oplV2M53-AlpDpZ%27@Rs=@olIq1%ReBV~PzX$@oyt?m zB3s;0mr8r)!sv*`HE_f+8j+(&k*NVk z_D8)xo|N;gGSE8t$E1jk-g;pz6B_9UWc-X`Wu@U_X~~N00_51AT27-2YQN}{Tnbm~ zD!c=4uR?CB`?N})S^v(v)c4tlQeBX$H~={aqnpZR3jHX(Z*204iD;;{TBbV>fbF}9CQ{d zK2*+ywT@P;;iKyQ*$j|CrU*npXy=Mf&VpM;9>=2LZPqPJ&79|{1(ybs8>3o^h(jPH zDs$;Osv<&UP%HtUNTo)utRb`518D#8*AMPEmeyC`eR}rU_RQ<4+W`Yj)oa!}%JM8l zG&@pT7}BZ<(;xxpyRGhtUtL@H;w1p|(p)?fUwkh3uvUy;?IgEISKK1#e6a&0(s zmdCdTc<^!r%mxBZ+%~jY1E5g=_<;da{5E30dx`J9Y^`J3ff z9|17kBu!~+7l10Uy7iL!Rg;D^^cL4#m3D04YxG|M%r_}3keC_|kOf7eVw|OY@>)>g zm%3uKGfaD2A^=HajD!Y&Zwdq6o>AWws~rR2)j+F@GWTQfig(5o#gpn;u@YJm07TRuTb*h*VGVlWM|9>@H(rtTp$8K8;^9Hbg=8B45_9_-RbR3B zgaokpNQs+_K#Lr$4{mJ67Y(JKi5X|MabA{R3e!mu_ox9e};N)9-!# zj<0RI<7oheZRhlW@GRtc=A-x2^LaDU*$=@R zsFnE)x6UZy`YZhU3jlEH7XZKmM{5H<&YqT+pY_XIBSn8ZU7OtEKH2^h#S!C0DDVG6 zNPfN*>{1ZtbMGjy+|URtiRPV8`Gk<-hZ&sWcKWF#0j4+r&e%dgMuY6)>dL)2E8+_< zai;YKR%4=i9|a12ufNy)b-fExE(4>3Q?JHzb~?a+)7PWdpIcwFq!cDT!G!i+8-MVoz!e zQN0IyCu zsp|HaMaVgBJgbI}tY;0{EWjh4%=@KU2Zo_kG{=#WWiBR&n(6EGQaB zHcz!iI)0J>XvOS-$G-H9gKk&W1Bm(D+j#qYY}(P@o=Tr;%c#SyD#q07fMQEQR|)Nr zVLW+{JoG5~r6FqG0~lU@y;)z0vw3MTwF4;j?;8NrHUO9!0HpB&f-?R)z;rp(4v+|F z=V)Eq&V096`D5_I_HOzQUpfAbZP|l}Z?>7h5JxW}KF4t%zR7SCGXB(LOWNDaZ^dzy zg5hUim}HU7ac%4vtF@X6f@SsrPXH1r&WAnW8IU}d!j5qMfUlfAbgKa{-ySRz;MH+c z6l?E$9SzG@dfD{WDXaZC= zK6Rzl92x* zmuP(yheH5R>y0YHQCY*yGwqu5B)^*;S0$k$*FM7)%5JI3dSk_t>W|kj`zxt-;rhvI z556*eDSsEGJhioMN{wBVM~y<+N()y2n=7_8!@K2m*}fczIS=!n~o?+nby6 zk-7{u=R$3>x>C8K0+-0qY~dQ0y!R5BBh3Oen9YNmhbTP&FB-X=Ffl&#>dwU;Wu4Om z#26?!aj9Q9M`>ffuGSe;WvgQA*72RJCZ_kVt?H)dbA*|ar$r&CI>hv{gpuPlscq2w zSIGkiYHh1~v)YmC0hP;K^`NzhYQz2g99uCdY=2j7i`2I0vKssPJnT!GlUzN9 z1=R-||Isz7@gTrwH@fi*CP&Yp!>M( z!ijrzsEqRlr_cG-VbixmxT*DHbp-(C^LPAX>W5b9U7e2p(&z*dL(HaOvENgrqLi=Xw>-s5&2WHWziBW=wOpf5D;$Kv;v)(oUu=?pIs|ypD)t!prqmzabK^#$1#48%k zS6wH$iim7?P-USdAglV+{s0x8QO8m>G^OIb2`bM4Jq*SAmTZFn*d+5->i&6XsAfVz zb`7~#*0||*S2%RNu2uNQB>Y>-Tq{hc>US++qh&4#L4LeoLW*}biJJb+@u~k0KH%ZU z(1!7uziiLF-MEMel`$2FQbNT%AjKzvD{mH5fST#MSCzBi$PEDaB*@mks5ZAE@#JwPMB9om~t8o?!pI{?yj05IPMAYBV!wzUO-x^|Q~gxll8|Mc|}zjjKF z!vU@Z^$v%?i@0g&h{;YURsJbqyiEI-q?x;&9huEddq?MN>P41uwuMt$?(k$f ze2Z2G0KBqb)lOBGsENa^_AvrBG=l6@Uaj*RQZ8oqlRTiZMw!_sBLLSFD}*VPbvnTo z;=n$o;Mg(AMgS$Xqw2C0HA1lZfa${KU6ho-1%z>g^;&J479hlI(K=4Fugxe{UbErM zhp8Q`j-#zeG#<&t5x4?hq0ts>OR5~M&CQz6dTpA&SqG_lMvW<4m9wC#<_}Oh3OQtz zl-kwWJ9fsXnf(PN%@psd9qg0p_e}RLzt`jNTIK%QI#K;q>JoBY-%>QQ%p^j4(r-Ti z-^kJHSe~I8`>(OydeN%snf6D0i|WELGP0ZTT)|>nT=L7+m{xwdhU*|9^~{mu7(+_l zcak7M0Hmleeqjyj~sJC$B#5*6%Hia|6lUeIKw9;x`=b%ehx>RsMBKZW};* zeE98e9Q*32Fxw0?^&;@2IPClPT96L~uP)_s{BRd-;qdBPy(~?Eh*#GoUhj|XH7n~E z_tx8V{?-8VG_L6FSLyB3?ed*FJ#O#NJ)f3icixiMeF%wMtrvLR$twwA<9ui}GjJeNyJenS zWgS-jv=l#t%r7j@Q-wyXqc}%MDMxY!M{SLQUHL$O`GXr@&4g_PP+#&88Htz)6e&38 z9ime#l`z5dDEC)m2gU?UJnVwyo32Y8RaeR#bR+DoD}2_B*D6B1G5D(AYpZ%?Rj8iK zks`FwE9_r+dy0EC5y*`HK1~_hKe0xh6dj?dJ#(2WBUeqetK$kA?p0NS3rBF&_!6Mm z!Q1`!zl+A<;m0tajeq?ovrDgw^Wx`1Ohh1KQ9Dq|a$OD_v#o+8H?Sl}LRwXcop} z_EBhLb1BwVs_iyKHN}LWRnKH(WGx6DW%ke`{e0oaF{L!`kH*(taK7oyc2q$?83--C zkj;hDCx*vZh>axo{bElutk*VkHLmTsGk#pltSR}Z-h$$7I`n*l3HMbt{Cox&_D}YE z01#$#0FIr6#mFAV)4%@ev0phA8mz?40tCEc5A^y|?*9QX3%gZcRQh4yDuSGNI_v4w1Zu^8k zaZg-yszGjqdIBTR-hI+^xOf&YBa|}HDYQUV@v34TXDjZAf-*C~ZpR5~*OYN$-(Rt&SQX~5-S6TS#dHqga zmjMzde#dV;2tQBDH)Zu|mPe|N1y-I471s5wK7?5(5CEr&eC-?=vlkHNC#apvc+stn z;2ReQmdLzHvScI);>abUm`3DH%xioStzu=VHj=;T2P()I9SDg?k}>$R0Nm9rN##_g z&t#`LsU9RuXU?i=b95a7;3^(J)#uNukMxX@Oo4}|&Vj}MCIHS=exY`L(DPw^z9Jy& z1zFUWQae5MxhghMKIdp=M}?;-)$pU%=u4lhADypifGYN!0ho3EOU>I3a)yvNe;!hI7;H^dY9^try3?1L&K$ z|1s;FG2Y{ww0HGNHG+PK{cjZ|tnFWTX z9f;l0a(#FNzVgAVGjHOWv)1j+CK2a8_1Pm6G(>#kyt_qePO+JXfBP%C9x*R0%trLMF+G^a0``NAh6$?Q&zyg@2ydw5QUTW0b5sFL^{+Iom)yV4)X z>Xi@cHS-gg??~L#Zqj?W>XESL4`4?sgpsRUQ*Nh^VM-7$E}-J!*+t#%Hx*IKE_I4F z6^y*bM-A#l!AeP^Ga9Z_Zp@~;kLpgZNRr)di!H)bJCgG3tGkyn)hd2rW>a|}#~-LP zi!#4li>&$U<+qg6*ymK;{48EUb!)76UB2dEd0*Pcgoy=!_m!qE%H7w3X)C@}VVP#5 zNPKnvSzLFjSLV_YVCv~@LkJL>ZUX?fVq~iYYP^jLzH59(3OK$i`}#J&{q2=g#7YN{ee6^O4$sx z^#FQm0kq)u;v2)$e+Ty~IPod$-KUBx-~bSaKmvG(fSfT4gdu<AI@pQG>Iu4Wf1FOE>z1iVSNl+v0} zu&}h{)I;N}1?zRf#u!~b?}cKRS=?FeU*-2ViuJ1gPYXbT`T*$94uESH0HkdJpmA+8 z6IuXR`xblj>rZsQ`GDU-AJ8n|Mj$%>I&eD1wKyBel~;xhnZy7tB=^=jT2#xV*gpWX zW#!eotQCeoDK4niNOs6^OZ0%H2lV4D16XI{oll3UUt8aeH7;cf`jkI6 zGjuzX8NyxIcagZ6B5wyE-vd=aU*qX&tD1?_0}!<~swakht}zM*02EsQAqvjFg~LnX zj?ct-!D97j61R_&^X|f%$heyFn=Nj`SnO2hEyfxfL1zl4F|%PSPz#c-v=*(lJZSiw z6@&qczf0|m5{vIf1=`4qOKotyHlD44#ZIW1ab-g89r=Vd0No7Z5vavt3+wfU%!8`^ zY%t(;V{p~)gd8g%bL$yEqO$85=i8Tgs%wHb4>4WawUK0cqu)T>6D%&6tqjouQ>N+n zfGUOzF@OjUU?%o^3JaOvh3z}cX5KJ>rrnB{PSeqW>dse{&mJRAAPM4feFczW0hm6I z0)hoRmnjFy(D!5ka5i=-&$MD^Ab`{V&)%ChOL81nqQ^ZVGpp*}UeJvOKma5bi6khA z5-EusYMYVieR%d{^J)I+d>fm2i%D;u#w3jvQbUtSiUL6_jinptzDreQW`z6u;2s%K z-B|i|0~7&uz^tuMH!CtSGB!Vc{5X+~4O+tTYJ1!>oPekh5J3Zl4c1SGxX$DIx_!N9 z54OKW{Y>}PNi9+iV4>490SIXXkf^82&tSENCd%hJZ$0vjqAICI=3z=8$SiXNg)TOY zt^1>&E}9rEQ^Yc+L+(fdNg!eNTu;p&cfe@(2dd|m1FV|ss5=O?uosvK3!TETYDU>H z$>Y#!M|j>O+pilf$HFqO&z1UA;vuX5nVQ%SYNk%fLtp(o<*hY-4>TT2=iggzXl;q- za{hX}JW4R`0qY35?6>a@d^}YDMPyye^9)K@UVP^W| zt3IN5M5aZ(Pzn!U)8q0eCBE}o`a9q&Uk3o4LF!hQPudOuj45J4s2$huNx|9O>#R^B z5IAyY%eVbD0KlpT01D^`A{acMZjdE^*rN(Pllv(isjR>J(iA!mzQ1)-@4n+E%_Em^ z{b|hSxo?sdZ}&L))bQiJbC29StZ+4c^S6)xy$4-km;_Fmpk z^r=tEqmr%3N)UegT}fN&CT?}^W?a}6E7ehLpK;0fssxD z(3NWu(D|(hBo=_6i3A!H8p<)f5Go4p0aYX^n4cmS@>NYV$*2TfI`}P@S zKVS_4#lF!7zmE+M-k4Ixb8=(VGqhC&+;VcUUp2NGHSPB}2P#cl8o^j3HJvq8?Q%iA z{*Y&edOg!U^@LV^!nkzS&Z74Wpw&U|3=eDiq?o(a%G3tGvG18xik4@|r%3IOQC0wU zl&c~!Br0IdsyYh+8X{#0B3%SPwtlkrXc&NL9T1k0 z)^?)l9hsW1a~UhhX8xQK*HM<;`oa|VU~*b3Zu2B)qdw8s5@Fc_d=$e-@7emXBs5zcHzA@`SdiW(_Z!f zl4PKGb*Qp(i(CW&NL)P+X8lJ9fE4@X^Bj*T3P}W@hG)kfKo|zCMoulq2l@&CUF<|I#Zcm){!Wv$(jUTgjIt37} zJv&X?hzMYM^K}_GOQRs_TXW8@8(r- zyx+BeLao2+0no5U!I(`Es2c{@0gjG$SJnW&`StEkzZRdteuemiuVA z@Sc*@QUUCV-`?`sn0lzq!DMegRs7pIvStGs|4Rr!@?@z5pMt(_SVRGZJh0lDG1&|i zzWMex?p1l7r#%=nC&2aftvFg{JwPLXd~^etJ^94;jPpKQ?vWDOwRETBZJvk0)@S=( zm+y<8vtI8}9QKbOuU0gtIA^;1o=p4r)RzIwKDy2U;P|St(EGQ5qSJ4qI8@Bi*BR&c zx8CpC9*0wMU4LwS3%jhw%Gsx zAOJ~3K~!m1_IqVjD2Pa8IdPDJC_|xOg);gL<{c3f3@yxc5qB97D-j8+%_L>+Hj?*b z-JuThir99bU{GA?v^S`tDB3}GuOgk+sP6mq{twJ;+kI@5=K7?K4!wC}G^=c`$Kz*M zG0$6!ryf6Pqgt|X=8!1uD2B`$0}B&8w-Te|foa|3#t~p!{d`7b0GzX`fEkoad}h5`V?&83u4l_MY`3y`>U&eOr?(jie0Q+( zr=o=2w~=E_lS}dI-I}aV)I4=L@3s9-4&ofbQcp|rw%xxyhnJUu zrJdBCUH}wBHa?C4_#%~1kWp=XoEP}HA7DGmJurSG@#b-P^wO{Uqw7RGp6|dsT)WY4 zu6%$uXMQWL*3*1?`RI6j@9nT1Kiw=H{k+2r;(6}Y-FOBt&67ro6fl9-A!?pu0%|si zEyegqTKkXm0Q}TTx^l7qc)s1=etp=-@zEUs-6~vq>O=VHC$Bwn)n59(&$OBP%fS57 zH-57xC=drg2?{WG0HhBB#JC2K`=EfR2*5Ilgs7PaWcW(xC{PRpU=@eJ zp8l*~1S;Hn=uC>J5$w^10X+Z-1fa7=fR1R|kMz#l;~Th8w^vTwd41Zicv*PS;ZfvzfqqN#Fa$pMGi|aU48XBuko9wNP?G-9$Rq$G= zJV?J6x3**BAMmzGZKpqm-4|F+u~hN1@<4_JHyB}q@jIs8a_-%Vs=f#`W~4XApQU0& z)Uu*&=|9jQ(xrc>?dZmC^Nqrm(Qw}-9-mOnN#lN*J=d|a&2{qnrR^)NPwm!i6K@_s z0ufaOWr*^uN(dYpr4j2}(-Ddk0qmMQi(-Tad+(0@0|nD6egG*i@E+8b0nf_0NDlyI zU>V@%U~yynx`1{D+@GM0#!+E3wePgr`X$$9MIeelr`ZzPLFU*b09QeARd{wh91jk?<0_AiGcI1CrSXijxcmqTi9pt zU@O36Z!Jsh1{(uh$CxohlQ4ieDS+P4qof_LDer+r>%Dou#=~w&piU!?0H*zT>AA0N zIYod{%r{?K%_MPEe%01vFR4LgJjQ0mg5TTrZ;Hs*pPz@LgUEp#>Gr=2nE>p&4shy) z#~XMK-~kosH}aLK{j33CvjWf!YXD(jr6cLqc`Yw~ZTL^$K7Ns>%M!10L_~s|3%@0} zDMe5XjW5m)90~warnkm)b26j~05Hn(-X%L`zr06SID-SD1b|Er$NtK7MGc7o4C{Ht zZ22fA=t_rof4+zGkTU?>McPh9lEe^VS^l--6eG;X*TDnkon^gzP|86m*4 z@cN7r_frDEoR-(vF0Wcr<^mu)jpli&CkFx$Ev{*McmDa$`WIiEhL!7$%rk(9Zq6y5 zd;lPue;|!m_6r*=O|E6MdxUGd)jh6NUYCPdEZaxy9oagz2cUeM(+&iRK`9YYC@4P` zEYo&aHl{TIXmKt8NUW3-g@~hLI=zE+Uf=A#6_GAlQEV6yeLkIWSS9QBBsc?baL z+OZC+Fbs$sB9pQNCMu2`?onKH8bOS%0~DE|g0Kh73Qsljo(fn+XG#o803}H*sw#q% zF)H$mtk8_iNEs?6&jUon1&?Omp~8NgXbS7ttyci1chAG|n)XNZ^K2%8^qKcke0o9z zvN2|HhD4+aXvniRJG*KCsrmiHbZ;7GF?qBe2<+-8ydqMhi7W1o<;^lOKmy{L1lAN? zgi98bprWpup`@9mL}+Z^!E%=HQpe9iOQ?VJy{X;n>m?@7ts=6%9@aO&M_KR6?tSyf zX&b3R0o)-oG~`hwOG?Vcd+*u7t;cL@vKXW$?@+;&qm48nMu^IhGL;VSUA1&=JqI?a z=MNsbNr$sQmG#VkCf>4O_VpOl>L|Jsx5^_%yjIWCpF1Wld_ zB9+H60AGNziP$D5K|ORH08$T4?vMdYK{ucDlRm7b{6(gveoWD6PyOoSE=cF9;Bt*l zTLLk&h+?mK+;JZnAc3Ah=F|$u1N3_6@w7m2@+qgzeZUg>Bgtk6vF+3m zG(E6ywkCttgZB{gSrQPyL`GO)4Jm*bLcqinJD!vx=p<@jiqOC~k396;cf1*RbqqiT zJNrjsA|i@HInqLIX96%B4**D_LV_8bvjAd-r9mMo7NT8AEPFYIg&h+njR+u_0EBT& z$ZmL#lL$B^iPEKhmb5zRt!sv^&zl*5j9F(Fw2{*{WIKh>&7SiR&{?6P>QTQaqG&2= z*p7M%LQyCEs20s|5^`il8xWK2ET&3OFsYKC4?&q0EeRw00HkCZd7`XDfm9(Lrf;O> zj0_Nw65%u8{mc3~UwMxDW8L48{p&$BuRg>*YHkYUWN92fHp%!W6syY2gU99bUTpZs z>`1wwhAdTXqB?J0mv36Cbt9Alv^JA}t-2I4cmzT;kok^%+EHe5D3luzY1#ZGPT zay`J>D-J469?gQ>)D{-|&ulDvF4OQq)Bc7P+W0ya!wtpGW~!NPi7I#BBgeI>z!p+p z?T1pOO{!}1nU)So^)0vu!!sFUX^*!*>zY7{7&s+SVbOG7o2v!cTC41=^rR%S$fPqx zkZPAxOk$DpF?%N3EQrB%T4bDQo;c+x_5dJz05bvrajvapW0mIF8{FMp4=pNe{cP>2 zw!0(fvmv`!-k@vvwD>XC-!8!2Qm1`mc@1-uDb|1NXQ7HZw4N)^aA~m_jv974=Ym@h z;F)M$Q>f$!l(cV5cy&E;W?+^k_brEz)2O7_fd%sbdO(H0>#usN+|OXw+33nk4-^o< zyd0+69RP@-@6Ld1=9jBS+cO)k&j12O068Zbvsh3prO;um2|cY?_haE_H*GfMc=p&H z!}bDzu2%qamZ6WSSK`TGMhi`AVnQ5ra$zaMLJa>FnYZhges`vj^8`RoKA`hEnFjy| zT2d{5>o1T2kfFsES7SJ?slj08XI`HA2@e8s4^Z4QR1;w?_*|)zN%je+Jgbic^m+QaP#f4 zKa1d$Y;Bw}g41G)LK?8FJeIRIDb8-OtqGgUl4cABN82i4>p%iPmU&|sfT99qvu4%P zv=>xF*0M1eFWHb+6X~(>ZyDU9&00atFyC5604Om7DU1rJLQ%YS zqY{ufWgyTRK(-(kQ&5@g9Ze{4bRlN|BTWE0n+3y0LW&3gW&}neC2W&w%|z=n7a2f4 zejWhw-MAl~zI*gr|L&ZJ6#G@y{mJ=s`z_4xN9+LT z*%^Qd`(`|sotnVX?7|RoRrX8`1g+JS*5y)wik+*AKggsL3LdP0z~X3|Q;m%v`_D3h zt7I(E6gFR6n#E>xvu;xzb&K;0K*^%hTvbo_5Ls4C***<_L`v0;lZ3HI0kzP|uK?UCg^_POFu2E*e0y@PK-{qxvlO=TGp{ zS{?5#OQPJj;_fYDz8nx_sjZws+Z@kaJIP|AO0Zhf=WfX@HMHl_g(21Sb{*9o|7iyh zKPOZ(UYloJ0%z-Ud42$Hy4yCHdfwBfo`XDEsJ&D?09HLMZ-)H|{1RaCGcPwU zM;_aE@VI>b%Q*soD3sc<`M_misVX`GV%98qf4tdz^~)i5oK%=}+A_c?H9KLpfWdG3Bfy_~(dPGP+GT4-5#mO``<-fTPCyh#7?_piOu?{0ve_mnvR@V111 z%JW^O__4F}rs&U3=aMYx(=V68y|?eVf8&ii^a$I5>`r-nnDi0auP{Ao-UVGB_uI4a zN8b-$|E;_}0)TlBKrTNK0Q~&Nk68ajOX$|)aE!f0dDvDRfCtT=ZDn9qbU5Erx=Z73 zd1su1gpUjh>8BxeA2MlsUF8R!jsw;)%M>O6v`qnE&EjS%DSzbMt;9=D^Eu}`KO44p z07xE%vw~R^PL~3UlX+C{s8agjU)(u;f8JaJZ!}MkjB$sfW1Q~BJ8yhC%3oiYvbn*R zUjQ`cbJ~5R;FSo4xLC10k@q6eh0h3SwL&=r1BWwtsHIc38=bUCjPUjrE{SLr(J9gWNw|kxT-K{rvKlq!~$w}&mInDrdG)$=4 zqs>5bOkEm}P*La5<#`LNU+rCOaANC-HWjarACCvHex~wby$!iy@Qz*Sfe)b>KyCiZ z(5RaDy;?wkm-py6N2?>$hEpG4B)t4p8mz^zRVvxrmuD{$A?_MmepSYK^?e)IQHOySB%NXaFE->R#MK`Ys|dfX<>ZiSDTUY@1H0i<1Dzdt;Ux zf)xSiKB26EDG1O8QaJ)-SrjZM!_?@cStQBT7yztkx}&S}E*vAhe|taQMIWH^HjJkH zld-H14NfUt2f&ig&1RArx;F38cjCD+0st|7zv09oE&brQl!LPhKvx46ZoOS89qmV1 z^?(yd)O=Hu#n>nSog#oV*k|DQYIpKpdi7uMo4?29Lf7@-dj-Xk+1)@w1~4yCRiutpdlXGqyKJ5SVBRMgar6X^o|sdX!iERC>e(bXJ+>0C^tl_Pm%z^%WJIIc+i5(T+h8}FvmU_`Ozp=R|0uD4 ze72X(z>y?snzzcqBY8sYfzs#}p*Jo`GgF%WY4bJNS*0lG69A67w9r+6>|eGOuZ~R5 zc4D4A-+se#4K>-FUCGUBH65h7*ZaB7d^P4*cYielC90%-T&X;c!mY6WucKvgDxs`< zR-`=}NIl4Ak14G=QraT}(42p46}4}@9&3p`5aAvjq$cMvIeUfhSOw?{Q_lAZ`C;jK zWhIj!mNYwYIP3d~!@lPMSyE;pbP$aIwnUJGO*aGJJe=YD`CmN(=D+%jPwR0WmtTBo z)~5qk&I4w2UH813WZcigst{fu?1%Rh4cg!M@`7Q`cOFD6=brN6H|8tXO~H04T^`4? zcbIt&>j!Uc>^>w^K(RTGD?F!v`iD2Zy_&B=pJ_yP-UWUr`Q1;No_AFK*FK-gXTB_N zJO;vgqyOnU=g=OIJjpK!!&g^BF~T3T(D4=Ad82>rczWT*_WSwTQ?xt7ty`aF`#!OZ zJ5N-%NXX}pz5c#J;CYGTdkDwwN0sRuAV7d6#E1Ze3Y4(~KANZ{*}sLCV&{?gv55TX zEdaRo9EO!X{d|50*gsHO20nQ^O?T-Sd-TN~s94Xeo_m;F}mNwCkx(`uk{(_wI()XH-*jJ8NzRYssXbK2^ugO(bd zSG2Yr*Z2f>yx(knyFLO%^TBIk07)y_O>I3=vHUi#Ldg$+rB%*$l?KyoJGEf}dVIQ> zd`==`0FtMPa%55w%YPXfySzke)OrlZE!;a51u+Mu%%pK((s({!>euJ9B5XLFB#i)4 zAW4&A01sJN!UI-LvxBLJim%AXoEu>h!h;4M1JFY`rrS+jbVO&;C1t^7mQ%}{vfks zlWpMe!umf4*Lx4tTm&r&RYsc4pvqeIfna_u*Uz?L(E%QRf)Kz(-9i%~PqFLAX%yv- zO!rAf0nqmmz1|MIO%@O9wF-t>p}-YQU0RVY33z50SBvZrFx3uJ8Zkd)I#Fsvbjch_0CJ>EC4efymv! zy!Zo670up+3V;ATjr@;i^LEeXu=5lQw$;u6kYJcP1E6_HV+5NeIadFb{c)DsSFqONBUT`E#IvRe>0CB<-c5ud=}wV7<8^K{tZc9kJpi63EU1!USC*9}L;%^{yA@k4 zKG+oiOnVd@-A8F^+_>g*Fnto6iH3U4q26lQ;Y1)D7sFPfSDm>=R(N+Que2L~Aa&;7$fP$kF0m$hu2sE6(GV2q=qm z^5xA8YI{1<(XuoB!hkP`e!B)5o-~huuN6K=ruQ+dAi%scbu1{rVsDVf9ZqiR`GjY_ ziufgcD&nm@O?O#F06ElfSdjq0vI=+}jPpItUr+Da2$A}9ttPtvx~_O=_mtLsAX5 zQzpcmMUm$zuqJMu@AWzTG-bWic1)W$0PVhM`!z53wLQ_#PQHcK{ju!YHa9Dl�LV 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%0At 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

EPT76`8o6xdu*ur1|Zb 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

2?7O?}~Ea^_Q<*IbT;hn``S=-ncyD+|u&g zzSJDpf9PW`##`oiJ}3u;8H@_*3#H%4FUWX<<&9PyNbCbZ**A>d-19dwDw~ND@MMq- zZHcN{NZJn>etqwY4jK&>po&HWk6^}>td2nj5(8kP0O z>ea9MoXAHoi7NLZF{Q|bMx(X17nsl1N7MLOy59CkMV?f?NiSWWZzUru>4mU{3xkT| zYG-HXd;jDⅇ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%0AK?-GC`gCOnl?G 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�LV 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%0At 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

l+wv06vvd=JiAA?C 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

6n1F_})S&#rvxa~r3*S(7P% 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

-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 literal 0 HcmV?d00001 diff --git a/static/tabbar/mapDefault.png b/static/tabbar/mapDefault.png new file mode 100644 index 0000000000000000000000000000000000000000..45263f99d4d0231e9723685b096babeb1c678f8d GIT binary patch literal 12938 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

)j;Y#4PZT)y0k^W$hmkp&{wM}$lg#5q9?`IR!} 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 literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/ByteUtil.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/ByteUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..10b8aa571de50546b8e160bca9fed8319a331de0 GIT binary patch literal 7744 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 PFi_=u-qRVMqg0hjwhubjYjDzY%j$CCIvYM$ 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 bu@d`yRXkbVs+aJLvE~tE6*bkLo685`ja{by literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/MultipleBluetoothController.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/MultipleBluetoothController.java new file mode 100644 index 0000000000000000000000000000000000000000..656fca5bcc61ec92b1adb299c615072eaf8fbc18 GIT binary patch literal 4896 zcmV+*6W{E%Ow+MzkIe;{qsW6A;p9RbE1pL5u-R^z9P!N*i`m`v-&O)4c3=dJ;F~oc7UrJ|<`r%}&JLbYR99Z#n#WsF znW3{9&EuV@+m?HL$L#4ow6r**@9r7)#-D`;p{;a0EKWZ_X@@rTO*SUJtM2YCI@dSa z29twogt31>UAXKZdj&T;Po@43o2#3B;0alWxUJW$LG`SCq9qLOG%m32f||O{U%+U2 zK?1MW24dD?-<|98uc^9Gqsml&G*Rzjz;z%*FktF1*h|Djk#uSl7qRk4tLrFhv~5iSNi$7`e>899NPT*`(}b zC#3#Dg9c!pQbJvVrwLgl@X-3RoJr4i>7iEeYc)UrL>%V=7IP}WLCh&%#A$uwDByVZ zQG*!v#@DW=w=mi(p){g^9l%hHt8aZ8%?RcIXlo3B;hJSuMS=P8vFWhN zdW*WxGcXR0Dhu1ZwQ8!=(339|a|JP=rpuzMGVk`^x=ALxuXd9{{)eAdNMl&8Qr$W+ zb8VNZv5COE>WGOw6x;L}hQ~!1CnVH+aa`fU$6}A|pjo-yG+F!tVTk-YNyIxT&B@@E zs;7z);|2^*1HWfTBIUj?lg!s$5Kb(2FMV6v!?Q}{C<4ghgoRd9;ixq42O1#h=8(ey zAKU2c)SWTCIwYV>mks!aw*j9|Kxx2yY(5(6uO{T}Frn#e!StSdzXQf!RqesSxRj@c zi5<34N8~7*snl58edan1eMSKW_6egN-@a01-xMC)FQfN*Hh@a^h-SbzxHqPHuEYaUe|iOrOp@uga@kc zAh1^wr^ZW733` zBpV*pNpalnmSaJsIQ~z`@*AX?{>K@T;W`lYaPl+H^PNGff6A_u2R4y*siL@PJL@$Y z+-|DR&Os_zXePOM#WmC(#9)E_`9v=jqi^1cw`mB|%0*)c%h?A+ls z7)3Oc+Dhpyd7-;`Ww2yBS5#FS?TVN4&h9ODseX36lT9@6da+t@JlTe>F#~^c_JmM8 z`CD4<3otlbxc3`)mpbUxrX1Pt9Y0z`8ew_g-gMSx+dC2c6hQVAxWi9MJ^Uyp@mM3S zGo414{3Q$|#9s@Y5?=b)z0-A?8e$Kz|4sp9N_5xRjw>Dlt}-B<$vz0U{ci

&QB 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 SdZ>m=HALSIzl1s&r^cECb(LcP literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/SplitWriter.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/bluetooth/SplitWriter.java new file mode 100644 index 0000000000000000000000000000000000000000..d15b75b9c35464c72c7c7a5a0e7635b70325a132 GIT binary patch literal 8512 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 literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleBaseCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleBaseCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..4525d4bdb231d61dde4aa5a24204e1a3e2297e07 GIT binary patch literal 448 zcmV;x0YCn>Ow+MzkIe;{qsW|7nmeJa$1j zYJaJEQ2$}MCR`xDi}#VG=;@nRfQX108F|YPY}7_6^=KL+Il9@>h^GBTXPzFj(#I@q z!Lnq^HM8D370>#2%v0V6vk7bX;O1UJO<{yr^9ZSgg9c1vZQ>fadz2xgs)aElp~U1+jikLQ|v9z{{iGWL*CE; literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleGattCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleGattCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..419e485a36ba8fde3c8cc902cdba5efeaceb852e GIT binary patch literal 752 zcmVg~WoZeu~~D zq4u;M>CzBQBVNWp+{~VICV4<@nLk|LGUpax?<9PUcgl*5w>yJi`vEGHUl`&>S~I(} zw%hFLXgV!RkOz~cI@tkrgMd0K*ychE_caTbtZXrkuW@d;F=tN_B!LJ31Zi+C?x#a# z;$AqOXF>!|EmuOW31VQ^QgNLb0OYg;9A_@pB-#Gm-MI;Yv+!`fHk}in$Q&bdH__Lx z4Q{X-8j;Jk>5JrX`}H8Ng(5X!qzIsow=bPtXwQ*P%^)4kl-0%EL3b;RneZrwU+`XW za0woSa+@Z$#yL-m8U;&U&@YbWA-m+(`#>jUP%~V;GQjHjqn~Td1S0&v8Oz-`%ug^) z{edkEx8Y9lUo?5Z66s%WS1YX)I}zH}@zwR41xL&^hnsIb1N-qANC?vX7@Ae>xPrP0 z4(ElH3tsD{+fRnK2mG}6*T4n1dk5RZqQaZLlDB_SV16zbJZ?nybdYvG%^E3pdRBxTlO2oo>3%VDEu+dC2}PpwELcrri+Vjg;$H*+OUix)kiB*!<6 zOst~EP_P%aOeAog#MkVZiA$GxY19n}Buy{qk`=pvUZ(P}whrc7VrtR6d||%BJetmv#{c_%qe@Qyq3HnH1^(M(2d<0TBB757qJ;UiNy) zZ+zcWZd*2JWfI1?x$A}$(cfL|+WeD{NM5hH`TP1a46!+q;hWiA_TiTV_^hECSH=6T zej=IB5n||xY>Kbjs5;pW=-QF@EY>+xy(~Z$6D|qjR<4$ZbQxLz{TygTgYau1AY+Rf z_Qbu8R5BqVbRWdK%L_F@nxSicOo|c4iZE&);q8ZfqNvhF*mb%Y+LQ?ebIe+|n$i>D z?9y}`JN2V=5$7%@q$)rf5F>mgYw1`NGi}Hr`W=7i9s!5XXPywugwzSQQZe3~BfK}L zs9&Fe(6n!08H+>3qZMBWcLUS37jD%ypLN!Sg|S_Yk00&q%j?dZGXtsF*MObCr!U>m iurNh^Iq%$tA7qJ;UiNy) zZ+zcWZd*2JWfI1?x$A}$(cfL|+WeD{NM5hH`TP1a46!+q;hWiA_TiTV_^hECSH=6+ zd`@;u;O()2Lr*$}<4IPlM9iZO?xp`{40MZ6BcL;#aGpnfH()m#4z6&O3rvXAPuI)14=Y%<$qeI|>EmEoH`K m;<8rJR{+CUE3c6~AXP(whO$VMs-c7qJ;UiNy) zZ+zcWZd*2JWfI1?x$A}$(cfL|+WeD{NM5hH`TP1a46!+q;hWiA_TiTV_^hECSH=6w z^IE#%ZUUkPsHLfE%&m$k|2gHwXscHA*>+}LpU8r`+K`g{Mw4NOixw{w>MXj&n`6pw zfseYN%UROChJQhm=>X`Gc&Z1$M$OT!JSSG)2uU2YrPVA;h-_|MW0A6icy|tV8?Jgq z9ybC|BjM_*D9>^-U7z&e`A7Lv|A4d_x*paMD85i%&h-ckR7bt>`@+?X$InubmtJ;V zT)0sO`;0}z#df!C{T&bUT9GB9#XwF>P`KB>d!KA}8X#q^v literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleReadCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleReadCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..49d85b385b43ea96f960a67fb4fc8ab00df8d50c GIT binary patch literal 272 zcmV+r0q_2{Ow+MzkIe;{qsW7qJ;UiNy) zZ+zcWZd*2JWfI1?x$A}$(cfL|+WeD{NM5hH`TP1a46!+q;hWiA_TiTV_^hECSH=62 z*XUjl30hWK`B--+t{>v`t(AFJM6U#nI@BCoYK+s1O{M3R*!9vQdtHfk*^EMrv%Bp> zrl|lbO_r7Ndq~J=G~8~pzn9Jfw7sho+>CLdqP6#Z1+%9pP_#4HQD~F>UxV{VZmrlJ zI#wjeWU3cYOvO?9DjBZPMu-4}Dwbd^)D-H(Iap%IC`1f7#Ums{N8?~oAS|hw>zflWJb|epj}pI;xS{j#iHZ~e literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleRssiCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleRssiCallback.java new file mode 100644 index 0000000..0ebd953 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleRssiCallback.java @@ -0,0 +1,3 @@ +¶Lӱk�Í™£șiY6Æ/ƒqŽvpDұyo +;b*r‚?é¢:�^özÉo|ßTn[6heƸ¹ë†Ñß]íÚü“�H^¯ºùûú3 ±9’á›Ù]öá—ø¬¡WÅû0�޹ÈBœò²˜Û{íf<§IiCãu=”uƒGý±%Jœ¨)@ڂœÏštqö|Ðԋ‰‡“  œ—·�ºéƒDKßû.Œ"4î촚Š¥…‘‡G<‡h`Åöl:^GgŤ&ã(öеäeçË*'ñNÚù�íïõԧ_w¼¹m$ +gã‚ù\j¬ԫCS††©“ÚMd1ÁóGމe>êSÿNLd݃×9ԡ§¨¤· \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanAndConnectCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanAndConnectCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..6d1dd16b5764d6f0e0368350d7ccbb61aba2c5f0 GIT binary patch literal 304 zcmV-00nh%nOw+MzkIe;{qsW7qJ;UiNy) zZ+zdIA_^`qnjk;^`eDM%KeicKtJAW8Mq)p@4wI9X#@>`jAARy7-bwMW4>!VIM6ThCk{@-?@rVsqd#EB;W7TzANCmxeFn9beo3Fr7-wr=al zRo6w;DD(^i^jl!f(?U3{N_8V_Nr}p`bSn*BtrumPh~+x*;F7|1?^pH{g*&zDycrJB z>Zl(!Z>D4nPwmN_#R9Vh)qNvZGA>OvAA&V5$F^`0ZqEm8g9vMinRu1Ys#_h&-4#PG z$+Lt9v5*SKPQWy&1Ikp@xY*za-j&7qJ;UiNy) zZ+zdIA_^`qnjk;^`eDM%Keid-w-@@}!FcIZJ`L0TL3|Zu5ce)oj9m3w_>Ct3Gi1`j zSZh3@8QPWZn1GYMLpz3V4r`DNP2In=B7RU1(BJ^@tO$wLD_dgb&x8uutAkq0bv9cT zu07ny<3s`E@1>4+1OHUuO-E|4`$d#=>*M#8gra23ana%dx_#o6h8)RMHr0?JhPYT) z+_ub(KeVKWXajK|>p80Us%UKE7ckDQ9Rc5kK z0Lb#~e-3MPR<`N+%}TN|Dv+WM3EYP{v8a#Kcb$xYTu9^AU1-75@1e4C3 Cjhn3i literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanPresenterImp.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanPresenterImp.java new file mode 100644 index 0000000..04893b4 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleScanPresenterImp.java @@ -0,0 +1,2 @@ +¶Lӱk�Í™£șiY6Æ/ƒqŽvpDұyo +;b3�µæ§k麏%`ÜBµæt dx •²›ZHtïSg%ð5æxŒS�s†ÁYœ>?ª±rù5—ÂõaiÈÞ »|'GHç„Ò5ÔÙ�þyÊÎ,5âN¶¸ýi÷ôw“]¸=yš ,6M½ªµ¥÷­ˆõ'Fö¡‰?éùy*£ïè3]C)Ÿ½"®=mòЂšVÊgwNû”5�qAK»[!Å(/„d/¼^\ܼ9}žK­% \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleWriteCallback.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/callback/BleWriteCallback.java new file mode 100644 index 0000000000000000000000000000000000000000..fc6ab48975faa12cea207e25410f33e78d49aed9 GIT binary patch literal 368 zcmV-$0gwK+Ow+MzkIe;{qsWJLB4W2=z`oa%$$OP(P(OK+ADQs)&H^D^{nYG z3+j6&*GRoqo{%%ADNL5h0ZGqbm9*Lm69?NQXUnVZV%L;14*dliG?zNUcdbnq zL?Jt*dSomTF6>#^p0n^6Q-yJe3X{5G7-QZo5%eaPEuP@7T=Kf&yK_Yey~I=!{!{eQ z9MmD|A+U3CTkRu`F4b(hqh41A?BA)oL$dwxX0*?R0`wPwcwOnm}Ie)hnO13_A26vHpTI7c^P}g?z;B6Yvs@$ OjIY-!G4;4(V}l1hQMhFQ literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleConnectStateParameter.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleConnectStateParameter.java new file mode 100644 index 0000000000000000000000000000000000000000..f259709ec3a383f62e61249dc4b6245e3f9e32da GIT binary patch literal 496 zcmV2ZPoYr=PDxrn(X#PSJHn}a{kROc5~U9! z+Zyv#dJ#~OwO$e@o<7uDC0uU%R%3h=p{Le&5-_C$s{bc4w%kpwVg%;F{q!nANWs;O zEYU_XsiS})07MFIK5Hr@L77kaaj5DF%LTkD=9?QAct&cwfyiYm zqWV<0BQXPbDNqgd42pw1F97w*R)}tmWOx6AI|Mvd80b~O8fi$(J(NIhofqYB3j`7# z%@NxsB6GCGKWmXY-2ZPoYr=PDxrn(X#PiQ($RNu*=+0m!O02 zzMd#(n!}|N&4HI(t1dxtd-?3KaU%9ixbiWZrQ@#te{KTH5%s;VuaM0{*@=7b@P-EA zMT%K?g5QjZ?8Oq-h<$!twn!2Cq(EqQR83fy5sivrP(OQJu3shqqygV3={PIVwbA!5 z7~B9ILHfdWabA572QrGF8XPV5*@OMXv}sRMItbHT-z!WMD{cN&_Z|&ZgsY2yn;$5d z5t*Ig>2|%Otkdw9&a#49HD7@U1~940nCz*g`qn3{Txz-l(^`HiV27mXILlBxU(-Vg zzVkP|S1&Goq{ToM)83mFrnH6vz91AxleZG*9^jiBd@RVFN1gZ|#^rZ{WW-|EZXd<@ zfK!i7iJ>`G0hTpNhWBT^xXuBh^Nk~yfVjC-a8@{{MU94WC-6ypu0M~=uM)7>i7?A z7kXf|2cM_9Q-O?`TmAJM)LvIEBswK3qm+jf0pcdX-1wm3MXdNqV^^!&CRZwPMV^{z zN7@p#X9=Xx%K{gxKy@bX`!ka!@vwAu@k8={5So8EL(5GH>p29o8e%HzPDA%+)sA&L zOz#1m0BL(UI{uARRZ6I5$^woBuxFHorbbm7#M)W)quBjRft_4>z@I+|QXXLpAtLYY z=oItt)qA1QLW)c0?Out)`1cnexx5T6B>(?(@ubXnZ2r4j>SL~Q9WYw z=ck!iX?Z4RJBnaZ`A|b4;*pq)}>W88a2t6f|>)0d!gk zzd=n9Z@LG9IRjRvQy;Q>ld-8Nb@~7a@>av*&D9V-#m1*osO8%_UG$&vyw)qWn*T0{ znwc74P?7LO9$o9xy*jEOqOM~wymbzVNN`0W2r-l~-&C26ZK#*A4-C)UK}S(D;=H_X zt*RAM)GG=Y51ysnV6^L68b3p}G@%^;>CR;IRc_fd&~NLu06iTtNZ>#qt%|tgoxfie z4(?cj3xdm4h2%1=d3n*^6JHs+oi((k%GDqwQL*3Q7(KdliiZQTO9wc?a+hi&0QoxK za57<>%mXG>MZWcJ)&}x5ica!5+1Q+D+1g#TfBzbMx^C+aTa}yEPZ9$x&nPj)iFDf} z(~&;asBp`(BcjK#G1mNbU}zV4R7L@^4}n57;M2}ARsK-HZl|tL86$t0E`mYKL-*D2 zzyQQUQR^CfJ!}7{r>AKwP5wW~?*pfDw;^O!VQZ|5Fob_Ownv-{Vv&!p7Ni@XIs&LF z(dwIHIfWoa=z$}(X*oZ~9$rkpQ}kCj8i^jx*;cW+o=@7+ewiJ|zGDXOLs&~VJMm5$ z4Rt*5=t?R&1Z7@bHQ1rX@iKn|sq?E?qJoT7p88LOUW*@J@Zpv4YqNtI!?R*X87h`d zkFP%-c$GMhX!kt+PWlFPFT3-#;LoBO0wx1k41Glak@#h@p_NO#x+}9;s5*yH=Ge#% z@af^)RZ8TZ>`MImjqYP3%Mlk0#_{g`IbW?T9hoaYx`qh;AK6b}Y4UUtA~MY^rcA#iyA4&j z3+ys55IkcpdL+!RzGA@EQ@?23X~puCD=*Qc$)$79T>J3Fnk-t-u-&dxEZ9vMk6eY^zp1Q6n_= z4PnTgNm5M34U8}NIaYmiXP*48oLG}_M{M`^qG5K-Sj1j9qM&5upK~_6y1`m;GP8#d6Bij%40<2zorp5LwLDjtZsdjSgxcL#sUd$mv~ z@_WuuJ>H`liZHZIa;_F`GoRSH1+>ZZzlh*QG{ywLlY zQ!d(>jrKN2vX``z0FF|JBZnV7_bdtternaHPzP4+d!MdE!v0z`57Dh%6!rk6_o9A) zYeLOh40=_0FB15XUYv~|(E2V-?KlOdzOnn|-SLKuPPVjp0 z{1630hZCF%&@S2%P0wz%+z@1eF03zw5Af%nLIBn6{8sO~SxMkz8-+KUxcA ztIj82YHcZNABoKBrQV<;T#{F?w{ydp!KfO%`t;Mm2Pa8DezUyAz3W)LO?#Ox_4Dzq zc}}K=$F7pmzj5-as~#k4i`u}{K7@z|OoV*Z= z#g(_mkJ|ojKX`v{teiFe_?RTPig?rD;nz5zx=7pS#k5@1!-N2Thx1n zP}rJ#hT;o9!2ZPoYr=PDxrn(X#PHAmfqO{vWhXSj&pC zU(6jrPRw?3wuuY-C4eAJ>Z1v;yC0oL|DhfFJ>6I}FSWE(FzI^%V11|0FWU-WEyK5@ zRGdI+Kzpb-rRCM-{kpt+o&2v}(|PO-Ac(d*N{=!3yN7lR{DBuG;7C=y(+w zQr3>sRFN%R#-Dp%@K8}3j~{rf0^SbWXEYb)W+NRBY&U|q^H}~o4}Ob^%hihvZC_v(1<~L+nX}{zn0Dn2Fn% zk!}bX%4OMFcK5Fq3;;3Cqn4tutEo-m3K2&XA$2BapZ?b?Wqth31_H+kJ76v7m{tcf zmnHll<%mt{!rJ|;7WEat&a8atQ*3sYxZBqwYCq+bKUI`udu#>xv;6;^@f zY8GGl&&A-t%{B{n&vh5dJu-C$+`xK}d|rkj36{2PCUpUILJ>#FwsRT7x1XMU|^r17DFje+$*P!7~O4d__fWtO4vP&1j!wH_oW?meuq?4W>ids9-}23po1#j2SS&=pz3I-B#$JzKKlJ+ zA?fQm9hQ-BSv$%6CFIjUpa63U5^zgNs#7~uatMA+=Hzb0ZP3AO$8*8p&r9rG*-r&4 zdQ*wO7V7Y*_|gVBhc!`sZ|?_upSSAIJU;rF_<0059tALxYswAD;yd7`<&20pW2>!B zAMn^c-V`J7lRp7WdN?#v&!@Dkw{df^1jd3($V9zb`YxFMBNIo3J_VD*(^UmLSjSUC z?nF2`MABgf(x>YBz(o{gNTeFJ49yi_Ts3nU`*@-or9mit5)k-$A6+ovtam29eh(cwg<`?gS_x9 zTC7el*$GaHH0Kt5qILDTe4>p|>!?D3US#f-h+RG8FD?)#F{Vl5nd6bLJuJSkiQM3J zrW{n>NV|JL9d-0|qGl9}MznID3vu4(cLF@di44~7S{3B0+t&p;6>4uO_ ziiz~^Sm0Y+>2H}NW64|OWlAvE3zbLBF>i;zRy5B??XMQ%atT8M7Q3Ta0$zH1X#XLe zNjehDSO<)e zdc8YWIsX2R%c-(xllL4{s4dI4GzO#|xbUB6RE?Gac8Ugo=8{m+9EhgYIR73w(uZPj zsJ+?5e@Ewb7;mR4c<-AySj=7--Pwl^C%pn`=@hL@Rpfl*yRoCLY$9FIS@-i|`?QO& z7x+^uV_=j1pnR%_%<=RN(x94}M)olg-2+@GT|-iP6p$Pwu&RV0v+oayAg;DIrQb_0 zqp%sY8EN*rq#QkD99%jCMWSCJ_O*$6eTqL@YXcL&v875 zSleplX6aR2+>0~r+2eaVPzdTC2{n$2-JjP{h@m0uKkDQPL7+EQFEI;pNyuLA^b!_O+FH;4A41~cUvV5IJN zBKzhG+A<|{3TN$(ao(WW=|92gnkU20k%~qci0eJQaEJEtUGaRyyO;1$Z|KPQQ+7}v zf~<`ztrE-ccL)(h4)i{+A@;^b;AVm!%G5BgnBWfFF~Bmd@h6&67PeAojodPWNONPx zgTm2Ccn5|qvmHpxNbNaQP#+cK@}ma+8}CS7#!fi|LCtnO=E&|$Y=OicN|^pLX6a7# z#2{zM=7Q_1O1L`0h)N zwoM!YYB6)g$$NAnojrn2>C{t<_FySIH{=4OH1`pwQ$c%5E10P>W(QCc8E zDe>lzb$rLQ234Z7cL?Y*ia*A=t+66(eLV0Onwsk*Xl(f`(*_KHvdI`HZvi~>@YZG0 z4#x!H$n8!3Msl{kA|(D~KUm2x@@HJ@7GaU>lD5;AhgvXOGBRM}wgw22!{bfa4EcEx zP9&mUGVZF{%ux?C3E#e99k6zL;9-1`Wey}>J9s6X>{0$^te;B!d5?6(Zm&3Evn&m* z`M@b1QJEi>!3;_p-~|V7;=eM4Sau!81Q5XvmdxjJID7O|2xjNF zWtIsuovW64MvY;rH`d;qSt+tk{ZhKSm?aC%8A|74Xa(r>$ZbGGT1oY}@yZW*x96F0 zex`iGv9dPuFYx`yK;R0SgqRk3r-tB1bUJE!SOx*cq?=Jwvpw%o`jk+`fv%)~7hm!6 zp>RZP5c)pYJ(83!$qJ9GO=Pezi=&vDH=I ztvX|bge^-Wo?^E_GB_iF)lUj4&Me-l=b~e$<3qt!3_Nekc^Y#4j=Eq`%BR7T$rmAn z#znbhTLeN<04~S^8qXpM3DYeHf!_kk3_JPUa~ijG&BXSSchOREMo2mCbOuHL`_y$- z#3Jql$I*%-jJ1K7&_nD`f(_qBY`Q5v0z_Fb-p0kGxH9Tj=&MCF4Q+Uf!p83HE*7q= mU(+1KkɅ¢ªòoÿZIMâ&1֠R/ˆ¥µŠË!yà4ƳÞ#½˒c³©ú­üɥ•ÿ$/:î@òÕA֪Üꝗþõê‚Ašԟ鼞íQ¿w,+·±�ú�!6ñÝG¤Á�죄JùHÕڟ÷0ùUÇ{Bcl�AÌ +¾t @H́–Üm/Nwù \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleWriteState.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleWriteState.java new file mode 100644 index 0000000..5567742 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/data/BleWriteState.java @@ -0,0 +1 @@ +¶Lӱk�Í™£șiY6Æ.wüeIO¡QNIZ?ѲñE ã‘×þ´NXˊ²_Ì‹úCb҃Nâè–zƒZ ;h�k¸2ÙuýÐ KDyQ@RR¬토¢0ÖºҜ‹ÔÈ6¯ÀZ֚d]|¸7Iì3ÅxI{zÁ¯ˆ"ާÆGá \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/MessageEntity.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/MessageEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..dbab5911edaf64deea9d0088fa105adda2f03a4e GIT binary patch literal 1600 zcmV-G2EX~XOw+MzkIe;{qsWpS%+W5|0pYWY3^ME{5_)rHG8Px^RGn-DARsO}55NCGZbjl#& zLPdQXn%mP_Bk@!H#@fee*M{{Orrsd8=Ruu+K06-)7g35Y#+(h@1>iacfmM-*NTZ-?d_spT;noZ9(zL2-A^Zk-Tt!c(P7Mg4cQR}LjRzdWh|H`a62IeiI6-FBJPGLqJbKa5s*k$ zd4GVEVixNDI=(&On=mb>sRwj>LElS+7NdkU*wGIts_`gq`JaUOD&I?#(^pTC;H`1> zuTF4jQCgMXIRBm(KP3DThHA=at%DdsrISd&&Z<%>9eQHUFs3t5FmBJT*oznptvx!B>2j>AGJ&Nh+@1 z=6lc8bqzSxU>{0>kq1U3wdfnQMI`IR*jNh(ES5pp z4$9MEPI<;%aOIH8&pcNEv_en;`;J~}<%XX?Pu`SSc`ZS$`FrmNSCx6ukVC3u?6E-Q znl&|q)<;doI9pqgixvj3JCkNwu8JOZ+62j}!R|9QlYFPzfb90Kw`W+sPl7Sv1k;D_ z5ur?cDjmaM3@NP%%{H_M=B-M&dccE4HS%`HWELr}3iwJXnfpkFYh8kC5|9cPyYDU=}(3U^o^pquL%KGl|fL_VUqtTX^WJE)Hg=I7Lg z`n}=1iiuMQtsWbPU1uqlI-Sf0!~_=Kd?y_nyww)ILdMP8Eu2VaN=iMoVcyG0m%ZQ< z8PJ9QOw46tP!%4Z*idSWZXb5Jwr8jJ&6NwtlbpzD+-)b5gvm1r#@g`u@Igvdyjw_v>kFVj1dq$_x;S&Uz4r zyNlOqjx}B^$4ODU^JgMuS@>6ta*5dqPCy^#$DB^shGSEaR-pMk=*Iit0t%RxQq z{!Aeyj~^YDmC!HZmWL!^`LKjWy_MRFSZC+E&T6%pp#hu*Q5`-daTklVV&7;8E)0W_ yQ+l!^DFYMM$080IQqpTFVNz_k6)lzAkh1+B$#Y?R1>4(B4CD0W8-oj>@s_C1F$qxs literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/UserInfoEntity.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/entity/UserInfoEntity.java new file mode 100644 index 0000000000000000000000000000000000000000..9e9cd3e83f278f5ada7c9d08664eee5b6e86654f GIT binary patch literal 1440 zcmV;R1z-BMOw+MzkIe;{qsWpS%+W5|9eHgK%27)2lAHz7>3X;psEiJ2^$Sa#Dy4C};U(m4{ zMAd0YJ@I2k`p=?ahm5>@tdGv#@KJAhKzCO}^2P|lMxm=av^P$h|5z;Qz&k4BIGK6T z#nihsn%D@;*Fq$qWUmd-$Xv;j0(n`WyhN$)7me2<=)kI;B!0^KEZ}G7i`~! z+ZvZQt7!O&CMeif;`!{J=U`?gE=|o`Ve@Xz&MQ1v7qfU#)K}`FmF-pLfhq(-Z=|zK zE#=8j_kXTYNm-p2JHmeafjZqKUHh%vM~bSikLOPP3Y9^OKgt}VdIYcqMpCJ(${?!! z@aK>f{^-oI)oYMN-#h&6ClMIEqrkP=CH5LplqR(tL+~N?bWmdAYzyOouH&|iAEAoA zl6t@N?$bN|74~OgI}vg!qxH48m~JN$?I-lqA?|v}ow;}|lT<6)%Dl#C1rT^zS!ADT zgs0BA9#q%5b(540!Y@Ww{yMOIqe6GA(|GPvuc=8&84Jf~ZnVd}-Jt(Kkl-nMf-hSE z#dIeUmoq@y`fgVN9@&ZXf;u9Yy3ctzU?g!hDO1MNez}AQeCmKCS#m-f&g?*L=4EG; zh*^@c@FG>Ti*=oJBr2r25u=TG86UF>cp*~X+jKU#segZEOiOnCA19t0Fo&2qf?#b4 zUnX`j3%cF7g2tMBo0fLG-q#J~#2(76OJjGUc;^6@knRc9mo>`4RRB7LA@2o_KNO^$ z3H?c&3SPBcl3ofSm+N~cM|5Mb%B$xJ(PV~kN~~aer(Bm5fKPatZwylTItv32`v9IF z@#4Z3*!s=(E0rR9RiGW5&M#~u5gjbn@bon=)_^8NNF%iSQi|#!;aj1O>;SLcW$WHN zgN%MER6&trX6|iK5vOI|aSltYL5*B>Mp$*{`v##JJyW`AddG$wB#pP0F*WDpl}6E{ z|LozYA{D)S|*Cx6pxVw%L3$2Y1{B=PM-qbObuFhX-f|iP4hjI?s~OrL}~!6Q(>_9G8eM zKun41@X9&l()KzQt8S}z9tcC4E!y>;CvJmDgL3qw4@No3TvZF}of|8TBjTRbwpZfj zXBNBQcQJoU0WOw2@|N0ELjxv+Q}l3M2eN=DtKBt zE{@u~e^u4N-|b46v*?(E$DNJ$O+;MY|=QuDzk2xzNn1-~eZ2@iU-a;yROin=Wz%~zB#$|b01 unEb(AG_*WP|8529*sjFY<+6g8II&` zs{9tQFn*DGyJz!NfUaH3z;aZ%LH1H%GS#r zd3*n2G=d%nQCL|mZ-3G0_}b#5={wQ@h-dG{sReI(Fs@3d$=?{NK_VH4V(ZQ}MM(S0 zLw!3F>~F)lw&L8GH?cB{LY!F^5FlEu<(fXr&$p=k+`_#zPJ0CiTTu)um^b}SE~Pc5 zh(*lh&d%>^zsaTP&to|o=B0f2g<^36gUJZ1723mkO|hKZl@}chetmZuL`r61~re7txisLrv^&-vTFA-3hGv0lC=|DrZ3dD7hLB|ob@ zg+_j`)}H0&jcA)atsGIyDYa6Dfe&%usi`D<0G&tST3kUq+ZCsW$~HRGok#d16m1xvQl72EaZN32|(fbYTNUx(o-1~y(uU5hGW1}4JVp4 zyN}AGG{@M}JG&lAo6w|REL}=T7F~`4;hk0w1z%qv4u{|C%4QmjNCrRx#{~99L*aZ4QRH;R=Pz@@nY4zW=hO&Auk2rDM_FkyY zX`Ob9xkJaeCoJa!sWWCO>axIfDb_Ppu`maKQDXhePaH7p!}l1!$rf146GssS{8%4t z6q~NoblX5131#H6Z)97#s9o-FqEsJ}w4rCS)5lIwd&!SH4>&*LlWi{W`%DLeraG!- z=KcLQs-@L|qHg!X;H(`8jJxUapnH7g|9zT5OK6h2O_#s^1Mx%1qS__oXcqV?#`{WP z5jtbnlvQO$kDQU}Hcxg92yLAgxgrDfoS@|kJY5&xhN(IfJI+KRF<9D^ql_FO|=kyF{S)EX+Z z6+hK1RPS*W7-%Ml8F;E3v%tB#9M<6?p_>#x6Jr=EilB1<#ux)~b$PJ&=ucz%WtRd; WjdLnb^it=&gWp&m=Jz z2(>;>ie$SNcwqneaWZ48yt;RTRw}$^+LnNv93YN`gg?4*Z=FdShBg7d&N913<*dcD z!5`~Qh;KY65$`p=-83uZpo4lgTQG?`qEk;r;#&(ddsjak#t%gGA%nPzkPlp{5(|bM zss87*5f@F{qWd0*G-q`DwI>xOcOVSgSA%%^$%aLrd~P(#MAn*XZ*#!lyL zve^Lafz}H*FVb)Fe`L5tw7}>|Mx-Q0=Sc%^tU;zB&aaT)!BKZj!Om^Y+S+K8Hic^ecj=I z%DIBRd+9r6Rn%*rRFv}o`{lyA4$5P-{X~^%d1=YJmIQ#mbj0C~^Q(a^8HJp|gA1Ay z914ca1dXnPeMEbNo(83j3tP^+HsQ$kbcW#wmIQ7ByJeQfKOk1Kk3}yN7hq~^HZhJS zwl(R&d|R&ena#;2juQ*Jx|TorP3O6>aK1hrVK_iA!Mr_o{XT0`dyuz2U7?|(`OjFv zArLeTOte&MJoz+dlMMn%d1~paAN5k;3j|&rKLlS~#sULb3h-@V+UeKlc24>PtNgH$ z6?;;edWSjPaDk2K#lgkz&5wUwgmv6M$by&0DKZd1Dd-YQg{QCO6dK;UQ&6$%W*luP z9#sz`cQ1p_+a$@#y>(cs5Lrq4X}kR-8w$TV*KHLkEkn&@0VDJHNO+TDHDtKBcjTf& z8#I|N*PYMeNi~Cz12)ciK}V$5w@S-8vEzVnMI4oK%a)=?6utk*g%1v%caKVZ2@IwL z49klrk-N^?8oTH5Icm31)Y4~?R!Wh_5#Upw#+3NGWqnP(iOzmzJ+~WfSYgjFbD%@= z#<_-y6kToxx`C`2fHB(xat+`rN=B|C{eYKU>zl`VlAkxv{=-1qI$rn-MuVBxPu1J% zJp~V9FpyTS+*!;L^gvC#rlblXu^;k5VTEAKQ75baD23w<5xO-gA%-O`Vx!*PL zOUW?X^EH08s^X*}CE@2HC0y>Q8EOFR14Hx*K8_I`JD1u5GdLQ`tT zwA=7MM^upZ5EJC5#lUYC6Jo(3*!UL1KOyfMWj)Lz*L_Da`&UZ9)a@C4cNA8|OLWzC z0AMQAFfR*FlSxKVmBe?U0D|Uw+}Eb^g>B4aN{l(%1G|x(?`O4SUua52vX<0x{$5#* zXMI+$v>2XIbGLq7yNu;b7&Vs+JAv!;Ib`8|frQw;ixZ?o7uG9!RSd&^12KI_8FX>Y zTUVXud4MyG~TC?d-`zlE=XDxLVCBC%X* zclsL&fz&%We@;?XutO%MM6KVko#!YHLn8tWReswATV{9p!5Itevs{lM)66&rvjgTx zg-vA_ZDH8g4j;*E@kw!Ii`4vf4}!_dMB#Q+sqaKm;ogfirWckOg0G)tM{dif>YcS{ z-)IWA0TE=4CJlJM(ak_2$^4|vpSnE|`flZ)mHI1ie=TWHb)(^sHUu*4d1_c^&VFN4 a51Q@h=cPc?>z`N@e8~A0-g6E`d$}y*i#p)| literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/OtherException.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/OtherException.java new file mode 100644 index 0000000000000000000000000000000000000000..dcddc48708036fc5fc9e806e42f44a5c22f22084 GIT binary patch literal 208 zcmV;>05AWxOw+MzkIe;{qsW0hDWe5 zX%4}vWSqd~4NTRj;P4}>HSi$p9HLMecGACDqFh+z9o#rHNcoY!01UE)401?NLFjeu zv*Wc4vp>aSYjw~Y-x`Y*_!HkdPOl2c6+~ST+sB@hqwM_?@^k~k(iW(qMf00x>+-oI KyJkd|c9zCG;AbQN literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/TimeoutException.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/TimeoutException.java new file mode 100644 index 0000000..b27067b --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/exception/TimeoutException.java @@ -0,0 +1 @@ +¶Lӱk�Í™£șiY6Æú 73ޤi[Ÿa’{þ^™b_ªøâˆ(je$*\²R ŒûÒL(d} >³°98>^à훇uê�>n;Ê=�]b”1GŽ/WºåOzïŒ;f>üê¤m<‹*ÕN꼙­5LQjŒ½Ÿ‘t)ŽW~Ɨ}.O�´ã-¢O§ýös±„;ßâDú;Duqۈy�=Ý52A]Åþÿf’Š«…š,“÷Nwd)±i¨²l³Ìô€q+�a÷Ë:lÉ \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanPresenter.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanPresenter.java new file mode 100644 index 0000000000000000000000000000000000000000..ed3f936bddd2d9921f73173bd7c2d262fa7b92bc GIT binary patch literal 7360 zcmV;x96#f>Ow+MzkIe;{qsWMFFg1p$Vi z8Z+%CNJ}weNN0>@^>%5!$X!m(RJe6(6=*lI1nR4pt?zP=1jtjQ^P3Wr^bSEF(wCSk ziece%R7SWci7L7sJ4w4-E%R0_bdyLah7gNHV<9YU9Bt4f=P$hXOnAf0?TCt4v?{v< z*(e-FjA?WSU{_D4lbx{RO^LFh#s0|jc$#j!bq%2!QK@GkTzl?@{=64~2l;d_F<8RT zG|I0Jv#9s-=5QHe5Z$#+^Dcr~Z?EzgebW}r&DQWlv*{NS`Tx6@Qe;qYJx8GNegw`I zStjk}27kr*B|s8c?+UAKN1I25*;EGSLxP`0*@e+669luo`ScLWPQ z14I5wP_77n!O7fVTGV=-`JJ3sd@E)F?pvSe^~mYrK!R{aV(+nmpKXI+ z1J~>Z87nbjip|Zd)yF7%fp!xL!26P0`MRUby8$;T%?s+u5A~@dw$JNMj0!dh369PD z7Cn{J$>T?^7w~9UHzBQITfy6UrR38f_D4gVg^(u*>!Zl2>7!-uS(`!E8t9ody;@0O zn?seuU#uYVXudaX(;-(uwdw(!@DRRG45f`aG76OWvhgYqkEE}s=LEQ4g-jftyZU7o zBC+#>jZE2@JJgIG%%tmXa2v5Ohi-6bFG{UufPp9X$tj(zJR)V;EvHDUHk*98&lJ-| z2>DVUE5S%{De!m1a%=)@{**7yj?QAT_lQ};)Tt7}@nc?4Y=<`DRd-`1l=b8u&bahO z1iPPI;7>_Cd)L+klF4M;$koP_PR5ZSwxkMR^|Z@Nsa%#^!uKLI*Ke|PO!{#&*)!sH zF)mIRXp;FzYR#;7WMtZS$H3OvBOTW$e_BnZ@nKyAu3W_^i4{3`tdPU=c^KU2f-U_r zznP+|cuUqB4FkeJ$}LWpYpT#e(-#?>x%dWiEs^f%*7doJwc}!7e*04s0X21;wAUr6 zgA(foE5?699Oh6Q>`#1>mrz3e*`ryy5<&RQO{?)>>5h9nCn&$2Xl@|Kx+~VCkVIzp zKnEu!Yf|Z$Yd%VMGsFDGW%u~({5cO|<;N-Y@8}EX3IH0fpwFhAsK9$9To?ew@N35n zZ3V%`OF|dOf2R+5%W)_MxaW2!fdy!t6d!MO!n-rYhR z&*j7Jk%x-^N{fBo$9~B1TX23?cn?sA?+9nn&cu~Nv$ZNLYL^x3uWEp84cx=#eh&xa?gnL-iX6eJfHpz|9 zz6cjhz+`36XM0@_kmy*oZ%%o&{faeRi zcts)aft}p>XcluNx3P|6Bsb0f7N~3ai%fT}()h;3t7o&w-lXs(jBBuuMjPOi6>@yW z6YOLY;*m^w)n(yO_?@~VC<7)+Rnj=q|R0tH&0xIa^dmFd?m!Wq)FY;56yL}Hsjv37}Dew ziMkWIpuCBh^&xxmJ<{5byG+N5VAXQ}oAq$hhRK4K{0&d2Pw=yycDQ!`3%(ogg$5-CT{4L-b97k&QU}I*~xj#FZ zcJ3lqs!bx^pEkKujQiM-f=-7kM(^#mCJfNDR0|MwThgq9*>P8W~=(mn>>xG9_^(ETpBw3@kdwa1J^hOF^7J_My zC_y{vdohL(8Lb4~TXc<(8XQ~b_js1!rlt{{W4_#Wd)i(Abro!~=IWX_LCF1#qapjn zij1*C)7yvskhPIOEop!~+L^57&CkHVB#Y9O zr}|wu{Uzd`brjYxS{nxLFNvZ*yz;sJ#KO&UfAGZJ7vSIXB;}}N3{Zr=$xH}GWs{lpa)7Lr1%Y~~~??o|Z zrikY~wCOOWa(LvvENtnUt_oUFERrFK0Y z&RdQGY3xk-yyEl{;eSDjQMJmD<}B^VYS^Ak>p<8$8vL)Nnlbu^?d7Lyw<%nh>X0Ue z(@`f}j;(gC#s-G95#LOlHMkU#!gelcCIjy*=+E=!IO@maLh0ZYPC9!L4gU_`6xHd} z)mx_bgfq_|S;ZL%kl&v5_M9K6<+-wU@bd*Uu#SGedcAE`kD%KcY~CzNa2lzMWG9Q` z!6(M~pEjSDxA1IsY|aYkBv-c=#)ix@?**20LqFXQGSNY0$$^`w8q-m9s}2&jNp-Rz z-4P?OyPsv4^^pzi^nFH;E(fa@YB(Fq&_F_RVn@(wb&-_{c%WKycOh>h107pHbvd{A zVt)H+UzZGH#Xm$Jo-w)bJ!?GYk_8o(a-*c8pVG{>t(7A{%57BTV)IUUr(T(=08&X{ zOtK6?TGIvX?3upqfz=pPD48zjueL5nQB+#{NU^}w$?^cy?lj!9ceJ*+Ks z72djVu*y%Ype6FAwc-9f%NmJYhNIm_zn2&cF@K;T)L?GR-hn)~o6VDQ6bS?$?qz`WbMLk^+%5WAdMsXXui4;F%pB#G|g^g`h@tPfLfXr$TKnZTxPa^JdUcYjNh|QO4C?qnB z(EZFWsVGoVfk<#QWHU8`XW*fG;qUbBSxF2d`aZHZxJ z5+XiGrkFwI?{YU5KIV%k6Q5Gjs1Su#3{WK!6j%6F_%&XdHYZXjamiO%Y&ehUmlm%4GJO~f79q=nS$A^f{#;t_>2vGV z#*VmyE^hrL0RfOWN-?aux|}#Xe@5pcF6grvaV~_R0v7sbnCBADBubMSvFMKb-I(r7 z?CUH-x=Q?U{34l(^u;S#8(rY2Xr*$G|Q1ZT_>58OPRom>n5 z&4y%D0s>fiYP(Z^uI~Kv8b5z(u;wmN9%=oI25qxe!^$H&5JW{mnVJ@;!2d54rLvTN zVykadFK!mKL-i&!V^#8d(o8)P!GL;Fx=9n`G=~S~KUCCn?NT9dm7|hp`|J#lO z$Gjis&P`fHiRaNxQCerTbPAJ{{X!cNKk)@t@D%(u8>1lN9ALOWX<~{CnCZBU`%u2? zaUeH2yN_f}x4j*m2Ms-@tfagEi^(W|~_`sh7mC!y|qQx*b&+apgG3SwjIzo1Z zj{7-XeM_;e+H< zcz|($k6n?EG#o&W6d~Cyzq?}XodCIlgK3*$f?c;~j1)WI=Ap}wS7?&I=i5+ExLpWP zsVtlNIV9#hEzCGUzb2HK)c&m=OynSB%7J78ID(i zm^FfUNml;P=HT0xoOvrb*~oW!y)O}b$HOM$9WQ*HuY>%AMy4~1XQzy>(@BgyX(ol6 z7}QeYhZ^|^CeJ2pTd<@biRWiL&CR=yPjqWkh$S`3y#5vIrks|yJ)Vtg0mG(6d$!>Ypmq%NNnxae;;>Ua* zN;_m(!zHjmiRFgMiT;d5KuO5Xe6k$^krYN4226^JGFOM=+vlCFx_9a{ix1te!2}R< zn+=Tqz0>!g_<<|Yj3=E|LI*JJt>Q~O6t_pt78LEa7WAEWshBrQDD7i6$V%kF>1#Zx zY6Tu6xL!whC`f%brq#sNJ|)Dz+onC7MYTz@ss{1>@x=+?Rpzd(3e^uB^t69>&sYz@ zRIYKRx+j)l<_F9ew<4nf7Ohi__Y*Ft?$C zpr_)dxHVCVjd-nL;cN9(1sB)nmd~wDTqV85v%lUyD6=1)_^Ozn?~?9obLlw>o&3Y> zad$Ky--K$RuiQ?%pPb6q!Tsd;LfX%+8oM;yF!aQu01_q6_?N`SqE!|-o&iYA#s9n` zS@opE`(akMg6239WRq-fy4FJrWE5GvcWMWuo++wy`Rb*j43U6Ei<{7o$(VdQb!zwr zqUlXfY5gS#o5LZ|Qp2&f^x^B{RSM38q-2}@1FK}CLLehl!Z6{(T@_mf?P92WCsM?i4t*-+n1pg4q~3P?^C5IDEY z0$Zos8~#ETBbm7HsPh3H{;9I;`yVNpc{=C@p zrII)_MMX1T&aO^YuKk2Twijq*ZpVbmUg^#j=B+aC7;Pc}C#FiU&lYIYf8R&;B$2;~ z{{!J=UCL_Lp|R&t^50|IA@TL!Y3LpNR1EOad=T!O!%Mn9x~lFLNFOg1&m&dQZ6_3b zJ{4h=HGn0ctY7j$;J@<=ua&icMRH>JbO~Guq(}&j+OxO8FE-4gE=0Q~l9y-TX-kQ! ztsh%8uA?RtIkQ0kTJ>G4uY7s9%=R9!(I;c-A0FBByQL*Lw`VcXPlKVf8JBCa} z_o(xVhI65CJ*BJsa(BLzuj5=^qF0e;UFCIm#ogD!lOM`Xf1U+9USRjl0K@JXMwt>)5qS_uU z+IE4edF7flq$APdD%@(VtoXPy7S6y6FhrYvC*Z&Udo7FHJ(d$3iA3aiu)Fu*vXl1p2HZ=~Ex)ki0~9JH5^dw|x&vr~lq5>T<8wsMlLROu40HVW|T~8uVCI5<4AUi7Zm*v$(XogQj zAaGdGf+ARoZtEAQEzjy}%`^(Y{q7nm!qztsKsPc7vmI>Pus70x<&HlWo^l(Mj|xQS zlu2tl0KmI{j4eil^+h+AEqLL%WyT*Q(tQCsA*Rct%k{4pa0F(Z^J2WrNAeB}brUMP z2>9(OQkLBN?jNS{1ImPBw_$wJ5A7FGp&+P%OP^&^n$AMOax2!1V*(H5QFbD4;3oyT z({bDz2teGsS4S~(ZTAFK#8{$Sd+e&Ux|5n(UX4}5$oY+FC%G}^)QGhUv~9$W#w+?< zI5o-fIyetdo(1=>Bhp~J!!h3%25*|L6}Xx=8^{W2pTo2X7Z%A$O}%l(W;iNO8}Kk> zQ&#Z;r4*{lo7|PtODyL59WmrZf<5xVO;o@9C1MQoCogR#PzQs+;lg*GOqWos)sy<< zHK@zih?(V{ow$#cnl^hH2expyqx}T~65ecE48SfaWr*j;+jrfsDU|X?rI^08TmVVu zlbK4#jCT7=N`9^SExtpZ<%)E?LK)9|cz`}5?)^@J;J1U!*{>zFnM}4`eNl4`?Vm$B zsUl=$emR`Ca-QBh2f}N-IOy#ijP;a%_z+&3;BI;|Euwsp4hja0OK>8_Z)_$E5}8NY zxJ>>_={Gf;n%k-Ps-oc)T(mE#n(OGczxFE|e*2g-(asHfg68wYB-`L}i)X)8-^;U@l&| z+{&$mIOHONp~i3#YU=!{cXc?o#>||ESCsGS0q1Jt;vc!J!AV=>J; z!#>#(1ldRj$KU_?qy(cOdi^6imCi*TFk2t5eHsAj>ENCVBL>eA#C4ee#WyPn3T^#= zPr9C+IW8A;0b5TPKqE|Xu*Y+-ifK}8`+PazU_ro})vwnx<)-%LU&=enrT`|9-&Z+T zVKvP#-*&Zao_>Inr2q;#(`8L}yRPPh30~ak(+JUzD02R<5jL3URmv>_FUUSd75SuL z7ktrt2QVcF8%Z#w7eYj-yquZ}==W_CrMVv|(5Gnzl!#SA&D17#0cxVPrASmRDZ z#pUjge%PO3K=yaVgEz_M#*j2W*EQ!h6>y-{Sl=IkG@9W*%nz)38s6fbwKeer5glq_CBDP~uq=JSwA5UNCnN5~^Zi;|aLhaMyQzXRBeQ}5Y literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanRuleConfig.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/scan/BleScanRuleConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..80f2913657aab00de3c38144830e81020cbd49e7 GIT binary patch literal 2384 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 SD;FHx%v8lw_Ll<3EB_=gg82CW literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLog.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLog.java new file mode 100644 index 0000000000000000000000000000000000000000..14a55f7d10d0b12ec1d952ba5df58618d58ddc02 GIT binary patch literal 672 zcmV;R0$=^MOw+MzkIe;{qsWbQTgtAzT9`mA66 zTX{%1`!LFlsWW+ENgB6xA8XOPdSuu?4;)P`(fQnSlBI7jL>Sw=IrN5mas9DfW3!EA zFzb(=ZMjF^dxpNCnqkEMScj;$c#7QZ%RJ~+#8WS)&rFHLRgjwL};RE{tac?PvYrC{ba2Arsg= zX|?a}9Fp*Fw?^D7gF)meA6Gbc&oWJXcy+m*pP8Aed zQQz}&7>-RD!BVc2v(Z~zfi<9>JW3aVB+Bwb;2M}4Wc!e4y1t^vqkOe&p%EDgCWSm!9NuXd66M$7cl%ezKygvuLEU@6^h zyA4!H7>^ChLc;QOZGjrfM5$)7Nj{L7K};luKjleeTutk8U$3hS2c|TlN)XEgm)d|% Gdll1bY*RP@ literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLruHashMap.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/BleLruHashMap.java new file mode 100644 index 0000000000000000000000000000000000000000..721e4507c9ac27dee7e343a85b815b0790e8a83e GIT binary patch literal 896 zcmV-`1AqLsOw+MzkIe;{qsWQfgnu*=%)dr0O=C6R=II`#W^G3(re}TPMA-x`~ARNEnra< ziii!FB1^}0^_stRr*1hr6G7G3$`Qz)@E)L~4bpAXlfew`>~`ARIIii0Y^KoeJr3a1 zdpR^O7i^HU)Z_)#r8~@Pzm6wx8?w70qZ5hfyiz-A;yy%96B5yFG?^kxpKk&Kt0u1U zRLV$S1vSwqzN4Qrf_-gc(4r3LE}M3_etOGf7Q@M6LE$THaf|8uo?#=yz(dSmQ`ht%MuQoxXt-w&WMQ zieIUjCN&9&^glu${!kBfzZRE zthE{0r_cZ0;+P`hnbLNXLle_h>Js<*z3{V9Y#zyWt5gk=?6WWp{LN=(k^ZMgP_{@H z=`@PBHG%X}->|C(IBq(in~wVHw4%RT3F{QnCqLGMo|=}5GEY+%^t^F!MA6?t+#Pe@ zAR(gNs?cFuC1x+0NF9xEsk;O~}taZNOOFzfGHx5b+!#kZXnCCsAX?lS!u z$(Ge#2O#p0nkKr5vKt4xIbGtirYRZftD;4(>ym%CEFbV0so*V-g;Zs%Ri5#&eos9| z<;nn1Asbf|$;)(y-uLS$$k*q=)+%47nCZ_yRP#;th<9pVxHbQz#Ax(EO3$*gm0NTW zLe+ezFV!P11AbiDUK@bi=X{Tk3=e0|G0@|0AMp;soOBL-_8vDMWGvq~!v;)!)BEv) z!gNGFjRbJzfTBgSTr_~fGI3k*jd#?t&r&n>`prW~g(4Y``HA1ct_`rF!WDXV5wCu2 zY9jtVTuX+NCp}mrv*vi@Try#IS=lWFS<_FKp|3fKd4434g-x0(`F^^zo!gAmCx75v zj_69DS&nbI^2`X3xf+XzN@_-7d0?u|a-1Elgmn}sJ$>(zOyOY+ zjfB73px?7TYW>8HRPCZ$t(yCKgJ|lV(m;u)4=%m)P<2E9Q@S!Qx6V3mIW!p{7Q}H( W&ynD3Pd3cOOj${O5{O}O+=99}BgRhv literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/HexUtil.java b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/utils/HexUtil.java new file mode 100644 index 0000000000000000000000000000000000000000..17acc1d21e632a675ff1dbab6e0289d72f2d57fd GIT binary patch literal 3632 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 C(HnpO literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-android/config.json b/uni_modules/android-ble/utssdk/app-android/config.json new file mode 100644 index 0000000..bec504d --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/config.json @@ -0,0 +1,6 @@ +{ + "minSdkVersion": "19", + "dependencies": [ + "com.google.code.gson:gson:2.8.0" + ] +} \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/index.uts b/uni_modules/android-ble/utssdk/app-android/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..ae752cc37c3f5a4d6032823d05033c974d14a6c7 GIT binary patch literal 41296 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 cxY=B6x5w*UYD literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-harmony/index.uts b/uni_modules/android-ble/utssdk/app-harmony/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..c44b94724c7181ecf09b890e2a4f1e88ff485627 GIT binary patch literal 50288 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 literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-harmony/module.json5 b/uni_modules/android-ble/utssdk/app-harmony/module.json5 new file mode 100644 index 0000000..54f6ef5 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-harmony/module.json5 @@ -0,0 +1,45 @@ +{ + "module": { + "name": "uni_modules__android_ble", + "type": "har", + "deviceTypes": [ + "default", + "tablet", + "2in1" + ], + "requestPermissions": [ + { + "name": "ohos.permission.LOCATION", + "reason": "$string:Harmony_keep_permission_reason", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.ACCESS_BLUETOOTH", + "reason": "$string:Harmony_ble_permission_reason", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.DISCOVER_BLUETOOTH", + "reason": "$string:Harmony_ble_permission_reason", + "usedScene": { + "when": "always" + } + }, + { + "name": "ohos.permission.USE_BLUETOOTH", + "reason": "$string:Harmony_ble_permission_reason", + "usedScene": { + "when": "always" + } + } + + + + + ] + } +} \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-harmony/resources/base/element/string.json b/uni_modules/android-ble/utssdk/app-harmony/resources/base/element/string.json new file mode 100644 index 0000000..c959731 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-harmony/resources/base/element/string.json @@ -0,0 +1,24 @@ +{ + "string": [ + { + "name": "Harmony_location_permission_reason", + "value": "获取位置信息需要访问定位权限" + }, + { + "name": "Harmony_net_permission_reason", + "value": "获取位置信息需要访问网络权限" + },{ + "name": "Harmony_keep_permission_reason", + "value": "需要后台运行以获取权限" + }, + { + "name": "Harmony_notification_permission_reason", + "value": "用于发送通知" + }, + { + "name": "Harmony_ble_permission_reason", + "value": "需要蓝牙权限" + } + + ] +} diff --git a/uni_modules/android-ble/utssdk/app-ios/bt.swift b/uni_modules/android-ble/utssdk/app-ios/bt.swift new file mode 100644 index 0000000000000000000000000000000000000000..a681a98d45edbc170efe81623c044a60d5406ecd GIT binary patch literal 36640 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

*={^T?YLX?WFve3L^*7F}}}GSH^X-n@&Y= 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

mLXY0e| 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 A;{X5v literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-ios/config.json b/uni_modules/android-ble/utssdk/app-ios/config.json new file mode 100644 index 0000000..3fd4975 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-ios/config.json @@ -0,0 +1,3 @@ +{ + "deploymentTarget": "13" +} diff --git a/uni_modules/android-ble/utssdk/app-ios/index.uts b/uni_modules/android-ble/utssdk/app-ios/index.uts new file mode 100644 index 0000000000000000000000000000000000000000..929acaa2cf4fa4578e47008d8175de4ec7781c32 GIT binary patch literal 34384 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 literal 0 HcmV?d00001 diff --git a/uni_modules/android-ble/utssdk/app-ios/info.plist b/uni_modules/android-ble/utssdk/app-ios/info.plist new file mode 100644 index 0000000..08228e1 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-ios/info.plist @@ -0,0 +1,15 @@ + + + + + NSBluetoothAlwaysUsageDescription + 需要蓝牙权限以搜索和连接设备 + NSBluetoothPeripheralUsageDescription + 需要蓝牙权限进行数据传输 + UIBackgroundModes + + bluetooth-central + bluetooth-peripheral + + + diff --git a/uni_modules/android-ble/utssdk/interface.uts b/uni_modules/android-ble/utssdk/interface.uts new file mode 100644 index 0000000..3b57395 --- /dev/null +++ b/uni_modules/android-ble/utssdk/interface.uts @@ -0,0 +1,110 @@ +export type WNuuid = { + serviceId: string, + wuuid: string, + nuuid: string, +} + +export type ScanPara = { + btNameFilter?: string, + fliterNames?: string[], + scantime?: number, + showEmptyName?: number, + iosFilterUUIDs?: string[], + onScanResult?: (b: MyApiResult) => void, + scanComplate?: () => void, +} + +export type WriteData = { + serviceId: string, + characteristicId: string, + writeType?: number, + buffer?: ArrayBuffer, + data?: number[], + hexStrData?: string, + fenbao: boolean, +} + +export type ScanRecord = { + deviceName?: string | null, + txPowerLevel?: number | null, + bytes?: string | null, + serviceData?: string | null, + serviceUuids?: string | null, + advertiseFlags?: number | null, + manufacturerSpecificData?: string | null, + serviceSolicitationUuids?: string | null, +} + +export type Device = { + name?: string | null, + iosLocalName?: string | null, + alias?: string | null, + bondState?: number | null, + type?: number | null, + address: string, +} + +export type BleScanResult = { + connectType?: number | null, + rssi?: number | null, + isLegacy?: boolean | null, + advertisingSid?: number | null, + dataStatus?: number | null, + isConnectable?: boolean | null, + periodicAdvertisingInterval?: number | null, + primaryPhy?: number | null, + secondaryPhy?: number | null, + timestampNanos?: number | null, + scanRecord?: ScanRecord | null, + device: Device, +} + +export type MyApiResult = { + type: number, + message: string, + data: any, +} + +export type ScanRssiBR = { + mac: string, + rssi: number, + data: string, + iosLocalName?: string | null, + name?: string | null, + manufacturerData?: string, +} + +export type BleServices = { + type: number, + uuid: string, + characteristics: Characteristics[], +} + +export type Characteristics = { + properties: CharacteristicsProperties, + uuid: string, + propertiesType: number, +} + +export type CharacteristicsProperties = { + READ: boolean, + WRITE: boolean, + NOTIFY: boolean, + INDICATE: boolean, +} + +// 读数据与通知数据都统一采用这一结构回传。 +export type NotityData = { + data: number[], + mac?: string, + serviceId?: string, + characteristicsId?: string, +} + +export function bleResult(type1: number, message1: string, data1: any): MyApiResult { + return { + type: type1, + message: message1, + data: data1, + } as MyApiResult +} diff --git a/uni_modules/android-ble/utssdk/mp-weixin.zip b/uni_modules/android-ble/utssdk/mp-weixin.zip new file mode 100644 index 0000000000000000000000000000000000000000..a9495fed25f7aec0d21a249152b3aa45d9cb5ac5 GIT binary patch literal 6986 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 LdHXnzz|N literal 0 HcmV?d00001 diff --git a/uni_modules/lime-color/changelog.md b/uni_modules/lime-color/changelog.md new file mode 100644 index 0000000..95f8743 --- /dev/null +++ b/uni_modules/lime-color/changelog.md @@ -0,0 +1,27 @@ +## 2.0.0(2026-08-18) +- refactor: 清理 `color.uts` 中注释掉的历史代码(instanceof 检查、Map 实现版本、for/while 循环) +- refactor: `reversedNames` 从实例属性改为模块级常量,避免每个 TinyColor 实例都重建颜色名称反向映射表 +- refactor: `setAlpha` 合并重载签名为单一 `string | number` 参数 +- refactor: 精简 `format-input.uts` 的 `inputToRGB` 中 `any` 类型为具体联合类型 +- fix: 修复 `toString` 的参数类型为 `LimeColorFormats | null`,`override toString()` 正确委托带参版本 +- fix: 修复 `conversion.uts` 中 `numberInputToObject` 位运算在大于 `0x7FFFFFFF` 的数值上溢出的问题,改用除法运算 +- fix: 删除 `rgbToHsl`/`rgbToHsv` switch 分支中的调试 `console.log` +- chore: 删除空接口 `LimeColor`,从 `LimeColorInput` 联合类型中移除 +- chore: 删除未使用的 `utssdk/unierror.uts` +- chore: 删除冗余的 utssdk 平台目录(`app-android-o`、`app-js-o`、`index-o.uts`) +- chore: 删除测试桩文件 `common/test.uts` 和 `components/lime-color/lime-color.vue` +- chore: 修复 readme 赞助图片 CDN 地址(`testingcf.jsdelivr.net` → `cdn.jsdelivr.net`) +## 0.0.7(2025-08-31) +- chore: 更新文档 +## 0.0.6(2025-04-21) +- feat: 兼容uniappx 鸿蒙next +## 0.0.5(2024-09-30) +- fix: 修复 vue2类型问题 +## 0.0.4(2024-06-25) +- chore: 更改为非`utssdk`结构 +## 0.0.3(2024-06-19) +- feat: 支持`uniapp` +## 0.0.2(2024-03-30) +- fix: 修复 因equals导致web可能报错 +## 0.0.1(2024-03-12) +- init \ No newline at end of file diff --git a/uni_modules/lime-color/common/color.uts b/uni_modules/lime-color/common/color.uts new file mode 100644 index 0000000..55334c8 --- /dev/null +++ b/uni_modules/lime-color/common/color.uts @@ -0,0 +1,646 @@ +// @ts-nocheck +/** + * TinyColor 颜色处理类 + * 提供丰富的颜色操作方法,支持多种颜色格式的转换和操作 + * @example + * // 创建颜色实例 + * const color = new TinyColor('#ff0000'); + * // 转换为 HSL 格式 + * const hsl = color.toHsl(); + * // 调整亮度 + * const lighterColor = color.lighten(20); + */ +import { numberInputToObject, rgbaToHex, rgbToHex, rgbToHsl, rgbToHsv } from './conversion.uts'; +import { names } from './css-color-names.uts'; +import { inputToRGB } from './format-input.uts'; +import type { HSL, HSLA, HSV, HSVA, HSBA, RGB, RGBA, RGBAString, LimeColorInfo, LimeColorFormats, LimeColorOptions, LimeColorInput } from '../utssdk/interface.uts'; +import { bound01, boundAlpha, clamp01, toBoolean, isNumber } from './util.uts'; +// #ifdef APP +// 颜色名称反向映射(hex -> name),模块级常量,避免每个实例重建 +const reversedNamesMap: Map = new Map() +names.forEach((value: string, key: string) => { + reversedNamesMap.set(value, key) +}) +// #endif +export class TinyColor { + /** 红色通道值,范围 0-255 */ + r : number; + /** 绿色通道值,范围 0-255 */ + g : number; + /** 蓝色通道值,范围 0-255 */ + b : number; + /** 透明度值,范围 0-1 */ + a : number; + /** 用于创建 limeColor 实例的格式 */ + format ?: LimeColorFormats; + /** 传递给构造函数以创建 limeColor 实例的输入 */ + originalInput : LimeColorInput; + /** 颜色已被成功解析 */ + isValid : boolean; + /** 渐变类型 */ + gradientType ?: string; + /** 四舍五入后的透明度值,范围 0-1 */ + roundA : number; + /** + * 构造函数,创建一个新的 TinyColor 实例 + * @param color - 颜色输入值,可以是字符串、数字、对象等多种格式 + * @param opts - 选项对象 + * @param opts.format - 指定颜色格式 + * @param opts.gradientType - 渐变类型 + */ + constructor(color : LimeColorInput = '', opts : LimeColorOptions|null = null ) { + let _color : LimeColorInput = color + if (isNumber(color)) { + // 处理数字类型的颜色输入 + _color = numberInputToObject(color as number); + } + this.originalInput = _color; + // 将输入转换为 RGB 格式 + const rgb = inputToRGB(_color); + this.r = rgb.r; + this.g = rgb.g; + this.b = rgb.b; + this.a = rgb.a; + // 计算四舍五入后的透明度值 + this.roundA = Math.round(100 * this.a) / 100; + // 设置格式和渐变类型 + this.format = opts?.format ?? rgb.format; + this.gradientType = opts?.gradientType; + // 不要让范围在 [0,255] 中的值返回成 [0,1]。 + // 这里可能会失去一些精度,但可以解决原来 + // .5 被解释为总数的半数,而不是1的一半的问题 + // 如果本来应该是128,那么这个已经在 inputToRgb 中处理过了 + if (this.r < 1) { + this.r = Math.round(this.r); + } + if (this.g < 1) { + this.g = Math.round(this.g); + } + if (this.b < 1) { + this.b = Math.round(this.b); + } + // 设置颜色是否有效的标志 + this.isValid = rgb.ok ?? false; + } + /** + * 判断当前颜色是否为暗色。 + * @returns 一个布尔值,表示当前颜色是否为暗色。 + */ + isDark() : boolean { + return this.getBrightness() < 128; + } + /** + * 判断当前颜色是否为亮色。 + * @returns 一个布尔值,表示当前颜色是否为亮色。 + */ + isLight() : boolean { + return !this.isDark(); + } + /** + * 计算当前颜色的亮度值。 + * 亮度值是根据 RGB 颜色空间中的红、绿、蓝三个通道的值计算得出的,计算公式为:(r * 299 + g * 587 + b * 114) / 1000。 + * @returns 返回颜色的感知亮度,范围从0-255。 + */ + getBrightness() : number { + // http://www.w3.org/TR/AERT#color-contrast + const rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + } + /** + * 计算当前颜色的相对亮度值。 + * 相对亮度值是根据 RGB 颜色空间中的红、绿、蓝三个通道的值计算得出的,计算公式为:0.2126 * R + 0.7152 * G + 0.0722 * B。 + * @returns 返回颜色的感知亮度,范围从0-1。 + */ + getLuminance() : number { + // http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + const rgb = this.toRgb(); + let R : number; + let G : number; + let B : number; + const RsRGB : number = rgb.r / 255; + const GsRGB : number = rgb.g / 255; + const BsRGB : number = rgb.b / 255; + if (RsRGB <= 0.03928) { + R = RsRGB / 12.92; + } else { + R = Math.pow((RsRGB + 0.055) / 1.055, 2.4); + } + if (GsRGB <= 0.03928) { + G = GsRGB / 12.92; + } else { + G = Math.pow((GsRGB + 0.055) / 1.055, 2.4); + } + if (BsRGB <= 0.03928) { + B = BsRGB / 12.92; + } else { + B = Math.pow((BsRGB + 0.055) / 1.055, 2.4); + } + return 0.2126 * R + 0.7152 * G + 0.0722 * B; + } + /** + * 获取当前颜色的透明度值。 + * 透明度值的范围是 0 到 1,其中 0 表示完全透明,1 表示完全不透明。 + * @returns 一个数字,表示当前颜色的透明度值。 + */ + getAlpha() : number { + return this.a; + } + /** + * 设置当前颜色的透明度值。 + * @param alpha - 要设置的透明度值。透明度值的范围是 0 到 1,其中 0 表示完全透明,1 表示完全不透明。 + * @returns 一个 `TinyColor` 对象,表示设置透明度后的颜色。 + */ + setAlpha(alpha ?: string | number) : TinyColor { + this.a = boundAlpha(alpha); + this.roundA = Math.round(100 * this.a) / 100; + return this; + } + /** + * 判断当前颜色是否为单色。 + * 单色是指颜色的饱和度(S)为 0 的颜色,这些颜色只有明度(L)变化,没有颜色变化。 + * @returns 一个布尔值,表示当前颜色是否为单色。 + */ + isMonochrome() : boolean { + const { s } = this.toHsl(); + return s == 0; + } + /** + * 将当前颜色转换为 HSV(色相、饱和度、亮度)颜色空间。 + * @returns 一个对象,包含四个属性:`h`(色相)、`s`(饱和度)、`v`(亮度)和 `a`(透明度)。 + */ + toHsv() : HSVA { + const hsv = rgbToHsv(this.r, this.g, this.b); + + return { h: Math.round(hsv.h * 360), s: hsv.s, v: hsv.v, a: this.a } as HSVA; + } + /** + * 将当前颜色转换为 HSV(色相、饱和度、亮度)颜色空间的字符串表示。 + * @returns 一个字符串,表示当前颜色的 HSV 或 HSVA 格式 hsva(xxx, xxx, xxx, xx)。 + */ + toHsvString() : string { + const hsv = rgbToHsv(this.r, this.g, this.b); + const h = Math.round(hsv.h * 360); + const s = Math.round(hsv.s * 100); + const v = Math.round(hsv.v * 100); + return this.a == 1 ? `hsv(${h}, ${s}%, ${v}%)` : `hsva(${h}, ${s}%, ${v}%, ${this.roundA})`; + } + /** + * 将当前颜色对象转换为HSBA颜色空间,即Hue(色相)、Saturation(饱和度)、Brightness(亮度)和Alpha(透明度 + * @returns {HSBA} 返回一个HSBA对象,表示当前颜色对象在HSBA颜色空间中的值 + */ + toHsb() : HSBA { + const hsv = rgbToHsv(this.r, this.g, this.b); + return { h: Math.round(hsv.h * 360), s: hsv.s, b: hsv.v, a: this.a } as HSBA; + } + /** + * 将当前颜色对象转换为CSS风格的HSB或HSVA字符串 + * @returns {string} 返回一个CSS风格的HSB或HSVA字符串,表示当前颜色对象的颜色值 + */ + toHsbString() : string { + const hsb = this.toHsb(); + const h = Math.round(hsb.h); + const s = Math.round(hsb.s * 100); + const b = Math.round(hsb.b * 100); + return this.a == 1 + ? `hsb(${h}, ${s}%, ${b}%)` + : `hsba(${h}, ${s}%, ${b}%, ${this.roundA})`; + } + /** + * 将当前颜色转换为 HSL(色相、饱和度、明度)颜色空间。 + * @returns 一个对象,包含四个属性:`h`(色相)、`s`(饱和度)、`l`(明度)和 `a`(透明度)。 + */ + toHsl() : HSLA { + const hsl = rgbToHsl(this.r, this.g, this.b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a } as HSLA; + } + /** + * 将当前颜色转换为 HSL(色相、饱和度、明度)颜色空间的字符串表示。 + * @returns 一个字符串,表示当前颜色的 HSL 或 HSLA 格式 hsla(xxx, xxx, xxx, xx)。 + */ + toHslString() : string { + const hsl = rgbToHsl(this.r, this.g, this.b); + const h = Math.round(hsl.h * 360); + const s = Math.round(hsl.s * 100); + const l = Math.round(hsl.l * 100); + return this.a == 1 ? `hsl(${h}, ${s}%, ${l}%)` : `hsla(${h}, ${s}%, ${l}%, ${this.roundA})`; + } + /** + * 将当前颜色转换为十六进制颜色表示。 + * @param allow3Char 是否允许返回简写的十六进制颜色表示(如果可能)。默认值为 `false`。 + * @returns 一个字符串,表示当前颜色的十六进制格式。 + */ + toHex(allow3Char = false) : string { + return rgbToHex(this.r, this.g, this.b, allow3Char); + } + /** + * 将当前颜色转换为带有井号(`#`)前缀的十六进制颜色表示。 + * @param allow3Char 是否允许返回简写的十六进制颜色表示(如果可能)。默认值为 `false`。 + * @returns 一个字符串,表示当前颜色的带有井号前缀的十六进制格式。 + */ + toHexString(allow3Char = false) : string { + return '#' + this.toHex(allow3Char); + } + /** + * 返回颜色的八位十六进制值. + * @param allow4Char 如果可能的话,将十六进制值缩短为4个字符 + */ + toHex8(allow4Char = false) : string { + return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); + } + /** + * 返回颜色的八位十六进制值,并且值前面带有#符号. + * @param allow4Char 如果可能的话,将十六进制值缩短为4个字符 + */ + toHex8String(allow4Char = false) : string { + return '#' + this.toHex8(allow4Char); + } + /** + * 根据颜色的透明度(Alpha值)返回较短的十六进制值,并且值前面带有#符号。 + * @param allowShortChar 如果可能的话,将十六进制值缩短至3个或4个字符 + */ + toHexShortString(allowShortChar = false) : string { + return this.a == 1 ? this.toHexString(allowShortChar) : this.toHex8String(allowShortChar); + } + /** + * 将当前颜色转换为 RGB(红、绿、蓝)颜色空间的对象表示。 + * @returns 一个包含 `r`、`g`、`b` 和 `a` 属性的对象,表示当前颜色的 RGB 格式。 + */ + toRgb() : RGBA { + return { + r: Math.round(this.r), + g: Math.round(this.g), + b: Math.round(this.b), + a: this.a, + } as RGBA; + } + /** + * 将当前颜色对象转换为CSS风格的RGB或RGBA字符串 + * @returns {string} 返回一个CSS风格的RGB或RGBA字符串,表示当前颜色对象的颜色值 + */ + toRgbString() : string { + const r = Math.round(this.r); + const g = Math.round(this.g); + const b = Math.round(this.b); + return this.a == 1 ? `rgb(${r}, ${g}, ${b})` : `rgba(${r}, ${g}, ${b}, ${this.roundA})`; + } + /** + * 将当前颜色转换为百分比表示的 RGB(红、绿、蓝)颜色空间的对象表示。 + * @returns 一个包含 `r`、`g`、`b` 和 `a` 属性的对象,表示当前颜色的百分比表示的 RGB 格式。 + */ + toPercentageRgb() : RGBAString { + // 定义一个格式化函数,将颜色值转换为百分比表示 + const fmt = (x : number) : string => `${Math.round(bound01(x, 255) * 100)}%`; + // 返回一个RGBA对象,其中颜色值已转换为百分比表示 + return { + r: fmt(this.r), + g: fmt(this.g), + b: fmt(this.b), + a: this.a, + } as RGBAString; + } + /** + * 将RGBA相对值插值为一个字符串,颜色值以百分比表示。 + */ + toPercentageRgbString() : string { + // 定义一个四舍五入函数,将颜色值转换为百分比表示的整数 + const rnd = (x : number) : number => Math.round(bound01(x, 255) * 100); + // 根据alpha值返回不同的字符串表示 + return this.a == 1 + ? `rgb(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%)` + : `rgba(${rnd(this.r)}%, ${rnd(this.g)}%, ${rnd(this.b)}%, ${this.roundA})`; + } + /** + * 返回这个颜色的'真实'名称,不存在返回null + */ + toName() : string | null { + if (this.a == 0) { + return 'transparent'; + } + if (this.a < 1) { + return null; + } + const hex = this.toHexString() + // #ifndef UNI-APP-X && APP + const _names = Array.from(names.entries()) + for (let [key, value] of _names) { + if (hex == value) { + return key; + } + } + return null; + // #endif + // #ifdef UNI-APP-X && APP + return reversedNamesMap.get(hex) + // #endif + } + /** + * 将颜色转换为字符串表示。 + * + * @param format - 用于显示字符串表示的格式。 + */ + // #ifdef APP-ANDROID + override toString() : string { + return this.toString(null) + } + // #endif + toString(format : LimeColorFormats | null = null) : string { + const formatSet = toBoolean(format); + let _format = format ?? this.format; + let formattedString : string | null = null; + const hasAlpha = this.a < 1 && this.a >= 0; + const needsAlphaFormat = !formatSet && hasAlpha && (_format != null && _format.startsWith('hex') || _format == 'name'); + if (needsAlphaFormat) { + // 特殊情况:透明度,所有其他非透明度格式都会在有透明度时返回rgba。 + // 当透明度为0时,返回"transparent"。 + if (_format == 'name' && this.a == 0) { + return this.toName() ?? 'transparent'; + } + return this.toRgbString(); + } + if (_format == 'rgb') { + formattedString = this.toRgbString(); + } + if (_format == 'prgb') { + formattedString = this.toPercentageRgbString(); + } + if (_format == 'hex' || _format == 'hex6') { + formattedString = this.toHexString(); + } + if (_format == 'hex3') { + formattedString = this.toHexString(true); + } + if (_format == 'hex4') { + formattedString = this.toHex8String(true); + } + if (_format == 'hex8') { + formattedString = this.toHex8String(); + } + if (_format == 'name') { + formattedString = this.toName(); + } + if (_format == 'hsl') { + formattedString = this.toHslString(); + } + if (_format == 'hsv') { + formattedString = this.toHsvString(); + } + if (_format == 'hsb') { + formattedString = this.toHsbString(); + } + return formattedString ?? this.toHexString(); + } + toNumber() : number { + return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b); + } + clone() : TinyColor { + return new TinyColor(this.toString()); + } + /** + * 将颜色变浅指定的量。提供100将始终返回白色。 + * @param amount - 有效值介于1-100之间 + */ + lighten(amount = 10) : TinyColor { + const hsl = this.toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 将颜色变亮一定的量,范围从0到100。 + * @param amount - 有效值在1-100之间 + */ + brighten(amount = 10) : TinyColor { + const rgb = this.toRgb(); + rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); + rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); + rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); + return new TinyColor(rgb, { format: this.format } as LimeColorOptions); + } + /** + * 将颜色变暗一定的量,范围从0到100。 + * 提供100将始终返回黑色。 + * @param amount - 有效值在1-100之间 + */ + darken(amount = 10) : TinyColor { + const hsl = this.toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 将颜色与纯白色混合,范围从0到100。 + * 提供0将什么都不做,提供100将始终返回白色。 + * @param amount - 有效值在1-100之间 + */ + tint(amount = 10) : TinyColor { + return this.mix('white', amount); + } + /** + * 将颜色与纯黑色混合,范围从0到100。 + * 提供0将什么都不做,提供100将始终返回黑色。 + * @param amount - 有效值在1-100之间 + */ + shade(amount = 10) : TinyColor { + return this.mix('black', amount); + } + /** + * 将颜色的饱和度降低一定的量,范围从0到100。 + * 提供100与调用greyscale相同 + * @param amount - 有效值在1-100之间 + */ + desaturate(amount = 10) : TinyColor { + const hsl = this.toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 将颜色饱和度提高一定数量,范围从 0 到 100。 + * @param amount - 有效值介于 1 到 100 之间。 + */ + saturate(amount = 10) : TinyColor { + const hsl = this.toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 将颜色完全去饱和为灰度。 + * 等同于调用 `desaturate(100)`。 + */ + greyscale() : TinyColor { + return this.desaturate(100); + } + /** + * spin 方法接收一个正数或负数作为参数,表示色相的变化量,变化范围在 [-360, 360] 之间。 + * 如果提供的值超出此范围,它将被限制在此范围内。 + */ + spin(amount : number) : TinyColor { + const hsl = this.toHsl(); + const hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 将当前颜色与另一种颜色按给定的比例混合,范围从0到100。 + * 0表示不混合(返回当前颜色) + */ + mix(color : LimeColorInput, amount = 50) : TinyColor { + const rgb1 = this.toRgb(); + const rgb2 = new TinyColor(color).toRgb(); + const p = amount / 100; + const rgba = { + r: (rgb2.r - rgb1.r) * p + rgb1.r, + g: (rgb2.g - rgb1.g) * p + rgb1.g, + b: (rgb2.b - rgb1.b) * p + rgb1.b, + a: (rgb2.a - rgb1.a) * p + rgb1.a, + }; + return new TinyColor(rgba, { format: this.format } as LimeColorOptions); + } + /** + * 生成一组与当前颜色相似的颜色。 + * 这些颜色在色相环上是相邻的,形成一个类似于彩虹的颜色序列。 + * @param results - 要生成的相似颜色的数量,默认值为 6。 + * @param slices - 将色相环划分为多少个部分,默认值为 30。 + * @returns 一个包含当前颜色及其相似颜色的 TinyColor 对象数组。 + */ + analogous(results = 6, slices = 30) : TinyColor[] { + const hsl = this.toHsl(); + const part = 360 / slices; + const ret : TinyColor[] = [this]; + let _results = results + hsl.h = (hsl.h - ((part * _results) >> 1) + 720) % 360; + while (_results > 0) { + hsl.h = (hsl.h + part) % 360; + ret.push(new TinyColor(hsl)); + _results--; + } + return ret; + } + /** + * 计算当前颜色的补色。 + * 补色是指在色相环上相对位置的颜色,它们的色相差为 180°。 + * taken from https://github.com/infusion/jQuery-xcolor/blob/master/jquery.xcolor.js + * @returns 一个 TinyColor 对象,表示当前颜色的补色。 + */ + complement() : TinyColor { + const hsl = this.toHsl(); + hsl.h = (hsl.h + 180) % 360; + return new TinyColor(hsl, { format: this.format } as LimeColorOptions); + } + /** + * 生成一组与当前颜色具有相同色相和饱和度的颜色。 + * 这些颜色的亮度值不同,形成一个单色调的颜色序列。 + * @param results - 要生成的单色调颜色的数量,默认值为 6。 + * @returns 一个包含当前颜色及其单色调颜色的 TinyColor 对象数组。 + */ + monochromatic(results = 6) : TinyColor[] { + const hsv = this.toHsv(); + const { h } = hsv; + const { s } = hsv; + let { v } = hsv; + const res : TinyColor[] = []; + const modification = 1 / results; + let _results = results + while (_results > 0) { + res.push(new TinyColor({ h, s, v })); + v = (v + modification) % 1; + _results-- + } + return res; + } + /** + * 生成当前颜色的分裂补色。 + * 分裂补色是指在色相环上位于当前颜色的两侧的颜色,它们的色相差为 180°。 + * @returns 一个包含当前颜色及其分裂补色的 TinyColor 对象数组。 + */ + splitcomplement() : TinyColor[] { + const hsl = this.toHsl(); + const { h } = hsl; + return [ + this, + new TinyColor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }), + new TinyColor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }), + ] as TinyColor[]; + } + /** + * 计算当前颜色在给定背景颜色上的显示效果。 + * @param background - 背景颜色,可以是任何 LimeColorInput 类型的值。 + * @returns 一个 TinyColor 对象,表示当前颜色在给定背景颜色上的显示效果。 + */ + onBackground(background : LimeColorInput) : TinyColor { + const fg = this.toRgb(); + const bg = new TinyColor(background).toRgb(); + const alpha = fg.a + bg.a * (1 - fg.a); + return new TinyColor({ + r: (fg.r * fg.a + bg.r * bg.a * (1 - fg.a)) / alpha, + g: (fg.g * fg.a + bg.g * bg.a * (1 - fg.a)) / alpha, + b: (fg.b * fg.a + bg.b * bg.a * (1 - fg.a)) / alpha, + a: alpha, + }); + } + /** + * 生成当前颜色的三色调。 + * 三色调是指在色相环上位于当前颜色的两侧的颜色,它们的色相差为 120°。 + * 这是 `polyad(3)` 方法的别名。 + * @returns 一个包含当前颜色及其三色调颜色的 TinyColor 对象数组。 + */ + triad() : TinyColor[] { + return this.polyad(3); + } + /** + * 生成当前颜色的四色调。 + * 四色调是指在色相环上位于当前颜色的两侧的颜色,它们的色相差为 90°。 + * 这是 `polyad(4)` 方法的别名。 + * @returns 一个包含当前颜色及其四色调颜色的 TinyColor 对象数组。 + */ + tetrad() : TinyColor[] { + return this.polyad(4); + } + /** + * 生成当前颜色的 n 色调。 + * n 色调是指在色相环上位于当前颜色的两侧的颜色,它们的色相差为 360° / n。 + * Get polyad colors, like (for 1, 2, 3, 4, 5, 6, 7, 8, etc...) + * monad, dyad, triad, tetrad, pentad, hexad, heptad, octad, etc... + * @param n - 一个整数,表示要生成的色调数量。 + * @returns 一个包含当前颜色及其 n 色调颜色的 TinyColor 对象数组。 + */ + polyad(n : number) : TinyColor[] { + const hsl = this.toHsl(); + const { h } = hsl; + const result : TinyColor[] = [this]; + const increment = 360 / n; + for (let i = 1; i < n; i++) { + result.push(new TinyColor({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l })); + } + return result; + } + /** + * 比较当前颜色与给定颜色是否相等。 + * @param color - 一个 LimeColorInput 类型的值,表示要比较的颜色。 + * @returns 一个布尔值,表示当前颜色与给定颜色是否相等。 + */ + // #ifndef APP-ANDROID + equals(other ?: LimeColorInput) : boolean { + if (other == null) { + return false + } else if (other instanceof TinyColor) { + return this.toRgbString() == (other as TinyColor).toRgbString() + } + return this.toRgbString() == new TinyColor(other).toRgbString(); + } + // #endif + // #ifdef APP-ANDROID + override equals(other ?: LimeColorInput) : boolean { + if (other == null) { + return false + } else if (other instanceof TinyColor) { + return this.toRgbString() == (other as TinyColor).toRgbString() + } + return this.toRgbString() == new TinyColor(other).toRgbString(); + } + // #endif +} +export function tinyColor(color : LimeColorInput = '', opts : LimeColorOptions|null=null) : TinyColor { + return new TinyColor(color, opts); +} \ No newline at end of file diff --git a/uni_modules/lime-color/common/conversion.uts b/uni_modules/lime-color/common/conversion.uts new file mode 100644 index 0000000..6d636ca --- /dev/null +++ b/uni_modules/lime-color/common/conversion.uts @@ -0,0 +1,307 @@ +/** + * 颜色转换工具类 + * 提供各种颜色空间之间的转换函数,如 RGB、HSL、HSV 等 + */ +// @ts-nocheck +import type { RGB,HSL,HSV } from '../utssdk/interface.uts'; +import { bound01, pad2 } from './util.uts'; + + +/** + * 处理 RGB 颜色值的边界检查,确保值在有效范围内 + * 处理边界/百分比检查以符合 CSS 颜色规范 + * + * *Assumes:* r, g, b 在 [0, 255] 或 [0, 1] 范围内 + * *Returns:* { r, g, b } 在 [0, 255] 范围内 + */ + +export function rgbToRgb(r: string|number, g: string|number, b: string|number) : RGB { + const _r = bound01(r, 255); + const _g = bound01(g, 255); + const _b = bound01(b, 255); + return { + r: _r * 255, + g: _g * 255, + b: _b * 255, + } as RGB; +} +/** + * Converts an RGB color value to HSL. + * 将 RGB 颜色值转换为 HSL。 + * *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] + * *Returns:* { h, s, l } in [0,1] + */ + +export function rgbToHsl(r : string|number, g : string|number, b : string|number) : HSL { + const _r = bound01(r, 255); + const _g = bound01(g, 255); + const _b = bound01(b, 255); + + const max = Math.max(_r, _g, _b); + const min = Math.min(_r, _g, _b); + let h = 0; + let s:number// = 0; + const l = (max + min) / 2; + + if (max == min) { + s = 0; + h = 0; // achromatic + } else { + const d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case _r: + h = (_g - _b) / d + (_g < _b ? 6 : 0); + break; + case _g: + h = (_b - _r) / d + 2; + break; + case _b: + h = (_r - _g) / d + 4; + break; + default: + console.log('h') + break; + } + + h /= 6; + } + + return { h, s, l } as HSL; +} + + + +/** + * 将色相值转换为 RGB 分量值 + * 这是一个辅助函数,用于 HSL 和 HSV 到 RGB 的转换 + * @param p - 中间值1 + * @param q - 中间值2 + * @param t - 色相分量 + * @returns RGB 分量值,范围 [0, 1] + */ +export function hue2rgb(p : number, q : number, t : number) : number { + let _t = t + if (_t < 0) { + _t += 1; + } + + if (_t > 1) { + _t -= 1; + } + + if (_t < 1 / 6) { + return p + (q - p) * (6 * _t); + } + + if (_t < 1 / 2) { + return q; + } + + if (_t < 2 / 3) { + return p + (q - p) * (2 / 3 - _t) * 6; + } + + return p; +} + +/** + * Converts an HSL color value to RGB. + * 将 HSL 颜色值转换为 RGB。 + * *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] + * *Returns:* { r, g, b } in the set [0, 255] + */ +export function hslToRgb(h : string|number,s : string|number,l : string|number) : RGB { + let r : number; + let g : number; + let b : number; + const _h = bound01(h, 360); + const _s = bound01(s, 100); + const _l = bound01(l, 100); + + if (_s == 0) { + // achromatic + g = _l; + b = _l; + r = _l; + } else { + const q = _l < 0.5 ? _l * (1 + _s) : _l + _s - _l * _s; + const p = 2 * _l - q; + r = hue2rgb(p, q, _h + 1 / 3); + g = hue2rgb(p, q, _h); + b = hue2rgb(p, q, _h - 1 / 3); + } + + return { r: r * 255, g: g * 255, b: b * 255 } as RGB; +} +/** + * Converts an RGB color value to HSV + * 将RGB颜色值转换为HSV颜色值 + * *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] + * *Returns:* { h, s, v } in [0,1] + */ +export function rgbToHsv(r : number, g : number, b : number) : HSV { + const _r = bound01(r, 255); + const _g = bound01(g, 255); + const _b = bound01(b, 255); + + const max = Math.max(_r, _g, _b); + const min = Math.min(_r, _g, _b); + let h = 0; + const v = max; + const d = max - min; + const s = max == 0 ? 0 : d / max; + + if (max == min) { + h = 0; // achromatic + } else { + switch (max) { + case _r: + h = (_g - _b) / d + (_g < _b ? 6 : 0); + break; + case _g: + h = (_b - _r) / d + 2; + break; + case _b: + h = (_r - _g) / d + 4; + break; + default: + console.log('1') + break; + } + + h /= 6; + } + + return { h, s, v } as HSV; +} + +/** + * Converts an HSV color value to RGB. + * 将HSV颜色值转换为RGB。 + * *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] + * *Returns:* { r, g, b } in the set [0, 255] + */ + +export function hsvToRgb( h : string|number, s : string|number, v : string|number) : RGB { + const _h = bound01(h, 360) * 6; + const _s = bound01(s, 100); + const _v = bound01(v, 100); + + const i = Math.floor(_h); + const f = _h - i; + const p = _v * (1 - _s); + const q = _v * (1 - f * _s); + const t = _v * (1 - (1 - f) * _s); + const mod = i % 6; + const r = [_v, q, p, p, t, _v][mod]; + const g = [t, _v, _v, q, p, p][mod]; + const b = [p, p, t, _v, _v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 } as RGB; +} +/** + * Converts an RGB color to hex + * 将RGB颜色转换为十六进制。 + * Assumes r, g, and b are contained in the set [0, 255] + * Returns a 3 or 6 character hex + */ +export function rgbToHex(r : number, g : number, b : number, allow3Char : boolean = false) : string { + const hex = [ + pad2(Math.round(r).toString(16)), + pad2(Math.round(g).toString(16)), + pad2(Math.round(b).toString(16)), + ]; + + // Return a 3 character hex if possible + if ( + allow3Char && + hex[0].startsWith(hex[0].charAt(1)) && + hex[1].startsWith(hex[1].charAt(1)) && + hex[2].startsWith(hex[2].charAt(1)) + ) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(''); +} + +/** + * Converts an RGBA color plus alpha transparency to hex + * 将带有透明度的RGBA颜色转换为十六进制。 + * Assumes r, g, b are contained in the set [0, 255] and + * a in [0, 1]. Returns a 4 or 8 character rgba hex + */ +export function rgbaToHex(r : number, g : number, b : number, a : number, allow4Char : boolean = false) : string { + const hex = [ + pad2(Math.round(r).toString(16)), + pad2(Math.round(g).toString(16)), + pad2(Math.round(b).toString(16)), + pad2(convertDecimalToHex(a)), + ]; + + // Return a 4 character hex if possible + if ( + allow4Char && + hex[0].startsWith(hex[0].charAt(1)) && + hex[1].startsWith(hex[1].charAt(1)) && + hex[2].startsWith(hex[2].charAt(1)) && + hex[3].startsWith(hex[3].charAt(1)) + ) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(''); +} + +/** + * Converts an RGBA color to an ARGB Hex8 string + * 将RGBA颜色转换为ARGB十六进制字符串。 + * Rarely used, but required for "toFilter()" + */ +export function rgbaToArgbHex(r : number, g : number, b : number, a : number) : string { + const hex = [ + pad2(convertDecimalToHex(a)), + pad2(Math.round(r).toString(16)), + pad2(Math.round(g).toString(16)), + pad2(Math.round(b).toString(16)), + ]; + + return hex.join(''); +} + +/** Converts a decimal to a hex value */ +/** 将十进制转换为十六进制值。 */ +export function convertDecimalToHex(d : string|number) : string { + return Math.round(parseFloat(`${d}`) * 255).toString(16); +} +/** + * 将十六进制值转换为十进制值 + * @param h - 十六进制字符串 + * @returns 十进制值,范围 [0, 1] + */ +export function convertHexToDecimal(h : string) : number { + return parseIntFromHex(h) / 255; +} + +/** + * 将十六进制字符串解析为十进制整数 + * @param val - 十六进制字符串 + * @returns 十进制整数 + */ +export function parseIntFromHex(val : string) : number { + return parseInt(val, 16); +} + +/** + * 将数字类型的颜色输入转换为 RGB 对象 + * @param color - 数字类型的颜色值 + * @returns RGB 对象,包含 r, g, b 分量 + */ +export function numberInputToObject(color : number) : RGB { + return { + r: color >> 16, + g: (color & 0xff00) >> 8, + b: color & 0xff, + } as RGB; +} \ No newline at end of file diff --git a/uni_modules/lime-color/common/css-color-names.uts b/uni_modules/lime-color/common/css-color-names.uts new file mode 100644 index 0000000..abd6d62 --- /dev/null +++ b/uni_modules/lime-color/common/css-color-names.uts @@ -0,0 +1,156 @@ +/** + * CSS 颜色名称映射 + * 包含标准 CSS 颜色名称到十六进制颜色值的映射 + * 来源: https://github.com/bahamas10/css-color-names/blob/master/css-color-names.json + */ +// @ts-nocheck +export const names: Map = new Map([ + ['aliceblue', '#f0f8ff'], + ['antiquewhite', '#faebd7'], + ['aqua', '#00ffff'], + ['aquamarine', '#7fffd4'], + ['azure', '#f0ffff'], + ['beige', '#f5f5dc'], + ['bisque', '#ffe4c4'], + ['black', '#000000'], + ['blanchedalmond', '#ffebcd'], + ['blue', '#0000ff'], + ['blueviolet', '#8a2be2'], + ['brown', '#a52a2a'], + ['burlywood', '#deb887'], + ['cadetblue', '#5f9ea0'], + ['chartreuse', '#7fff00'], + ['chocolate', '#d2691e'], + ['coral', '#ff7f50'], + ['cornflowerblue', '#6495ed'], + ['cornsilk', '#fff8dc'], + ['crimson', '#dc143c'], + ['cyan', '#00ffff'], + ['darkblue', '#00008b'], + ['darkcyan', '#008b8b'], + ['darkgoldenrod', '#b8860b'], + ['darkgray', '#a9a9a9'], + ['darkgreen', '#006400'], + ['darkgrey', '#a9a9a9'], + ['darkkhaki', '#bdb76b'], + ['darkmagenta', '#8b008b'], + ['darkolivegreen', '#556b2f'], + ['darkorange', '#ff8c00'], + ['darkorchid', '#9932cc'], + ['darkred', '#8b0000'], + ['darksalmon', '#e9967a'], + ['darkseagreen', '#8fbc8f'], + ['darkslateblue', '#483d8b'], + ['darkslategray', '#2f4f4f'], + ['darkslategrey', '#2f4f4f'], + ['darkturquoise', '#00ced1'], + ['darkviolet', '#9400d3'], + ['deeppink', '#ff1493'], + ['deepskyblue', '#00bfff'], + ['dimgray', '#696969'], + ['dimgrey', '#696969'], + ['dodgerblue', '#1e90ff'], + ['firebrick', '#b22222'], + ['floralwhite', '#fffaf0'], + ['forestgreen', '#228b22'], + ['fuchsia', '#ff00ff'], + ['gainsboro', '#dcdcdc'], + ['ghostwhite', '#f8f8ff'], + ['goldenrod', '#daa520'], + ['gold', '#ffd700'], + ['gray', '#808080'], + ['green', '#008000'], + ['greenyellow', '#adff2f'], + ['grey', '#808080'], + ['honeydew', '#f0fff0'], + ['hotpink', '#ff69b4'], + ['indianred', '#cd5c5c'], + ['indigo', '#4b0082'], + ['ivory', '#fffff0'], + ['khaki', '#f0e68c'], + ['lavenderblush', '#fff0f5'], + ['lavender', '#e6e6fa'], + ['lawngreen', '#7cfc00'], + ['lemonchiffon', '#fffacd'], + ['lightblue', '#add8e6'], + ['lightcoral', '#f08080'], + ['lightcyan', '#e0ffff'], + ['lightgoldenrodyellow', '#fafad2'], + ['lightgray', '#d3d3d3'], + ['lightgreen', '#90ee90'], + ['lightgrey', '#d3d3d3'], + ['lightpink', '#ffb6c1'], + ['lightsalmon', '#ffa07a'], + ['lightseagreen', '#20b2aa'], + ['lightskyblue', '#87cefa'], + ['lightslategray', '#778899'], + ['lightslategrey', '#778899'], + ['lightsteelblue', '#b0c4de'], + ['lightyellow', '#ffffe0'], + ['lime', '#00ff00'], + ['limegreen', '#32cd32'], + ['linen', '#faf0e6'], + ['magenta', '#ff00ff'], + ['maroon', '#800000'], + ['mediumaquamarine', '#66cdaa'], + ['mediumblue', '#0000cd'], + ['mediumorchid', '#ba55d3'], + ['mediumpurple', '#9370db'], + ['mediumseagreen', '#3cb371'], + ['mediumslateblue', '#7b68ee'], + ['mediumspringgreen', '#00fa9a'], + ['mediumturquoise', '#48d1cc'], + ['mediumvioletred', '#c71585'], + ['midnightblue', '#191970'], + ['mintcream', '#f5fffa'], + ['mistyrose', '#ffe4e1'], + ['moccasin', '#ffe4b5'], + ['navajowhite', '#ffdead'], + ['navy', '#000080'], + ['oldlace', '#fdf5e6'], + ['olive', '#808000'], + ['olivedrab', '#6b8e23'], + ['orange', '#ffa500'], + ['orangered', '#ff4500'], + ['orchid', '#da70d6'], + ['palegoldenrod', '#eee8aa'], + ['palegreen', '#98fb98'], + ['paleturquoise', '#afeeee'], + ['palevioletred', '#db7093'], + ['papayawhip', '#ffefd5'], + ['peachpuff', '#ffdab9'], + ['peru', '#cd853f'], + ['pink', '#ffc0cb'], + ['plum', '#dda0dd'], + ['powderblue', '#b0e0e6'], + ['purple', '#800080'], + ['rebeccapurple', '#663399'], + ['red', '#ff0000'], + ['rosybrown', '#bc8f8f'], + ['royalblue', '#4169e1'], + ['saddlebrown', '#8b4513'], + ['salmon', '#fa8072'], + ['sandybrown', '#f4a460'], + ['seagreen', '#2e8b57'], + ['seashell', '#fff5ee'], + ['sienna', '#a0522d'], + ['silver', '#c0c0c0'], + ['skyblue', '#87ceeb'], + ['slateblue', '#6a5acd'], + ['slategray', '#708090'], + ['slategrey', '#708090'], + ['snow', '#fffafa'], + ['springgreen', '#00ff7f'], + ['steelblue', '#4682b4'], + ['tan', '#d2b48c'], + ['teal', '#008080'], + ['thistle', '#d8bfd8'], + ['tomato', '#ff6347'], + ['turquoise', '#40e0d0'], + ['violet', '#ee82ee'], + ['wheat', '#f5deb3'], + ['white', '#ffffff'], + ['whitesmoke', '#f5f5f5'], + ['yellow', '#ffff00'], + ['yellowgreen', '#9acd32'], +]); diff --git a/uni_modules/lime-color/common/format-input.uts b/uni_modules/lime-color/common/format-input.uts new file mode 100644 index 0000000..3af771b --- /dev/null +++ b/uni_modules/lime-color/common/format-input.uts @@ -0,0 +1,388 @@ +// @ts-nocheck +/** + * 颜色格式输入处理工具 + * 用于解析和转换各种格式的颜色输入,支持 RGB、HSL、HSV、十六进制等多种颜色格式 + */ +import type { HSL, HSLA, HSV, HSVA, HSB, HSBA,RGB, RGBA, LimeColorInfo, LimeColorFormats } from '../utssdk/interface.uts'; +import { convertHexToDecimal, hslToRgb, hsvToRgb, parseIntFromHex, rgbToRgb } from './conversion.uts'; +import { names } from './css-color-names.uts'; +import { boundAlpha, convertToPercentage, toBoolean } from './util.uts'; +/** + * 颜色匹配器类型 + * 定义了各种颜色格式的正则表达式匹配器 + */ +type ColorMatchers = { + /** CSS 单位匹配器 */ + CSS_UNIT : RegExp, + /** RGB 颜色匹配器 */ + rgb : RegExp, + /** RGBA 颜色匹配器 */ + rgba : RegExp, + /** HSL 颜色匹配器 */ + hsl : RegExp, + /** HSLA 颜色匹配器 */ + hsla : RegExp, + /** HSV 颜色匹配器 */ + hsv : RegExp, + /** HSVA 颜色匹配器 */ + hsva : RegExp, + /** HSB 颜色匹配器 */ + hsb : RegExp, + /** HSBA 颜色匹配器 */ + hsba : RegExp, + /** 3位十六进制颜色匹配器 */ + hex3 : RegExp, + /** 6位十六进制颜色匹配器 */ + hex6 : RegExp, + /** 4位十六进制颜色匹配器 */ + hex4 : RegExp, + /** 8位十六进制颜色匹配器 */ + hex8 : RegExp, +} + +// #ifndef UNI-APP-X +/** + * UTS JSON 对象类型 + * 用于表示通用的 JSON 对象结构 + */ +// type UTSJSONObject = Record +// #endif + +// +const CSS_INTEGER = '[-\\+]?\\d+%?'; + +// +const CSS_NUMBER = '[-\\+]?\\d*\\.\\d+%?'; + +// Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. +// 允许正负整数/数字。不要捕获要么/或者,只需捕获整个结果。 +const CSS_UNIT = `(?:${CSS_NUMBER})|(?:${CSS_INTEGER})`; + +// Actual matching. +// Parentheses and commas are optional, but not required. +// Whitespace can take the place of commas or opening paren +// 实际匹配。 +// 圆括号和逗号是可选的,但不是必需的。 +// 空格可以代替逗号或左括号 +const PERMISSIVE_MATCH3 = '[\\s|\\(]+(' + + CSS_UNIT + + ')[,|\\s]+(' + + CSS_UNIT + + ')[,|\\s]+(' + + CSS_UNIT + + ')\\s*\\)?';; +// const PERMISSIVE_MATCH3 = `[\\s|\\(]+(${CSS_UNIT})[,|\\s]+(${CSS_UNIT})[,|\\s]+(${CSS_UNIT})\\s*\\)?`; +const PERMISSIVE_MATCH4 = '[\\s|\\(]+(' + + CSS_UNIT + + ')[,|\\s]+(' + + CSS_UNIT + + ')[,|\\s]+(' + + CSS_UNIT + + ')[,|\\s]+(' + + CSS_UNIT + + ')\\s*\\)?'; +// const PERMISSIVE_MATCH4 = `[\\s|\\(]+(${CSS_UNIT})[,|\\s]+(${CSS_UNIT})[,|\\s]+(${CSS_UNIT})[,|\\s]+(${CSS_UNIT})\\s*\\)?`; + +/** + * 颜色匹配器对象 + * 包含各种颜色格式的正则表达式匹配器,用于解析不同格式的颜色字符串 + */ +export const matchers = { + /** CSS 单位匹配器 */ + CSS_UNIT: new RegExp(CSS_UNIT), + /** RGB 颜色匹配器 */ + rgb: new RegExp('rgb' + PERMISSIVE_MATCH3), + /** RGBA 颜色匹配器 */ + rgba: new RegExp('rgba' + PERMISSIVE_MATCH4), + /** HSL 颜色匹配器 */ + hsl: new RegExp('hsl' + PERMISSIVE_MATCH3), + /** HSLA 颜色匹配器 */ + hsla: new RegExp('hsla' + PERMISSIVE_MATCH4), + /** HSV 颜色匹配器 */ + hsv: new RegExp('hsv' + PERMISSIVE_MATCH3), + /** HSVA 颜色匹配器 */ + hsva: new RegExp('hsva' + PERMISSIVE_MATCH4), + /** HSB 颜色匹配器 */ + hsb: new RegExp('hsb' + PERMISSIVE_MATCH3), + /** HSBA 颜色匹配器 */ + hsba: new RegExp('hsba' + PERMISSIVE_MATCH4), + /** 3位十六进制颜色匹配器 */ + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + /** 6位十六进制颜色匹配器 */ + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + /** 4位十六进制颜色匹配器 */ + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + /** 8位十六进制颜色匹配器 */ + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, +} as ColorMatchers; + +/** + * 检查值是否为有效的 CSS 单位 + * 检查它是否看起来像一个 CSS 单位 + * (参见上面的 `matchers` 定义) + */ +export function isValidCSSUnit(color : string|number|null) : boolean { + return toBoolean(matchers.CSS_UNIT.exec(`${color}`)); +} + + +/** + * 将各种格式的颜色输入转换为 RGB 格式 + * @param color - 颜色输入,可以是字符串、RGB 对象、RGBA 对象、HSL 对象、HSLA 对象、HSV 对象、HSVA 对象、HSB 对象或 HSBA 对象 + * @returns 包含 RGB 值、透明度和格式信息的对象 + */ +export function inputToRGB(color : string|RGB|RGBA|HSL|HSLA|HSV|HSVA|HSB|HSBA) : LimeColorInfo { + let _color: UTSJSONObject|null = null + let rgb = { r: 0, g: 0, b: 0 } as RGB; + let a:any = 1; + let s: any | null; + let v: any | null; + let l: any | null; + let ok = false; + let format: LimeColorFormats | null = null; + + if (typeof color == 'string') { + // 处理字符串类型的颜色输入 + _color = stringInputToObject(color as string); + } else if(typeof color == 'object'){ + // 处理对象类型的颜色输入 + _color = JSON.parse(JSON.stringify(color)) as UTSJSONObject + } + if(_color != null){ + if (isValidCSSUnit(_color['r']) && isValidCSSUnit(_color['g']) && isValidCSSUnit(_color['b'])){ + rgb = rgbToRgb(_color['r']!, _color['g']!, _color['b']!); + ok = true; + format = `${_color['r']}`.endsWith('%') ? 'prgb' : 'rgb'; + } else if(isValidCSSUnit(_color['h']) && isValidCSSUnit(_color['s']) && (isValidCSSUnit(_color['v']) || isValidCSSUnit(_color['b'])) ){ + const isHSV = _color['v'] != null + s = convertToPercentage(_color['s']!); + v = isHSV ? convertToPercentage(_color['v']!) : convertToPercentage(_color['b']!); + rgb = hsvToRgb(_color['h']!, s, v); + ok = true; + format = isHSV ? 'hsv' : 'hsb'; + } else if(isValidCSSUnit(_color['h']) && isValidCSSUnit(_color['s']) && isValidCSSUnit(_color['l'])){ + s = convertToPercentage(_color['s']!); + l = convertToPercentage(_color['l']!); + + rgb = hslToRgb(_color['h']!, s, l); + ok = true; + format = 'hsl'; + } + if(_color['a']!=null){ + a = _color['a']!; + } + } + a = boundAlpha(a); + return { + ok, + format: _color?.['format'] as (string | null) ?? format, + r: Math.min(255, Math.max(rgb.r, 0)), + g: Math.min(255, Math.max(rgb.g, 0)), + b: Math.min(255, Math.max(rgb.b, 0)), + a, + } as LimeColorInfo +} + + + +/** + * 解析各种格式的颜色字符串,转换为对应的对象格式 + * 支持多种颜色格式,包括 RGB、RGBA、HSL、HSLA、HSV、HSVA、HSB、HSBA 和十六进制格式 + * @param color - 颜色字符串 + * @returns 解析后的颜色对象,可能是 `{ r, g, b }`、`{ h, s, l }` 或 `{ h, s, v}` 格式,解析失败返回 null + */ +export function stringInputToObject(color : string) : UTSJSONObject | null { + let _color = color.trim().toLowerCase(); + if (_color.length == 0) { + return null; + } + let named = false; + if (names.get(_color) != null) { + _color = names.get(_color)!; + named = true; + } else if (_color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: 'name' } as UTSJSONObject; + // return new Map([ + // ['r', 0], + // ['g', 0], + // ['b', 0], + // ['a', 0], + // ['format', 'name'], + // ]) + } + // 使用正则表达式匹配字符串输入 + // 在此函数中不要处理数值范围 - 不需要担心 [0,1] 或 [0,100] 或 [0,360] + // 只需返回一个对象,让转换函数处理这些值 + // 这样,无论 tinycolor 是用字符串还是对象初始化,结果都是相同的 + + let match = matchers.rgb.exec(_color); + if (match != null) { + const r = match[1] + const g = match[2] + const b = match[3] + + return { r, g, b } as UTSJSONObject; + // return new Map([ + // ['r', match[1]], + // ['g', match[2]], + // ['b', match[3]], + // ]) + } + + match = matchers.rgba.exec(_color); + if (match != null) { + const r = match[1] + const g = match[2] + const b = match[3] + const a = match[4] + return { r, g, b, a } as UTSJSONObject; + // return new Map([ + // ['r', match[1]], + // ['g', match[2]], + // ['b', match[3]], + // ['a', match[4]], + // ]) + } + + match = matchers.hsl.exec(_color); + if (match != null) { + const h = match[1] + const s = match[2] + const l = match[3] + return { h, s, l } as UTSJSONObject; + // return new Map([ + // ['h', match[1]], + // ['s', match[2]], + // ['l', match[3]], + // ]) + } + + match = matchers.hsla.exec(_color); + if (match != null) { + const h = match[1] + const s = match[2] + const l = match[3] + const a = match[4] + return { h, s, l, a } as UTSJSONObject; + // return new Map([ + // ['h', match[1]], + // ['s', match[2]], + // ['l', match[3]], + // ['a', match[4]], + // ]) + } + + match = matchers.hsv.exec(_color); + if (match != null) { + const h = match[1] + const s = match[2] + const v = match[3] + return { h, s, v } as UTSJSONObject; + // return new Map([ + // ['h', match[1]], + // ['s', match[2]], + // ['v', match[3]], + // ]) + } + + match = matchers.hsva.exec(_color); + if (match != null) { + const h = match[1] + const s = match[2] + const v = match[3] + const a = match[4] + return { h, s, v, a } as UTSJSONObject; + // return new Map([ + // ['h', match[1]], + // ['s', match[2]], + // ['v', match[3]], + // ['a', match[4]], + // ]) + } + + match = matchers.hex8.exec(_color); + if (match != null) { + const r = parseIntFromHex(match[1]!) + const g = parseIntFromHex(match[2]!) + const b = parseIntFromHex(match[3]!) + const a = convertHexToDecimal(match[4]!) + return { + r, + g, + b, + a, + format: named ? 'name' : 'hex8', + } as UTSJSONObject; + // return new Map([ + // ['r', parseIntFromHex(match[1])], + // ['g', parseIntFromHex(match[2])], + // ['b', parseIntFromHex(match[3])], + // ['a', convertHexToDecimal(match[4])], + // ['format', named ? 'name' : 'hex8'], + // ]) + } + + match = matchers.hex6.exec(_color); + if (match != null) { + const r = parseIntFromHex(match[1]!) + const g = parseIntFromHex(match[2]!) + const b = parseIntFromHex(match[3]!) + // const a = parseIntFromHex(match[4]) + return { + r, + g, + b, + format: named ? 'name' : 'hex', + } as UTSJSONObject; + // return new Map([ + // ['r', parseIntFromHex(match[1])], + // ['g', parseIntFromHex(match[2])], + // ['b', parseIntFromHex(match[3])], + // ['format', named ? 'name' : 'hex'], + // ]) + } + + match = matchers.hex4.exec(_color); + if (match != null) { + const r = parseIntFromHex((match[1] + match[1])) + const g = parseIntFromHex((match[2] + match[2])) + const b = parseIntFromHex((match[3] + match[3])) + const a = convertHexToDecimal((match[4] + match[4])) + return { + r, + g, + b, + a, + format: named ? 'name' : 'hex8', + } as UTSJSONObject; + // return new Map([ + // ['r', parseIntFromHex(match[1] + match[1])], + // ['g', parseIntFromHex(match[2] + match[2])], + // ['b', parseIntFromHex(match[3] + match[3])], + // ['a', convertHexToDecimal(match[4] + match[4])], + // ['format', named ? 'name' : 'hex8'], + // ]) + } + + match = matchers.hex3.exec(_color); + if (match != null) { + const r = parseIntFromHex((match[1] + match[1])) + const g = parseIntFromHex((match[2] + match[2])) + const b = parseIntFromHex((match[3] + match[3])) + return { + r, + g, + b, + format: named ? 'name' : 'hex', + } as UTSJSONObject; + // return new Map([ + // ['r', parseIntFromHex(match[1] + match[1])], + // ['g', parseIntFromHex(match[2] + match[2])], + // ['b', parseIntFromHex(match[3] + match[3])], + // ['format', named ? 'name' : 'hex'], + // ]) + } + return null +} + + diff --git a/uni_modules/lime-color/common/generate.uts b/uni_modules/lime-color/common/generate.uts new file mode 100644 index 0000000..bce6a2b --- /dev/null +++ b/uni_modules/lime-color/common/generate.uts @@ -0,0 +1,240 @@ +/** + * 颜色生成工具 + * 基于 Ant Design 的颜色生成算法 + * 用于生成一组基于给定颜色的色彩模式,包括亮色、暗色和深色主题颜色 + */ +// @ts-nocheck +// https://github.com/ant-design/ant-design-colors/blob/main/src/generate.ts +import { inputToRGB } from './format-input.uts'; +import { rgbToHex, rgbToHsv } from './conversion.uts'; +import type { HSV, LimeColorInfo, LimeColorGenerateOptions} from '../utssdk/interface.uts'; + +/** + * 暗色主题颜色映射项类型 + */ +type DarkColorMapItem = { + /** 颜色索引 */ + index : number; + /** 透明度 */ + opacity : number; +}; +const hueStep = 2; // 色相阶梯 +const saturationStep = 0.16; // 饱和度阶梯,浅色部分 +const saturationStep2 = 0.05; // 饱和度阶梯,深色部分 +const brightnessStep1 = 0.05; // 亮度阶梯,浅色部分 +const brightnessStep2 = 0.15; // 亮度阶梯,深色部分 +const lightColorCount = 5; // 浅色数量,主色上 +const darkColorCount = 4; // 深色数量,主色下 +// 暗色主题颜色映射关系表 +const darkColorMap = [ + { index: 7, opacity: 0.15 }, + { index: 6, opacity: 0.25 }, + { index: 5, opacity: 0.3 }, + { index: 5, opacity: 0.45 }, + { index: 5, opacity: 0.65 }, + { index: 5, opacity: 0.85 }, + { index: 4, opacity: 0.9 }, + { index: 3, opacity: 0.95 }, + { index: 2, opacity: 0.97 }, + { index: 1, opacity: 0.98 }, +] as DarkColorMapItem[]; + + +/** + * 将 RGB 颜色信息转换为 HSV 格式 + * 从 TinyColor.toHsv 移植的包装函数 + * @param colorInfo - 包含 RGB 值的颜色信息对象 + * @returns HSV 格式的颜色对象,其中色相值范围为 0-360 + */ +function toHsv({ r, g, b } : LimeColorInfo) : HSV { + // 将 RGB 值转换为 HSV 值 + const hsv = rgbToHsv(r, g, b); + // 返回一个 HSV 对象,其中 h 值乘以 360 + return { h: hsv.h * 360, s: hsv.s, v: hsv.v } as HSV; +} + +/** + * 将 RGB 颜色信息转换为十六进制格式 + * 从 TinyColor.toHexString 移植的包装函数 + * @param colorInfo - 包含 RGB 值的颜色信息对象 + * @returns 带有 # 前缀的十六进制颜色字符串 + */ +function toHex({ r, g, b }: LimeColorInfo) : string { + // 将 RGB 值转换为十六进制字符串,并添加前缀 `#` + return `#${rgbToHex(r, g, b, false)}`; +} + + +/** + * 混合两种颜色 + * 从 TinyColor.mix 移植的包装函数 + * @param rgb1 - 第一种颜色的 RGB 信息 + * @param rgb2 - 第二种颜色的 RGB 信息 + * @param amount - 混合比例,范围为 [0, 100] + * @returns 混合后的颜色信息对象 + */ +function mix(rgb1 : LimeColorInfo, rgb2 : LimeColorInfo, amount : number) : LimeColorInfo { + // 将 amount 除以 100,得到一个范围为 [0, 1] 的值 + const p = amount / 100; + // 计算混合后的 RGB 值 + const rgb = { + r: (rgb2.r - rgb1.r) * p + rgb1.r, + g: (rgb2.g - rgb1.g) * p + rgb1.g, + b: (rgb2.b - rgb1.b) * p + rgb1.b, + a: 1 + } as LimeColorInfo; + // 返回混合后的 RGB 对象 + return rgb; +} + +/** + * 根据给定的 HSV 对象和索引值计算新的色相值 + * @param hsv - HSV 格式的颜色对象 + * @param i - 索引值 + * @param light - 是否生成亮色,默认为 false + * @returns 计算后的色相值,范围为 0-360 + */ +function getHue(hsv : HSV, i : number, light : boolean = false) : number { + let hue : number; + // 根据色相不同,色相转向不同 + if (Math.round(hsv.h) >= 60 && Math.round(hsv.h) <= 240) { + // 如果色相在 60 到 240 之间,向左转动 + hue = light ? Math.round(hsv.h) - hueStep * i : Math.round(hsv.h) + hueStep * i; + } else { + hue = light ? Math.round(hsv.h) + hueStep * i : Math.round(hsv.h) - hueStep * i; + } + + if (hue < 0) { + // 如果新的色相值小于 0,则加上 360 + hue += 360; + } else if (hue >= 360) { + // 如果新的色相值大于等于 360,则减去 360 + hue -= 360; + } + return hue; +} + + +/** + * 根据给定的 HSV 对象和索引值计算新的饱和度值 + * @param hsv - HSV 格式的颜色对象 + * @param i - 索引值 + * @param light - 是否生成亮色,默认为 false + * @returns 计算后的饱和度值,范围为 0-1 + */ +function getSaturation(hsv : HSV, i : number, light : boolean = false) : number { + // grey color don't change saturation + // 如果颜色是灰色(色相和饱和度都为 0),则饱和度不变 + if (hsv.h == 0 && hsv.s == 0) { + return hsv.s; + } + let saturation : number; + // 如果 light 参数为 true,则饱和度减小 + if (light) { + saturation = hsv.s - saturationStep * i; + } + // 如果 i 等于 darkColorCount,则饱和度增加 + else if (i == darkColorCount) { + saturation = hsv.s + saturationStep; + } + // 否则,饱和度增加 + else { + saturation = hsv.s + saturationStep2 * i; + } + // 边界值修正 + if (saturation > 1) { + saturation = 1; + } + // 第一格的 s 限制在 0.06-0.1 之间 + if (light && i == lightColorCount && saturation > 0.1) { + saturation = 0.1; + } + if (saturation < 0.06) { + saturation = 0.06; + } + return parseFloat(saturation.toFixed(2)) +} + +/** + * 根据给定的 HSV 对象和索引值计算新的亮度值 + * @param hsv - HSV 格式的颜色对象 + * @param i - 索引值 + * @param light - 是否生成亮色,默认为 false + * @returns 计算后的亮度值,范围为 0-1 + */ +function getValue(hsv : HSV, i : number, light : boolean = false) : number { + let value : number; + // 如果 light 参数为 true,则亮度增加 + if (light) { + value = hsv.v + brightnessStep1 * i; + } else { + value = hsv.v - brightnessStep2 * i; + } + if (value > 1) { + value = 1; + } + // 返回保留两位小数的亮度值 + return parseFloat(value.toFixed(2)); +} + + + + +/** + * generate 函数用于生成一组基于给定颜色的色彩模式。 + * 它可以生成亮色、暗色和深色主题颜色模式。 + * + * @param {string} color - 输入的颜色值,可以是十六进制、RGB、RGBA、HSL、HSLA或颜色名称。 + * @param {LimeColorGenerateOptions} [opts] - 可选的生成选项。 + * @returns {string[]} - 返回一个包含生成的颜色模式的字符串数组。 + */ +export function generate(color : string, opts : LimeColorGenerateOptions|null=null) : string[] { + const patterns : string[] = []; + const pColor = inputToRGB(color); + // 生成亮色模式 + for (let i = lightColorCount; i > 0; i -= 1) { + const hsv = toHsv(pColor); + const colorString : string = toHex( + inputToRGB({ + h: getHue(hsv, i, true), + s: getSaturation(hsv, i, true), + v: getValue(hsv, i, true), + }), + ); + patterns.push(colorString); + } + + // 添加原始颜色 + patterns.push(toHex(pColor)); + + // 生成暗色模式 + for (let i = 1; i <= darkColorCount; i += 1) { + const hsv = toHsv(pColor); + const colorString : string = toHex( + inputToRGB({ + h: getHue(hsv, i), + s: getSaturation(hsv, i), + v: getValue(hsv, i), + }), + ); + patterns.push(colorString); + } + + // 如果选项中指定了 dark 主题,则生成深色主题颜色模式 + if (opts?.theme == 'dark') { + return darkColorMap.map(({ index, opacity }, _):string => { + const darkColorString : string = toHex( + mix( + inputToRGB(opts?.backgroundColor ?? '#141414'), + inputToRGB(patterns[index]), + opacity * 100, + ), + ); + return darkColorString; + }); + } + + // 返回默认颜色模式 + return patterns; +} + diff --git a/uni_modules/lime-color/common/test.uts b/uni_modules/lime-color/common/test.uts new file mode 100644 index 0000000..05bc23b --- /dev/null +++ b/uni_modules/lime-color/common/test.uts @@ -0,0 +1,211 @@ +// import * as util from './util-test' +// import * as util from './conversion-test' +// import * as util from './format-input-test' +// import * as util from './color-test' +// import * as util from './generate-test' +import { tinyColor } from './color' + +// console.log('generate:', generate('red')) +console.log('tinyColor~~~~~~~~~~~~~~test') +console.log('示例1',tinyColor('#000')); +console.log('示例2',tinyColor('000')); +console.log('示例3',tinyColor('#369C')); +console.log('示例4',tinyColor('369C')); +console.log('示例5',tinyColor('#f0f0f6')); +console.log('示例6',tinyColor('f0f0f6')); +console.log('示例7',tinyColor('#f0f0f688')); +console.log(tinyColor('f0f0f688')); + +console.log('示例1',tinyColor('hsl(0, 100%, 50%)').toString()); +console.log('示例2',tinyColor('hsla(0, 100%, 50%, .5)').toString()); +console.log('示例3',tinyColor('hsl(0, 100%, 50%)').toString()); +console.log('示例4',tinyColor('hsl 0 1.0 0.5').toString()); +console.log('示例5',tinyColor({ h: 0, s: 1, l: 0.5 }).toString()); + +console.log('示例1',tinyColor('hsv(0, 100%, 100%)').toString()); +console.log('示例2',tinyColor('hsva(0, 100%, 100%, .5)').toString()); +console.log('示例3',tinyColor('hsv (0 100% 100%)').toString()); +console.log('示例4',tinyColor('hsv 0 1 1').toString()); +console.log('示例5',tinyColor({ h: 0, s: 100, v: 100 }).toString()); + +console.log('示例1',tinyColor('RED').toString(), tinyColor('RED')); +console.log('示例2',tinyColor('blanchedalmond').toString()); +console.log('示例3',tinyColor('darkblue').toString()); + +console.log('示例1:',0x0,tinyColor(0x0).toString()); +console.log('示例2',tinyColor(0xaabbcc).toString()); +console.log('~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~') +const color = tinyColor('red') +const color2 = tinyColor({ r: 255, g: 255, b: 255 }) +console.log('示例1:',color.originalInput); +console.log('示例2:',color2.originalInput); + +const color3 = tinyColor('red') +const color4 = tinyColor({ r: 255, g: 255, b: 255 }) +console.log('示例3:',color3.format); +console.log('示例4:',color4.format); + +const color5 = tinyColor('red'); +console.log(color5.isValid, color5.toHexString()) +const color6 = tinyColor('not a color'); +console.log(color6.isValid, color6.toHexString()) + +const color7 = tinyColor('#fff'); +const color8 = tinyColor('#000') +console.log(color7.getBrightness()) +console.log(color8.getBrightness()) + +const color9 = tinyColor('#fff'); +const color10 = tinyColor('#000') +console.log(color9.isLight()) +console.log(color10.isLight()) + +const color11 = tinyColor('#fff'); +const color12 = tinyColor('#000') +console.log(color11.isDark()) +console.log(color12.isDark()) + +const color13 = tinyColor('#fff'); +const color14 = tinyColor('#000') +console.log(color13.getLuminance()) +console.log(color14.getLuminance()) + +const color15 = tinyColor('rgba(255, 0, 0, .5)'); +const color16 = tinyColor('rgb(255, 0, 0)') +const color17 = tinyColor('transparent') +console.log(color15.getAlpha()) +console.log(color16.getAlpha()) +console.log(color17.getAlpha()) + +const color18 = tinyColor('red'); +console.log(color18.getAlpha()) ; // 1 +color18.setAlpha(0.5); +console.log(color18.getAlpha()); // .5 +console.log(color18.toRgbString()); // "rgba(255, 0, 0, .5)" + +const color19 = tinyColor('rgba(255, 0, 0, .5)'); +const computedColor = color19.onBackground('rgb(0, 0, 255)'); +console.log('color19',computedColor.toRgbString()); // "rgb(128, 0, 128)" + +const color20 = tinyColor('red'); +console.log('color20',color20.toHsv()); // { h: 0, s: 1, v: 1, a: 1 } + +const color21 = tinyColor('red'); +console.log(color21.toHsvString()); // "hsv(0, 100%, 100%)" +color21.setAlpha(0.5); +console.log(color21.toHsvString()); // "hsva(0, 100%, 100%, 0.5)" + +const color33 = tinyColor('red'); +console.log(color33.toHsl()); // { h: 0, s: 1, l: 0.5, a: 1 } + +const color34 = tinyColor('red'); +console.log(color34.toHsvString()); // "hsl(0, 100%, 50%)" +color34.setAlpha(0.5); +console.log(color34.toHsvString()); // "hsla(0, 100%, 50%, 0.5)" + +console.log(tinyColor('#aabbcc').toNumber() == 0xaabbcc) +console.log(tinyColor('rgb(1, 1, 1)').toNumber() == (1 << 16) + (1 << 8) + 1) + +const color35 = tinyColor('red'); +console.log(color35.toHex()); // "ff0000" + +const color36 = tinyColor('red'); +console.log(color36.toHexString()); // "#ff0000" + +const color37 = tinyColor('red'); +console.log(color37.toHex8()); // "ff0000ff" + +const color38 = tinyColor('red'); +console.log(color38.toHex8String()); // "#ff0000ff" + +// const color39 = tinyColor('#ff000000'); +// console.log(color39.toHexShortString()); // "#ff000000" +// console.log(color39.toHexShortString(true)); // "#f000" + +// const color40 = tinyColor('#ff0000ff'); +// console.log(color40.toHexShortString()); // "#ff0000" +// console.log(color40.toHexShortString(true)); // "#f00" + +// const color41 = tinyColor('red'); +// console.log(color41.toRgb()); // { r: 255, g: 0, b: 0, a: 1 } + +// const color42 = tinyColor('red'); +// console.log(color42.toRgbString()); // "rgb(255, 0, 0)" +// color42.setAlpha(0.5); +// console.log(color42.toRgbString()); // "rgba(255, 0, 0, 0.5)" + +// const color43 = tinyColor('red') +// console.log(color43.toPercentageRgb()) + +// const color44 = tinyColor('red'); +// console.log(color44.toPercentageRgbString()); // "rgb(100%, 0%, 0%)" +// color44.setAlpha(0.5); +// console.log(color44.toPercentageRgbString()); // "rgba(100%, 0%, 0%, 0.5)" + +// const color45 = tinyColor('red'); +// console.log(color45.toName()); // "red" + +// const color46 = tinyColor('red'); +// console.log(color46.toString()); // "red" +// console.log(color46.toString('hsv')); // "hsv(0, 100%, 100%)" + +// const color47 = tinyColor('rgb(255, 0, 0)'); +// console.log(color47.toString()); // "rgb(255, 0, 0)" +// color47.setAlpha(0.5); +// console.log(color47.toString()); // "rgba(255, 0, 0, 0.5)" + +// const color48 = tinyColor('red') +// .lighten() +// .desaturate() +// .toHexString() +// console.log(color48) + +// console.log(tinyColor('#f00').lighten().toString()) +// console.log(tinyColor('#f00').lighten(100).toString()) + +// console.log(tinyColor('#f00').brighten().toString()) +console.log('tinyColor',tinyColor({a: 1, h: 0, l: 0.4, s: 1})) +// console.log(tinyColor('#f00').darken(100).toString()) +// console.log(tinyColor('#f00').tint().toString()) +// console.log(tinyColor('#f00').tint(100).toString()) +// console.log(tinyColor('#f00').shade().toString()) +// console.log(tinyColor('#f00').shade(100).toString()) +// console.log(tinyColor('#f00').desaturate().toString()) +// console.log(tinyColor('#f00').desaturate(100).toString()) +// console.log(tinyColor('hsl(0, 10%, 50%)').saturate().toString()) +// console.log(tinyColor('#f00').greyscale().toString()) +// console.log(tinyColor('#f00').spin(180).toString()) +// console.log(tinyColor('#f00').spin(-90).toString()) +// console.log(tinyColor('#f00').spin(90).toString()) +// console.log(tinyColor('#f00').spin(0).toString()) +// console.log(tinyColor('#f00').spin(360).toString()) +// let color51 = tinyColor('#f0f'); +// let color52 = tinyColor('#0f0'); +// console.log(color51.mix(color52).toHexString()) + +// const colors52 = tinyColor('#f00').analogous() +// console.log(colors52.map((t):string => t.toHexString())) + +// const colors53 = tinyColor('#f00').monochromatic(); +// console.log(colors53.map((t):string => t.toHexString())) +// const colors54 = tinyColor('#f00').splitcomplement(); +// console.log(colors54.map((t):string => t.toHexString())); + +// const colors55 = tinyColor('#f00').triad(); +// console.log(colors55.map((t):string => t.toHexString())); + +// const colors56 = tinyColor('#f00').tetrad(); +// console.log(colors56.map((t):string => t.toHexString())); + +// const colors57 = tinyColor('#f00').polyad(4); +// console.log(colors57.map((t):string => t.toHexString())); +// console.log(tinyColor('#f00').complement().toHexString()) + + +// let color158 = tinyColor('red'); +// let color58 = tinyColor('#f00'); + +// function a():string{ +// return 'rgb(255, 0, 0)' +// } +// console.log('tinyColor equals:', color158.equals(color58), color158.equals('#f00'), a() == a()); \ No newline at end of file diff --git a/uni_modules/lime-color/common/util.uts b/uni_modules/lime-color/common/util.uts new file mode 100644 index 0000000..1195fdb --- /dev/null +++ b/uni_modules/lime-color/common/util.uts @@ -0,0 +1,198 @@ +/** + * 工具函数库 + * 提供类型判断、数值处理、颜色值转换等通用工具函数 + */ +// @ts-nocheck +// #ifdef APP-ANDROID && !VUE3-VAPOR +import BigDecimal from 'java.math.BigDecimal' +// #endif +/** + * 判断值是否为数字类型 + * @param value - 要判断的值 + * @returns 如果值是数字类型,返回 true;否则返回 false + */ +export function isNumber(value: any|null):boolean{ + // #ifdef APP-ANDROID + return ['Byte', 'UByte','Short','UShort','Int','UInt','Long','ULong','Float','Double','number'].includes(typeof value) + // #endif + // #ifdef APP-IOS + return ['Int8', 'UInt8','Int16','UInt16','Int32','UInt32','Int64','UInt64','Int','UInt','Float','Float16','Float32','Float64','Double', 'number'].includes(typeof value) + // #endif + // #ifndef APP-ANDROID || APP-IOS + return typeof value == 'number' && !isNaN(value); + // #endif +} +/** + * 判断值是否为字符串类型 + * @param value - 要判断的值 + * @returns 如果值是字符串类型,返回 true;否则返回 false + */ +export function isString(value: any|null):boolean{ + return typeof value == 'string'; +} +/** + * 判断值是否为数值类型(数字或数字字符串) + * @param value - 要判断的值 + * @returns 如果值是数值类型,返回 true;否则返回 false + */ +export function isNumeric(value: any|null):boolean{ + if(isNumber(value)) { + return true + } else if(isString(value)) { + // const regex = "-?\\d+(\\.\\d+)?".toRegex() + const regex = new RegExp("^(-)?\\d+(\\.\\d+)?$") + return regex.test(value as string) //regex.matches(value as string) + } + return false +} +/** + * 将值转换为布尔类型 + * @param value - 要转换的值 + * @returns 转换后的布尔值 + */ +export function toBoolean(value: any|null):boolean{ + + // #ifdef APP + // 根据输入值的类型,返回相应的布尔值 + if(isNumber(value)){ + return (value as number) != 0; + } + if(isString(value)){ + return `${value}`.length > 0; + } + if(typeof value == 'boolean'){ + return value as boolean; + } + + return value != null + // #endif + + // #ifndef APP + return Boolean(value) + // #endif +} +/** + * 检查传入的值是否为百分比字符串 + * @param n - 要检查的值 + * @returns 如果值是包含 % 符号的字符串,返回 true;否则返回 false + */ +export function isPercentage(n : any) : boolean { + return isString(n) && (n as string).indexOf('%') != -1; +} +/** + * 检查值是否为 "1.0" 格式的字符串 + * 需要特殊处理 1.0 为 100%,因为一旦它是数字,它与 1 没有区别 + * + * @param n - 要检查的值 + * @returns 如果值是包含小数点且值为 1 的字符串,返回 true;否则返回 false + */ +export function isOnePointZero(n : any) : boolean { + return isString(n) && (n as string).indexOf('.') != -1 && parseFloat(n as string) == 1; +} +/** + * 将输入值从 [0, n] 转换为 [0, 1] 范围 + * @param n - 输入值 + * @param max - 输入值的最大值 + * @returns 转换后的值,范围为 [0, 1] + */ +export function bound01(n : string|number, max : number) : number { + if(!(isNumber(n) || isString(n))){ + return 1 + } + let _n = n; + if (isOnePointZero(_n)) { + _n = '100%'; + } + const isPercent = isPercentage(_n); + let numericValue = 0; + if (isNumber(_n)) { + numericValue = _n as number; + } else if (isString(_n)) { + numericValue = parseFloat(_n as string); + } + numericValue = max == 360 ? numericValue : Math.min(max, Math.max(0, numericValue)); + // Automatically convert percentage into number + // 自动将百分比转换为数字 + if (isPercent) { + numericValue = parseInt(`${Math.min(numericValue, 100) * max}`, 10) / 100; + } + // Handle floating point rounding errors + // 处理浮点数舍入误差 + + if ( Math.abs(numericValue - max) < 0.000001) { + return 1; + } + // Convert into [0, 1] range if it isn't already + // 如果它还不是,将其转换为 [0, 1] 范围 + if (max == 360) { + // If n is a hue given in degrees, + // wrap around out-of-range values into [0, 360] range + // then convert into [0, 1]. + // 如果 n 是以度为单位的色调, + // 将超出范围的值环绕到 [0, 360] 范围内 + // 然后将其转换为 [0, 1]。 + numericValue = (numericValue < 0 ? (numericValue % max) + max : numericValue % max) / max; + } else { + // If n not a hue given in degrees + // Convert into [0, 1] range if it isn't already. + // 如果 n 不是以度为单位的色调 + // 如果它还不是,将其转换为 [0, 1] 范围。 + numericValue = (numericValue % max) / max; + } + return numericValue; +} +/** + * 将数字限制在 0 和 1 之间 + * @param val - 要限制的数字 + * @returns 限制后的值,范围为 [0, 1] + */ +export function clamp01(val : number) : number { + return Math.min(1, Math.max(0, val)); +} +/** + * 返回一个有效的 alpha 值 [0,1],将所有无效值设置为 1 + * @param a - 要处理的 alpha 值 + * @returns 处理后的 alpha 值,范围为 [0, 1] + */ +function boundAlpha(a: number|string|null) : number { + let _n = a == null ? 1 : (isString(a) ? parseFloat(a as string) : a as number) + if (isNaN(_n) || _n < 0 || _n > 1) { + _n = 1; + } + return _n; +} +export { + boundAlpha +} +/** + * 将小数转换为百分比值 + * @param n - 要转换的值 + * @returns 转换后的百分比字符串或原始值 + */ +export function convertToPercentage(n:number|string): number | string { + let _n = n; + // #ifdef APP-ANDROID && !VUE3-VAPOR + _n = isNumeric(_n) + ? parseFloat(typeof _n == 'string' + ? _n as string + : BigDecimal.valueOf((_n as number).toDouble()).toPlainString()) + : _n + // #endif + + // #ifndef APP-ANDROID && !VUE3-VAPOR + _n = isNumeric(_n) ? parseFloat(`${_n}`) : _n + // #endif + + if(isNumber(_n) && (_n as number) <= 1){ + return `${_n * 100}%`.replace('.0%','%'); + } + return _n; +} +/** + * 确保十六进制值具有 2 个字符 + * @param c - 十六进制字符串 + * @returns 长度为 2 的十六进制字符串 + */ +export function pad2(c : string) : string { + return c.length == 1 ? '0' + c : `${c}`; +} \ No newline at end of file diff --git a/uni_modules/lime-color/components/lime-color/lime-color.vue b/uni_modules/lime-color/components/lime-color/lime-color.vue new file mode 100644 index 0000000..bfa2e25 --- /dev/null +++ b/uni_modules/lime-color/components/lime-color/lime-color.vue @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-color/index.ts b/uni_modules/lime-color/index.ts new file mode 100644 index 0000000..eab5e00 --- /dev/null +++ b/uni_modules/lime-color/index.ts @@ -0,0 +1,5 @@ +// @ts-nocheck +export * from './common/color' +export * from './common/generate' +export * from './utssdk/interface' +// export {LGenerateOptions} from './utssdk/interface' \ No newline at end of file diff --git a/uni_modules/lime-color/index.uts b/uni_modules/lime-color/index.uts new file mode 100644 index 0000000..34f7bca --- /dev/null +++ b/uni_modules/lime-color/index.uts @@ -0,0 +1,6 @@ +// @ts-nocheck +export * from './common/color' +export * from './common/generate' +// #ifndef APP-NVUE +export * from './utssdk/interface.uts' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-color/interface.uts b/uni_modules/lime-color/interface.uts new file mode 100644 index 0000000..2681eb2 --- /dev/null +++ b/uni_modules/lime-color/interface.uts @@ -0,0 +1,87 @@ +export type RGB = { + r : number; + g : number; + b : number; +} +export type RGBA = { + r : number; + g : number; + b : number; + a : number; +} +export type RGBAString = { + r : string; + g : string; + b : string; + a : number; +} +export type HSL = { + h : number; + s : number; + l : number; +} + +export type HSLA = { + h : number; + s : number; + l : number; + a : number; +} +export type HSV = { + h : number; + s : number; + v : number; +} + +export type HSVA = { + h : number; + s : number; + v : number; + a : number; +} + +// 增加部分 +export type HSB = { + h : number; + s : number; + b : number; +} +export type HSBA = { + h : number; + s : number; + b : number; + a : number; +} + +export type LColorInfo = { + ok ?: boolean; + format ?: LColorFormats; + r : number; + g : number; + b : number; + a : number; +} + +export type LColorFormats = + | 'rgb' + | 'prgb' + | 'hex' + | 'hex3' + | 'hex4' + | 'hex6' + | 'hex8' + | 'name' + | 'hsl' + | 'hsb' + | 'hsv'; + +export type LColorOptions = { + format ?: LColorFormats; + gradientType ?: string; +} +export type LColorInput = any //string | number | RGB | RGBA | HSL | HSLA | HSV | HSVA | LimeColor; + +export type LGenerateOptions = { + theme ?: 'dark' | 'default'; + backgroundColor ?: string; +} diff --git a/uni_modules/lime-color/package.json b/uni_modules/lime-color/package.json new file mode 100644 index 0000000..5705f95 --- /dev/null +++ b/uni_modules/lime-color/package.json @@ -0,0 +1,108 @@ +{ + "id": "lime-color", + "displayName": "lime-color tinycolor颜色转换", + "version": "2.0.0", + "description": "lime-color是tinycolor UTS版的小型库,用于颜色操作和转换,内容Ant Design 的颜色等级生成算法", + "keywords": [ + "lime-color", + "TinyColor", + "color", + "颜色转换", + "uts" +], + "repository": "", + "engines": { + "HBuilderX": "^4.0", + "uni-app": "^4.72", + "uni-app-x": "^4.74" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "√" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "√", + "jd": "√", + "harmony": "√", + "qq": "√", + "lark": "√", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-color/readme - 副本.md b/uni_modules/lime-color/readme - 副本.md new file mode 100644 index 0000000..bfbee87 --- /dev/null +++ b/uni_modules/lime-color/readme - 副本.md @@ -0,0 +1,557 @@ +# lime-color +- 颜色转换 + +## 文档 + 🚀 [color【站点1】](https://limex.qcoon.cn/uts/color.html) + 🌍 [color【站点2】](https://limeui.netlify.app/uts/color.html) + 🔥 [color【站点3】](https://limeui.familyzone.top/uts/color.html) + + + +## 安装 +插件市场导入插件即可 + +## 使用 +```js +import {tinyColor} from '@/uni_modules/lime-color' +``` + +## 接受的字符串输入 + +字符串解析非常宽容。它的目的是使输入颜色尽可能简单。所有的逗号、百分比、括号都是可选的,大多数输入允许使用 0-1、0%-100% 或 0-n(其中 n 取决于值的 100、255 或 360)。 +HSL 和 HSV 都需要 0%-100% 或 0-1 作为 S/L/V 属性。H(色相)可以在 0%-100% 或 0-360 之间取值。 +RGB 输入需要 0-255 或 0%-100%。 +以下是一些字符串输入的示例: + + +### Hex, 8-digit (RGBA) Hex + +```ts +tinyColor('#000'); +tinyColor('000'); +tinyColor('#369C'); +tinyColor('369C'); +tinyColor('#f0f0f6'); +tinyColor('f0f0f6'); +tinyColor('#f0f0f688'); +tinyColor('f0f0f688'); +``` + +### RGB, RGBA + +```ts +tinyColor('rgb (255, 0, 0)'); +tinyColor('rgb 255 0 0'); +tinyColor('rgba (255, 0, 0, .5)'); +tinyColor({ r: 255, g: 0, b: 0 }); +``` + +### HSL, HSLA + +```ts +tinyColor('hsl(0, 100%, 50%)'); +tinyColor('hsla(0, 100%, 50%, .5)'); +tinyColor('hsl(0, 100%, 50%)'); +tinyColor('hsl 0 1.0 0.5'); +tinyColor({ h: 0, s: 1, l: 0.5 }); +``` + +### HSV, HSVA + +```ts +tinyColor('hsv(0, 100%, 100%)'); +tinyColor('hsva(0, 100%, 100%, .5)'); +tinyColor('hsv (0 100% 100%)'); +tinyColor('hsv 0 1 1'); +tinyColor({ h: 0, s: 100, v: 100 }); +``` + +### Named + +```ts +tinyColor('RED'); +tinyColor('blanchedalmond'); +tinyColor('darkblue'); +``` + +### Number +```ts +tinyColor(0x0); +tinyColor(0xaabbcc); +``` + + +## 属性 + +### originalInput +传递到构造函数中用于创建`tinyColor`实例的原始输入。 + +```ts +const color = tinyColor('red'); +color.originalInput; // "red" +const color2 = tinyColor({ r: 255, g: 255, b: 255 }); +color2.originalInput; // "{r: 255, g: 255, b: 255}" +``` + +### format + +返回用于创建`tinyColor`实例的格式 + +```ts +const color = tinyColor('red'); +color.format; // "name" +const color2 = tinyColor({ r: 255, g: 255, b: 255 }); +color2.format; // "rgb" +``` + +### isValid + +一个布尔值,指示颜色是否成功被解析。注意:如果颜色无效,则在与其他方法一起使用时将表现得像“黑色”。 + +```ts +const color1 = tinyColor('red'); +color1.isValid; // true +color1.toHexString(); // "#ff0000" + +const color2 = tinyColor('not a color'); +color2.isValid; // false +color2.toString(); // "#000000" +``` + +## Methods 方法 + +### getBrightness + +返回颜色的感知亮度,范围从 0-255,这是根据 [Web内容无障碍指南(第1版)](http://www.w3.org/TR/AERT#color-contrast) 定义的。 + +```ts +const color1 = tinyColor('#fff'); +color1.getBrightness(); // 255 + +const color2 = tinyColor('#000'); +color2.getBrightness(); // 0 +``` + +### isLight + +返回一个布尔值,指示颜色的感知亮度是否为浅色。 + +```ts +const color1 = tinyColor('#fff'); +color1.isLight(); // true + +const color2 = tinyColor('#000'); +color2.isLight(); // false +``` + +### isDark + +返回一个布尔值,指示颜色的感知亮度是否为深色。 + +```ts +const color1 = tinyColor('#fff'); +color1.isDark(); // false + +const color2 = tinyColor('#000'); +color2.isDark(); // true +``` + +### getLuminance + +返回颜色的感知亮度(luminance),范围从 0-1,这是根据 [Web内容无障碍指南(第2版)](http://www.w3.org/TR/2008/REC-WCAG20-20081211/#contrast-ratiodef) 定义的。 + +```ts +const color1 = tinyColor('#fff'); +color1.getLuminance(); // 1 + +const color2 = tinyColor('#000'); +color2.getLuminance(); // 0 +``` + +### getAlpha + +返回颜色的`alpha`(透明度)值,范围从 `0-1`。 + +```ts +const color1 = tinyColor('rgba(255, 0, 0, .5)'); +color1.getAlpha(); // 0.5 + +const color2 = tinyColor('rgb(255, 0, 0)'); +color2.getAlpha(); // 1 + +const color3 = tinyColor('transparent'); +color3.getAlpha(); // 0 +``` + +### setAlpha + +在当前颜色上设置`alpha`(透明度)值。接受的范围是 `0-1` 之间。 + +```ts +const color = tinyColor('red'); +color.getAlpha(); // 1 +color.setAlpha(0.5); +color.getAlpha(); // .5 +color.toRgbString(); // "rgba(255, 0, 0, .5)" +``` + +### onBackground + +计算颜色在背景上的显示效果。当颜色完全透明(即 `getAlpha() == 0`)时,结果将是背景颜色。当颜色完全不透明(即 `getAlpha() == 1`)时,结果将是颜色本身。否则,你将得到一个计算结果。 + +```ts +const color = tinyColor('rgba(255, 0, 0, .5)'); +const computedColor = color.onBackground('rgb(0, 0, 255)'); +computedColor.toRgbString(); // "rgb(128, 0, 128)" +``` + +### toHsv + +```ts +const color = tinyColor('red'); +color.toHsv(); // { h: 0, s: 1, v: 1, a: 1 } +``` + +### toHsvString + +```ts +const color = tinyColor('red'); +color.toHsvString(); // "hsv(0, 100%, 100%)" +color.setAlpha(0.5); +color.toHsvString(); // "hsva(0, 100%, 100%, 0.5)" +``` + +### toHsl + +```ts +const color = tinyColor('red'); +color.toHsl(); // { h: 0, s: 1, l: 0.5, a: 1 } +``` + +### toHslString + +```ts +const color = tinyColor('red'); +color.toHslString(); // "hsl(0, 100%, 50%)" +color.setAlpha(0.5); +color.toHslString(); // "hsla(0, 100%, 50%, 0.5)" +``` + +### toNumber +```ts +tinyColor('#aabbcc').toNumber() === 0xaabbcc // true +tinyColor('rgb(1, 1, 1)').toNumber() === (1 << 16) + (1 << 8) + 1 // true +``` + +### toHex + +```ts +const color = tinyColor('red'); +color.toHex(); // "ff0000" +``` + +### toHexString + +```ts +const color = tinyColor('red'); +color.toHexString(); // "#ff0000" +``` + +### toHex8 + +```ts +const color = tinyColor('red'); +color.toHex8(); // "ff0000ff" +``` + +### toHex8String + +```ts +const color = tinyColor('red'); +color.toHex8String(); // "#ff0000ff" +``` + +### toHexShortString +根据颜色的透明度(Alpha值)返回较短的十六进制值,并且值前面带有#符号 +```ts +const color1 = tinyColor('#ff000000'); +color1.toHexShortString(); // "#ff000000" +color1.toHexShortString(true); // "#f000" + +const color2 = tinyColor('#ff0000ff'); +color2.toHexShortString(); // "#ff0000" +color2.toHexShortString(true); // "#f00" +``` + +### toRgb + +```ts +const color = tinyColor('red'); +color.toRgb(); // { r: 255, g: 0, b: 0, a: 1 } +``` + +### toRgbString + +```ts +const color = tinyColor('red'); +color.toRgbString(); // "rgb(255, 0, 0)" +color.setAlpha(0.5); +color.toRgbString(); // "rgba(255, 0, 0, 0.5)" +``` + +### toPercentageRgb +将当前颜色转换为百分比表示的 RGB +```ts +const color = tinyColor('red'); +color.toPercentageRgb(); // { r: "100%", g: "0%", b: "0%", a: 1 } +``` + +### toPercentageRgbString + +```ts +const color = tinyColor('red'); +color.toPercentageRgbString(); // "rgb(100%, 0%, 0%)" +color.setAlpha(0.5); +color.toPercentageRgbString(); // "rgba(100%, 0%, 0%, 0.5)" +``` + +### toName + +```ts +const color = tinyColor('red'); +color.toName(); // "red" +``` + + +### toString + +根据输入格式打印成字符串。你也可以通过向函数中传入以下之一来覆盖这个行为:`"rgb", "prgb", "hex6", "hex3", "hex8", "name", "hsl", "hsv"` + +```ts +const color1 = tinyColor('red'); +color1.toString(); // "red" +color1.toString('hsv'); // "hsv(0, 100%, 100%)" + +const color2 = tinyColor('rgb(255, 0, 0)'); +color2.toString(); // "rgb(255, 0, 0)" +color2.setAlpha(0.5); +color2.toString(); // "rgba(255, 0, 0, 0.5)" +``` + +### 颜色修改 + +这些方法操纵当前颜色,并返回它以进行链式调用。例如: + +```ts +tinyColor('red') + .lighten() + .desaturate() + .toHexString(); // '#f53d3d' +``` + +### lighten + +`lighten: function(amount = 10) -> TinyColor`.根据给定的量(从0到100)调亮颜色。提供100将始终返回白色. + +```ts +tinyColor('#f00').lighten().toString(); // '#ff3333' +tinyColor('#f00').lighten(100).toString(); // '#ffffff' +``` + +### brighten + +`brighten: function(amount = 10) -> TinyColor`. 根据给定的量(从0到100)提高颜色的亮度。 + +```ts +tinyColor('#f00').brighten().toString(); // '#ff1919' +``` + +### darken + +`darken: function(amount = 10) -> TinyColor`. 根据给定的量(从0到100)调暗颜色。提供100将始终返回黑色. + +```ts +tinyColor('#f00').darken().toString(); // '#cc0000' +tinyColor('#f00').darken(100).toString(); // '#000000' +``` + +### tint + +将颜色与纯白色混合,范围从0到100。提供0将不进行任何操作,提供100将始终返回白色. + +```ts +tinyColor('#f00').tint().toString(); // "#ff1a1a" +tinyColor('#f00').tint(100).toString(); // "#ffffff" +``` + +### shade + +将颜色与纯黑色混合,范围从0到100。提供0将不进行任何操作,提供100将始终返回黑色。 + +```ts +tinyColor('#f00').shade().toString(); // "#e60000" +tinyColor('#f00').shade(100).toString(); // "#000000" +``` + +### desaturate + +`desaturate: function(amount = 10) -> TinyColor`. 根据给定的量(从0到100)降低颜色的饱和度。提供100将与调用`greyscale`相同。 + + +```ts +tinyColor('#f00').desaturate().toString(); // "#f20d0d" +tinyColor('#f00').desaturate(100).toString(); // "#808080" +``` + +### saturate + +`saturate: function(amount = 10) -> TinyColor`. 根据给定的量(从0到100)增加颜色的饱和度。 + +```ts +tinyColor('hsl(0, 10%, 50%)').saturate().toString(); // "hsl(0, 20%, 50%)" +``` + +### greyscale + +`greyscale: function() -> TinyColor`. 完全降低颜色的饱和度,使其变为灰度。与调用`desaturate(100)`相同。 + +```ts +tinyColor('#f00').greyscale().toString(); // "#808080" +``` + +### spin + +`spin: function(amount = 0) -> TinyColor`. 根据给定的量(从-360到360)旋转色相。调用时使用0、360或-360将不进行任何操作(因为它将色相设置回原来的值)。 + +```ts +tinyColor('#f00').spin(180).toString(); // "#00ffff" +tinyColor('#f00').spin(-90).toString(); // "#7f00ff" +tinyColor('#f00').spin(90).toString(); // "#80ff00" + +// spin(0) and spin(360) do nothing +tinyColor('#f00').spin(0).toString(); // "#ff0000" +tinyColor('#f00').spin(360).toString(); // "#ff0000" +``` + +### mix + +`mix: function(amount = 50) => TinyColor`. 将当前颜色与另一种颜色按给定量(从0到100)混合。0表示不混合(返回当前颜色)。 + +```ts +let color1 = tinyColor('#f0f'); +let color2 = tinyColor('#0f0'); + +color1.mix(color2).toHexString(); // #808080 +``` + +### 颜色组合 + +组合函数除非特别说明,否则返回一个`TinyColor`对象的数组。 + +### analogous +生成一组与当前颜色相似的颜色。 +`analogous: function(results = 6, slices = 30) -> array`. + +```ts +const colors = tinyColor('#f00').analogous(); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#ff0066", "#ff0033", "#ff0000", "#ff3300", "#ff6600" ] +``` + +### monochromatic +生成一组与当前颜色具有相同色相和饱和度的颜色。 +`monochromatic: function(, results = 6) -> array`. + +```ts +const colors = tinyColor('#f00').monochromatic(); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#2a0000", "#550000", "#800000", "#aa0000", "#d40000" ] +``` + +### splitcomplement +生成当前颜色的分裂补色。 +`splitcomplement: function() -> array`. + +```ts +const colors = tinyColor('#f00').splitcomplement(); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#ccff00", "#0066ff" ] +``` + +### triad +生成当前颜色的三色调。 +`triad: function() -> array`. Alias for `polyad(3)`. + +```ts +const colors = tinyColor('#f00').triad(); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#00ff00", "#0000ff" ] +``` + +### tetrad +生成当前颜色的四色调。 +`tetrad: function() -> array`. Alias for `polyad(4)`. + +```ts +const colors = tinyColor('#f00').tetrad(); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#80ff00", "#00ffff", "#7f00ff" ] +``` + +### polyad +生成当前颜色的 n 色调。 +`polyad: function(number) -> array`. + +```ts +const colors = tinyColor('#f00').polyad(4); +colors.map((t):string => t.toHexString()); // [ "#ff0000", "#80ff00", "#00ffff", "#7f00ff" ] +``` + +### complement +计算当前颜色的补色。 +`complement: function() -> TinyColor`. + +```ts +tinyColor('#f00').complement().toHexString(); // "#00ffff" +``` + +## 颜色工具 + +### equals +判断两色是否相同 + +```ts +let color1 = tinyColor('red'); +let color2 = tinyColor('#f00'); + +color1.equals(color2); // true +``` + + +## 常见操作 + +### clone + +`clone: function() -> TinyColor`. +使用相同的颜色实例化一个新的`TinyColor`对象。对新的对象的任何更改都不会影响旧的对象。 + +```ts +const color1 = tinyColor('#F00'); +const color2 = color1.clone(); +color2.setAlpha(0.5); + +color1.toString(); // "#ff0000" +color2.toString(); // "rgba(255, 0, 0, 0.5)" +``` + +### generate +通过一个主色生成10个等级的颜色数组,使用 Ant Design 的颜色生成算法。 + +```ts +import {generate, LGenerateOptions} from '@/uni_modules/lime-color' +// 第二个参数为选填,如果不填则默认为 'default' +generate('red',{ theme: 'default'|'dark'} as LGenerateOptions) +// ['#2c1113', '#450f11', '#5b0e0e', '#7e0b0b', '#ad0707', '#dc0303', '#e82d27', '#f3594f', '#f88577', '#faaca0'] +``` + + +## 打赏 + +如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。 +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) \ No newline at end of file diff --git a/uni_modules/lime-color/readme.md b/uni_modules/lime-color/readme.md new file mode 100644 index 0000000..cdcff14 --- /dev/null +++ b/uni_modules/lime-color/readme.md @@ -0,0 +1,342 @@ +--- +name: lime-color 颜色工具 +description: 功能丰富、易于使用的颜色处理工具库,支持颜色转换、操作和生成功能。 +tags: + - color + - 颜色 + - tinycolor + - 转换 +plugin: lime-color +category: API 插件 +dependencies: [] +--- + +# lime-color 颜色工具 + +> 一个功能丰富、易于使用的颜色处理工具库,提供全面的颜色转换、操作和生成功能 + +## 📋 功能特性 + +- **多格式支持**:兼容 HEX、RGB、HSL、HSV、HSB 等多种颜色格式 +- **丰富的转换方法**:在不同颜色空间之间自由转换 +- **强大的颜色操作**:支持亮度调整、饱和度修改、色相旋转等操作 +- **智能颜色组合**:生成相似色、互补色、三色组合等多种颜色方案 +- **主题色生成**:基于 Ant Design 颜色算法的主题色系列生成 +- **跨平台兼容**:支持 uni-app 多端开发 + +## 📚 文档链接 + +详细使用文档请访问以下站点: +- [颜色工具文档 - 站点1](https://limex.qcoon.cn/uts/color.html) +- [颜色工具文档 - 站点2](https://limeui.netlify.app/uts/color.html) +- [颜色工具文档 - 站点3](https://limeui.familyzone.top/uts/color.html) + +## 🛠️ 安装方法 + +1. 在 uni-app 插件市场中搜索并导入 `lime-color` +2. 导入后重新编译项目以确保插件正确集成 + +## 🚀 快速开始 + +### 基础用法 + +最简单的颜色工具用法,直接导入并使用: + +```ts +import { tinyColor } from '@/uni_modules/lime-color' +``` + +### 颜色解析 + +tinyColor 接受多种类型的输入,包括字符串、数字、对象等: + +```ts +// Hex 格式 +tinyColor('#000'); // 6位十六进制 +tinyColor('000'); // 无 # 前缀的十六进制 +tinyColor('#369C'); // 4位十六进制(带透明度) +tinyColor('369C'); // 无 # 前缀的4位十六进制 +tinyColor('#f0f0f688'); // 8位十六进制(带透明度) + +// RGB 格式 +tinyColor('rgb (255, 0, 0)'); // 带括号和空格的 RGB +tinyColor('rgb 255 0 0'); // 无括号的 RGB +tinyColor('rgba (255, 0, 0, .5)'); // RGBA 格式 +tinyColor({ r: 255, g: 0, b: 0 }); // RGB 对象 + +// HSL 格式 +tinyColor('hsl(0, 100%, 50%)'); // 标准 HSL 格式 +tinyColor('hsla(0, 100%, 50%, .5)'); // HSLA 格式 +tinyColor('hsl 0 1.0 0.5'); // 无括号的 HSL +tinyColor({ h: 0, s: 1, l: 0.5 }); // HSL 对象 + +// HSV 格式 +tinyColor('hsv(0, 100%, 100%)'); // 标准 HSV 格式 +tinyColor('hsva(0, 100%, 100%, .5)'); // HSVA 格式 +tinyColor('hsv 0 1 1'); // 无括号的 HSV +tinyColor({ h: 0, s: 100, v: 100 }); // HSV 对象 + +// 颜色名称 +tinyColor('RED'); // 大写颜色名称 +tinyColor('blanchedalmond'); // 小写颜色名称 +tinyColor('darkblue'); // 复合颜色名称 + +// 数字格式 +tinyColor(0x0); // 数字 0 +tinyColor(0xaabbcc); // 十六进制数字 +``` + +## 🎨 颜色操作 + +### 颜色转换 + +将颜色转换为不同的格式: + +```ts +const color = tinyColor('red'); + +// 转换为 HSV +color.toHsv(); // { h: 0, s: 1, v: 1, a: 1 } +color.toHsvString(); // "hsv(0, 100%, 100%)" + +// 转换为 HSL +color.toHsl(); // { h: 0, s: 1, l: 0.5, a: 1 } +color.toHslString(); // "hsl(0, 100%, 50%)" + +// 转换为 Hex +color.toHex(); // "ff0000" +color.toHexString(); // "#ff0000" +color.toHex8(); // "ff0000ff" +color.toHex8String(); // "#ff0000ff" + +// 转换为 RGB +color.toRgb(); // { r: 255, g: 0, b: 0, a: 1 } +color.toRgbString(); // "rgb(255, 0, 0)" + +// 转换为百分比 RGB +color.toPercentageRgb(); // { r: "100%", g: "0%", b: "0%", a: 1 } +color.toPercentageRgbString(); // "rgb(100%, 0%, 0%)" + +// 转换为颜色名称 +color.toName(); // "red" +``` + +### 颜色修改 + +修改颜色的亮度、饱和度、色相等属性: + +```ts +const color = tinyColor('red'); + +// 调亮颜色 +color.lighten().toString(); // "#ff3333" +color.lighten(100).toString(); // "#ffffff" + +// 提高亮度 +color.brighten().toString(); // "#ff1919" + +// 调暗颜色 +color.darken().toString(); // "#cc0000" +color.darken(100).toString(); // "#000000" + +// 添加白色 +color.tint().toString(); // "#ff1a1a" +color.tint(100).toString(); // "#ffffff" + +// 添加黑色 +color.shade().toString(); // "#e60000" +color.shade(100).toString(); // "#000000" + +// 降低饱和度 +color.desaturate().toString(); // "#f20d0d" +color.desaturate(100).toString(); // "#808080" + +// 提高饱和度 +tinyColor('hsl(0, 10%, 50%)').saturate().toString(); // "hsl(0, 20%, 50%)" + +// 转为灰度 +color.greyscale().toString(); // "#808080" + +// 旋转色相 +color.spin(180).toString(); // "#00ffff" +color.spin(-90).toString(); // "#7f00ff" +color.spin(90).toString(); // "#80ff00" + +// 混合颜色 +let color1 = tinyColor('#f0f'); +let color2 = tinyColor('#0f0'); +color1.mix(color2).toHexString(); // #808080 +``` + +### 颜色组合 + +生成一组相关的颜色: + +```ts +// 生成相似颜色 +const analogousColors = tinyColor('#f00').analogous(); +analogousColors.map(t => t.toHexString()); +// [ "#ff0000", "#ff0066", "#ff0033", "#ff0000", "#ff3300", "#ff6600" ] + +// 生成单色系列 +const monochromaticColors = tinyColor('#f00').monochromatic(); +monochromaticColors.map(t => t.toHexString()); +// [ "#ff0000", "#2a0000", "#550000", "#800000", "#aa0000", "#d40000" ] + +// 生成三色组合 +const triadColors = tinyColor('#f00').triad(); +triadColors.map(t => t.toHexString()); +// [ "#ff0000", "#00ff00", "#0000ff" ] + +// 生成四色组合 +const tetradColors = tinyColor('#f00').tetrad(); +tetradColors.map(t => t.toHexString()); +// [ "#ff0000", "#80ff00", "#00ffff", "#7f00ff" ] + +// 生成补色 +tinyColor('#f00').complement().toHexString(); // "#00ffff" +``` + +## 🎯 颜色主题生成 + +使用 Ant Design 的颜色生成算法生成主题色系列: + +```ts +import { generate, LimeColorGenerateOptions } from '@/uni_modules/lime-color' + +// 生成默认主题色系列 +generate('red') +// ['#2c1113', '#450f11', '#5b0e0e', '#7e0b0b', '#ad0707', '#dc0303', '#e82d27', '#f3594f', '#f88577', '#faaca0'] + +// 生成暗色主题色系列 +generate('red', { theme: 'dark' }) + +// 生成亮色主题色系列 +generate('blue', { theme: 'light' }) +``` + +## 📖 API 文档 + +### 构造函数 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `tinyColor(color, opts)` | 创建一个 TinyColor 实例 | color: 颜色值, opts: 选项 | TinyColor 实例 | + +### 属性 + +| 属性名 | 说明 | 类型 | +| --- | --- | --- | +| `originalInput` | 传递到构造函数中用于创建实例的原始输入 | any | +| `format` | 用于创建实例的格式 | string | +| `isValid` | 颜色是否成功被解析 | boolean | + +### 颜色判断方法 + +| 方法 | 说明 | 返回值 | +| --- | --- | --- | +| `getBrightness()` | 返回颜色的感知亮度,范围从 0-255 | number | +| `isLight()` | 返回一个布尔值,指示颜色的感知亮度是否为浅色 | boolean | +| `isDark()` | 返回一个布尔值,指示颜色的感知亮度是否为深色 | boolean | +| `getLuminance()` | 返回颜色的感知亮度,范围从 0-1 | number | +| `isMonochrome()` | 判断当前颜色是否为单色 | boolean | + +### 透明度操作 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `getAlpha()` | 返回颜色的透明度值,范围从 0-1 | - | number | +| `setAlpha(alpha)` | 设置颜色的透明度值 | alpha: 0-1 之间的数值 | TinyColor 实例 | +| `onBackground(background)` | 计算颜色在背景上的显示效果 | background: 背景颜色 | TinyColor 实例 | + +### 颜色转换方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `toHsv()` | 转换为 HSV 对象 | - | HSVA 对象 | +| `toHsvString()` | 转换为 HSV 字符串 | - | string | +| `toHsb()` | 转换为 HSB 对象 | - | HSBA 对象 | +| `toHsbString()` | 转换为 HSB 字符串 | - | string | +| `toHsl()` | 转换为 HSL 对象 | - | HSLA 对象 | +| `toHslString()` | 转换为 HSL 字符串 | - | string | +| `toHex(allow3Char)` | 转换为十六进制字符串 | allow3Char: 是否允许3字符简写 | string | +| `toHexString(allow3Char)` | 转换为带#的十六进制字符串 | allow3Char: 是否允许3字符简写 | string | +| `toHex8(allow4Char)` | 转换为8位十六进制字符串 | allow4Char: 是否允许4字符简写 | string | +| `toHex8String(allow4Char)` | 转换为带#的8位十六进制字符串 | allow4Char: 是否允许4字符简写 | string | +| `toHexShortString(allowShortChar)` | 根据透明度返回较短的十六进制值 | allowShortChar: 是否允许简写 | string | +| `toRgb()` | 转换为 RGB 对象 | - | RGBA 对象 | +| `toRgbString()` | 转换为 RGB 字符串 | - | string | +| `toPercentageRgb()` | 转换为百分比表示的 RGB 对象 | - | RGBAString 对象 | +| `toPercentageRgbString()` | 转换为百分比表示的 RGB 字符串 | - | string | +| `toName()` | 转换为颜色名称 | - | string 或 null | +| `toNumber()` | 转换为数字 | - | number | +| `toString(format)` | 根据指定格式转换为字符串 | format: 格式名称 | string | + +### 颜色修改方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `lighten(amount)` | 调亮颜色 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `brighten(amount)` | 提高亮度 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `darken(amount)` | 调暗颜色 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `tint(amount)` | 与白色混合 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `shade(amount)` | 与黑色混合 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `desaturate(amount)` | 降低饱和度 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `saturate(amount)` | 提高饱和度 | amount: 0-100 之间的数值 | TinyColor 实例 | +| `greyscale()` | 转为灰度 | - | TinyColor 实例 | +| `spin(amount)` | 旋转色相 | amount: -360 到 360 之间的数值 | TinyColor 实例 | +| `mix(color, amount)` | 与另一种颜色混合 | color: 颜色值, amount: 0-100 之间的数值 | TinyColor 实例 | + +### 颜色组合方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `analogous(results, slices)` | 生成相似颜色 | results: 结果数量, slices: 分片数量 | TinyColor[] | +| `monochromatic(results)` | 生成单色系列 | results: 结果数量 | TinyColor[] | +| `splitcomplement()` | 生成分裂补色 | - | TinyColor[] | +| `triad()` | 生成三色组合 | - | TinyColor[] | +| `tetrad()` | 生成四色组合 | - | TinyColor[] | +| `polyad(n)` | 生成 n 色组合 | n: 颜色数量 | TinyColor[] | +| `complement()` | 生成补色 | - | TinyColor 实例 | + +### 其他方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `clone()` | 克隆颜色实例 | - | TinyColor 实例 | +| `equals(color)` | 判断两个颜色是否相等 | color: 颜色值 | boolean | + +### 颜色主题生成 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `generate(color, options)` | 生成颜色主题 | color: 颜色值, options: 选项 | string[] | + +## 🌟 应用场景 + +- **颜色选择器**:支持多种颜色格式的输入和输出 +- **主题定制**:生成完整的主题色系列 +- **数据可视化**:创建和谐的颜色方案 +- **UI 设计工具**:提供颜色操作和转换功能 +- **游戏开发**:生成游戏内的颜色方案 + +## 🤝 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: + +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | + +## 📄 许可证 + +本项目采用 MIT 许可证,详见 LICENSE 文件。 + +## 🔗 相关链接 + +- [uni-app 插件市场](https://ext.dcloud.net.cn/) +- [Ant Design 颜色系统](https://ant.design/docs/spec/colors-cn) + +--- + +**lime-color** - 让颜色处理变得简单而强大! \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/app-android-o/config.json b/uni_modules/lime-color/utssdk/app-android-o/config.json new file mode 100644 index 0000000..bf95925 --- /dev/null +++ b/uni_modules/lime-color/utssdk/app-android-o/config.json @@ -0,0 +1,3 @@ +{ + "minSdkVersion": "21" +} \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/app-android-o/index.uts b/uni_modules/lime-color/utssdk/app-android-o/index.uts new file mode 100644 index 0000000..720ce4f --- /dev/null +++ b/uni_modules/lime-color/utssdk/app-android-o/index.uts @@ -0,0 +1,2 @@ +export * from '../../common/color' +export * from '../../common/generate' \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/app-js-o/config.json b/uni_modules/lime-color/utssdk/app-js-o/config.json new file mode 100644 index 0000000..721b81e --- /dev/null +++ b/uni_modules/lime-color/utssdk/app-js-o/config.json @@ -0,0 +1,3 @@ +{ + "deploymentTarget": "9" +} \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/app-js-o/index.uts b/uni_modules/lime-color/utssdk/app-js-o/index.uts new file mode 100644 index 0000000..720ce4f --- /dev/null +++ b/uni_modules/lime-color/utssdk/app-js-o/index.uts @@ -0,0 +1,2 @@ +export * from '../../common/color' +export * from '../../common/generate' \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/index-o.uts b/uni_modules/lime-color/utssdk/index-o.uts new file mode 100644 index 0000000..053349f --- /dev/null +++ b/uni_modules/lime-color/utssdk/index-o.uts @@ -0,0 +1,3 @@ +export * from '../common/color' +export * from '../common/generate' +export * from './interface' \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/interface.uts b/uni_modules/lime-color/utssdk/interface.uts new file mode 100644 index 0000000..4253e81 --- /dev/null +++ b/uni_modules/lime-color/utssdk/interface.uts @@ -0,0 +1,93 @@ +// @ts-nocheck +export type RGB = { + r : number; + g : number; + b : number; +} +export type RGBA = { + r : number; + g : number; + b : number; + a : number; +} +export type RGBAString = { + r : string; + g : string; + b : string; + a : number; +} +export type HSL = { + h : number; + s : number; + l : number; +} + +export type HSLA = { + h : number; + s : number; + l : number; + a : number; +} +export type HSV = { + h : number; + s : number; + v : number; +} + +export type HSVA = { + h : number; + s : number; + v : number; + a : number; +} + +// 增加部分 +export type HSB = { + h : number; + s : number; + b : number; +} +export type HSBA = { + h : number; + s : number; + b : number; + a : number; +} + +export type LimeColorInfo = { + ok ?: boolean; + format ?: LimeColorFormats; + r : number; + g : number; + b : number; + a : number; +} + +export type LimeColorFormats = + | 'rgb' + | 'prgb' + | 'hex' + | 'hex3' + | 'hex4' + | 'hex6' + | 'hex8' + | 'name' + | 'hsl' + | 'hsb' + | 'hsv'; + +export type LimeColorOptions = { + format ?: LimeColorFormats; + gradientType ?: string; +} + +export type LimeColorInput = string | number | RGB | RGBA | HSL | HSLA | HSV | HSVA | LimeColor; + +export type LimeColorGenerateOptions = { + theme ?: 'dark' | 'default'; + backgroundColor ?: string; +} + +export interface LimeColor { + +} \ No newline at end of file diff --git a/uni_modules/lime-color/utssdk/unierror.uts b/uni_modules/lime-color/utssdk/unierror.uts new file mode 100644 index 0000000..e3bab5c --- /dev/null +++ b/uni_modules/lime-color/utssdk/unierror.uts @@ -0,0 +1,41 @@ +/* 此规范为 uni 规范,可以按照自己的需要选择是否实现 */ +import { MyApiErrorCode, MyApiFail } from "./interface.uts" +/** + * 错误主题 + * 注意:错误主题一般为插件名称,每个组件不同,需要使用时请更改。 + * [可选实现] + */ +export const UniErrorSubject = 'uts-api'; + + +/** + * 错误信息 + * @UniError + * [可选实现] + */ +export const UniErrors : Map = new Map([ + /** + * 错误码及对应的错误信息 + */ + [9010001, 'custom error mseeage1'], + [9010002, 'custom error mseeage2'], +]); + + +/** + * 错误对象实现 + */ +export class MyApiFailImpl extends UniError implements MyApiFail { + + /** + * 错误对象构造函数 + */ + constructor(errCode : MyApiErrorCode) { + super(); + this.errSubject = UniErrorSubject; + this.errCode = errCode; + this.errMsg = UniErrors[errCode] ?? ""; + } +} + + diff --git a/uni_modules/lime-date-time-picker/changelog.md b/uni_modules/lime-date-time-picker/changelog.md new file mode 100644 index 0000000..ac2cae2 --- /dev/null +++ b/uni_modules/lime-date-time-picker/changelog.md @@ -0,0 +1,30 @@ +## 0.1.6(2026-02-09) +- fix: 修复uniappx ios时分秒模式问题 +## 0.1.5(2026-02-09) +- fix: 修复mode判断问题 +## 0.1.4(2026-02-07) +- fix: 修复coalesce缺少返回值 +## 0.1.3(2026-01-27) +- fix: 修复默认值不生效问题 +## 0.1.2(2026-01-24) +- fix: 修复在时分秒模式下无法选中的问题 +## 0.1.1(2025-12-29) +- fix: 修复uniapp缺少`renderLabel` +## 0.1.0(2025-12-09) +- fix: 修复类型问题 +## 0.0.9(2025-08-31) +- chore: 更新文档 +## 0.0.7(2025-04-24) +- fix: 修复uniapp v2 app 报错问题 +## 0.0.6(2025-04-23) +- feat: 兼容uniappx 鸿蒙next +## 0.0.5(2025-04-17) +- fix: 修复uniapp缺少导出onChange +## 0.0.4(2025-03-25) +- fix: 修复空字符时无法使用 +## 0.0.3(2025-01-09) +- feat: 增加`change`事件 +## 0.0.2(2024-12-27) +- feat: 兼容vue2 +## 0.0.1(2024-12-27) +- init diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/constant.ts b/uni_modules/lime-date-time-picker/components/l-date-time-picker/constant.ts new file mode 100644 index 0000000..5ce658c --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/constant.ts @@ -0,0 +1,56 @@ +// @ts-nocheck +import { TimeModeValues } from './type'; +// 使用位运算定义模式 +// const MODES = { +// YEAR: 1 << 0, // 1 +// MONTH: 1 << 1, // 2 +// DATE: 1 << 2, // 4 +// HOUR: 1 << 3, // 8 +// MINUTE: 1 << 4 // 16 +// SECOND : 1 << 4 // 32 +// }; + +export const MODE_YEAR = 1; // 0001 +export const MODE_MONTH = 2; // 0010 +export const MODE_DATE = 4; // 0100 +export const MODE_HOUR = 8; // 1000 +export const MODE_MINUTE = 16; // 10000 +export const MODE_SECOND = 32; // 100000 + +export const MODE_MAP = new Map([ + ['年', MODE_YEAR], + ['月', MODE_MONTH], + ['日', MODE_DATE], + ['时', MODE_HOUR], + ['分', MODE_MINUTE], + ['秒', MODE_SECOND], + ['year', MODE_YEAR], + ['month', MODE_MONTH], + ['date', MODE_DATE], + ['hour', MODE_HOUR], + ['minute', MODE_MINUTE], + ['second', MODE_SECOND], +]) + +export const FORMAT_MAP = new Map([ + ['year', 'YYYY'], + ['month', 'MM'], + ['date', 'DD'], + ['hour', 'HH'], + ['minute', 'mm'], + ['second', 'ss'], +]) + +export const UNIT_MAP = new Map([ + ['year', '年'], + ['month', '月'], + ['date', '日'], + ['hour', '时'], + ['minute', '分'], + ['second', '秒'], +]) + + +// 定义时间列名称数组 +export const MODE_NAMES : TimeModeValues[] = ['year', 'month', 'date', 'hour', 'minute', 'second']; +export const DEFAULT_FORMAT = 'YYYY-MM-DD HH:mm:ss' \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.uvue b/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.uvue new file mode 100644 index 0000000..b8a3515 --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.uvue @@ -0,0 +1,313 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.vue b/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.vue new file mode 100644 index 0000000..419375a --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/l-date-time-picker.vue @@ -0,0 +1,321 @@ + + + diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/props.ts b/uni_modules/lime-date-time-picker/components/l-date-time-picker/props.ts new file mode 100644 index 0000000..efe863a --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/props.ts @@ -0,0 +1,140 @@ +// @ts-nocheck +export default { + /** 取消按钮文字 */ + cancelBtn: { + type: String, + default: null, + }, + cancelStyle: { + type: String, + default: null + }, + /** 确定按钮文字 */ + confirmBtn: { + type: String, + default: null, + }, + confirmStyle: { + type: String, + default: null + }, + /** 组件国际化语言,目前支持: 简体中文(zh)、(tc)、英文(en)、日语(ja)、韩语(ko)、俄语(ru)等六种语言 */ + customLocale: { + type: String, + default: 'zh', + }, + /** 选择器的最大可选时间,默认为当前时间+10年 */ + end: { + type: [String, Number], + default: null, + }, + /** 列选项过滤函数,支持自定义列内容。(type 值可为: year, month, date, hour, minute, second) */ + customFilter: { + type: Function, + }, + /** 用于格式化 pick、change、confirm 事件返回的值,[详细文档](https://day.js.org/docs/en/display/format) */ + format: { + type: String, + default: 'YYYY-MM-DD HH:mm:ss', + }, + /**1 = year = 年;2 = month = 月;4 = date = 日;8 = hour = 时; 16 = minute = 分; 32 = second = 秒 */ + mode: { + type: [String, Number], + default: 1|2|4, + }, + /** 选择器的最小可选时间,默认为当前时间-10年 */ + start: { + type: [String, Number], + default: null, + }, + /** 时间间隔步数,示例:`{ minute: 5 }` */ + steps: { + type: Object, + }, + /** 标题 */ + title: { + type: String, + default: null, + }, + titleStyle: { + type: String, + default: null + }, + /** 选中值 */ + value: { + type: [String, Number], + default: null, + }, + /** 选中值,非受控属性 */ + defaultValue: { + type: [String, Number], + default: null, + }, + modelValue: { + type: [String, Number], + default: null + }, + itemHeight: { + type: String, + default: null + }, + itemColor: { + type: String, + default: null + }, + itemFontSize: { + type: String, + default: null + }, + itemActiveColor: { + type: String, + default: null + }, + + indicatorStyle: { + type: String, + default: null + }, + bgColor:{ + type: String, + default: null + }, + groupHeight:{ + type: String, + default: null + }, + radius:{ + type: String, + default: null + }, + renderLabel: { + type: Function, + default: null + }, + showUnit: { + type: Boolean, + default: true + }, + resetIndex: { + type: Boolean + }, + minHour: { + type: Number, + default: 0 + }, + maxHour: { + type: Number, + default: 23 + }, + minMinute: { + type: Number, + default: 0 + }, + maxMinute: { + type: Number, + default: 59 + }, + maskColors: { + type: Array, + } +} \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/type.ts b/uni_modules/lime-date-time-picker/components/l-date-time-picker/type.ts new file mode 100644 index 0000000..3914dff --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/type.ts @@ -0,0 +1,67 @@ +// @ts-nocheck +import type { PickerColumn, PickerColumnItem, PickerConfirmEvent, PickerPickEvent } from '@/uni_modules/lime-picker'; +export type TimeModeValues = 'year' | 'month' | 'date' | 'hour' | 'minute' | 'second'; +export type DateValue = string | number; +export type DateTimePickerColumn = PickerColumn//DateTimePickerColumnItem[]; + +export type DateTimePickerColumnItem = PickerColumnItem; + +export interface DateTimePickerProps { + /** 取消按钮文字 */ + cancelBtn?: string; + cancelStyle ?: string | UTSJSONObject; + /** 确定按钮文字 */ + confirmBtn?: string; + confirmStyle ?: string | UTSJSONObject; + /** 组件国际化语言,目前支持: 简体中文(zh)、(tc)、英文(en)、日语(ja)、朝鲜语(ko)、俄语(ru)等六种语言 */ + customLocale?: 'zh' | 'tc' | 'en' | 'ja' | 'ko' | 'ru'; + /** 选择器的最大可选时间,默认为当前时间+10年 */ + end?: DateValue;//string; + /** 选择器的最小可选时间,默认为当前时间-10年 */ + start?: DateValue; //string; + /** 时间间隔步数,示例:`{ minute: 5 }` */ + steps?: UTSJSONObject + /** 标题 */ + title?: string; + titleStyle ?: string | UTSJSONObject; + /** 选中值 */ + value?: DateValue; + defaultValue?: DateValue; + modelValue?: DateValue; + /* 用于格式化 pick、change、confirm 事件返回的值,[详细文档](https://day.js.org/docs/en/display/format) + */ + format: string; + /** + * 时间选择器的显示模式,可以是单个模式或多个模式的组合。 + * 使用位运算符来组合多个模式。 + * + * 例如: + * - 单个模式:1 + * - 多个模式组合:4 | 8 + * - 1 -> 年 | 2 -> 月 | 4 -> 日 | 8 -> 时 | 16 -> 分 | 32 -> 秒 + */ + mode: any//number + customFilter?: ((type: TimeModeValues, columns: DateTimePickerColumn) => DateTimePickerColumn); + /** + * 自定义label + */ + renderLabel?: ((type: string, value: string) => string); + showUnit: boolean; + + itemHeight?: string; + itemColor?: string; + itemFontSize?: string; + itemActiveColor?: string; + + indicatorStyle?: string; + maskColors?: string[]; + bgColor?:string; + groupHeight?:string; + radius?:string; + resetIndex: boolean + + minHour:number; + maxHour:number; + minMinute:number; + maxMinute:number; +} \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/l-date-time-picker/utils.ts b/uni_modules/lime-date-time-picker/components/l-date-time-picker/utils.ts new file mode 100644 index 0000000..1870761 --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/l-date-time-picker/utils.ts @@ -0,0 +1,89 @@ +// @ts-nocheck +import type { TimeModeValues } from './type'; +import { MODE_NAMES, MODE_MAP, MODE_YEAR, MODE_MONTH, MODE_DATE, MODE_HOUR, MODE_MINUTE, MODE_SECOND } from './constant' + +export function coalesce(...values:(T|null)[]) : T | null { + for (let value of values) { + if(value == null) continue; + if(typeof value == 'string' && value == '') continue; + return value + } + return null +} +/** + * 根据给定的模式返回具有意义的时间列数组。 + * @param {number} mode - 表示时间模式的位掩码。 + * @returns {TimeModeValues[]} - 返回具有意义的时间列名称数组。 + */ +export function getMeaningColumn(mode : any) : TimeModeValues[] { + // 初始化结果数组 + const res : TimeModeValues[] = []; + + let _mode : number = 0; + if (typeof mode == 'string') { + // 处理字符串形式的位掩码 + if (mode.includes('|') && /\d/.test(mode)) { + // 如果是 "1|2|3" 这种格式,按位或运算 + const bits = mode.split('|').map((bit):number => parseInt(bit.trim())); + _mode = bits.reduce((result, bit) => result | bit, 0); + } else { + // 如果是模式名称字符串,如 "year-month-date" + MODE_MAP.forEach((value, key) => { + if ((mode as string).includes(key)) { + _mode = _mode | value; + } + }); + } + // MODE_MAP.forEach((value, key) => { + // console.log('key', key) + // if ((mode as string).includes(key)) { + // _mode = _mode | value; + // } + // }) + } else if (typeof mode == 'number') { + _mode = mode as number + } + + if (_mode <= 0) { + return res + } + + + // 定义对应的位掩码数组 + const modeBitmasks = [MODE_YEAR, MODE_MONTH, MODE_DATE, MODE_HOUR, MODE_MINUTE, MODE_SECOND]; + + // 查找被设置的位掩码 + const activeBitmasks = modeBitmasks.filter(bitmask => (_mode & bitmask) != 0); + + // 如果没有位掩码被设置,返回空数组 + if (activeBitmasks.length == 0) { + return []; + } + + // 初始化最长连续子序列和当前连续子序列 + let longestSequence : number[] = []; + let currentSequence : number[] = []; + + // 遍历所有被设置的位掩码 + activeBitmasks.forEach(bitmask => { + // 如果当前序列为空或当前位掩码是前一个位掩码的两倍,则将其加入当前序列 + if (currentSequence.length == 0 || bitmask == currentSequence[currentSequence.length - 1] * 2) { + currentSequence.push(bitmask); + } else { + // 如果当前序列长度大于最长序列长度,则更新最长序列 + if (currentSequence.length > longestSequence.length) { + longestSequence = currentSequence; + } + // 开始新的序列 + currentSequence = [bitmask]; + } + }); + + // 检查最后一个序列是否是最长的 + if (currentSequence.length > longestSequence.length) { + longestSequence = currentSequence; + } + + // 将最长连续子序列的位掩码转换为对应的模式名并返回 + return longestSequence.map(bitmask => MODE_NAMES[modeBitmasks.indexOf(bitmask)]); +} \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.uvue b/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.uvue new file mode 100644 index 0000000..a946c9c --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.uvue @@ -0,0 +1,205 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.vue b/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.vue new file mode 100644 index 0000000..89235f4 --- /dev/null +++ b/uni_modules/lime-date-time-picker/components/lime-date-time-picker/lime-date-time-picker.vue @@ -0,0 +1,179 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/index.ts b/uni_modules/lime-date-time-picker/index.ts new file mode 100644 index 0000000..4aca69f --- /dev/null +++ b/uni_modules/lime-date-time-picker/index.ts @@ -0,0 +1,2 @@ +// @ts-nocheck +export * from './components/l-date-time-picker/type' \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/package.json b/uni_modules/lime-date-time-picker/package.json new file mode 100644 index 0000000..5beb932 --- /dev/null +++ b/uni_modules/lime-date-time-picker/package.json @@ -0,0 +1,110 @@ +{ + "id": "lime-date-time-picker", + "displayName": "lime-date-time-picker 时间选择器", + "version": "0.1.6", + "description": "lime-date-time-picker 用于选择时间,支持日期、时分等时间维度的时间选择,兼容uniapp/uniappx", + "keywords": [ + "date-time-picker", + "datetime-picker", + "时间选择", + "时间" +], + "repository": "", + "engines": { + "HBuilderX": "^4.42", + "uni-app": "^4.74", + "uni-app-x": "^4.75" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "√", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "lime-picker", + "lime-dayuts", + "lime-shared" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/readme.md b/uni_modules/lime-date-time-picker/readme.md new file mode 100644 index 0000000..6331774 --- /dev/null +++ b/uni_modules/lime-date-time-picker/readme.md @@ -0,0 +1,234 @@ +# lime-date-time-picker 时间选择器 +一个功能丰富的时间选择器组件,用于选择时间,支持日期、时分等时间维度。 + +> 插件依赖:`lime-shared`、`lime-picker` + +## 文档链接 +📚 组件详细文档请访问以下站点: +- [时间选择器文档 - 站点1](https://limex.qcoon.cn/components/date-time-picker.html) +- [时间选择器文档 - 站点2](https://limeui.netlify.app/components/date-time-picker.html) +- [时间选择器文档 - 站点3](https://limeui.familyzone.top/components/date-time-picker.html) + +## 安装方法 +1. 在uni-app插件市场中搜索并导入`lime-date-time-picker` +2. 首次导入可能需要重新编译 + +## 代码演示 + +### 基础使用 +通过 `v-model` 绑定当前选中的日期,通过 `start` 和 `end` 属性来设定可选的时间范围。在实际场景中 通常搭配 [Popup](https://ext.dcloud.net.cn/plugin?id=20769)一起使用。 +```html + + +``` +```js +const value = ref('2024-05-02'); + +const onConfirm = (value: string) => { + console.log('onConfirm', value) +} +const onChange = (value: string) => { + console.log('onChange', value) +} + +``` + +### 类型选择 +通过 `mode` 属性可以控制选项的类型,它可以是number,也可以是中文或英文,支持以任意顺序对 `1 = 年 = year` 、 `2 = 月 = month` 、 `4 = 日 = date` 、 `8 = 时 = hour` 、 `16 = 分 = minute` 、 `32 = 秒 = second` 进行排列组合。 + +比如:
+ +传入 `1` 来单独选择年份
。 +传入 `2` 来单独选择月份
。 +传入 `1|2` 来选择年份和月份,位运算结果:`3`传入`3`也可以
。 +传入 `2|4` 来选择月份和日期,位运算结果:`6`传入`6`也可以
。 +传入 `1|2|4` 来选择年月日,位运算结果:`7`传入`7`也可以
。 +传入 `4|8` 来选择日时,位运算结果:`12`传入`12`也可以
。 +传入 `8|16` 来选择时分,位运算结果:`24`传入`24`也可以
。 +传入 `8|16|32` 来选择时分秒,位运算结果:`56`传入`56`也可以
。 +传入 `1|2|4|8` 来选择年月日时,位运算结果:`15`传入`15`也可以
。 +传入 `1|2|4|8|16` 来选择年月日时分,位运算结果:`31`传入`31`也可以
。 +传入 `1|2|4|8|16|32` 来选择年月日时分秒,位运算结果:`63`传入`63`也可以
。 +任意组合,但必须是连续的。不能相隔即不能`日`和`分`这种组合,如果觉得数字不够直观,也可以直接写对应的中文或英文 +```html +// 数值 + + +//文本 + + +``` +```js +const value = ref('2024-05-02') +``` + + +### 自定义label +通过传入 `renderLabel` 函数,可以对选项文字进行格式化处理。 +```html + + +``` +```js +import type { TimeModeValues } from '@/uni_modules/lime-date-time-picker' +const renderLabel = (type: TimeModeValues, value: string): string => { + if(type == 'year') { + return `${value}年` + } + return value +} +``` + +### 过滤项 +通过传入 `customFilter` 函数,可以对选项数组进行过滤,实现自定义选项间隔。 +```html + + +``` +```js +import type { DateTimePickerColumn, TimeModeValues } from '@/uni_modules/lime-date-time-picker' +const filter = (type: TimeModeValues, columns: DateTimePickerColumn):DateTimePickerColumn => { + if (type == 'month') { + return columns.filter((option) => parseInt(option.value) % 6 == 0); + } + return columns +} +``` + + +## Vue2使用说明 +本插件使用了`composition-api`,请按照[官方教程](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置。 + +关键配置代码(在main.js中添加): +```js +// main.js +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +## 快速预览 +导入插件后,可以直接使用以下标签查看演示效果: + +```html + + +``` + +## 插件标签说明 +- `l-date-time-picker`:时间选择器组件 +- `lime-date-time-picker`:演示标签 + +## API文档 + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| v-model | 当前选中的日期 | string | - | +| value | 当前选中的日期 | string | - | +| start | 选择器的最小可选时间,默认为当前时间-10年 | string\|number | - | +| end | 选择器的最大可选时间,默认为当前时间+10年 | string\|number | - | +| format | 用于confirm事件参数格式化,详细[文档](https://ext.dcloud.net.cn/plugin?id=17301) | string | - | +| mode | 1=年、2=月、4=日、8=时、16=分、32=秒,任意组合 | string\|number | `1\|2\|4` | +| customFilter | 选项过滤函数(type可能值为year, month, day, hour, minute) | Function | - | +| renderLabel | 选项格式化函数(type可能值为year, month, day, hour, minute) | Function | - | +| showUnit | label后面是否显示单位 | boolean | `true` | +| minHour | 可选的最小小时 | number | `0` | +| maxHour | 可选的最大小时 | number | `23` | +| minMinute | 可选的最小分钟 | number | `0` | +| maxMinute | 可选的最大分钟 | number | `59` | +| cancelBtn | 取消按钮文字 | string | - | +| cancelStyle | 取消按钮样式 | string | - | +| confirmBtn | 确定按钮文字 | string | - | +| confirmStyle | 确定按钮样式 | string | - | +| title | 标题 | string | - | +| titleStyle | 标题样式 | string | - | +| itemHeight | 每项高度 | string | `50px` | +| itemColor | 每项文本颜色 | string | - | +| itemFontSize | 每项文本字体大小 | string | - | +| itemActiveColor | 每项文本选中颜色 | string | - | +| indicatorStyle | 选择器中间选中框的样式 | string | - | +| maskColors | 选择器遮罩颜色样式,`[开始颜色, 结束颜色]` | _string[]_ | `` | +| bgColor | 选择器背景色 | string | - | +| groupHeight | 选项组高度 | string | `400rpx` | +| radius | 圆角 | string | - | + +### Events + +| 事件名 | 说明 | 回调参数 | +| --- | --- | --- | +| cancel | 点击取消按钮时触发 | - | +| change | 选中变化时候触发 | value: string | +| confirm | 点击确认按钮时触发 | value: string | +| pick | 任何一列选中都会触发 | value: string | + +## 主题定制 + +组件提供了下列CSS变量,可用于自定义样式。 + +| 名称 | 默认值 | 描述 | +|--------|--------|------| +| `--l-picker-border-radius` | `$border-radius-xl` | 选择器整体圆角 | +| `--l-picker-bg-color` | `$bg-color-container` | 选择器背景色 | +| `--l-picker-toolbar-height` | `58px` | 工具栏高度 | +| `--l-picker-cancel-color` | `$text-color-2` | 取消按钮文字颜色 | +| `--l-picker-confirm-color` | `$primary-color` | 确认按钮文字颜色 | +| `--l-picker-button-font-size` | `$font-size-md` | 按钮文字大小 | +| `--l-picker-title-font-size` | `18px` | 标题文字大小 | +| `--l-picker-title-font-weight` | `700` | 标题文字粗细 | +| `--l-picker-title-line-height` | `26px` | 标题行高 | +| `--l-picker-title-color` | `$text-color-1` | 标题文字颜色 | +| `--l-picker-group-height` | `200px` | 选择器内容区高度 | +| `--l-picker-indicator-bg-color` | `$fill-4` | 选中指示器背景色 | +| `--l-picker-indicator-border-radius` | `6px` | 选中指示器圆角 | +| `--l-picker-item-height` | `50px` | 每个选项高度 | +| `--l-picker-item-color` | `$text-color-1` | 选项文字颜色 | +| `--l-picker-item-active-color` | `$text-color-1` | 选中项文字颜色 | +| `--l-picker-item-active-font-weight` | `700` | 选中项文字粗细 | +| `--l-picker-item-font-size` | `$font-size-md` | 选项文字大小 | +| `--l-picker-loading-mask-color` | `rgba(255,255,255,.9)` | 加载遮罩颜色 | +| `--l-picker-loading-color` | `$primary-color` | 加载动画颜色 | + +## 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | \ No newline at end of file diff --git a/uni_modules/lime-date-time-picker/readme_old.md b/uni_modules/lime-date-time-picker/readme_old.md new file mode 100644 index 0000000..c3c71bc --- /dev/null +++ b/uni_modules/lime-date-time-picker/readme_old.md @@ -0,0 +1,136 @@ +# lime-date-time-picker 时间选择器 + +## 简介 +lime-date-time-picker是一个功能丰富的时间选择器组件,用于选择时间,支持日期、时分等时间维度。 + +> 插件依赖:`lime-shared`、`lime-picker` + +## 文档链接 +� 组件详细文档请访问以下站点: +- [时间选择器文档 - 站点1](https://limex.qcoon.cn/components/date-time-picker.html) +- [时间选择器文档 - 站点2](https://limeui.netlify.app/components/date-time-picker.html) +- [时间选择器文档 - 站点3](https://limeui.familyzone.top/components/date-time-picker.html) + +## 安装方法 +1. 在uni-app插件市场中搜索并导入`lime-date-time-picker` +2. 首次导入可能需要重新编译 + +## Vue2使用说明 +本插件使用了`composition-api`,请按照[官方教程](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置。 + +关键配置代码(在main.js中添加): +```js +// main.js +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +## 功能特点 + +### 基础使用 +通过 `v-model` 绑定当前选中的日期,通过 `start` 和 `end` 属性来设定可选的时间范围。在实际场景中通常搭配 [Popup](https://ext.dcloud.net.cn/plugin?id=20769)一起使用。 + +### 类型选择 +通过 `mode` 属性可以控制选项的类型,支持以任意顺序对年、月、日、时、分、秒进行排列组合: +- `1` = 年 = year +- `2` = 月 = month +- `4` = 日 = date +- `8` = 时 = hour +- `16` = 分 = minute +- `32` = 秒 = second + +### 自定义label +通过传入 `renderLabel` 函数,可以对选项文字进行格式化处理。 + +### 过滤项 +通过传入 `customFilter` 函数,可以对选项数组进行过滤,实现自定义选项间隔。 + +## 快速预览 +导入插件后,可以直接使用以下标签查看演示效果: + +```html + + +``` + +## 插件标签说明 +- `l-date-time-picker`:时间选择器组件 +- `lime-date-time-picker`:演示标签 + +## API文档 + +### Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| v-model | 当前选中的日期 | string | - | +| value | 当前选中的日期 | string | - | +| start | 选择器的最小可选时间,默认为当前时间-10年 | string\|number | - | +| end | 选择器的最大可选时间,默认为当前时间+10年 | string\|number | - | +| format | 用于confirm事件参数格式化,详细[文档](https://ext.dcloud.net.cn/plugin?id=17301) | string | - | +| mode | 1=年、2=月、4=日、8=时、16=分、32=秒,任意组合 | string\|number | `1\|2\|4` | +| customFilter | 选项过滤函数(type可能值为year, month, day, hour, minute) | Function | - | +| renderLabel | 选项格式化函数(type可能值为year, month, day, hour, minute) | Function | - | +| showUnit | label后面是否显示单位 | boolean | `true` | +| minHour | 可选的最小小时 | number | `0` | +| maxHour | 可选的最大小时 | number | `23` | +| minMinute | 可选的最小分钟 | number | `0` | +| maxMinute | 可选的最大分钟 | number | `59` | +| cancelBtn | 取消按钮文字 | string | - | +| cancelStyle | 取消按钮样式 | string | - | +| confirmBtn | 确定按钮文字 | string | - | +| confirmStyle | 确定按钮样式 | string | - | +| title | 标题 | string | - | +| titleStyle | 标题样式 | string | - | +| itemHeight | 每项高度 | string | `50px` | +| itemColor | 每项文本颜色 | string | - | +| itemFontSize | 每项文本字体大小 | string | - | +| itemActiveColor | 每项文本选中颜色 | string | - | +| indicatorStyle | 选择器中间选中框的样式 | string | - | +| bgColor | 选择器背景色 | string | - | +| groupHeight | 选项组高度 | string | `400rpx` | +| radius | 圆角 | string | - | + +### Events + +| 事件名 | 说明 | 回调参数 | +| --- | --- | --- | +| cancel | 点击取消按钮时触发 | - | +| change | 选中变化时候触发 | value: string | +| confirm | 点击确认按钮时触发 | value: string | +| pick | 任何一列选中都会触发 | value: string | + +## 主题定制 + +### 样式变量 + +组件提供了下列CSS变量,可用于自定义样式,uvue app无效。 + +| 名称 | 默认值 | 描述 | +| --- | --- | --- | +| --l-picker-border-radius | 24rpx | - | +| --l-picker-bg-color | $bg-color-container | - | +| --l-picker-toolbar-height | 116rpx | - | +| --l-picker-cancel-color | text-color-2 | - | +| --l-picker-confirm-color | $primary-color | - | +| --l-picker-button-font-size | 32rpx | - | +| --l-picker-title-font-size | 36rpx | - | +| --l-picker-title-font-weight | 700 | - | +| --l-picker-title-line-height | 52rpx | - | +| --l-picker-title-color | $text-color-1 | - | +| --l-picker-group-height | 400rpx | - | +| --l-picker-indicator-bg-color | $fill-4 | - | +| --l-picker-indicator-border-radius | 12rpx | - | +| --l-picker-item-height | 50px | - | +| --l-picker-item-color | $text-color-1 | - | +| --l-picker-item-active-color | $text-color-1 | - | +| --l-picker-loading-mask-color | rgba(255,255,255,.9) | - | +| --l-picker-item-font-size | $font-size-md | - | + +## 支持与赞赏 + +如果您觉得本插件对您有帮助,欢迎赞赏支持: + +![支付宝](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) +![微信](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) \ No newline at end of file diff --git a/uni_modules/lime-dayuts/changelog.md b/uni_modules/lime-dayuts/changelog.md new file mode 100644 index 0000000..e51b01f --- /dev/null +++ b/uni_modules/lime-dayuts/changelog.md @@ -0,0 +1,43 @@ +## 2.0.0(2026-09-01) +- feat: 文档全面重构,符合插件文档规范 +- feat: 完善 API 文档,按功能分类组织(解析、取值/赋值、操作、显示、查询、相对时间、国际化) +- feat: 补充格式化占位符说明(含 `S`、`SS`、`ZZ` 等) +- feat: 新增时间单位速查表 +- feat: 新增注意事项章节,说明与 dayjs 的差异和平台差异 +- docs: 优化代码演示,按基础→进阶组织 +- docs: 完善国际化章节,说明 locale 配置和使用方式 +## 0.1.7(2026-04-27) +- fix: 修复纯数字字符转换问题 +## 0.1.6(2025-08-31) +- chore: 更新文档 +## 0.1.5(2025-06-01) +- feat: 支持传入纯数字的日期 +## 0.1.4(2025-05-22) +- fix: 修复uniapp x 缺少类型问题 +## 0.1.3(2025-04-24) +- fix: 修复uniapp v2 app 导出类型问题 +## 0.1.2(2025-04-24) +- fix: 修复uniapp v2 app报错的问题 +## 0.1.1(2025-04-22) +- fix: 修复uniapp app报错的问题 +- feat: 兼容uniappx 鸿蒙next +## 0.1.0(2025-04-16) +- fix: 修复locale en缺少`DayutsRelativeTime` +## 0.0.9(2025-03-05) +- fix: 修复uniappx ios interface引入问题 +## 0.0.8(2025-01-06) +- fix: 修复uniapp app报错的问题 +## 0.0.7(2024-12-27) +- feat: 支持`hbx4.42` +## 0.0.6(2024-06-19) +- feat: 支持`uniapp` +## 0.0.5(2024-05-02) +- fix: 修复因安卓 `字面量 === 字面量`为`false`导致加减等操作不起作用。 +## 0.0.4(2024-04-19) +- fix: 修复`parseDate`数组长度判断时报错 +## 0.0.3(2024-04-02) +- fix: 因多写f导致运行不起来 +## 0.0.2(2024-04-01) +- chore: 兼容uniapp x ios(app-js) +## 0.0.1(2024-03-30) +- init diff --git a/uni_modules/lime-dayuts/common/constant.ts b/uni_modules/lime-dayuts/common/constant.ts new file mode 100644 index 0000000..bc31bba --- /dev/null +++ b/uni_modules/lime-dayuts/common/constant.ts @@ -0,0 +1,32 @@ +// @ts-nocheck +export const SECONDS_A_MINUTE = 60 +export const SECONDS_A_HOUR = SECONDS_A_MINUTE * 60 +export const SECONDS_A_DAY = SECONDS_A_HOUR * 24 +export const SECONDS_A_WEEK = SECONDS_A_DAY * 7 + +export const MILLISECONDS_A_SECOND = 1e3 +export const MILLISECONDS_A_MINUTE = SECONDS_A_MINUTE * MILLISECONDS_A_SECOND +export const MILLISECONDS_A_HOUR = SECONDS_A_HOUR * MILLISECONDS_A_SECOND +export const MILLISECONDS_A_DAY = SECONDS_A_DAY * MILLISECONDS_A_SECOND +export const MILLISECONDS_A_WEEK = SECONDS_A_WEEK * MILLISECONDS_A_SECOND + +// English locales +export const MS = 'millisecond' +export const S = 'second' +export const MIN = 'minute' +export const H = 'hour' +export const D = 'day' +export const W = 'week' +export const M = 'month' +export const Q = 'quarter' +export const Y = 'year' +export const DATE = 'date' + +export const FORMAT_DEFAULT = 'YYYY-MM-DDTHH:mm:ssZ' + +export const INVALID_DATE_STRING = 'Invalid Date' + +// regex +export const REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/ +export const REGEX_FORMAT = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g +// export const REGEX_FORMAT = /(?:[^\]]+)|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g; diff --git a/uni_modules/lime-dayuts/common/dates.ts b/uni_modules/lime-dayuts/common/dates.ts new file mode 100644 index 0000000..080a1d3 --- /dev/null +++ b/uni_modules/lime-dayuts/common/dates.ts @@ -0,0 +1,194 @@ +// @ts-nocheck +import {dayuts, Dayuts} from "./index" +// import {DayutsConfig} from '../../types/date.uts' +import { DayutsConfig } from '../utssdk/interface' +export class Dates { + + /** + * Dayuts实例 + */ + newDate() : Dayuts; + newDate(date : string) : Dayuts; + newDate(date : any[]) : Dayuts; + newDate(date : number) : Dayuts; + newDate(date : UTSJSONObject) : Dayuts; + newDate(date : Date) : Dayuts; + newDate(date : Dayuts) : Dayuts; + // #ifndef UNI-APP-X && APP + newDate(date : any | null, format : string) : Dayuts; + newDate(date : any | null, format : string | null, locale : string | null) : Dayuts; + // #endif + newDate(date : any | null = null, format : string | null = null, locale : string | null = null) : Dayuts { + if (date != null && date instanceof Dayuts) return date.clone() + return new Dayuts({ + date, + format, + locale + } as DayutsConfig) + } + + /** + * 万能转日期对象 + * @param date 时间 + */ + toDate(date : string) : Date { + date = date.split('周')[0].trim().split('星期')[0].trim().split('礼拜')[0].trim() + + if (date == '') { + return new Date() + } + + if (date.length >= 10 && /^\d+$/.test(date)) { + // 时间戳 + let timestamp = parseInt(date) + + // 若为unix秒时间戳,则转为毫秒时间戳 + if (/^\d{10}$/.test(timestamp.toString())) { + return new Date(timestamp * 1000) + } else { + return new Date(timestamp) + } + } else { + if (!date.includes('T')) { + // 容错 + date = date.replace(/\//g, '-'). + replace(/年/g, '-'). + replace(/月/g, '-'). + replace(/日/g, ''). + replace(/时/g, ':'). + replace(/分/g, ':'). + replace(/秒/g, ''). + replace(/^-+|-+$/g, ''). + trim() + + // 补全 + if (date.length == 4) { + date += '-01-01 00:00:00' + } else if (date.length == 7) { + date += '-01 00:00:00' + } else if (date.length == 8) { + date = `${this.today()} ${date}` + } else if (date.length == 10) { + date += ' 00:00:00' + } else if (date.length == 13) { + date += ':00:00' + } else if (date.length == 16) { + date += ':00' + } + + let d = date.split(/[^0-9]/) + + try{ + return new Date(parseInt(d[0]), parseInt(d[1]) - 1, parseInt(d[2]), parseInt(d[3]), parseInt(d[4]), parseInt(d[5])) + }catch(e){ + console.error(`[ux-date]解析失败:${date}`) + return new Date() + } + + } else { + return new Date(date) + } + } + } + + /** + * 万能格式化日期 + * @param date 时间 + * @param format 格式化规则 支持yyyy-MM-dd|yyyy-MM-dd HH:mm:ss|yyyy/MM/dd|yyyy/MM/dd HH:mm:ss|yyyy年MM月dd日等组合 默认yyyy-mm-dd + */ + fmtDate(date : string, format : string) : string { + if(format == '') { + format = 'yyyy-MM-dd' + } + + date = date.split('周')[0].trim().split('星期')[0].trim().split('礼拜')[0].trim() + + let d = this.toDate(date) + + let timeSource = new Map() + timeSource.set('y', d.getFullYear().toString()) + timeSource.set('M', (d.getMonth() + 1).toString().padStart(2, '0')) + timeSource.set('d', d.getDate().toString().padStart(2, '0')) + timeSource.set('H', d.getHours().toString().padStart(2, '0')) + timeSource.set('m', d.getMinutes().toString().padStart(2, '0')) + timeSource.set('s', d.getSeconds().toString().padStart(2, '0')) + + let result = format.split('周')[0].trim().split('星期')[0].trim().split('礼拜')[0].trim() + timeSource.forEach((v : string, key : string) => { + const rets = new RegExp(`${key}+`).exec(result) ?? [] as RegExp[] + if (rets.length > 0) { + result = result.replace(rets[0].toString(), v) + } + }) + + let fmtWeek = format.indexOf('周') != -1 || format.indexOf('星期') != -1 || format.indexOf('礼拜') != -1 + if(fmtWeek) { + result += ` ${this.weekName(this.toDate(result).getDay(), format)}` + } + + return result + } + + /** + * 现在 yyyy-MM-dd HH:mm:ss + */ + now() : string { + let date = new Date() + + let year = date.getFullYear() + let month = `${date.getMonth() + 1}`.padStart(2, '0') + let day = `${date.getDate()}`.padStart(2, '0') + let hour = `${date.getHours()}`.padStart(2, '0') + let minute = `${date.getMinutes()}`.padStart(2, '0') + let second = `${date.getSeconds()}`.padStart(2, '0') + + return `${year}-${month}-${day} ${hour}:${minute}:${second}` + } + + /** + * 今天 + * @param n n为负则代表取前n天,为正则代表取后n天,0则为今天 + */ + today(n : number = 0) : string { + let date = new Date() + date.setDate(date.getDate() + n) + + let year = date.getFullYear() + let month = `${date.getMonth() + 1}`.padStart(2, '0') + let day = `${date.getDate()}`.padStart(2, '0') + + return `${year}-${month}-${day}` + } + + /** + * 本周所有日期 + */ + weeks() : string[] { + const fDate = new Date() + const eDate = new Date() + fDate.setDate(fDate.getDate() - fDate.getDay() + 1) + eDate.setDate(eDate.getDate() - eDate.getDay() + 7) + + const result : string[] = [] + + for (let d = fDate; d.getTime() <= eDate.getTime(); d.setDate(d.getDate() + 1)) { + result.push(d.toISOString().slice(0, 10)) + } + + return result; + } + + /** + * 周几 + */ + weekName(day: number, format: string) : string { + if(format.indexOf('星期') != -1) { + return ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'][day] + } else if(format.indexOf('礼拜') != -1 ) { + return ['礼拜天', '礼拜一', '礼拜二', '礼拜三', '礼拜四', '礼拜五', '礼拜六'][day] + } else { + return ['周日', '周一', '周二', '周三', '周四', '周五', '周六'][day] + } + } + +} \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/index.ts b/uni_modules/lime-dayuts/common/index.ts new file mode 100644 index 0000000..67121a0 --- /dev/null +++ b/uni_modules/lime-dayuts/common/index.ts @@ -0,0 +1,1104 @@ +// @ts-nocheck +import { DayutsConfig, type DayutsLocale, DayutsUnit, DayutsObject } from '../utssdk/interface' +import { REGEX_FORMAT, REGEX_PARSE, INVALID_DATE_STRING, M, Y, W, D, DATE, H, MIN, S, MS, Q, MILLISECONDS_A_MINUTE, MILLISECONDS_A_HOUR, MILLISECONDS_A_SECOND, MILLISECONDS_A_WEEK, MILLISECONDS_A_DAY, FORMAT_DEFAULT } from './constant' +import { isNumber, prettyUnit, padStart, padZoneStr, monthDiff, absFloor } from './utils' +import { dayutsIntl, localeState } from './use' + +type Threshold = { + l : string; + r ?: number; + d ?: DayutsUnit; +} + +function parseLocale(preset : string | null) : string | null; +function parseLocale(preset : DayutsLocale | null) : string | null; +function parseLocale(preset : string, object : DayutsLocale | null, isLocal : boolean) : string | null; +function parseLocale(preset : DayutsLocale, object : DayutsLocale, isLocal : boolean) : string | null; +function parseLocale(preset : any | null, object : DayutsLocale | null = null, isLocal : boolean = false) : string | null { + let l : string | null = null + if (preset == null) return dayutsIntl.locale + if (typeof preset == 'string') { + + const presetLower = (preset as string).toLowerCase() + if (dayutsIntl.has(presetLower)) { + l = presetLower + } + if (object != null) { + dayutsIntl.set(presetLower, object) + l = presetLower + } + const presetSplit = preset.split('-') + if (l == null && presetSplit.length > 1) { + return parseLocale(presetSplit[0]) + } + } else if (preset instanceof DayutsLocale) { + // const { name } = preset as DayutsLocale + dayutsIntl.set(preset.name, preset) + l = preset.name + } + if (!isLocal && l != null) { + // L = l + dayutsIntl.locale = l + } + // return l ?? L //(!isLocal && L != null) + return l ?? dayutsIntl.locale //(!isLocal && L != null) +} + +function tryParseNumberAtIndex(digits : (any|null)[], index : number) : number | null { + // 检查索引是否在数组范围内 + if (index >= 0 && index < digits.length) { + if(digits[index] == null) return null + // 尝试解析索引位置的字符串为数字 + const parsedNumber = isNumber(digits[index]) ? digits[index] as number : parseInt(`${digits[index]}`, 10); + + // 检查解析结果是否为有效数字 + if (!isNaN(parsedNumber)) { + return parsedNumber; + } + } + return null +} +// function createDateFromArray(d: number[]):Date +// function createDateFromArray(d: string[]):Date +function createDateFromArray(d : (any|null)[], offset : number = 0) : Date { + const year = tryParseNumberAtIndex(d, 1 - offset) ?? new Date().getFullYear() + const month = (tryParseNumberAtIndex(d, 2 - offset) ?? 1) - 1 + const day = tryParseNumberAtIndex(d, 3 - offset) ?? 1 + const hour = tryParseNumberAtIndex(d, 4 - offset) ?? 0 + const minute = tryParseNumberAtIndex(d, 5 - offset) ?? 0 + const second = tryParseNumberAtIndex(d, 6 - offset) ?? 0 + const millisecond = (tryParseNumberAtIndex(d, 7 - offset) ?? 0).toString().substring(0, 3) //d.length > 7 ? parseInt((d[7] ?? '0').substring(0, 3)) : 0 + + return new Date( + year, + month, + day, + hour, + minute, + second, + parseInt(millisecond)) +} +function parseDate(cfg : DayutsConfig) : Date|null { + const { date } = cfg + if (date == null) return new Date() + if (date instanceof Date) return date as Date + + try { + // if (typeof date == 'string' && /^\d+$/.test(date as string)) { + // return new Date(parseInt(`${date}`.padEnd(13, '0'))) + // } + if (typeof date == 'string' && !/Z$/i.test(date as string)) { + const d = date.match(REGEX_PARSE) + // #ifndef APP-ANDROID || APP-IOS + const isNull = d == null + // #endif + // #ifdef APP-ANDROID || APP-IOS + const isNull = d == null|| Array.isArray(d) && d.length == 0 + // #endif + if (!isNull) { + return createDateFromArray(d as (any|null)[]) + } + } + if (typeof date == 'string') return new Date(date as string) + if (Array.isArray(date)) { + return createDateFromArray(date as (any|null)[], 1) + } + if (isNumber(date)) return new Date(date as number) + return null//new Date() + } catch(err) { + return null//new Date() + } +} + +function wrapper(date : any, instance : Dayuts) : Dayuts { + return dayuts(date, instance.$L) +} + +export class Dayuts { + $L : string + private valid: boolean = true; + private $d : Date = new Date() + private $y : number = 0 + private $M : number = 0 + private $D : number = 0 + private $W : number = 0 + private $H : number = 0 + private $m : number = 0 + private $s : number = 0 + private $ms : number = 0 + private $u : boolean = false + constructor(cfg : DayutsConfig) { + this.$L = parseLocale(cfg.locale) ?? dayutsIntl.locale //'en' + this.parse(cfg) + } + parse(cfg : DayutsConfig) { + const _d = parseDate(cfg) + if(_d != null) { + this.$d = parseDate(cfg)! + this.init() + } else { + this.valid = false + } + } + init() { + const { $d } = this + this.$y = $d.getFullYear() + this.$M = $d.getMonth() + this.$D = $d.getDate() + this.$W = $d.getDay() + this.$H = $d.getHours() + this.$m = $d.getMinutes() + this.$s = $d.getSeconds() + this.$ms = $d.getMilliseconds() + } + /** + * 检查日期对象是否有效。 + * + * @returns {boolean} 如果日期对象有效,则返回true;否则返回false。 + */ + isValid() : boolean { + return this.valid + // return !(this.$d.toString() == INVALID_DATE_STRING) + } + /** + * 检查当前日期是否与给定的日期在指定的时间单位内相同。 + * + * @param {string|number|Date} input - 要比较的日期。 + * @param {string} units - 时间单位,例如'year'、'month'、'day'等。 + * @returns {boolean} 如果当前日期与给定的日期在指定的时间单位内相同,则返回true;否则返回false。 + */ + isSame(input : string) : boolean + isSame(input : number) : boolean + isSame(input : Date) : boolean + isSame(input : Dayuts) : boolean + isSame(input : UTSJSONObject) : boolean + + isSame(input : string, units : DayutsUnit) : boolean + isSame(input : number, units : DayutsUnit) : boolean + isSame(input : Date, units : DayutsUnit) : boolean + isSame(input : Dayuts, units : DayutsUnit) : boolean + isSame(input : UTSJSONObject, units : DayutsUnit) : boolean + isSame(input : any, units : DayutsUnit = 'millisecond') : boolean { + const other = input instanceof Dayuts ? input : dayuts(input) + const date1 = this.startOf(units).valueOf() + const date2 = other.valueOf() + const date3 = this.endOf(units).valueOf() + return date1 <= date2 && date2 <= date3 + } + /** + * 检查给定的日期或时间是否在当前 dayuts 对象的指定时间单位之后。 + * + * @param {string | number | Date | Dayuts} input - 要与当前 dayuts 对象进行比较的日期或时间。 + * @param {string} units - 要比较的时间单位(如 "year"、"month"、"day" 等)。 + * @returns {boolean} 如果给定的日期或时间在当前 dayuts 对象的指定时间单位之后,则返回 `true`,否则返回 `false`。 + */ + isAfter(input : string) : boolean + isAfter(input : number) : boolean + isAfter(input : Date) : boolean + isAfter(input : Dayuts) : boolean + isAfter(input : UTSJSONObject) : boolean + + isAfter(input : string, units : DayutsUnit) : boolean + isAfter(input : number, units : DayutsUnit) : boolean + isAfter(input : Date, units : DayutsUnit) : boolean + isAfter(input : Dayuts, units : DayutsUnit) : boolean + isAfter(input : UTSJSONObject, units : DayutsUnit) : boolean + isAfter(input : any, units : DayutsUnit = 'millisecond') : boolean { + const other = input instanceof Dayuts ? input : dayuts(input) + const date1 = other.valueOf() + const date2 = this.startOf(units).valueOf() + return date1 < date2; + } + /** + * 检查给定的日期或时间是否在当前 dayuts 对象的指定时间单位之前。 + * + * @param {string | number | Date | Dayuts} input - 要与当前 dayuts 对象进行比较的日期或时间。 + * @param {string} units - 要比较的时间单位(如 "year"、"month"、"day" 等)。 + * @returns {boolean} 如果给定的日期或时间在当前 dayuts 对象的指定时间单位之前,则返回 `true`,否则返回 `false`。 + */ + isBefore(input : string) : boolean + isBefore(input : number) : boolean + isBefore(input : Date) : boolean + isBefore(input : Dayuts) : boolean + isBefore(input : UTSJSONObject) : boolean + + isBefore(input : string, units : DayutsUnit) : boolean + isBefore(input : number, units : DayutsUnit) : boolean + isBefore(input : Date, units : DayutsUnit) : boolean + isBefore(input : Dayuts, units : DayutsUnit) : boolean + isBefore(input : UTSJSONObject, units : DayutsUnit) : boolean + isBefore(input : any, units : DayutsUnit = 'millisecond') : boolean { + const other = input instanceof Dayuts ? input : dayuts(input); + const date1 = other.valueOf() + const date2 = this.endOf(units).valueOf() + return date2 < date1; + } + /** + * 判断当前Dayuts对象是否与给定的输入在同一时间或之前,根据指定的时间单位 + * @param {(string | number | Date | Dayuts | UTSJSONObject)} input - 输入的时间 + * @param {DayutsUnit} units - 指定的时间单位 + * @returns {boolean} - 如果当前Dayuts对象与给定的输入在同一时间或之前,则返回true,否则返回false + */ + isSameOrBefore(input : string) : boolean + isSameOrBefore(input : number) : boolean + isSameOrBefore(input : Date) : boolean + isSameOrBefore(input : Dayuts) : boolean + isSameOrBefore(input : UTSJSONObject) : boolean + + isSameOrBefore(input : string, units : DayutsUnit) : boolean + isSameOrBefore(input : number, units : DayutsUnit) : boolean + isSameOrBefore(input : Date, units : DayutsUnit) : boolean + isSameOrBefore(input : Dayuts, units : DayutsUnit) : boolean + isSameOrBefore(input : UTSJSONObject, units : DayutsUnit) : boolean + isSameOrBefore(input : any, units : DayutsUnit = 'millisecond') : boolean { + return this.isSame(input, units) || this.isBefore(input, units) + } + /** + * 判断当前Dayuts对象是否与给定的输入在同一时间或之后,根据指定的时间单位 + * @param {(string | number | Date | Dayuts | UTSJSONObject)} input - 输入的时间 + * @param {DayutsUnit} units - 指定的时间单位 + * @returns {boolean} - 如果当前Dayuts对象与给定的输入在同一时间或之后,则返回true,否则返回false + */ + isSameOrAfter(input : string) : boolean + isSameOrAfter(input : number) : boolean + isSameOrAfter(input : Date) : boolean + isSameOrAfter(input : Dayuts) : boolean + isSameOrAfter(input : UTSJSONObject) : boolean + + isSameOrAfter(input : string, units : DayutsUnit) : boolean + isSameOrAfter(input : number, units : DayutsUnit) : boolean + isSameOrAfter(input : Date, units : DayutsUnit) : boolean + isSameOrAfter(input : Dayuts, units : DayutsUnit) : boolean + isSameOrAfter(input : UTSJSONObject, units : DayutsUnit) : boolean + isSameOrAfter(input : any, units : DayutsUnit = 'millisecond') : boolean { + return this.isSame(input, units) || this.isAfter(input, units) + } + /** + * 判断当前Dayuts对象是否在给定的两个时间之间 + * @param {any} input - 第一个时间输入 + * @param {any} input2 - 第二个时间输入 + * @param {DayutsUnit} units - 指定的时间单位 + * @param {string} interval - 区间符号,表示区间的开闭性,默认为'()',表示开区间 + * @returns {boolean} - 如果当前Dayuts对象在给定的两个时间之间,则返回true,否则返回false + */ + isBetween(input : any, input2 : any, units : DayutsUnit = 'millisecond', interval : string = '()') : boolean { + const dA = dayuts(input) + const dB = dayuts(input2) + const dAi = interval.startsWith('(') + const dBi = interval.endsWith(')') + + return ((dAi ? this.isAfter(dA, units) : !this.isBefore(dA, units)) && + (dBi ? this.isBefore(dB, units) : !this.isAfter(dB, units))) + || ((dAi ? this.isBefore(dA, units) : !this.isAfter(dA, units)) && + (dBi ? this.isAfter(dB, units) : !this.isBefore(dB, units))) + } + /** + * 判断当前Dayuts对象所在的年份是否为闰年 + * @returns {boolean} - 如果当前Dayuts对象所在的年份是闰年,则返回true,否则返回false + */ + isLeapYear():boolean{ + return ((this.$y % 4 == 0) && (this.$y % 100 != 0)) || (this.$y % 400 == 0) + } + isToday():boolean{ + const comparisonTemplate = 'YYYY-MM-DD' + const now = dayuts() + + return this.format(comparisonTemplate) == now.format(comparisonTemplate) + } + /** + * 获取当前 `dayuts` 对象的 Unix 时间戳(以秒为单位)。 + * + * @returns {number} 返回当前 `dayuts` 对象的 Unix 时间戳(以秒为单位)。 + */ + unix() : number { + return Math.floor(this.valueOf() / 1000); + } + /** + * 将当前日期设置为指定时间单位的开始或结束。 + * + * @param {string} units - 时间单位,例如'year'、'month'、'day'等。 + * @param {boolean} startOf - 如果为true,则设置为开始;如果为false,则设置为结束。 + * @returns {Dayuts} 返回一个新的Dayuts对象,表示调整后的日期。 + */ + startOf(units : DayutsUnit, startOf : boolean = true) : Dayuts { + const isStartOf = startOf; + const unit = prettyUnit(units) + // instanceFactory 函数用于创建一个新的 Dayuts 对象,表示给定日期的开始或结束。 + // 参数 d 和 m 分别表示日期和月份。 + const instanceFactory = (d : number, m : number) : Dayuts => { + const ins = dayuts(new Date(this.$y, m, d)) + return isStartOf ? ins : ins.endOf(D) + } + + // instanceFactorySet 函数用于创建一个新的 Dayuts 对象,表示调整后的时间。 + // 参数 method 表示要调用的 Date 对象的方法(如 'setHours'),slice 表示要调整的时间部分的索引。 + const instanceFactorySet = (method : string, slice : number) : Dayuts => { + // 定义表示开始和结束时间的参数数组。 + const argumentStart = [0, 0, 0, 0] + const argumentEnd = [23, 59, 59, 999] + // 根据 isStartOf 的值,选择开始或结束时间的参数数组,并调用 Date 对象的方法。 + const args = (isStartOf ? argumentStart : argumentEnd).slice(slice) + const date = this.toDate() + if (method == 'setHours') { + date.setHours(args[0]); + date.setMinutes(args[1]) + date.setSeconds(args[2]) + date.setMilliseconds(args[3]) + } else if (method == 'setMinutes') { + date.setMinutes(args[0]); + date.setSeconds(args[1]) + date.setMilliseconds(args[2]) + } else if (method == 'setSeconds') { + date.setSeconds(args[0]) + date.setMilliseconds(args[1]) + } else if (method == 'setMilliseconds') { + date.setMilliseconds(args[0]) + } + return dayuts(date) + } + const { $W, $M, $D } = this + const utcPad = `set${this.$u ? 'UTC' : ''}` + if (unit == Y) { + return isStartOf ? instanceFactory(1, 0) : instanceFactory(31, 11); + } else if (unit == M) { + return isStartOf ? instanceFactory(1, $M) : instanceFactory(0, $M + 1); + } else if (unit == W) { + const weekStart = this.$locale().weekStart ?? 0; + const gap = ($W < weekStart ? $W + 7 : $W) - weekStart; + return instanceFactory(isStartOf ? $D - gap : $D + (6 - gap), $M); + } else if (unit == D || unit == DATE) { + return instanceFactorySet(`${utcPad}Hours`, 0); + } else if (unit == H) { + return instanceFactorySet(`${utcPad}Minutes`, 1); + } else if (unit == MIN) { + return instanceFactorySet(`${utcPad}Seconds`, 2); + } else if (unit == S) { + return instanceFactorySet(`${utcPad}Milliseconds`, 3); + } else { + return this.clone(); + } + } + /** + * 将当前日期设置为指定时间单位的结束。 + * + * @param {string} arg - 时间单位,例如'year'、'month'、'day'等。 + * @returns {Dayuts} 返回一个新的Dayuts对象,表示调整后的日期。 + */ + endOf(units : DayutsUnit) : Dayuts { + return this.startOf(units, false) + } + /** + * 设置指定的时间单位的值。 + * + * @param {string} units - 要设置的时间单位(如 "year"、"month"、"day" 等)。 + * @param {number} int - 要设置的值。 + * @returns {Dayuts} 返回当前对象。 + */ + private $set(units : DayutsUnit, int : number) : Dayuts { // private set + const unit = prettyUnit(units) + // const utcPad = `set${this.$u ? 'UTC' : ''}` + const arg = unit == D ? this.$D + (int - this.$W) : int + const setDateUnit = (date : Dayuts, unit : DayutsUnit, arg : number) => { + if (unit == D || unit == DATE) { + date.$d.setDate(arg); + } else if (unit == M) { + date.$d.setMonth(arg); + } else if (unit == Y) { + date.$d.setFullYear(arg); + } else if (unit == H) { + date.$d.setHours(arg); + } else if (unit == MIN) { + date.$d.setMinutes(arg); + } else if (unit == S) { + date.$d.setSeconds(arg); + } else if (unit == MS) { + date.$d.setMilliseconds(arg); + } + } + if (unit == M || unit == Y) { + // clone is for badMutable plugin + const date = this.clone().set(DATE, 1) + // date.$d[name](arg) + setDateUnit(date, unit, arg) + date.init() + this.$d = date.set(DATE, Math.min(this.$D, date.daysInMonth())).$d + } else { + setDateUnit(this, unit, arg) + // this.$d[name](arg) + } + + this.init() + return this + } + /** + * 创建一个当前对象的副本,并设置指定的时间单位的值。 + * + * @param {string} string - 要设置的时间单位(如 "year"、"month"、"day" 等)。 + * @param {number} int - 要设置的值。 + * @returns {Dayuts} 返回一个新的 `dayuts` 对象,其值为当前对象的副本,并设置了指定的时间单位的值。 + */ + set(string : DayutsUnit, int : number) : Dayuts { + return this.clone().$set(string, int); + } + /** + * 获取当前 `dayuts` 对象的指定时间单位的值。 + * + * @param {string} units - 要获取的时间单位(如 "year"、"month"、"day" 等)。 + * @returns {number} 返回当前 `dayuts` 对象的指定时间单位的值。 + */ + get(units : DayutsUnit) : number { + const unit = prettyUnit(units) + if (unit == D) { + return this.day() + } else if (unit == DATE) { + return this.date() + } else if (unit == M) { + return this.month() + } else if (unit == Y) { + return this.year() + } else if (unit == H) { + return this.hour() + } else if (unit == MIN) { + return this.minute() + } else if (unit == S) { + return this.second() + } else if (unit == MS) { + return this.millisecond() + } + return 0 + } + /** + * 获取或设置年份。 + * @param {number | null} [input] - 要设置的年份。 + * @returns {number | Dayuts} 年份或 Dayuts 实例。 + */ + year() : number + year(input : number) : Dayuts + year(input : number | null = null) : any { + if (input == null) return this.$y + return this.set(Y, input) + } + /** + * 获取或设置月份。 + * @param {number | null} [input] - 要设置的月份(0-11)。 + * @returns {number | Dayuts} 月份或 Dayuts 实例。 + */ + month() : number + month(input : number) : Dayuts + month(input : number | null = null) : any { + if (input == null) return this.$M + return this.set(M, input) + } + /** + * 获取或设置星期几。 + * @param {number | null} [input] - 要设置的星期几(0-6)。 + * @returns {number | Dayuts} 星期几或 Dayuts 实例。 + */ + day() : number + day(input : number) : Dayuts + day(input : number | null = null) : any { + if (input == null) return this.$W + return this.set(D, input) + } + /** + * 获取或设置月份中的某一天。 + * @param {number | null} [input] - 要设置的月份中的某一天(1-31)。 + * @returns {number | Dayuts} 月份中的某一天或 Dayuts 实例。 + */ + date() : number + date(input : number) : Dayuts + date(input : number | null = null) : any { + if (input == null) return this.$D + return this.set(DATE, input) + } + /** + * 获取或设置小时。 + * @param {number | null} [input] - 要设置的小时(0-23)。 + * @returns {number | Dayuts} 小时或 Dayuts 实例。 + */ + hour() : number + hour(input : number) : Dayuts + hour(input : number | null = null) : any { + if (input == null) return this.$H + return this.set(H, input) + } + /** + * 获取或设置分钟。 + * @param {number | null} [input] - 要设置的分钟(0-59)。 + * @returns {number | Dayuts} 分钟或 Dayuts 实例。 + */ + minute() : number + minute(input : number) : Dayuts + minute(input : number | null = null) : any { + if (input == null) return this.$m + return this.set(MIN, input) + } + /** + * 获取或设置秒。 + * @param {number | null} [input] - 要设置的秒(0-59)。 + * @returns {number | Dayuts} 秒或 Dayuts 实例。 + */ + second() : number + second(input : number) : Dayuts + second(input : number | null = null) : any { + if (input == null) return this.$s + return this.set(S, input) + } + /** + * 获取或设置毫秒。 + * @param {number | null} [input] - 要设置的毫秒(0-999)。 + * @returns {number | Dayuts} 毫秒或 Dayuts 实例。 + */ + millisecond() : number + millisecond(input : number) : Dayuts + millisecond(input : number | null = null) : any { + if (input == null) return this.$ms + return this.set(MS, input) + } + + /** + * 在当前 Dayuts 实例上添加指定的时间长度。 + * @param {number} number - 要添加的时间长度。 + * @param {string} units - 要添加的时间单位(例如,“years”,“months”,“days”等)。 + * @returns {Dayuts} 更新的 Dayuts 实例。 + */ + add(number : number, units : DayutsUnit) : Dayuts { + const unit = prettyUnit(units) + // 创建一个新的 Dayuts 实例,并根据给定的 n 值设置日期。 + // n 值乘以 number 参数,然后加到当前日期上,以设置新的日期。 + const instanceFactorySet = (n : number) : Dayuts => { + // 创建一个新的 Dayuts 实例,它是当前实例的副本 + const d = dayuts(this) + // 设置新的日期并返回更新后的 Dayuts 实例 + return d.date(d.date() + Math.round(n * number)) //Utils.w(d.date(d.date() + Math.round(n * number)), this) + } + if (unit == M) { + return this.set(M, this.$M + number) + } + if (unit == Y) { + return this.set(Y, this.$y + number) + } + if (unit == D) { + return instanceFactorySet(1) + } + if (unit == W) { + return instanceFactorySet(7) + } + + const steps = new Map([ + [MIN, MILLISECONDS_A_MINUTE], + [H, MILLISECONDS_A_HOUR], + [S, MILLISECONDS_A_SECOND], + ]) + const step = steps.get(unit) ?? 1; + const nextTimeStamp = this.$d.getTime() + (number * step) + return wrapper(nextTimeStamp, this) + } + /** + * 从当前 Dayuts 实例中减去指定的时间。 + * @param {number} number - 要减去的时间。 + * @param {string} units - 要减去的时间单位(例如,“years”,“months”,“days”等)。 + * @returns {Dayuts} 更新的 Dayuts 实例。 + */ + subtract(number : number, units : DayutsUnit) : Dayuts { + // 通过将 number 乘以 -1,然后调用 add 方法来实现减法操作 + return this.add(number * -1, units); + } + /** + * 日期格式化 + * @param {string} formatStr - 格式化字符串,包含各种格式化占位符(例如,“YYYY-MM-DD”,“HH:mm:ss”等)。 + * @returns {string} 格式化后的日期字符串。 + */ + format(formatStr : string | null = null) : string { + const locale = this.$locale(); + if (!this.isValid()) return INVALID_DATE_STRING // locale.invalidDate || INVALID_DATE_STRING; + + const str = formatStr ?? FORMAT_DEFAULT; + // @ts-ignore + const zoneStr = padZoneStr(this); + const { $H, $m, $M } = this; + const { weekdays, months, meridiem } = locale; + /** + * 从给定的数组中获取缩写或完整的字符串。 + * @param {Array} arr - 包含缩写字符串的数组。 + * @param {number} index - 数组中要获取的元素的索引。 + * @param {Array} full - 包含完整字符串的数组。 + * @param {number} length - 要返回的字符串的长度。 + * @returns {string} 缩写或完整的字符串。 + */ + function getShort(arr : string[] | null, index : number, full : string[] = [], length : number = 0) : string { + if (arr != null && arr.length >= index) { + return arr[index] + } else if (full.length >= index) { + return full[index].slice(0, length) + } + return '' + }; + /** + * 获取12小时制的小时数。 + * @param {number} num - 小时数的位数。 + * @returns {string} 12小时制的小时数字符串。 + */ + const get$H = (num : number) : string => padStart(($H % 12 == 0 ? 12 : $H % 12).toString(), num, '0') + /** + * 获取上午或下午的字符串表示。 + * @param {number} hour - 小时数。 + * @param {number} minute - 分钟数。 + * @param {boolean} isLowercase - 是否返回小写字符串。 + * @returns {string} 上午或下午的字符串表示。 + */ + const meridiemFunc = meridiem ?? ((hour : number, _ : number, isLowercase : boolean) : string => { + const m = (hour < 12 ? 'AM' : 'PM'); + return isLowercase ? m.toLowerCase() : m; + }); + // #ifdef APP-ANDROID + return str.replace('YYYY', padStart(this.$y.toString(), 4, '0')) + .replace('YY', (this.$y).toString().slice(-2)) + .replace('MMMM', getShort(months, $M)) + .replace('MM', padStart(($M + 1).toString(), 2, '0')) + .replace('M', ($M + 1).toString()) + .replace('DD', padStart(this.$D.toString(), 2, '0')) + .replace('D', this.$D.toString()) + .replace('dddd', weekdays[this.$W]) + .replace('ddd', getShort(locale.weekdaysShort, this.$W, weekdays, 3)) + .replace('dd', getShort(locale.weekdaysMin, this.$W, weekdays, 2)) + .replace('d', this.$W.toString()) + .replace('HH', padStart($H.toString(), 2, '0')) + .replace('H', $H.toString()) + .replace('hh', get$H(2)) + .replace('h', get$H(1)) + .replace('mm', padStart($m.toString(), 2, '0')) + .replace('m', $m.toString()) + .replace('ss', padStart(this.$s.toString(), 2, '0')) + .replace('s', this.$s.toString()) + .replace('SSS', padStart(this.$ms.toString(), 3, '0')) + .replace('A', meridiemFunc($H, $m, false)) + .replace('a', meridiemFunc($H, $m, true)) + .replace('Z', zoneStr) + // #endif + // #ifndef APP-ANDROID + const matches = (match : string) : string | null => { + if (match == 'YY') { + return (this.$y).toString().slice(-2); + } else if (match == 'YYYY') { + return padStart(this.$y.toString(), 4, '0'); + } else if (match == 'M') { + return ($M + 1).toString(); + } else if (match == 'MM') { + return padStart(($M + 1).toString(), 2, '0'); + } else if (match == 'MMM') { + return getShort(locale.monthsShort, $M, months, 3); + } else if (match == 'MMMM') { + return getShort(months, $M); + } else if (match == 'D') { + return this.$D.toString(); + } else if (match == 'DD') { + return padStart(this.$D.toString(), 2, '0'); + } else if (match == 'd') { + return this.$W.toString(); + } else if (match == 'dd') { + return getShort(locale.weekdaysMin, this.$W, weekdays, 2); + } else if (match == 'ddd') { + return getShort(locale.weekdaysShort, this.$W, weekdays, 3); + } else if (match == 'dddd') { + return weekdays[this.$W]; + } else if (match == 'H') { + return $H.toString(); + } else if (match == 'HH') { + return padStart($H.toString(), 2, '0'); + } else if (match == 'h') { + return get$H(1); + } else if (match == 'hh') { + return get$H(2); + } else if (match == 'a') { + return meridiemFunc($H, $m, true); + } else if (match == 'A') { + return meridiemFunc($H, $m, false); + } else if (match == 'm') { + return $m.toString(); + } else if (match == 'mm') { + return padStart($m.toString(), 2, '0'); + } else if (match == 's') { + return this.$s.toString(); + } else if (match == 'ss') { + return padStart(this.$s.toString(), 2, '0'); + } else if (match == 'SSS') { + return padStart(this.$ms.toString(), 3, '0'); + } else if (match == 'Z') { + return zoneStr; // 'ZZ' logic below + } + return null; + }; + return str.replace(REGEX_FORMAT, (match : string, $1 : string, offset : number, string : string) : string => { + return $1 ?? matches(match) ?? zoneStr.replace(':', '') + }) + // #endif + } + /** + * 获取 Dayuts 实例的 UTC 偏移量(以分钟为单位)。 + * @returns {number} UTC 偏移量(以分钟为单位)。 + */ + utcOffset() : number { + // Because a bug at FF24, we're rounding the timezone offset around 15 minutes + // https://github.com/moment/moment/pull/1871 + // #ifndef APP-ANDROID || APP-IOS + return -Math.round(this.$d.getTimezoneOffset() / 15) * 15 + // #endif + // #ifdef APP-ANDROID || APP-IOS + return 0 + // #endif + } + /** + * 计算两个日期之间的差值 + * @param {string|number|Date|Dayuts} input - 要比较的日期 + * @param {string} units - 要计算的时间单位,如 'years', 'months', 'weeks', 'days', 'hours', 'minutes', 'seconds' + * @param {boolean} float - 是否返回浮点数结果 + * @returns {number} 返回两个日期之间的差值 + */ + diff(input : string) : number + diff(input : number) : number + diff(input : Date) : number + diff(input : Dayuts) : number + diff(input : UTSJSONObject) : number + + diff(input : string, units : DayutsUnit) : number + diff(input : number, units : DayutsUnit) : number + diff(input : Date, units : DayutsUnit) : number + diff(input : Dayuts, units : DayutsUnit) : number + diff(input : UTSJSONObject, units : DayutsUnit) : number + + diff(input : string, units : DayutsUnit, float : boolean) : number + diff(input : number, units : DayutsUnit, float : boolean) : number + diff(input : Date, units : DayutsUnit, float : boolean) : number + diff(input : Dayuts, units : DayutsUnit, float : boolean) : number + diff(input : UTSJSONObject, units : DayutsUnit, float : boolean) : number + diff(input : any, units : DayutsUnit = 'millisecond', float : boolean = false) : number { + const unit = prettyUnit(units) + const that = dayuts(input) + const zoneDelta = (that.utcOffset() - this.utcOffset()) * MILLISECONDS_A_MINUTE + const diff = this.valueOf() - that.valueOf() + // @ts-ignore + const getMonth = () : number => monthDiff(this, that) + let result : number; + switch (unit) { + case Y: + result = getMonth() / 12 + break + case M: + result = getMonth() + break + case Q: + result = getMonth() / 3 + break + case W: + result = (diff - zoneDelta) / MILLISECONDS_A_WEEK + break + case D: + result = (diff - zoneDelta) / MILLISECONDS_A_DAY + break + case H: + result = diff / MILLISECONDS_A_HOUR + break + case MIN: + result = diff / MILLISECONDS_A_MINUTE + break + case S: + result = diff / MILLISECONDS_A_SECOND + break + default: + result = diff // milliseconds + break + } + + return float ? result : absFloor(result) + } + /** + * 将当前 Dayuts 对象转换为原生 Date 对象。 + * + * @returns {Date} 返回一个表示当前日期的原生 Date 对象。 + */ + toDate() : Date { + return new Date(this.valueOf()) + } + /** + * 将 Moment 对象转换为 JSON 字符串 + * @returns {string | null} 如果 Moment 对象有效,则返回 ISO 8601 格式的字符串,否则返回 null + */ + toJSON() : string | null { + return this.isValid() ? this.toISOString() : null; + } + /** + * 将 Moment 对象转换为 ISO 8601 格式的字符串 + * @returns {string} 返回 ISO 8601 格式的字符串 + */ + toISOString() : string { + // #ifndef APP-ANDROID || APP-IOS + return this.$d.toISOString(); + // #endif + // #ifdef APP-ANDROID || APP-IOS + return this.$d.toString(); + // #endif + } + toObject() : DayutsObject { + return { + years: this.$y, + months: this.$M, + date: this.$D, + hours: this.$H, + minutes: this.$m, + seconds: this.$s, + milliseconds: this.$ms + } as DayutsObject + } + toArray() : number[] { + return [ + this.$y, + this.$M, + this.$D, + this.$H, + this.$m, + this.$s, + this.$ms + ] + } + /** + * 获取当前日期的毫秒数。 + * + * @returns {number} 返回一个表示当前日期的毫秒数。 + */ + valueOf() : number { + // 使用 Date 对象的 getTime 方法获取当前日期的毫秒数。 + return this.$d.getTime() + } + /** + * 获取当前 `dayuts` 对象所在月份的天数。 + * + * @returns {number} 返回当前 `dayuts` 对象所在月份的天数。 + */ + daysInMonth() : number { + return this.endOf(M).$D; + } + + /** + * 获取当前日期的区域设置对象。 + * + * @returns {Object} 区域设置对象。 + */ + private $locale() : DayutsLocale { // get locale object + // return Ls.get(this.$L)! + return localeState.locales.get(this.$L)! + } + /** + * 设置或获取 Dayuts 实例的本地化配置 + * @param {string|Object} preset - 本地化预设名称或自定义本地化配置对象 + * @param {Object} [DayutsLocale] - 可选的自定义本地化配置对象 + * @returns {Dayuts|string} 如果设置了本地化配置,则返回一个新的 Dayuts 实例;否则返回当前实例的本地化配置名称 + */ + locale(preset : string, object : DayutsLocale) : Dayuts + locale(preset : DayutsLocale, object : DayutsLocale) : Dayuts + locale(preset : any, object : DayutsLocale | null = null) : Dayuts { + // if (!preset) return this.$L + const that = this.clone() + const nextLocaleName = parseLocale(preset, object, true) + if (nextLocaleName != null) that.$L = nextLocaleName + return that + } + clone() : Dayuts { + return wrapper(this.$d.getTime(), this) + } + /** + * 返回当前 dayuts 对象的 UTC 字符串表示。 + * + * @returns {string} 当前 dayuts 对象的 UTC 字符串表示。 + */ + // #ifdef APP-ANDROID && !VUE3-VAPOR + override toString() : string { + // return this.$d.toUTCString(); + // const locale = localeState.locales.get('en')! + // const weekday = locale.weekdays[this.$d.getDay()].substring(0,3); + // const month = locale.months[this.$d.getMonth()].substring(0,3) + // const day = `${this.$D}`.padStart(2, '0'); + // const hours = `${this.$H}`.padStart(2, '0'); + // const minutes = `${this.$m}`.padStart(2, '0'); + // const seconds = `${this.$s}`.padStart(2, '0'); + // return `${weekday}, ${day} ${month} ${this.$y} ${hours}:${minutes}:${seconds} GMT`; + return this.$d.toString(); + } + // #endif + // #ifndef APP-ANDROID && !VUE3-VAPOR + toString() : string { + // return this.$d.toUTCString(); + return this.$d.toString(); + } + // #endif + /** + * 计算给定日期在当年的第几天,或者设置给定日期为当年的第几天。 + * @param {number} [input] - 如果提供了输入值,则将日期设置为当年的第几天。如果没有提供输入值,则返回当前日期在当年的第几天。 + * @returns {number} 如果提供了输入值,则返回调整后的日期。如果没有提供输入值,则返回当前日期在当年的第几天。 + */ + dayOfYear() : number + dayOfYear(input : number) : Dayuts + dayOfYear(input : number | null = null) : any { + const dayOfYear = Math.round((this.startOf('day').valueOf() - this.startOf('year').valueOf()) / 864e5) + 1 + return input == null ? dayOfYear : this.add(input - dayOfYear, 'day') + } + /** + * 根据输入的时间计算与当前时间的相对时间差,并以指定的格式返回。 + * @param {Date|number|string} input - 输入的时间,可以是Date对象、时间戳或符合Date.parse()方法的字符串 + * @param {boolean} withoutSuffix - 是否省略“未来”或“过去”的后缀 + * @param {Object} instance - 当前时间的实例 + * @param {boolean} isFrom - 是否从输入时间计算到当前时间 + * @param {Function} postFormat - 格式化绝对值后的结果的函数 + * @returns {string} 相对时间差的格式化字符串 + */ + // postFormat + fromToBase(input : string, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string + fromToBase(input : number, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string + fromToBase(input : Date, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string + fromToBase(input : Dayuts, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string + fromToBase(input : UTSJSONObject, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string + fromToBase(input : any, withoutSuffix : boolean, instance : Dayuts, isFrom : boolean) : string { + const relObj = localeState.locales.get('en')?.relativeTime + const loc = instance.$locale().relativeTime ?? relObj + if (loc == null) return ''; + const T : Threshold[] = [ + { l: 's', r: 44, d: S }, + { l: 'm', r: 89 }, + { l: 'mm', r: 44, d: MIN }, + { l: 'h', r: 89 }, + { l: 'hh', r: 21, d: H }, + { l: 'd', r: 35 }, + { l: 'dd', r: 25, d: D }, + { l: 'M', r: 45 }, + { l: 'MM', r: 10, d: M }, + { l: 'y', r: 17 }, + { l: 'yy', d: Y } + ] + const Tl = T.length + let result : number = 0; + let out : string = ''; + let isFuture : boolean = false + for (let i = 0; i < Tl; i += 1) { + let t = T[i] + if (t.d != null) { + result = isFrom + ? dayuts(input).diff(instance, t.d!, true) + : instance.diff(input, t.d!, true) + } + let abs = Math.round(Math.abs(result)) + isFuture = result > 0 + if (t.r == null || t.r != null && abs <= t.r!) { + if (abs <= 1 && i > 0) t = T[i - 1] // 1 minutes -> a minute, 0 seconds -> 0 second + const format = loc[t.l] + // if (postFormat) { + // abs = postFormat(`${abs}`) + // } + if (typeof format == 'string') { + out = (format as string).replace('%d', abs.toString()) + } + // else { + // out = format(abs, withoutSuffix, t.l!, isFuture) + // } + break + } + } + if (withoutSuffix) return out + const pastOrFuture = isFuture ? loc.future : loc.past + // if (typeof pastOrFuture == 'function') { + // return pastOrFuture(out) + // } + return pastOrFuture.replace('%s', out) + } + /** + * 相对指定时间(后)。 + * @param {string|number|Date|Dayuts|UTSJSONObject} input - 输入的时间,可以是字符串、数字(时间戳)、Date对象、Dayuts对象或UTSJSONObject。 + * @param {boolean} withoutSuffix - 是否省略“未来”或“过去”的后缀。 + * @returns {string} 相对时间差的格式化字符串。 + */ + to(input : string) : string + to(input : number) : string + to(input : Date) : string + to(input : Dayuts) : string + to(input : UTSJSONObject) : string + + to(input : string, withoutSuffix : boolean) : string + to(input : number, withoutSuffix : boolean) : string + to(input : Date, withoutSuffix : boolean) : string + to(input : Dayuts, withoutSuffix : boolean) : string + to(input : UTSJSONObject, withoutSuffix : boolean) : string + to(input : any, withoutSuffix : boolean = false) : string { + return this.fromToBase(input, withoutSuffix, this, true) + } + /** + * 将当前时间转换为与输入时间的相对时间差,并以指定的格式返回。 + * @param {string|number|Date|Dayuts|UTSJSONObject} input - 输入的时间,可以是字符串、数字(时间戳)、Date对象、Dayuts对象或UTSJSONObject。 + * @param {boolean} withoutSuffix - 是否省略“未来”或“过去”的后缀。 + * @returns {string} 相对时间差的格式化字符串。 + */ + from(input : string) : string + from(input : number) : string + from(input : Date) : string + from(input : Dayuts) : string + from(input : UTSJSONObject) : string + + from(input : string, withoutSuffix : boolean) : string + from(input : number, withoutSuffix : boolean) : string + from(input : Date, withoutSuffix : boolean) : string + from(input : Dayuts, withoutSuffix : boolean) : string + from(input : UTSJSONObject, withoutSuffix : boolean) : string + from(input : any, withoutSuffix : boolean = false) : string { + return this.fromToBase(input, withoutSuffix, this, false) + } + /** + * 获取当前时间与实例时间的相对时间差,并以指定的格式返回。 + * @param {boolean} withoutSuffix - 是否省略“未来”或“过去”的后缀。 + * @returns {string} 相对时间差的格式化字符串。 + */ + toNow() : string + toNow(withoutSuffix : boolean = false) : string { + return this.to(dayuts(), withoutSuffix) + } + /** + * 获取实例时间与当前时间的相对时间差,并以指定的格式返回。 + * @param {boolean} withoutSuffix - 是否省略“未来”或“过去”的后缀。 + * @returns {string} 相对时间差的格式化字符串。 + */ + fromNow() : string + fromNow(withoutSuffix : boolean = false) : string { + return this.from(dayuts(), withoutSuffix) + } +} + +function dayuts() : Dayuts; +function dayuts(date : string) : Dayuts; +function dayuts(date : any[]) : Dayuts; +function dayuts(date : number) : Dayuts; +function dayuts(date : UTSJSONObject) : Dayuts; +function dayuts(date : Date) : Dayuts; +function dayuts(date : Dayuts) : Dayuts; +// #ifndef APP-ANDROID || APP-IOS +function dayuts(date : any | null, format : string) : Dayuts; +function dayuts(date : any | null, format : string | null, locale : string | null) : Dayuts; +// #endif +function dayuts(date : any | null = null, format : string | null = null, locale : string | null = null) : Dayuts { + if (date != null && date instanceof Dayuts) return date.clone() + return new Dayuts({ + date, + format, + locale + } as DayutsConfig) +} + +/** + * 判断给定的对象是否为Dayuts实例 + * @param {(any | null)} date - 输入的对象 + * @returns {boolean} - 如果给定的对象是Dayuts实例,则返回true,否则返回false + */ +function isDayuts(date : any | null = null) : boolean { + return date instanceof Dayuts +} + +export { + dayuts, + isDayuts +} \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/locale/en/index.ts b/uni_modules/lime-dayuts/common/locale/en/index.ts new file mode 100644 index 0000000..4d97cef --- /dev/null +++ b/uni_modules/lime-dayuts/common/locale/en/index.ts @@ -0,0 +1,57 @@ +// @ts-nocheck +import type { DayutsLocale, DayutsRelativeTime} from '../../../utssdk/interface' +/** + * 英语本地化对象。 + */ +export default { + name: 'en', + /** + * 星期名称数组。 + */ + weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], + /** + * 月份名称数组。 + */ + months: [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December', + ], + relativeTime: { + future: 'in %s', + past: '%s ago', + s: 'a few seconds', + m: 'a minute', + mm: '%d minutes', + h: 'an hour', + hh: '%d hours', + d: 'a day', + dd: '%d days', + M: 'a month', + MM: '%d months', + y: 'a year', + yy: '%d years' + } as DayutsRelativeTime, + /** + * 序数函数,用于将数字转换为带有序数后缀的字符串。 + * + * @param {number} n - 要转换的数字。 + * @returns {string} 带有序数后缀的字符串。 + */ + ordinal: (n : number, _ : string) : string => { + const s = ['th', 'st', 'nd', 'rd'] + const v = n % 100 + const i = (v - 20) % 10 + const k = i < s.length ? i : v < s.length ? v : 0 + return `[${n}${(s[k])}]` + }, +} as DayutsLocale \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/locale/zh-cn/index.ts b/uni_modules/lime-dayuts/common/locale/zh-cn/index.ts new file mode 100644 index 0000000..fde6d85 --- /dev/null +++ b/uni_modules/lime-dayuts/common/locale/zh-cn/index.ts @@ -0,0 +1,75 @@ +// @ts-nocheck +import type { DayutsLocale, DayutsRelativeTime, DayutsFormats } from '../../../utssdk/interface' + +const locale : DayutsLocale = { + name: 'zh-cn', + weekdays: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'], + weekdaysShort: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'], + weekdaysMin: ['日', '一', '二', '三', '四', '五', '六'], + months: [ + '一月', '二月', '三月', '四月', '五月', '六月', + '七月', '八月', '九月', '十月', '十一月', '十二月' + ], + monthsShort: [ + '1月', '2月', '3月', '4月', '5月', '6月', + '7月', '8月', '9月', '10月', '11月', '12月' + ], + ordinal: (number:number, period:string):string => { + // switch (period) { + // case 'W': + // return `${number}周`; + // default: + // return `${number}日`; + // } + if(period == 'W'){ + return `${number}周`; + } + return `${number}日` + }, + weekStart: 1, + yearStart: 4, + formats: { + LT: 'HH:mm', + LTS: 'HH:mm:ss', + L: 'YYYY/MM/DD', + LL: 'YYYY年M月D日', + LLL: 'YYYY年M月D日Ah点mm分', + LLLL: 'YYYY年M月D日ddddAh点mm分', + l: 'YYYY/M/D', + ll: 'YYYY年M月D日', + lll: 'YYYY年M月D日 HH:mm', + llll: 'YYYY年M月D日dddd HH:mm' + } as DayutsFormats, + relativeTime: { + future: '%s内', + past: '%s前', + s: '几秒', + m: '1 分钟', + mm: '%d 分钟', + h: '1 小时', + hh: '%d 小时', + d: '1 天', + dd: '%d 天', + M: '1 个月', + MM: '%d 个月', + y: '1 年', + yy: '%d 年' + } as DayutsRelativeTime, + meridiem: (hour:number, minute:number, _ : boolean):string => { + const hm = (hour * 100) + minute; + if (hm < 600) { + return '凌晨'; + } else if (hm < 900) { + return '早上'; + } else if (hm < 1100) { + return '上午'; + } else if (hm < 1300) { + return '中午'; + } else if (hm < 1800) { + return '下午'; + } + return '晚上'; + } +}; + +export default locale; \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/test.ts b/uni_modules/lime-dayuts/common/test.ts new file mode 100644 index 0000000..7e51351 --- /dev/null +++ b/uni_modules/lime-dayuts/common/test.ts @@ -0,0 +1,110 @@ +// @ts-nocheck +// import dayjs from 'dayjs' +import { dayuts } from "./index" +// import { Dates } from "./dates" +import { dayutsIntl } from './use' +console.log('dayuts:::test::12') + +// console.log('dayjs', dayjs('2026').format('YYYY')) +console.log('dayuts', dayuts('2026').format('YYYY')) + +// // console.log('format1', dayuts().format()) +// console.log('string number', dayuts(`${Date.now()}`)) +// console.log('2018-04-04', dayuts('2018-04-04T16:00:00.000Z')) +// // console.log('dayjs 2018-04-04', dayjs('2018-04-04T16:00:00.000Z')) +// console.log('2018 三月 15', dayuts('2018 三月 15', 'YYYY MMMM DD', 'zh-cn')) +// console.log('2010, 1, 14, 15, 25, 50, 125', dayuts([2010, 1, 14, 15, 25, 50, 125])) +// console.log('1970-00-00', dayuts('1970-00-00', 'YYYY-MM-DD')) +// console.log('1318781876406', dayuts(1318781876406)) +// console.log('2018, 8, 18', dayuts(new Date(2018, 8, 18))) +// console.log('2010, 1, 14, 15, 25, 50, 125[]', dayuts([2010, 1, 14, 15, 25, 50, 125])) +// console.log('millisecond2', dayuts().millisecond()) +// console.log('millisecond2', dayuts().millisecond(1)) +// console.log('second2', dayuts().second()) +// console.log('second2', dayuts().second(1)) +// console.log('minute2', dayuts().minute()) +// console.log('minute2', dayuts().minute(1)) +// console.log('hour2', dayuts().hour()) +// console.log('hour2', dayuts().hour(12)) +// console.log('date2', dayuts().date()) +// console.log('date2', dayuts().date(1)) +// console.log('dayOfYear', dayuts().dayOfYear()) +// console.log('dayOfYear', dayuts().dayOfYear(1)) +// console.log('month', dayuts().month()) +// console.log('month', dayuts().month(1)) +// console.log('year', dayuts().year()) +// console.log('year', dayuts().year(2000)) +// console.log(dayuts().get('year')) +// console.log(dayuts().get('month')) // start 0 +// console.log(dayuts().get('date')) +// console.log(dayuts().get('hour')) +// console.log(dayuts().get('minute')) +// console.log(dayuts().get('second')) +// console.log(dayuts().get('millisecond')) +// console.log('add', dayuts().add(7, 'day')) +// // console.log('add1', new Dates().newDate().add(7, 'day').format('YYYY-MM-DD')) +// console.log('subtract', dayuts().subtract(7, 'year')) +// console.log('startOf', dayuts().startOf('year')) +// console.log('endOf', dayuts().endOf('month')) +// console.log('format', dayuts().format()) +// console.log('format', dayuts('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]')) +// console.log('format', dayuts('2019-01-25').format('DD/MM/YYYY')) +// console.log('fromNow:1', dayuts('1999-01-01').fromNow()) +// console.log('fromNow:1', dayuts('1999-01-01').fromNow(true)) +// console.log('fromNow:1', dayuts('2024-03-29').fromNow(true)) +// console.log('from1', dayuts('1999-01-01').from(dayuts())) +// console.log('from1', dayuts('1999-01-01').from(dayuts(), true)) +// console.log('toNow1', dayuts('1999-01-01').toNow(true)) +// console.log('toNow1', dayuts('1999-01-01').to(dayuts())) +// console.log('diff1', dayuts('2019-01-25').diff(dayuts('2018-06-05'))) +// console.log('diff1', dayuts('2019-01-25').diff(dayuts('2018-06-05'), 'month')) +// console.log('diff1', dayuts('2019-01-25').diff(dayuts('2018-06-05'), 'month', true)) +// console.log('valueOf', dayuts('2019-01-25').valueOf()) +// console.log('unix', dayuts('2019-01-25').unix()) +// console.log('daysInMonth', dayuts('2019-01-25').daysInMonth()) +// console.log('toDate', dayuts().toDate()) +// console.log('toArray', dayuts().toArray()) +// console.log('toJSON', dayuts().toJSON()) +// console.log('toObject', dayuts().toObject()) +// console.log('toString', dayuts().toString()) +// console.log('isBefore', dayuts().isBefore(dayuts('2011-01-01'))) +// console.log('isBefore', dayuts().isBefore('2011-01-01', 'month')) +// console.log('isSame', dayuts().isSame(dayuts('2011-01-01'))) +// console.log('isSame', dayuts().isSame('2011-01-01', 'year')) +// console.log('isAfter', dayuts().isAfter(dayuts('2011-01-01'))) +// console.log('isAfter', dayuts().isAfter('2011-01-01', 'month')) +// console.log('isSameOrBefore', dayuts().isSameOrBefore(dayuts('2011-01-01'))) +// console.log('isSameOrBefore', dayuts().isSameOrBefore('2011-01-01', 'month')) +// console.log('isSameOrBefore', dayuts().isSameOrAfter(dayuts('2011-01-01'))) +// console.log('isSameOrBefore', dayuts().isSameOrAfter('2011-01-01', 'month')) +// console.log('isBetween', dayuts('2010-10-20').isBetween('2010-10-19', dayuts('2010-10-25'))) +// console.log('isBetween', dayuts().isBetween('2010-10-19', '2010-10-25', 'month')) +// console.log('isBetween', dayuts('2016-10-30').isBetween('2016-01-01', '2016-10-30', 'day', '[)')) +// console.log('isLeapYear', dayuts().isLeapYear()) +// console.log('isToday', dayuts().isToday()) + +// const a = dayuts('1999-01-01') +// const b = dayuts() +// console.log('fromNow:1',a.diff(b, 'year', true)) +// console.log('a', a) +// console.log('b', b) +// console.log('fromNow:2',a.diff(b, 'year', true)) + +dayutsIntl.locale = 'zh-cn' +console.log('new::1', dayuts().$L) + +// setTimeout(()=>{ +// console.log('new::23') +// },100) + + +export const test = (n : number) : number => { + switch (n) { + case 1: + return 1 + default: + return 0 + } +} + +console.log('test::::', test(1)) \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/use.ts b/uni_modules/lime-dayuts/common/use.ts new file mode 100644 index 0000000..4e67815 --- /dev/null +++ b/uni_modules/lime-dayuts/common/use.ts @@ -0,0 +1,63 @@ +// @ts-nocheck +import {DayutsLocale} from '../utssdk/interface' +import en from './locale/en' +import zhCn from './locale/zh-cn' + +// #ifndef UNI-APP-X + +// #ifdef VUE2 +import {reactive} from '@vue/composition-api' +// #endif + +// #ifdef VUE3 +import {reactive} from 'vue' +// #endif + +// #endif + + +const localesMap = new Map() +//定义一个大写的State类型 +type LocaleState = { + lang: string; + locales: Map +} +export let localeState = reactive({ + lang: 'en', + locales: localesMap +} as LocaleState) +localeState.locales.set('en', en) +localeState.locales.set('zh-cn', zhCn) + +class DayutsIntl { + constructor(){} + use(locale:DayutsLocale):DayutsIntl{ + localeState.locales.set(locale.name, locale) + return this + } + set locale(locale: string){ + if(localeState.locales.has(locale)){ + localeState.lang = locale + } else { + let list:string[] = [] + localeState.locales.forEach(function(_:any,key:string){ + list.push(key) + }) + console.warn(`未知语言: "${locale}". 请使用以下已知语言之一:${list.join(', ')}`); + } + } + get locale(): string{ + return localeState.lang + } + set(name: string, locale:DayutsLocale){ + localeState.locales.set(name, locale) + } + has(name: string):boolean{ + return localeState.locales.has(name) + } +} +export const dayutsIntl = new DayutsIntl() + + +// const dyauts = use(xx).use(xx).use(xx).use(xx) +// dyauts.locale ='zh' \ No newline at end of file diff --git a/uni_modules/lime-dayuts/common/utils.ts b/uni_modules/lime-dayuts/common/utils.ts new file mode 100644 index 0000000..215b951 --- /dev/null +++ b/uni_modules/lime-dayuts/common/utils.ts @@ -0,0 +1,106 @@ +// @ts-nocheck +import { Dayuts } from './index' +import { M, Y, W, D, DATE, H, MIN, S, MS, Q } from './constant' +import {DayutsUnit} from '../utssdk/interface' +/** + * 用指定字符串填充目标字符串的开头,以达到指定的总长度。 + * + * @param {string} string - 需要填充的目标字符串。 + * @param {number} length - 填充后的总长度。 + * @param {string} pad - 用于填充的字符串。 + * @returns {string} 填充后的字符串。 + */ +function padStart(string : string, length : number, pad : string) : string { + const str = string//`${string}` + if (str.length >= length) return str + return str.padStart(length, pad) //`${Array((length + 1) - string.length).join(pad)}${string}` +} +export { + padStart +} +function padZoneStr(instance : Dayuts) : string { + const negMinutes = -instance.utcOffset() + const minutes = Math.abs(negMinutes) + const hourOffset = Math.floor(minutes / 60) + const minuteOffset = minutes % 60 + return `${negMinutes <= 0 ? '+' : '-'}${padStart(hourOffset.toString(), 2, '0')}:${padStart(minuteOffset.toString(), 2, '0')}` +} +export { + padZoneStr +} + +// export function isNull(s): boolean{ +// return s == null +// } + +export function isNumber(value : any | null) : boolean { + // #ifdef APP-ANDROID + return ['Byte', 'UByte', 'Short', 'UShort', 'Int', 'UInt', 'Long', 'ULong', 'Float', 'Double', 'number'].includes(typeof value) + // #endif + // #ifdef APP-IOS + return ['Int8', 'UInt8', 'Int16', 'UInt16', 'Int32', 'UInt32', 'Int64', 'UInt64', 'Int', 'UInt', 'Float', 'Float16', 'Float32', 'Float64', 'Double', 'number'].includes(typeof value) + // #endif + // #ifndef APP-ANDROID || APP-IOS + return typeof value === 'number' && !isNaN(value); + // #endif +} + + + +/** + * 将给定的时间单位转换为标准格式。 + * + * @param {string} u - 要转换的时间单位。 + * @returns {string} 返回转换后的时间单位。 + */ +export function prettyUnit(u : string) : DayutsUnit { + const special = new Map([ + ['M', M], + ['y', Y], + ['w', W], + ['d', D], + ['D', DATE], + ['h', H], + ['m', MIN], + ['s', S], + ['ms', MS], + ['Q', Q] + ]) + return (special.get(u) ?? `${u}`.toLowerCase().replace(/s$/, '')) as DayutsUnit +} + + +/** + * 计算两个日期之间的月份差值 + * @param {Dayjs} a - 第一个日期 + * @param {Dayjs} b - 第二个日期 + * @returns {number} 返回两个日期之间的月份差值 + */ +export function monthDiff(a : Dayuts, b : Dayuts) : number { + // 该函数来自 moment.js,以保持相同的结果 + if (a.date() < b.date()) return -monthDiff(b, a) + const wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()) + const anchor = a.clone().add(wholeMonthDiff, M).valueOf() + const c = b.valueOf() - anchor < 0 + const anchor2 = a.clone().add(wholeMonthDiff + (c ? -1 : 1), M).valueOf() + // return +(-(wholeMonthDiff + ((b.valueOf() - anchor) / (c ? (anchor - anchor2) : + // (anchor2 - anchor)))) || 0) + + const decimalMonthDiff = (b.valueOf() - anchor) / (c ? (anchor - anchor2) : (anchor2 - anchor)); + const result = wholeMonthDiff + decimalMonthDiff; + const negatedResult = -result; + const absResult = +negatedResult; + const finalResult = !isNaN(absResult) ? absResult : 0; + return finalResult; +} + + +/** + * 返回向下取整的绝对值 + * @param {number} n - 输入的数字 + * @returns {number} 返回向下取整的绝对值 + */ +export function absFloor(n : number):number { + // return (n < 0 ? Math.ceil(n) || 0 : Math.floor(n)) + return (n < 0 ? Math.max(Math.ceil(n), 0) : Math.floor(n)) +} \ No newline at end of file diff --git a/uni_modules/lime-dayuts/index.ts b/uni_modules/lime-dayuts/index.ts new file mode 100644 index 0000000..cfa16d5 --- /dev/null +++ b/uni_modules/lime-dayuts/index.ts @@ -0,0 +1,6 @@ +// @ts-nocheck +export * from './common' +export * from './common/use' +// #ifndef VUE2 +export * from './utssdk/interface' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-dayuts/package.json b/uni_modules/lime-dayuts/package.json new file mode 100644 index 0000000..ffd40a9 --- /dev/null +++ b/uni_modules/lime-dayuts/package.json @@ -0,0 +1,107 @@ +{ + "id": "lime-dayuts", + "displayName": "lime-dayuts dayjs 日期库", + "version": "2.0.0", + "description": "lime-dayuts 是dayjs的uts版,一个轻量的处理时间和日期的 UTS 库,几乎和dayjs保持一样的API", + "keywords": [ + "lime-dayuts", + "dayjs", + "日期", + "时间格式化" +], + "repository": "", + "engines": { + "HBuilderX": "^4.14", + "uni-app": "^4.72", + "uni-app-x": "^4.74" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "√", + "jd": "√", + "harmony": "√", + "qq": "√", + "lark": "√", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-dayuts/readme - 副本.md b/uni_modules/lime-dayuts/readme - 副本.md new file mode 100644 index 0000000..587ebb6 --- /dev/null +++ b/uni_modules/lime-dayuts/readme - 副本.md @@ -0,0 +1,445 @@ +# lime-dayuts 日期库 +- lime-dayuts 是dayjs的uts版,一个轻量的处理时间和日期的 UTS 库,几乎和dayjs保持一样的API + +## 文档 + 🚀 [dayuts【站点1】](https://limex.qcoon.cn/uts/dayuts.html) + 🌍 [dayuts【站点2】](https://limeui.netlify.app/uts/dayuts.html) + 🔥 [dayuts【站点3】](https://limeui.familyzone.top/uts/dayuts.html) + + + +## 安装 +插件市场导入插件即可 + + +## 使用 +```ts +import {dayuts} from '@/uni_modules/lime-dayuts'; +dayuts().format() // 2024-03-25T02:10:16+08:00 +``` + + +## 解析 +接受 `string`、`number`、`Date`、`Dayuts`等值传入,返回 + +### 当前时间 +空值 `dayuts()` 将返回一个包含当前日期和时间的 `Dayuts` 对象。 + +```ts +dayuts() +``` + +### 字符串 + +```ts +dayuts('2024-03-04T16:00:00.000Z') +dayuts('2024-03-13 19:18:17.040+02:00') +dayuts('2024-03-13 19:18') +dayuts('1748750498228') +``` + +### 字符串+格式 + +```ts +dayuts('1970-00-00', 'YYYY-MM-DD') +``` +#### 支持的解析占位符列表 + +| 输入 | 示例 | 描述 | +| ------ | ---------------- | --------------------------------- | +| `YY` | 01 | 两位数的年份 | +| `YYYY` | 2001 | 四位数的年份 | +| `M` | 1-12 | 月份,从1开始计数 | +| `MM` | 01-12 | 月份,两位数 | +| `MMM` | Jan-Dec | 缩写的月份名称 | +| `MMMM` | January-December | 完整的月份名称 | +| `D` | 1-31 | 一个月的某一天 | +| `DD` | 01-31 | 一个月的某一天,两位数 | +| `H` | 0-23 | 小时数 | +| `HH` | 00-23 | 小时数,两位数 | +| `h` | 1-12 | 12小时制的小时数 | +| `hh` | 01-12 | 12小时制的小时数,两位数 | +| `m` | 0-59 | 分钟数 | +| `mm` | 00-59 | 分钟数,两位数 | +| `s` | 0-59 | 秒数 | +| `ss` | 00-59 | 秒数,两位数 | +| `S` | 0-9 | 百毫秒数,一位数 | +| `SS` | 00-99 | 十毫秒数,两位数 | +| `SSS` | 000-999 | 毫秒数,三位数 | +| `Z` | -05:00 | 相对于UTC的偏移量 | +| `ZZ` | -0500 | 相对UTC的紧凑偏移量,两位数 | +| `A` | AM PM | 上午或下午,大写字母 | +| `a` | am pm | 上午或下午,小写字母 | +| `ddd` | 周一 | 周,需要设置`locale = 'zh-cn'` , 默认为英文 | +| `dddd` | 星期一 | 星期 ,需要设置`locale = 'zh-cn'`, 默认为英文 | + + +### Unix 时间戳 (毫秒) + +```ts +dayuts(1318781876406) +``` + +### Date 对象 + +```ts +dayuts(new Date(2018, 8, 18)) +``` + +### 数组 + +```ts +dayuts([2010, 1, 14, 15, 25, 50, 125]); +``` + +## 取值/赋值 +在设计上 Dayuts 的 getter 和 setter 使用了相同的 API,也就是说,不传参数调用方法即为 getter,调用并传入参数为 setter。 + + +### 毫秒 Millisecond +获取或设置毫秒。传入0到999的数字。 如果超出这个范围,它会进位到秒。 +```ts +dayuts().millisecond() // gets current millisecond +dayuts().millisecond(1) // returns new dayuts +``` + +### 秒 Second +获取或设置秒。传入0到59的数字。 如果超出这个范围,它会进位到分钟。 +```ts +dayuts().second() // gets current second +dayuts().second(1) // returns new dayuts +``` + +### 分 Minute +获取或设置分钟。传入0到59的数字。 如果超出这个范围,它会进位到小时。 +```ts +dayuts().minute() // gets current minute +dayuts().minute(1) // returns new dayuts +``` + +### 时 Hour +获取或设置小时。传入0到23的数字。 如果超出这个范围,它会进位到天数。 +```ts +dayuts().hour() // gets current hour +dayuts().hour(12) // returns new dayuts +``` + +### 一个月中的第几天 Date of Month +获取或设置一个月中的某一天。接受从1到31的数字。如果超出范围,它将溢出到月份 +```ts +dayuts().date() // gets current date +dayuts().date(12) // returns new dayuts +``` + +### 一周中的第几天 Day of Week +获取或设置一周中的某一天。接受从0(星期日)到6(星期六)的数字。如果超出范围,它将溢出到其他周 +```ts +dayuts().day() // gets current day +dayuts().day(0) // returns new dayuts +``` + + +### 一年的第几天 Day of Year +获取或设置年份里第几天。传入1到366的数字。如果超出这个范围,它会进位到下一年。 +```ts +dayuts().dayOfYear() +dayuts().dayOfYear(365) // returns new dayuts +``` + +### 月 Month +获取或设置月份。传入0到11的 number。 如果超出这个范围,它会进位到年份。 +```ts +dayuts().month() // gets current month +dayuts().month(0) // returns new dayuts +``` + +### 年 Year +获取或设置年份。 +```ts +dayuts().year() // gets current year +dayuts().year(2000) // returns new dayuts +``` + +### Get/Set +获取和设置相应信息。 +```ts +dayuts().get('year') +dayuts().get('month') // start 0 +dayuts().get('date') +dayuts().get('hour') +dayuts().get('minute') +dayuts().get('second') +dayuts().get('millisecond') + +dayuts().set('date', 1) +dayuts().set('month', 3) // 四月 +dayuts().set('second', 30) +``` + +## 操作 + +### 增加 Add +返回增加一定时间的复制的 dayuts 对象。 +```ts +dayuts().add(7, 'day') +``` + +### 减去 Subtract +返回增加一定时间的复制的 dayuts 对象。 +```ts +dayuts().subtract(7, 'year') +``` + +#### 所有可用单位的列表 + +| 单位 | 缩写 | 描述 | +| ------------- | --------- | ---------------------------------------- | +| `day` | `d` | 日 | +| `week` | `w` | 周 | +| `month` | `M` | 月 | +| `year` | `y` | 年 | +| `hour` | `h` | 小时 | +| `minute` | `m` | 分钟 | +| `second` | `s` | 秒 | +| `millisecond` | `ms` | 毫秒 | + + +### 时间的开始 Start of Time +设置到一个时间的开始。 +```ts +dayuts().startOf('year') +``` + +### 时间的结束 End of Time +设置到一个时间的末尾。 +```ts +dayuts().endOf('month') +``` + +#### 所有可用单位的列表 + +| 单位 | 缩写 | 描述 | +| ------------- | --------- | ----------------------------------------- | +| `year` | `y` | 当年1月1日 00:00 | +| `quarter` | `Q` | 当前季度的开始,月份的第一天,00:00 @>>QuarterOfYear| +| `month` | `M` | 当月的第一天,00:00 | +| `week` | `w` | 当周的第一天,00:00 (根据地区设置) | +| `date` | `D` | 今天 00:00 | +| `day` | `d` | 今天 00:00 | +| `hour` | `h` | 现在,但是分钟、秒和毫秒都为0 | +| `minute` | `m` | 现在,但是秒和毫秒都为0 | +| `second` | `s` | 现在,但是毫秒为0 | + +## 显示 + +### 格式化 Format +根据传入的占位符返回格式化后的日期。 +将字符放在方括号中,即可原样返回而不被格式化替换 (例如, [MM]) +```ts +dayuts().format() // 默认返回的是 ISO8601 格式字符串 '2024-03-28T01:33:29+08:00' + +// app 暂不支持 +dayuts('2019-01-25').format('[YYYYescape] YYYY-MM-DDTHH:mm:ssZ[Z]') +// 'YYYYescape 2019-01-25T00:00:00-02:00Z' + +dayuts('2019-01-25').format('DD/MM/YYYY') // '25/01/2019' +``` + +### 相对当前时间(前) Time from now +返回现在到当前实例的相对时间。 +```ts +dayuts('1999-01-01').fromNow() // 25 years ago +//如果传入 true,则可以获得不带后缀的值。 +dayuts('1999-01-01').fromNow(true) // 25 years +``` + +### 相对指定时间(前) Time from X +返回 X 到当前实例的相对时间。 +```ts +dayuts('1999-01-01').from(dayuts()) // 25 years ago +//如果传入 true,则可以获得不带后缀的值。 +dayuts('1999-01-01').from(dayuts(), true) // 25 years +``` + +### 相对当前时间(后) Time to now +返回当前实例到现在的相对时间。 +```ts +dayuts('1999-01-01').toNow() // in 25 years +//如果传入 true,则可以获得不带后缀的值。 +dayuts('1999-01-01').toNow(true) // 25 years +``` + +### 相对指定时间(后) Time to X +返回当前实例到 X 的相对时间。 +```ts +dayuts('1999-01-01').to(dayuts()) // in 25 years +//如果传入 true,则可以获得不带后缀的值。 +dayuts('1999-01-01').to(true) // 25 years +``` + +### 差异 Diff +返回指定单位下两个日期时间之间的差异。 +```ts +dayuts('2019-01-25') + .diff(dayuts('2018-06-05')) // 20214000000 默认单位是毫秒 + +// 要获取其他单位下的差异,则在第二个参数传入相应的单位。 +dayuts('2019-01-25') + .diff(dayuts('2018-06-05'), 'month') // 7 + +// 如果要得到一个浮点数,将 true 作为第三个参数传入。 +dayuts('2019-01-25') + .diff(dayuts('2018-06-05'), 'month', true) // 7.645161290322581 +``` + +### Unix 时间戳 (毫秒) +返回当前实例的 UNIX 时间戳,13位数字,毫秒 +```ts +dayuts('2019-01-25').valueOf() //1548345600000 +``` + +### Unix 时间戳 +返回当前实例的 UNIX 时间戳,10位数字,秒。 +```ts +dayuts('2019-01-25').unix() // 1548345600 +``` + +### 月份的天数 +获取当前月份包含的天数。 +```ts +dayuts('2019-01-25').daysInMonth() //31 +``` + +### 转Date +从 Dayuts 对象中获取原生的 Date 对象 +```ts +dayuts().toDate() +``` + +### 转Array +返回一个包含各个时间信息的 Array +```ts +dayuts().toArray() //[2024, 2, 29, 2, 57, 28, 775] +``` + +### 转JSON +序列化为 `ISO 8601` 格式的字符串 +```ts +dayuts('2019-01-25').toJSON() // '2019-01-25T02:00:00.000Z' +``` + +### 转Object +返回包含时间信息的 Object +```ts +dayuts('2019-01-25').toObject() // { years: 2019, months: 0, date: 25, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 } +``` + +### 转字符串 +返回包含时间信息的 string +```ts +dayuts('2019-01-25').toString() // Fri Mar 29 2024 03:20:40 GMT+0800 +``` + + +## 查询 + +### 是否在前 Is Before +这表示 Dayuts 对象是否在另一个提供的日期时间之前。 + +```ts +// 默认使用毫秒比较 +dayuts().isBefore(dayuts('2011-01-01')) // false + +// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。 +dayuts().isBefore('2011-01-01', 'month') // false +``` + +### 是否在后 Is After +这表示 Dayuts 对象是否在另一个提供的日期时间之后。 + +```ts +// 默认使用毫秒比较 +dayuts().isAfter(dayuts('2011-01-01')) // true + +// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。 +dayuts().isAfter('2011-01-01', 'month') // true +``` + + +### 是否相同 Is Same +这表示 Dayuts 对象是否和另一个提供的日期时间相同。 + +```ts +// 默认使用毫秒比较 +dayuts().isSame(dayuts('2011-01-01')) // false + +// 当使用第二个参数时,将会连同去比较更大的单位。 如传入 month 将会比较 month 和 year。 传入 day 将会比较 day、 month和 year。 +dayuts().isSame('2011-01-01', 'year') // false +``` + +### 是否相同或在前 Is Same or Before +这表示 Dayuts 对象是否在另一个提供的日期时间之前。 + +```ts +// 默认使用毫秒比较 +dayuts().isSameOrBefore(dayuts('2011-01-01')) // false + +// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。 +dayuts().isSameOrBefore('2011-01-01', 'month') // false +``` + +### 是否相同或在后 Is Same or After +这表示 Dayuts 对象是否和另一个提供的日期时间相同或在其之后。 + +```ts +// 默认使用毫秒比较 +dayuts().isSameOrAfter(dayuts('2011-01-01')) // true + +// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第二个参数传入。 +dayuts().isSameOrAfter('2011-01-01', 'month') // true +``` + +### 区间 Is Between +这表示 Dayuts 对象是否在其他两个的日期时间之间 + +```ts +// 默认使用毫秒比较 +dayuts('2010-10-20').isBetween('2010-10-19', dayuts('2010-10-25'))// true + +// 如果想使用除了毫秒以外的单位进行比较,则将单位作为第三个参数传入。 在这种情况下,会使用传入的单位以及比其范围大的单位进行比较。 +dayuts().isBetween('2010-10-19', '2010-10-25', 'month') // false + +// 第四个参数是设置包容性。 [ 表示包含。 ( 表示排除。 +// 要使用包容性参数,必须同时传入两个指示符。 +dayuts('2016-10-30').isBetween('2016-01-01', '2016-10-30', 'day', '[)') +``` + +### 是否闰年 Is Leap Year +查询 Dayuts 对象的年份是否闰年 + +```ts +dayuts().isLeapYear()// true +``` + +### 今日 Is Today +查询 Dayuts 对象的日期是不是今日 + +```ts +dayuts().isToday()// true +``` + +## 国际化 +目前内置了中英两种语言,欢迎提交 Pull Request 来增加新的语言 + +### 改变语言配置 (全局) +更改全局的语言配置并不会影响之前存在的实例 +```ts +import {dayutsIntl} from '@/uni_modules/lime-dayuts' +dayutsIntl.locale = 'zh-cn' // 全局使用简体中文 +dayutsIntl.locale = 'en' // 全局使用默认的英文 +``` + +### 改变语言配置 (当前实例) +``` +dayuts().locale('zh-cn').format() +``` \ No newline at end of file diff --git a/uni_modules/lime-dayuts/readme.md b/uni_modules/lime-dayuts/readme.md new file mode 100644 index 0000000..9d3d5c2 --- /dev/null +++ b/uni_modules/lime-dayuts/readme.md @@ -0,0 +1,462 @@ +--- +name: lime-dayuts 日期库 +description: 轻量的处理时间和日期的 UTS 库,几乎和 dayjs 保持一样的 API,支持日期解析、格式化、比较、操作和查询等。 +tags: + - dayuts + - 日期 + - 时间 + - dayjs +plugin: lime-dayuts +category: API 插件 +dependencies: [] +--- + +# lime-dayuts 日期库 + +一个轻量的处理时间和日期的 UTS 库,几乎和 dayjs 保持一样的 API。lime-dayuts 提供了丰富的日期操作功能,包括日期解析、格式化、比较、操作和查询等,可用于各种需要处理日期和时间的应用场景。 + +## 安装方法 + +1. 在 uni-app 插件市场中搜索并导入 `lime-dayuts` +2. 导入后可能需要重新编译项目 +3. 在页面或组件中按需引入使用 + +::: tip 注意🔔 +lime-dayuts 是 UTS 版本的 dayjs,支持 uni-app x(App 原生、Web、小程序)以及 uni-app(Vue2/Vue3)。在 uni-app x 中编译为 Kotlin/Swift/ArkTS,在 uni-app 中编译为 JavaScript。 +::: + +## 代码演示 + +### 基础使用 + +最简单的日期库用法,直接导入并使用。 + +```ts +import { dayuts } from '@/uni_modules/lime-dayuts' + +// 当前时间 +dayuts().format() // 2024-03-25T02:10:16+08:00 + +// 自定义格式 +dayuts().format('YYYY-MM-DD HH:mm:ss') // 2024-03-25 02:10:16 +``` + +### 解析日期 + +dayuts 接受多种类型的输入,包括字符串、数字、Date 对象、数组等。 + +```ts +// 当前时间 +dayuts() + +// 字符串 +dayuts('2024-03-04T16:00:00.000Z') +dayuts('2024-03-13 19:18:17.040+02:00') +dayuts('2024-03-13 19:18') +dayuts('1748750498228') + +// 字符串 + 格式 +dayuts('1970-00-00', 'YYYY-MM-DD') + +// Unix 时间戳(毫秒) +dayuts(1318781876406) + +// Date 对象 +dayuts(new Date(2018, 8, 18)) + +// 数组 [年, 月, 日, 时, 分, 秒, 毫秒] +dayuts([2010, 1, 14, 15, 25, 50, 125]) +``` + +### 取值与赋值 + +getter 和 setter 使用了相同的 API,不传参数为 getter,传参数为 setter。 + +```ts +// 获取毫秒 +dayuts().millisecond() // 0-999 + +// 设置毫秒(返回新的 dayuts 对象) +dayuts().millisecond(1) + +// 获取秒 +dayuts().second() // 0-59 +dayuts().second(1) + +// 获取分钟 +dayuts().minute() // 0-59 +dayuts().minute(1) + +// 获取小时 +dayuts().hour() // 0-23 +dayuts().hour(12) + +// 获取日期 +dayuts().date() // 1-31 +dayuts().date(12) + +// 获取月份(0-11) +dayuts().month() // 0-11 +dayuts().month(0) + +// 获取年份 +dayuts().year() +dayuts().year(2000) + +// 获取星期几(0-6,0 表示周日) +dayuts().day() + +// 通用 get/set +dayuts().get('year') +dayuts().set('month', 5) +``` + +### 日期操作 + +```ts +// 增加时间 +dayuts().add(7, 'day') +dayuts().add(1, 'month') +dayuts().add(2, 'year') + +// 减去时间 +dayuts().subtract(7, 'year') +dayuts().subtract(1, 'day') + +// 设置到时间开始 +dayuts().startOf('year') +dayuts().startOf('month') +dayuts().startOf('day') + +// 设置到时间末尾 +dayuts().endOf('year') +dayuts().endOf('month') +dayuts().endOf('day') +``` + +### 日期格式化 + +```ts +// 默认格式(ISO8601) +dayuts().format() // 2024-03-28T01:33:29+08:00 + +// 自定义格式 +dayuts('2019-01-25').format('DD/MM/YYYY') // 25/01/2019 +dayuts('2019-01-25').format('YYYY-MM-DD HH:mm:ss') // 2019-01-25 00:00:00 + +// 转义字符(用方括号包裹) +dayuts('2019-01-25').format('[YYYYescape] YYYY-MM-DD') // YYYYescape 2019-01-25 +``` + +### 日期比较 + +```ts +// 是否在前 +dayuts().isBefore(dayuts('2011-01-01')) // false +dayuts().isBefore('2011-01-01', 'month') + +// 是否在后 +dayuts().isAfter(dayuts('2011-01-01')) // true +dayuts().isAfter('2011-01-01', 'year') + +// 是否相同 +dayuts().isSame('2011-01-01', 'year') // false +dayuts().isSame(dayuts(), 'day') // true + +// 是否相同或在前 +dayuts().isSameOrBefore('2011-01-01', 'month') + +// 是否相同或在后 +dayuts().isSameOrAfter('2011-01-01', 'month') + +// 是否在区间内 +dayuts('2010-10-20').isBetween('2010-10-19', dayuts('2010-10-25')) // true +dayuts('2010-10-20').isBetween('2010-10-19', '2010-10-25', 'day', '()') // true +dayuts('2010-10-20').isBetween('2010-10-19', '2010-10-25', 'day', '[)') // true(包含开始) +``` + +### 相对时间 + +```ts +// 相对当前时间(前) +dayuts('1999-01-01').fromNow() // 26 年前 +dayuts('1999-01-01').fromNow(true) // 26 年(不带后缀) + +// 相对指定时间(前) +dayuts('1999-01-01').from(dayuts()) + +// 相对当前时间(后) +dayuts('1999-01-01').toNow() +dayuts('1999-01-01').to(dayuts()) + +// 计算时间差 +dayuts('2019-01-25').diff(dayuts('2018-06-05')) // 毫秒差 +dayuts('2019-01-25').diff(dayuts('2018-06-05'), 'month') // 月份差(整数) +dayuts('2019-01-25').diff(dayuts('2018-06-05'), 'month', true) // 月份差(浮点数) +``` + +### 国际化 + +```ts +import { dayuts, dayutsIntl } from '@/uni_modules/lime-dayuts' + +// 全局设置语言 +dayutsIntl.locale = 'zh-cn' + +// 实例级设置语言 +dayuts().locale('zh-cn').format('dddd') // 星期一 + +// 注册自定义语言 +dayutsIntl.use({ + name: 'ja', + weekdays: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'], + months: ['1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月'], + ordinal: (n: number, _: string): string => `${n}日`, + // ... 其他配置 +}) +dayutsIntl.locale = 'ja' +``` + +### 其他常用方法 + +```ts +// 是否为闰年 +dayuts().isLeapYear() + +// 是否为今天 +dayuts('2024-03-25').isToday() + +// 获取时间戳(毫秒) +dayuts().valueOf() + +// 获取 Unix 时间戳(秒) +dayuts().unix() + +// 获取月份天数 +dayuts('2024-02-01').daysInMonth() // 29(闰年) + +// 获取一年中的第几天 +dayuts('2024-03-01').dayOfYear() // 61 + +// 转换方法 +dayuts().toDate() // Date 对象 +dayuts().toArray() // [年, 月, 日, 时, 分, 秒, 毫秒] +dayuts().toJSON() // ISO 8601 字符串 +dayuts().toObject() // { years, months, date, hours, minutes, seconds, milliseconds } +dayuts().toString() // 字符串表示 + +// 克隆 +const d = dayuts('2024-03-25') +const d2 = d.clone() + +// 是否有效 +dayuts('invalid').isValid() // false + +// UTC 偏移量(分钟) +dayuts().utcOffset() +``` + +## API 文档 + +### 解析方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `dayuts()` | 创建当前时间的 Dayuts 对象 | - | Dayuts 对象 | +| `dayuts(string)` | 从字符串创建 Dayuts 对象 | 日期字符串 | Dayuts 对象 | +| `dayuts(string, format)` | 从指定格式的字符串创建 Dayuts 对象 | 日期字符串, 格式字符串 | Dayuts 对象 | +| `dayuts(number)` | 从时间戳创建 Dayuts 对象 | 时间戳(毫秒) | Dayuts 对象 | +| `dayuts(Date)` | 从 Date 对象创建 Dayuts 对象 | Date 对象 | Dayuts 对象 | +| `dayuts(array)` | 从数组创建 Dayuts 对象 | `[年, 月, 日, 时, 分, 秒, 毫秒]` | Dayuts 对象 | +| `dayuts(Dayuts)` | 克隆 Dayuts 对象 | Dayuts 对象 | Dayuts 对象 | +| `isDayuts(date)` | 判断是否为 Dayuts 实例 | 任意值 | 布尔值 | + +### 取值/赋值方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `millisecond()` | 获取毫秒 | - | 0-999 | +| `millisecond(value)` | 设置毫秒 | 0-999 | Dayuts 对象 | +| `second()` | 获取秒 | - | 0-59 | +| `second(value)` | 设置秒 | 0-59 | Dayuts 对象 | +| `minute()` | 获取分钟 | - | 0-59 | +| `minute(value)` | 设置分钟 | 0-59 | Dayuts 对象 | +| `hour()` | 获取小时 | - | 0-23 | +| `hour(value)` | 设置小时 | 0-23 | Dayuts 对象 | +| `date()` | 获取日期 | - | 1-31 | +| `date(value)` | 设置日期 | 1-31 | Dayuts 对象 | +| `day()` | 获取星期(0=周日) | - | 0-6 | +| `day(value)` | 设置星期 | 0-6 | Dayuts 对象 | +| `month()` | 获取月份(0=一月) | - | 0-11 | +| `month(value)` | 设置月份 | 0-11 | Dayuts 对象 | +| `year()` | 获取年份 | - | 年份数字 | +| `year(value)` | 设置年份 | 年份数字 | Dayuts 对象 | +| `get(unit)` | 获取指定单位的值 | 时间单位 | 数值 | +| `set(unit, value)` | 设置指定单位的值 | 时间单位, 值 | Dayuts 对象 | + +### 操作方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `add(value, unit)` | 增加时间 | 数值, 单位 | Dayuts 对象 | +| `subtract(value, unit)` | 减少时间 | 数值, 单位 | Dayuts 对象 | +| `startOf(unit)` | 设置为时间单位的开始 | 单位 | Dayuts 对象 | +| `endOf(unit)` | 设置为时间单位的结束 | 单位 | Dayuts 对象 | +| `dayOfYear()` | 获取一年中的第几天 | - | 数值 | +| `dayOfYear(value)` | 设置为一年中的第几天 | 数值 | Dayuts 对象 | +| `clone()` | 克隆当前对象 | - | Dayuts 对象 | +| `locale(name)` | 设置实例语言 | 语言名称 | Dayuts 对象 | + +### 显示方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `format(template)` | 格式化日期 | 格式模板 | 字符串 | +| `fromNow(withoutSuffix)` | 相对当前时间(前) | 是否不带后缀 | 字符串 | +| `from(compared, withoutSuffix)` | 相对指定时间(前) | 比较时间, 是否不带后缀 | 字符串 | +| `toNow(withoutSuffix)` | 相对当前时间(后) | 是否不带后缀 | 字符串 | +| `to(compared, withoutSuffix)` | 相对指定时间(后) | 比较时间, 是否不带后缀 | 字符串 | +| `diff(compared, unit, float)` | 计算时间差 | 比较时间, 单位, 是否返回浮点数 | 数值 | +| `valueOf()` | 获取时间戳(毫秒) | - | 数值 | +| `unix()` | 获取时间戳(秒) | - | 数值 | +| `daysInMonth()` | 获取月份的天数 | - | 数值 | +| `utcOffset()` | 获取 UTC 偏移量(分钟) | - | 数值 | +| `toDate()` | 转换为 Date 对象 | - | Date 对象 | +| `toArray()` | 转换为数组 | - | `number[]` | +| `toJSON()` | 转换为 JSON 字符串 | - | 字符串或 null | +| `toISOString()` | 转换为 ISO 8601 字符串 | - | 字符串 | +| `toObject()` | 转换为对象 | - | DayutsObject | +| `toString()` | 转换为字符串 | - | 字符串 | + +### 查询方法 + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `isBefore(compared, unit)` | 是否在指定时间之前 | 比较时间, 单位 | 布尔值 | +| `isAfter(compared, unit)` | 是否在指定时间之后 | 比较时间, 单位 | 布尔值 | +| `isSame(compared, unit)` | 是否与指定时间相同 | 比较时间, 单位 | 布尔值 | +| `isSameOrBefore(compared, unit)` | 是否相同或之前 | 比较时间, 单位 | 布尔值 | +| `isSameOrAfter(compared, unit)` | 是否相同或之后 | 比较时间, 单位 | 布尔值 | +| `isBetween(from, to, unit, inclusivity)` | 是否在区间内 | 开始, 结束, 单位, 包含性 | 布尔值 | +| `isLeapYear()` | 是否为闰年 | - | 布尔值 | +| `isToday()` | 是否为今天 | - | 布尔值 | +| `isValid()` | 日期是否有效 | - | 布尔值 | + +### 国际化 API + +| 方法 | 说明 | 参数 | 返回值 | +| --- | --- | --- | --- | +| `dayutsIntl.locale = 'zh-cn'` | 全局设置语言 | 语言名称 | - | +| `dayutsIntl.locale` | 获取当前语言 | - | 语言名称 | +| `dayutsIntl.use(locale)` | 注册语言 | DayutsLocale 对象 | DayutsIntl | +| `dayutsIntl.set(name, locale)` | 设置语言配置 | 名称, DayutsLocale | - | +| `dayutsIntl.has(name)` | 是否已注册语言 | 名称 | 布尔值 | +| `instance.locale(name)` | 设置实例语言 | 语言名称 | Dayuts 对象 | + +### 格式化占位符 + +| 占位符 | 输出 | 描述 | +| --- | --- | --- | +| `YY` | 01 | 两位数的年份 | +| `YYYY` | 2001 | 四位数的年份 | +| `M` | 1-12 | 月份,从 1 开始计数 | +| `MM` | 01-12 | 月份,两位数 | +| `MMM` | Jan-Dec | 缩写的月份名称 | +| `MMMM` | January-December | 完整的月份名称 | +| `D` | 1-31 | 一个月的某一天 | +| `DD` | 01-31 | 一个月的某一天,两位数 | +| `d` | 0-6 | 一周的某一天(0=周日) | +| `dd` | Su-Sa | 最小缩写的周名 | +| `ddd` | Sun-Sat | 缩写的周名 | +| `dddd` | Sunday-Saturday | 完整的周名 | +| `H` | 0-23 | 小时数(24 小时制) | +| `HH` | 00-23 | 小时数,两位数 | +| `h` | 1-12 | 小时数(12 小时制) | +| `hh` | 01-12 | 小时数,两位数 | +| `m` | 0-59 | 分钟数 | +| `mm` | 00-59 | 分钟数,两位数 | +| `s` | 0-59 | 秒数 | +| `ss` | 00-59 | 秒数,两位数 | +| `S` | 0-9 | 百毫秒数,一位数 | +| `SS` | 00-99 | 十毫秒数,两位数 | +| `SSS` | 000-999 | 毫秒数,三位数 | +| `Z` | -05:00 | 相对于 UTC 的偏移量 | +| `ZZ` | -0500 | 相对 UTC 的紧凑偏移量 | +| `A` | AM/PM | 上午或下午,大写 | +| `a` | am/pm | 上午或下午,小写 | +| `[...]` | 原样输出 | 转义字符,方括号内的内容原样输出 | + +### 时间单位 + +| 单位 | 缩写 | 描述 | +| --- | --- | --- | +| `day` | `d` | 日 | +| `week` | `w` | 周 | +| `month` | `M` | 月 | +| `year` | `y` | 年 | +| `hour` | `h` | 小时 | +| `minute` | `m` | 分钟 | +| `second` | `s` | 秒 | +| `millisecond` | `ms` | 毫秒 | +| `date` | `D` | 日期(与 day 不同,date 表示一个月的某一天) | +| `quarter` | `Q` | 季度(常量已定义,部分方法未完整实现) | + +## Vue2 使用说明 + +lime-dayuts 在 Vue2 项目中使用了 `composition-api`(用于 locale 响应式状态),如需在 Vue2 项目中使用,请按照[官方教程](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置。 + +关键配置代码(在 main.js 中添加): + +```js +// vue2 +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +::: tip 注意🔔 +仅在 Vue2 项目中需要此配置,Vue3 和 uni-app x 项目无需配置。 +::: + +## 文档链接 + +📚 组件详细文档请访问以下站点: +- [日期库文档 - 站点1](https://limex.qcoon.cn/uts/dayuts.html) +- [日期库文档 - 站点2](https://limeui.netlify.app/uts/dayuts.html) +- [日期库文档 - 站点3](https://limeui.familyzone.top/uts/dayuts.html) + +## 注意事项 + +### 与 dayjs 的差异 + +lime-dayuts 虽然尽量保持与 dayjs 一致的 API,但受 UTS 强类型语言限制,存在以下差异: + +1. **不支持 `undefined`**:空值统一使用 `null` +2. **不支持 truthy/falsy 判断**:必须显式比较,如 `if (value != null)` +3. **插件机制**:lime-dayuts 暂未实现 `dayuts.extend(plugin)` 插件机制,所有功能内置 +4. **UTC 模式**:暂未实现 `dayuts.utc()`,`utcOffset()` 在 App 端(Android/iOS)始终返回 0 +5. **时区支持**:暂未实现 `dayuts.tz()` 时区转换 +6. **Duration**:暂未实现 `dayuts.duration()` 时间段对象 + +### 平台差异 + +1. **`toISOString()`**:在 App 端(Android/iOS)由于平台限制,返回 `toString()` 的结果而非标准 ISO 8601 格式 +2. **`utcOffset()`**:在 App 端(Android/iOS)始终返回 0,Web 端正常返回时区偏移 +3. **格式化实现**:Android 端使用链式 `replace` 实现,其他平台使用正则匹配,两者行为一致 +4. **纯数字字符串**:支持 `'1748750498228'` 形式的字符串时间戳解析 + +### 内置语言 + +lime-dayuts 内置以下语言: +- `en` — 英语 +- `zh-cn` — 简体中文 + +可通过 `dayutsIntl.use()` 方法注册其他语言。 + +## 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: + +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | diff --git a/uni_modules/lime-dayuts/utssdk/app-js/config.json b/uni_modules/lime-dayuts/utssdk/app-js/config.json new file mode 100644 index 0000000..721b81e --- /dev/null +++ b/uni_modules/lime-dayuts/utssdk/app-js/config.json @@ -0,0 +1,3 @@ +{ + "deploymentTarget": "9" +} \ No newline at end of file diff --git a/uni_modules/lime-dayuts/utssdk/app-js/index.uts b/uni_modules/lime-dayuts/utssdk/app-js/index.uts new file mode 100644 index 0000000..e538c34 --- /dev/null +++ b/uni_modules/lime-dayuts/utssdk/app-js/index.uts @@ -0,0 +1,3 @@ +export * from '../../common' +export * from '../../common/use' +export * from '../interface' \ No newline at end of file diff --git a/uni_modules/lime-dayuts/utssdk/interface.uts b/uni_modules/lime-dayuts/utssdk/interface.uts new file mode 100644 index 0000000..6bd8d4b --- /dev/null +++ b/uni_modules/lime-dayuts/utssdk/interface.uts @@ -0,0 +1,405 @@ +// @ts-nocheck +export type DayutsConfig = { + date: any|null + format : string|null + locale : string|null +} + +export type DayutsUnit = 'year' | 'month' | 'day' | 'week' | 'date' | 'hour' | 'minute' | 'second' | 'millisecond' | 'quarter' + +export type DayutsFormats = { + /** + * 小时和分钟的格式化字符串。 + */ + LT : string; + + /** + * 小时、分钟和秒的格式化字符串。 + */ + LTS : string; + + /** + * 年份、月份和日期的格式化字符串。 + */ + L : string; + + /** + * 年份、月份、日期和星期的格式化字符串。 + */ + LL : string; + + /** + * 年份、月份、日期、星期和小时的格式化字符串。 + */ + LLL : string; + + /** + * 年份、月份、日期、星期、小时和分钟的格式化字符串。 + */ + LLLL : string; + + /** + * 缩小的年份、月份和日期的格式化字符串。 + */ + l : string; + + /** + * 缩小的年份、月份、日期和星期的格式化字符串。 + */ + ll : string; + + /** + * 缩小的年份、月份、日期、星期和小时的格式化字符串。 + */ + lll : string; + + /** + * 缩小的年份、月份、日期、星期、小时和分钟的格式化字符串。 + */ + llll : string; +} +export type DayutsRelativeTime = { + /** + * 时间单位之后的格式化字符串。 + */ + future : string; + + /** + * 时间单位之前的格式化字符串。 + */ + past : string; + + /** + * 秒的格式化字符串。 + */ + s : string; + + /** + * 分钟的格式化字符串。 + */ + m : string; + + /** + * 分钟(带前缀)的格式化字符串。 + */ + mm : string; + + /** + * 小时的格式化字符串。 + */ + h : string; + + /** + * 小时(带前缀)的格式化字符串。 + */ + hh : string; + + /** + * 天的格式化字符串。 + */ + d : string; + + /** + * 天(带前缀)的格式化字符串。 + */ + dd : string; + + /** + * 月的格式化字符串。 + */ + M : string; + + /** + * 月(带前缀)的格式化字符串。 + */ + MM : string; + + /** + * 年的格式化字符串。 + */ + y : string; + + /** + * 年(带前缀)的格式化字符串。 + */ + yy : string; +} + +/** + * 本地化对象接口。 + */ +export type DayutsLocale = { + /** + * 区域设置名称。 + */ + name : string; + + /** + * 一周中每天的完整名称。 + */ + weekdays : string[]; + + /** + * 一周中每天的缩写名称。 + */ + weekdaysShort ?: string[]; + + /** + * 一周中每天的最小缩写名称。 + */ + weekdaysMin ?: string[]; + + /** + * 一年中的每个月份的名称。 + */ + months : string[]; + + /** + * 一年中的每个月份的缩写名称。 + */ + monthsShort ?: string[]; + + /** + * 返回序数词的函数。 + * + * @param number - 要格式化的数字。 + * @param period - 周期类型(如 "W" 表示周)。 + * @returns 返回格式化后的序数词字符串。 + */ + // ordinal : (number : number) => string; + ordinal : (number : number, period : string) => string; + + /** + * 一周的开始日期(星期几)。 + */ + weekStart ?: number; + + /** + * 年的开始月份。 + */ + yearStart ?: number; + + /** + * 日期和时间格式化选项。 + */ + formats ?: DayutsFormats; + + /** + * 相对时间格式化选项。 + */ + relativeTime ?: DayutsRelativeTime; + + /** + * 根据小时和分钟返回上午或下午的函数。 + * + * @param hour - 小时数(0-23)。 + * @param minute - 分钟数(0-59)。 + * @returns 返回上午或下午的字符串。 + */ + meridiem ?: (hour : number, minute : number, isLowercase : boolean) => string; +} + + +export type DayutsObject = { + years : number; + months : number; + date : number; + hours : number; + minutes : number; + seconds : number; + milliseconds : number; +} + + +// 主 Dayuts 类类型定义 +// export interface Dayuts { +// // 公共属性 +// $L: string; + +// // 私有属性 +// $d: Date; +// $y: number; +// $M: number; +// $D: number; +// $W: number; +// $H: number; +// $m: number; +// $s: number; +// $ms: number; +// $u: boolean; + +// // 构造函数 +// // constructor(cfg: DayutsConfig); + +// // 解析配置并初始化日期 +// // private parse(cfg: DayutsConfig): void; + +// // 初始化日期的各个部分 +// // private init(): void; + +// // 检查日期是否有效 +// isValid(): boolean; + +// // 判断当前日期是否与给定日期在指定时间单位内相同 +// // isSame(input: string, units?: DayutsUnit): boolean; +// // isSame(input: number, units?: DayutsUnit): boolean; +// // isSame(input: Date, units?: DayutsUnit): boolean; +// // isSame(input: Dayuts, units?: DayutsUnit): boolean; +// // isSame(input: UTSJSONObject, units?: DayutsUnit): boolean; +// // isSame(input : string) : boolean +// // isSame(input : number) : boolean +// // isSame(input : Date) : boolean +// // isSame(input : Dayuts) : boolean +// // isSame(input : UTSJSONObject) : boolean + +// // isSame(input : string, units : DayutsUnit) : boolean +// // isSame(input : number, units : DayutsUnit) : boolean +// // isSame(input : Date, units : DayutsUnit) : boolean +// // isSame(input : Dayuts, units : DayutsUnit) : boolean +// // isSame(input : UTSJSONObject, units : DayutsUnit) : boolean +// // isSame(input : any, units : DayutsUnit) : boolean + +// // 判断给定日期是否在当前日期指定时间单位之后 +// // isAfter(input: string, units?: DayutsUnit): boolean; +// // isAfter(input: number, units?: DayutsUnit): boolean; +// // isAfter(input: Date, units?: DayutsUnit): boolean; +// // isAfter(input: Dayuts, units?: DayutsUnit): boolean; +// // isAfter(input: UTSJSONObject, units?: DayutsUnit): boolean; +// // isAfter(input : string) : boolean +// // isAfter(input : number) : boolean +// // isAfter(input : Date) : boolean +// // isAfter(input : Dayuts) : boolean +// // isAfter(input : UTSJSONObject) : boolean + +// // isAfter(input : string, units : DayutsUnit) : boolean +// // isAfter(input : number, units : DayutsUnit) : boolean +// // isAfter(input : Date, units : DayutsUnit) : boolean +// // isAfter(input : Dayuts, units : DayutsUnit) : boolean +// // isAfter(input : UTSJSONObject, units : DayutsUnit) : boolean +// // isAfter(input : any, units : DayutsUnit) : boolean + +// // 判断给定日期是否在当前日期指定时间单位之前 +// // isBefore(input: string, units?: DayutsUnit): boolean; +// // isBefore(input: number, units?: DayutsUnit): boolean; +// // isBefore(input: Date, units?: DayutsUnit): boolean; +// // isBefore(input: Dayuts, units?: DayutsUnit): boolean; +// // isBefore(input: UTSJSONObject, units?: DayutsUnit): boolean; + +// // 判断当前日期是否与给定日期在指定时间单位内相同或之前 +// // isSameOrBefore(input: string, units?: DayutsUnit): boolean; +// // isSameOrBefore(input: number, units?: DayutsUnit): boolean; +// // isSameOrBefore(input: Date, units?: DayutsUnit): boolean; +// // isSameOrBefore(input: Dayuts, units?: DayutsUnit): boolean; +// // isSameOrBefore(input: UTSJSONObject, units?: DayutsUnit): boolean; + +// // 判断当前日期是否与给定日期在指定时间单位内相同或之后 +// // isSameOrAfter(input: string, units?: DayutsUnit): boolean; +// // isSameOrAfter(input: number, units?: DayutsUnit): boolean; +// // isSameOrAfter(input: Date, units?: DayutsUnit): boolean; +// // isSameOrAfter(input: Dayuts, units?: DayutsUnit): boolean; +// // isSameOrAfter(input: UTSJSONObject, units?: DayutsUnit): boolean; + +// // 判断当前日期是否在两个给定日期之间 +// // isBetween(input: any, input2: any): boolean; +// // isBetween(input: any, input2: any, units?: DayutsUnit, interval?: string): boolean; + +// // 判断当前年份是否为闰年 +// isLeapYear(): boolean; + +// // 判断当前日期是否为今天 +// isToday(): boolean; + +// // 获取 Unix 时间戳(秒) +// unix(): number; + +// // 设置为指定时间单位的开始或结束 +// // startOf(units: DayutsUnit): Dayuts; +// // startOf(units: DayutsUnit, startOf?: boolean): Dayuts; +// endOf(units: DayutsUnit): Dayuts; + +// // 设置指定时间单位的值 +// set(units: DayutsUnit, int: number): Dayuts; + +// // 获取指定时间单位的值 +// get(units: DayutsUnit): number; + +// // 年、月、日、时、分、秒、毫秒的 getter 和 setter 方法 +// year(): number; +// year(input?: number): Dayuts; +// month(): number +// month(input?: number): Dayuts; +// // day(): number; +// day(input?: number): Dayuts; +// date(): number; +// date(input?: number): Dayuts; +// // hour(): number; +// hour(input?: number): Dayuts; +// // minute(): number; +// minute(input?: number): Dayuts; +// // second(): number; +// second(input?: number): Dayuts; +// // millisecond(): number; +// millisecond(input?: number): Dayuts; + +// // 添加时间 +// add(number: number, units: DayutsUnit): Dayuts; + +// // 减去时间 +// subtract(number: number, units: DayutsUnit): Dayuts; + +// // 格式化日期 +// format(formatStr?: string): string; + +// // 获取 UTC 偏移量(分钟) +// utcOffset(): number; + +// // 计算两个日期之间的差值 +// diff(input: string, units?: DayutsUnit, float?: boolean): number; +// diff(input: number, units?: DayutsUnit, float?: boolean): number; +// diff(input: Date, units?: DayutsUnit, float?: boolean): number; +// diff(input: Dayuts, units?: DayutsUnit, float?: boolean): number; +// diff(input: UTSJSONObject, units?: DayutsUnit, float?: boolean): number; + +// // 转换为原生 Date 对象 +// toDate(): Date; + +// // 转换为 ISO 8601 字符串 +// toJSON(): string | null; +// toISOString(): string; + +// // 转换为对象 +// toObject(): DayutsObject; + +// // 转换为数组 +// toArray(): number[]; + +// // 获取时间戳(毫秒) +// valueOf(): number; + +// // 获取月份的天数 +// daysInMonth(): number; + +// // 获取本地化对象 +// // private $locale(): DayutsLocale; + +// // 设置或获取本地化配置 +// locale(preset: string, object?: DayutsLocale): Dayuts; +// locale(preset: DayutsLocale, object?: DayutsLocale): Dayuts; + +// // 克隆当前实例 +// clone(): Dayuts; + +// // 转换为字符串 +// // toString(): string; + +// // 获取或设置一年中的第几天 +// dayOfYear(): number; +// dayOfYear(input?: number): Dayuts; + +// // 相对时间方法 +// fromToBase(input: any, withoutSuffix: boolean, instance: Dayuts, isFrom: boolean): string; +// to(input: any, withoutSuffix?: boolean): string; +// from(input: any, withoutSuffix?: boolean): string; +// toNow(withoutSuffix?: boolean): string; +// fromNow(withoutSuffix?: boolean): string; +// } \ No newline at end of file diff --git a/uni_modules/lime-dayuts/utssdk/unierror.uts b/uni_modules/lime-dayuts/utssdk/unierror.uts new file mode 100644 index 0000000..8428bbd --- /dev/null +++ b/uni_modules/lime-dayuts/utssdk/unierror.uts @@ -0,0 +1,39 @@ +/* 此规范为 uni 规范,可以按照自己的需要选择是否实现 */ +import { MyApiErrorCode, MyApiFail } from "./interface.uts" +/** + * 错误主题 + * 注意:错误主题一般为插件名称,每个组件不同,需要使用时请更改。 + * [可选实现] + */ +export const UniErrorSubject = 'uts-api'; + + +/** + * 错误信息 + * @UniError + * [可选实现] + */ +export const UniErrors : Map = new Map([ + /** + * 错误码及对应的错误信息 + */ + [9010001, 'custom error mseeage1'], + [9010002, 'custom error mseeage2'], +]); + + +/** + * 错误对象实现 + */ +export class MyApiFailImpl extends UniError implements MyApiFail { + + /** + * 错误对象构造函数 + */ + constructor(errCode : MyApiErrorCode) { + super(); + this.errSubject = UniErrorSubject; + this.errCode = errCode; + this.errMsg = UniErrors[errCode] ?? ""; + } +} \ No newline at end of file diff --git a/uni_modules/lime-loading/changelog.md b/uni_modules/lime-loading/changelog.md new file mode 100644 index 0000000..a7f1991 --- /dev/null +++ b/uni_modules/lime-loading/changelog.md @@ -0,0 +1,44 @@ +## 0.2.2(2025-12-09) +- chore: 删除多余文件 +## 0.2.1(2025-12-09) +- fix: 修复类型问题 +## 0.2.0(2025-10-21) +- fix: 修复uniappx ios 在弹窗下会导致弹窗无内容。 +## 0.1.9(2025-08-31) +- chore: 更新文档 +## 0.1.8(2025-05-30) +- feat: 重构,针对uniapp x app增加`mode`属性,用于是使用计时器还是元素的animate实现 +## 0.1.7(2025-05-16) +- fix: 修复 uniappx ios 初始化尺寸为0导致不生效的问题 +## 0.1.6(2025-04-21) +- fix: uniappx 鸿蒙next 尺寸从0变化时无法渲染 +## 0.1.5(2025-04-21) +- feat: 兼容uniappx 鸿蒙next +## 0.1.4(2025-04-10) +- feat: 增加暂停 +## 0.1.3(2025-03-12) +- feat: uniappx app使用`requestAnimationFrame` +## 0.1.2(2025-02-13) +- fix: 修复因uniapp x ios监听元素不生效导致不生效问题 +## 0.1.1(2025-02-09) +- chore: 去掉多余console +## 0.1.0(2025-02-09) +- feat: 重构useLoading +## 0.0.9(2025-01-14) +- feat: useLoading 增加color ref +## 0.0.8(2024-12-24) +- feat: 改用监听尺寸方式 +## 0.0.7(2024-12-18) +- fix: 修复vue2 微信小程序不显示加载图标的问题 +## 0.0.6(2024-12-18) +- chore: 更新文档 +## 0.0.5(2024-09-30) +- fix: vue2 app 使用渐变 +## 0.0.4(2024-09-29) +- chore: 非uvue app size使用css变量 +## 0.0.3(2024-09-25) +- fix: useLoading +## 0.0.2(2024-04-05) +- feat: 支持 uniapp x ios(app-js) +## 0.0.1(2023-10-13) +- 首次上传 diff --git a/uni_modules/lime-loading/components/l-loading/index-u.scss b/uni_modules/lime-loading/components/l-loading/index-u.scss new file mode 100644 index 0000000..4437509 --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/index-u.scss @@ -0,0 +1,252 @@ +@import '@/uni_modules/lime-style/index.scss'; + +$use-css-var: true; + +$loading-color: create-var(loading-color, $primary-color); +$loading-size: create-var(loading-size, 20px); +$loading-text-color: create-var(loading-text-color, $text-color-3); +$loading-font-size: create-var(loading-font-size, $font-size); + +/* #ifndef UNI-APP-X && APP || APP-NVUE */ +/* #ifndef MP-ALIPAY */ +$loading-duration: var(--l-loading-duration, 2s); + +@property --l-loading-start { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-loading-end { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-left { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-loadding-ball-size { + syntax: ' | '; + // initial-value: 1%; + inherits: false; +} + +/* #endif */ +/* #ifdef MP-ALIPAY */ +$loading-duration: var(--l-loading-duration, 1s); +/* #endif */ + + +/* #endif */ + + + +.l-loading { + display: flex; + position: relative; + flex-direction: row; + align-items: center; + // align-self: flex-start; + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + color: $loading-color; + &--ball{ + display: inline-flex; + align-items: center; + + .l-loading { + &__ball { + position: relative; + perspective: calc(var(--l-loadding-ball-size) * 4); + transform-style: preserve-3d; + // border: 1px solid; + + &:before{ + background-color: $primary-color; + left: 0%; + // mix-blend-mode: darken; + animation-name: l-ball-before; + } + &:after{ + right: 0; + background-color: red; + // mix-blend-mode: darken; + animation-name: l-ball-after; + } + &:before,&:after{ + top: 0; + content: ''; + position: absolute; + // width: 100%; + height: 100%; + aspect-ratio: 1/1; + border-radius: 50%; + animation-iteration-count: infinite; + animation-delay: -100ms; + animation-duration: 900ms; + mix-blend-mode: darken; + animation-play-state: var(--l-play-state, running); + } + } + } + } + &--circular { + .l-loading { + &__circular { + display: inline-block; + position: relative; + animation: l-rotate $loading-duration linear infinite; + animation-play-state: var(--l-play-state, running); + vertical-align: middle; + &:before { + content: ''; + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + /* #ifndef MP-ALIPAY */ + background: conic-gradient( + transparent 0%, + transparent var(--l-loading-start, 0%), var(--l-loading-color-1, currentColor) var(--l-loading-start, 0%), + var(--l-loading-color-2, currentColor) var(--l-loading-end, 0%), transparent var(--l-loading-end, 0%), + transparent 100%); + /* #endif */ + /* #ifdef MP-ALIPAY */ + background: conic-gradient( + var(--l-loading-color-1, transparent) 0%, + var(--l-loading-color-2, currentColor) 100%); + /* #endif */ + mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); + -webkit-mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); + animation: l-circular 3s ease-in-out infinite; + animation-play-state: var(--l-play-state, running); + transform: rotate(90deg); + } + } + } + } + &--spinner { + .l-loading { + &__spinner { + position: relative; + box-sizing: border-box; + // width: 100%; + // height: 100%; + // max-width: 100%; + // max-height: 100%; + animation-timing-function: steps(12); + animation: l-rotate 1.5s linear infinite; + animation-play-state: var(--l-play-state, running) + } + &__dot { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + transform: rotate(calc(var(--l-loading-dot, 1) * 30deg)); + opacity: calc(var(--l-loading-dot, 1) / 12); + &::before { + display: block; + width: 5rpx; + height: 25%; + margin: 0 auto; + background-color: currentColor; + border-radius: 40%; + content: ' '; + } + } + } + } + /* #endif */ + /* #ifdef UNI-APP-X && APP || APP-NVUE */ + &__view{ + // background-color: aqua; + // background-color: #1677ff; + // transition-duration: 1.5s; + // transition-property: transform; + // transition-timing-function: linear; + } + /* #endif */ + &__text { + margin-left: $spacer-xs; + color: $loading-text-color; + font-size: $loading-font-size; + } + + + &.is-vertical { + flex-direction: column; + .l-loading__text { + margin: $spacer-tn 0 0; + } + } + &__ball,&__circular,&__spinner { + width: $loading-size; + height: $loading-size; + } +} + + +/* #ifndef UNI-APP-X && APP || APP-NVUE */ +@keyframes l-circular { + 0% { + --l-loading-start: 0%; + --l-loading-end: 0%; + } + 50% { + --l-loading-start: 0%; + --l-loading-end: 100%; + } + 100% { + --l-loading-start: 100%; + --l-loading-end: 100%; + } +} +@keyframes l-rotate { + to { + transform: rotate(1turn) + } +} + +@keyframes l-ball-before { + 0%{ + animation-timing-function: ease-in; + } + 25% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); + transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); + } + 50% { + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%))); + animation-timing-function:ease-in; + transform: translate3d(var(--l-left), 0, 0); + } + 75% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); + transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); + } +} +@keyframes l-ball-after { + 0%{ + animation-timing-function: ease-in; + } + 25% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); + transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); + } + 50% { + animation-timing-function:ease-in; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) * -1); + transform: translate3d(var(--l-left), 0, 0); + } + 75% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); + transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); + } +} +/* #endif */ \ No newline at end of file diff --git a/uni_modules/lime-loading/components/l-loading/index.scss b/uni_modules/lime-loading/components/l-loading/index.scss new file mode 100644 index 0000000..17644ec --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/index.scss @@ -0,0 +1,246 @@ +@import '@/uni_modules/lime-style/index.scss'; + +$loading-color: create-var(loading-color, $primary-color); +$loading-size: create-var(loading-size, 20px); +$loading-text-color: create-var(loading-text-color, $text-color-3); +$loading-font-size: create-var(loading-font-size, $font-size); + +/* #ifndef MP-ALIPAY */ +$loading-duration: create-var(loading-duration, 2s); +/* #endif */ +/* #ifdef MP-ALIPAY */ +$loading-duration: create-var(loading-duration, 1s); +/* #endif */ + +/* #ifndef APP-NVUE */ + + + +/* #ifndef MP-ALIPAY */ +@property --l-loading-start { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-loading-end { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-left { + syntax: ''; + initial-value: 1%; + inherits: false; +} +@property --l-loadding-ball-size { + syntax: ' | '; + // initial-value: 1%; + inherits: false; +} +/* #endif */ + +:host { + display: inline-flex; +} +/* #endif */ + + +.l-loading { + position: relative; + // color: #c8c9cc; + color: $loading-color; + font-size: 0; + vertical-align: middle; + &--ball{ + display: inline-flex; + align-items: center; + .l-loading { + &__ball { + position: relative; + perspective: calc(var(--l-loadding-ball-size) * 4); + transform-style: preserve-3d; + // border: 1px solid; + + &:before{ + background-color: $primary-color; + left: 0%; + // mix-blend-mode: darken; + animation-name: l-ball-before; + } + &:after{ + right: 0; + background-color: red; + // mix-blend-mode: darken; + animation-name: l-ball-after; + } + &:before,&:after{ + top: 0; + content: ''; + position: absolute; + // width: 100%; + height: 100%; + aspect-ratio: 1/1; + border-radius: 50%; + animation-iteration-count: infinite; + animation-delay: -100ms; + animation-duration: 900ms; + mix-blend-mode: darken; + animation-play-state: var(--l-play-state, running); + } + } + } + } + &--circular { + .l-loading { + &__circular { + display: inline-block; + position: relative; + /* #ifndef APP-NVUE */ + animation: l-rotate $loading-duration linear infinite; + vertical-align: middle; + animation-play-state: var(--l-play-state, running); + &:before { + content: ''; + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + /* #ifndef MP-ALIPAY || APP-VUE */ + background-image: conic-gradient( + transparent 0%, + transparent var(--l-loading-start, 0%), var(--l-loading-color-1, currentColor) var(--l-loading-start, 0%), + var(--l-loading-color-2, currentColor) var(--l-loading-end, 0%), transparent var(--l-loading-end, 0%), + transparent 100%); + /* #endif */ + /* #ifdef MP-ALIPAY || APP-VUE */ + background-image: conic-gradient( + var(--l-loading-color-1, transparent) 0%, + var(--l-loading-color-2, currentColor) 100%); + /* #endif */ + mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); + -webkit-mask: radial-gradient(closest-side, transparent calc(80% - 1px), #fff 80%); + animation: l-circular 2.5s ease-in-out infinite; + transform: rotate(90deg); + animation-play-state: var(--l-play-state, running); + } + /* #endif */ + } + } + } + &--spinner { + .l-loading { + &__spinner { + position: relative; + box-sizing: border-box; + width: 100%; + height: 100%; + max-width: 100%; + max-height: 100%; + animation-timing-function: steps(12); + animation: l-rotate 0.8s linear infinite; + animation-play-state: var(--l-play-state, running); + } + &__dot { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + transform: rotate(calc(var(--l-loading-dot, 1) * 30deg)); + opacity: calc(var(--l-loading-dot, 1) / 12); + &::before { + display: block; + width: 5rpx; + height: 25%; + margin: 0 auto; + background-color: currentColor; + border-radius: 40%; + content: ' '; + } + } + } + + } + &__text{ + display: inline-block; + margin-left: $spacer-xs; + color: $loading-text-color; + font-size: $loading-font-size; + vertical-align: middle; + } + &.is-vertical { + display: inline-flex; + flex-direction: column; + align-items: center; + + .l-loading__text { + margin: $spacer-tn 0 0; + } + } + &__ball,&__circular,&__spinner { + width: $loading-size; + height: $loading-size; + } +} +/* #ifndef APP-NVUE */ +@keyframes l-circular { + 0% { + --l-loading-start: 0%; + --l-loading-end: 0%; + } + 50% { + --l-loading-start: 0%; + --l-loading-end: 100%; + } + 100% { + --l-loading-start: 100%; + --l-loading-end: 100%; + } +} +@keyframes l-rotate { + to { + transform: rotate(1turn) + } +} + +@keyframes l-ball-before { + 0%{ + animation-timing-function: ease-in; + } + 25% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); + transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); + } + 50% { + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%))); + animation-timing-function:ease-in; + transform: translate3d(var(--l-left), 0, 0); + } + 75% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2); + transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); + } +} +@keyframes l-ball-after { + 0%{ + animation-timing-function: ease-in; + } + 25% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); + transform: translate3d(var(--l-left), 0, calc(var(--l-loadding-ball-size) * -1)); + } + 50% { + animation-timing-function:ease-in; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) * -1); + transform: translate3d(var(--l-left), 0, 0); + } + 75% { + animation-timing-function: ease-out; + --l-left: calc((var(--l-loadding-ball-size,100%) * 2.1 - var(--l-loadding-ball-size,100%)) / 2 * -1); + transform: translate3d(var(--l-left), 0, var(--l-loadding-ball-size)); + } +} +/* #endif */ \ No newline at end of file diff --git a/uni_modules/lime-loading/components/l-loading/l-loading.uvue b/uni_modules/lime-loading/components/l-loading/l-loading.uvue new file mode 100644 index 0000000..5894814 --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/l-loading.uvue @@ -0,0 +1,122 @@ + + + + \ No newline at end of file diff --git a/uni_modules/lime-loading/components/l-loading/l-loading.vue b/uni_modules/lime-loading/components/l-loading/l-loading.vue new file mode 100644 index 0000000..5e7467e --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/l-loading.vue @@ -0,0 +1,79 @@ + + + + \ No newline at end of file diff --git a/uni_modules/lime-loading/components/l-loading/props.ts b/uni_modules/lime-loading/components/l-loading/props.ts new file mode 100644 index 0000000..c953a54 --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/props.ts @@ -0,0 +1,28 @@ +// import {PropType} from 'vue' +export default { + color: { + type: String, + // default: '#c9c9c9' + }, + type: { + type: String, //as PropType<'circular'|'spinner'>, + default: 'circular' + }, + size: { + type: String, + // #ifdef APP-NVUE + default: '40rpx' + // #endif + }, + text: String, + textColor: String, + textSize: { + type: [String, Number] + }, + vertical: Boolean, + inheritColor: Boolean, + animated: { + type: Boolean, + default: true + } +} \ No newline at end of file diff --git a/uni_modules/lime-loading/components/l-loading/type.ts b/uni_modules/lime-loading/components/l-loading/type.ts new file mode 100644 index 0000000..7d586c0 --- /dev/null +++ b/uni_modules/lime-loading/components/l-loading/type.ts @@ -0,0 +1,18 @@ +// @ts-nocheck +// 完整类型定义 +export interface LoadingProps { + color?: string; + type: 'circular' | 'spinner' | 'failed'; + // #ifndef APP + size?: string; + // #endif + // #ifdef APP + size: string; + // #endif + text?: string; + textColor?: string; + textSize?: string|number; + mode: 'raf' | 'animate'; + vertical: boolean; + animated: boolean; +} diff --git a/uni_modules/lime-loading/components/lime-loading/lime-loading.uvue b/uni_modules/lime-loading/components/lime-loading/lime-loading.uvue new file mode 100644 index 0000000..c18631d --- /dev/null +++ b/uni_modules/lime-loading/components/lime-loading/lime-loading.uvue @@ -0,0 +1,132 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-loading/components/lime-loading/lime-loading.vue b/uni_modules/lime-loading/components/lime-loading/lime-loading.vue new file mode 100644 index 0000000..5ccceff --- /dev/null +++ b/uni_modules/lime-loading/components/lime-loading/lime-loading.vue @@ -0,0 +1,52 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-loading/index.uts b/uni_modules/lime-loading/index.uts new file mode 100644 index 0000000..504f76e --- /dev/null +++ b/uni_modules/lime-loading/index.uts @@ -0,0 +1,439 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif +// 引入颜色处理库 +import { tinyColor } from '@/uni_modules/lime-color'; + + +/** + * 操作类型 + * play: 开始动画 + * failed: 显示失败状态 + * clear: 清除动画 + * destroy: 销毁实例 + */ +export type TickType = 'play' | 'failed' | 'clear' | 'destroy' | 'pause' +/** + * 加载动画类型 + * circular: 环形加载动画 + * spinner: 旋转器加载动画 + * failed: 失败状态动画 + */ +export type LoadingType = 'circular' | 'spinner' | 'failed'; +/** + * 加载组件返回接口 + */ +export type UseLoadingReturn = { + ratio : 1; + type : LoadingType; + mode : 'raf' | 'animate'; // + color : string;//Ref; + play : () => void; + failed : () => void; + clear : () => void; + destroy : () => void; + pause : () => void; +} + + +/** + * 计算圆周上指定角度的点的坐标 + * @param centerX 圆心的 X 坐标 + * @param centerY 圆心的 Y 坐标 + * @param radius 圆的半径 + * @param angleDegrees 角度(以度为单位) + * @returns 包含 X 和 Y 坐标的对象 + */ +function getPointOnCircle( + centerX : number, + centerY : number, + radius : number, + angleDegrees : number +) : number[] { + // 将角度转换为弧度 + const angleRadians = (angleDegrees * Math.PI) / 180; + + // 计算点的 X 和 Y 坐标 + const x = centerX + radius * Math.cos(angleRadians); + const y = centerY + radius * Math.sin(angleRadians); + + return [x, y] +} + +export function useLoading(element : Ref) : UseLoadingReturn { + let isPlaying = false + let canvasWidth = ref(0) + let canvasHeight = ref(0) + let canvasSize = ref(0) + + let animationFrameId = -1 + let animation : UniAnimation | null = null + + let drawFrame : (() => void) | null = null + + const tick = ref('pause') + const context = shallowRef(null); + const state = reactive({ + color: '#000', + type: 'circular', + ratio: 1, + mode: 'raf', + play: () => { + tick.value = 'play' + }, + failed: () => { + tick.value = 'failed' + }, + clear: () => { + tick.value = 'clear' + }, + destroy: () => { + tick.value = 'destroy' + cancelAnimationFrame(animationFrameId) + animation?.pause() + animation?.cancel() + context.value?.reset(); + context.value?.update(); + context.value = null + animation = null + isPlaying = false + }, + pause: () => { + tick.value = 'pause' + } + }) + + + // let ctx:DrawableContext|null = null + + // let rotation = 0 + + const size = computed(() : number => state.ratio > 1 ? state.ratio : canvasSize.value * state.ratio) + // 绘制圆形加载 + const drawCircular = () => { + let startAngle = 0; // 起始角度 + let endAngle = 0; // 结束角度 + let rotate = 0; // 旋转角度 + + // const ctx = context.value! + // 动画参数配置 + const MIN_ANGLE = 5; // 最小保持角度 + const ARC_LENGTH = 359.5 // 最大弧长(避免闭合) + const PI = Math.PI / 180 // 角度转弧度系数 + const SPEED = 0.018 / 4 // 动画速度 + const ROTATE_INTERVAL = 0.09 / 4 // 旋转增量 + + const lineWidth = size.value / 10; // 线宽计算 + const x = canvasWidth.value / 2 // 中心点X + const y = canvasHeight.value / 2 // 中心点Y + const radius = size.value / 2 - lineWidth // 实际绘制半径 + try { + drawFrame = () => { + if (context.value == null || !isPlaying) return + let ctx = context.value! + + + // console.log('radius', radius, size.value) + ctx.reset(); + + // 绘制圆弧 + ctx.beginPath(); + ctx.arc( + x, + y, + radius, + startAngle * PI + rotate, + endAngle * PI + rotate + ); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = state.color; + ctx.stroke(); + + // 角度更新逻辑 + if (endAngle < ARC_LENGTH) { + endAngle = Math.min(ARC_LENGTH, endAngle + (ARC_LENGTH - MIN_ANGLE) * SPEED); + } else if (startAngle < ARC_LENGTH) { + startAngle = Math.min(ARC_LENGTH, startAngle + (ARC_LENGTH - MIN_ANGLE) * SPEED); + } else { + // 重置时保留最小可见角度 + startAngle = 0; + endAngle = MIN_ANGLE; + } + + ctx.update() + + + + if (state.mode == 'raf') { + rotate = (rotate + ROTATE_INTERVAL) % 360; // 持续旋转并限制范围 + if (isPlaying && drawFrame != null) { + animationFrameId = requestAnimationFrame(drawFrame!) + } + } + } + } catch(err) { + + } + } + + let lastTime = Date.now(); + const drawSpinner = () => { + const steps = 12; // 旋转线条数量 + // const size = state.ratio > 1 ? state.ratio : canvasSize.value + const lineWidth = size.value / 10; // 线宽 + const x = canvasWidth.value / 2 // 中心坐标 + const y = canvasHeight.value / 2 + + let step = 0; // 当前步数 + // #ifdef APP-HARMONY + const length = size.value / 3.4 - lineWidth; // 线长 + // #endif + // #ifndef APP-HARMONY + const length = size.value / 3.6 - lineWidth; // 线长 + // #endif + const offset = size.value / 4; // 距中心偏移 + + /** 生成颜色渐变数组 */ + function generateColorGradient(hex : string, steps : number) : string[] { + const colors : string[] = [] + const _color = tinyColor(hex) + + for (let i = 1; i <= steps; i++) { + _color.setAlpha(i / steps); + colors.push(_color.toRgbString()); + } + return colors + } + + // 计算颜色渐变 + let colors = computed(() : string[] => generateColorGradient(state.color, steps)) + + /** 帧绘制函数 */ + drawFrame = () => { + if (context.value == null || !isPlaying) return + const delta = Date.now() - lastTime; + + + if (delta >= 1000 / 10) { + lastTime = Date.now(); + let ctx = context.value! + ctx.reset(); + for (let i = 0; i < steps; i++) { + const stepAngle = 360 / steps; // 单步角度 + const angle = stepAngle * i; // 当前角度 + const index = (steps + i - step) % steps // 颜色索引 + // 计算线段坐标 + const radian = angle * Math.PI / 180; + const cos = Math.cos(radian); + const sin = Math.sin(radian); + + // 绘制线段 + ctx.beginPath(); + ctx.moveTo(x + offset * cos, y + offset * sin); + ctx.lineTo(x + (offset + length) * cos, y + (offset + length) * sin); + ctx.lineWidth = lineWidth; + ctx.lineCap = 'round'; + ctx.strokeStyle = colors.value[index]; + ctx.stroke(); + } + + ctx.update() + if(state.mode == 'raf') { + // step += 1 + step = (step + 1) % steps; // 限制step范围 + } + } + + + if (state.mode == 'raf') { + if (isPlaying && drawFrame != null) { + animationFrameId = requestAnimationFrame(drawFrame!) + } + } + } + } + + const drwaFailed = () => { + if (context.value == null) return + let ctx = context.value! + + // const size = state.ratio > 1 ? state.ratio : canvasSize.value + const innerSize = size.value * 0.8 // 内圈尺寸 + const lineWidth = innerSize / 10; // 线宽 + const lineLength = (size.value - lineWidth) / 2 // X长度 + const centerX = canvasWidth.value / 2; + const centerY = canvasHeight.value / 2; + const radius = (size.value - lineWidth) / 2 + + + + const angleRadians1 = 45 * Math.PI / 180 + const angleRadians2 = (45 - 90) * Math.PI / 180 + + ctx.reset() + ctx.lineWidth = lineWidth; + ctx.strokeStyle = state.color; + + // 绘制逐渐显示的圆 + ctx.beginPath(); + ctx.arc(centerX, centerY, radius, 0, Math.PI * 2); + ctx.lineWidth = lineWidth; + ctx.strokeStyle = state.color; + ctx.stroke(); + + const [startX1, startY] = getPointOnCircle(centerX, centerY, lineLength / 2, 180 + 45) + const [startX2] = getPointOnCircle(centerX, centerY, lineLength / 2, 180 + 90 + 45) + + const x2 = Math.sin(angleRadians1) * lineLength + startX1 + const y2 = Math.cos(angleRadians1) * lineLength + startY + + ctx.beginPath(); + ctx.moveTo(startX1, startY) + ctx.lineTo(x2, y2) + ctx.stroke(); + + const x3 = Math.sin(angleRadians2) * lineLength + startX2 + const y3 = Math.cos(angleRadians2) * lineLength + startY + + ctx.beginPath(); + ctx.moveTo(startX2, startY) + ctx.lineTo(x3, y3) + ctx.stroke(); + + + ctx.update() + } + + let currentType : LoadingType | null = null + const useMode = () => { + if (state.mode != 'raf') { + const keyframes = [{ transform: 'rotate(0)' }, { transform: 'rotate(360)' }] + animation = element.value!.animate(keyframes, { + duration: 80000, + easing: 'linear', + // fill: 'forwards', + iterations: Infinity + }) + } + } + const startAnimation = (type : string) => { + if (context.value == null || element.value == null) return + animation?.pause() + + if (currentType == type) { + isPlaying = true + animation?.play() + drawFrame?.() + return + } + + if (type == 'circular') { + currentType = 'circular' + drawCircular() + useMode() + + } + + if (type == 'spinner') { + currentType = 'spinner' + drawSpinner() + useMode() + } + + isPlaying = true + drawFrame?.() + } + + // 监听元素尺寸 + let manualCheckTimer:number|null = null; + const getBoundingClientRect = () => { + if(manualCheckTimer != null){ + clearTimeout(manualCheckTimer!); + } + requestAnimationFrame(()=> { + element.value?.getBoundingClientRectAsync()?.then(rect => { + if (rect.width == 0 || rect.height == 0) return + context.value = element.value!.getDrawableContext() as DrawableContext; + canvasWidth.value = rect.width; + canvasHeight.value = rect.height; + canvasSize.value = Math.min(rect.width, rect.height); + // startAnimation(state.type) + }) + }) + } + + const resizeObserver : UniResizeObserver = new UniResizeObserver((_entries : UniResizeObserverEntry[]) => { + getBoundingClientRect() + }); + + watchEffect(() => { + if (element.value == null) return + resizeObserver.observe(element.value!); + // #ifdef APP-IOS + // nextTick(getBoundingClientRect) + manualCheckTimer = setTimeout(() => { + getBoundingClientRect(); + }, 50); + // #endif + }) + + + + watchEffect(() => { + if (context.value == null) return + if (tick.value == 'play') { + animation?.pause() + isPlaying = false + cancelAnimationFrame(animationFrameId) + startAnimation(state.type) + } + if (tick.value == 'failed') { + cancelAnimationFrame(animationFrameId) + animation?.pause() + animation?.cancel() + drwaFailed() + return + } + if (tick.value == 'clear') { + cancelAnimationFrame(animationFrameId) + animation?.pause() + animation?.cancel() + context.value?.reset(); + context.value?.update(); + isPlaying = false + return + } + if (tick.value == 'destroy') { + cancelAnimationFrame(animationFrameId) + animation?.pause() + animation?.cancel() + context.value?.reset(); + context.value?.update(); + context.value = null + animation = null + isPlaying = false + return + } + if (tick.value == 'pause') { + // 首次需要绘制一帧 + if(animation == null) { + startAnimation(state.type) + } + cancelAnimationFrame(animationFrameId) + isPlaying = false + animation?.pause() + return + } + }) + + watchEffect(()=>{ + if(state.color == '') return + // #ifdef APP-HARMONY + isPlaying = false + cancelAnimationFrame(animationFrameId) + // #endif + }) + + return state +} \ No newline at end of file diff --git a/uni_modules/lime-loading/package.json b/uni_modules/lime-loading/package.json new file mode 100644 index 0000000..76ad84e --- /dev/null +++ b/uni_modules/lime-loading/package.json @@ -0,0 +1,110 @@ +{ + "id": "lime-loading", + "displayName": "lime-loading 加载", + "version": "0.2.2", + "description": "lime-loading 全端通用加载插件.用于表示页面或操作的加载状态,给予用户反馈的同时减缓等待的焦虑感。支持uniapp/uniappx", + "keywords": [ + "loading", + "lime-loading", + "加载", + "uvue" +], + "repository": "", + "engines": { + "HBuilderX": "^3.92", + "uni-app": "^4.73", + "uni-app-x": "^4.76" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "√", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "lime-shared", + "lime-style", + "lime-color" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-loading/readme.md b/uni_modules/lime-loading/readme.md new file mode 100644 index 0000000..cf6cdf3 --- /dev/null +++ b/uni_modules/lime-loading/readme.md @@ -0,0 +1,114 @@ +# lime-loading 加载动画 + +一个功能丰富的加载动画组件,提供多种加载效果,支持自定义颜色、大小和文本,适用于各种加载场景。 + +> 插件依赖:`lime-shared`、`lime-style` + +## 文档链接 +📚 组件详细文档请访问以下站点: +- [加载动画文档 - 站点1](https://limex.qcoon.cn/components/loading.html) +- [加载动画文档 - 站点2](https://limeui.netlify.app/components/loading.html) +- [加载动画文档 - 站点3](https://limeui.familyzone.top/components/loading.html) + +## 安装方法 +1. 在uni-app插件市场中搜索并导入`lime-loading` +2. 导入后可能需要重新编译项目 +3. 在页面中使用`l-loading`组件 + +## 代码演示 + +### 基础使用 +最简单的加载动画使用方式。 + +```html + +``` + +### 不同类型 +通过 `type` 属性可以设置加载图标的类型,默认为 `circular`,可选值为 `spinner`。nvue只有`circular`,因为其使用的是原生组件。 + + +```html + + +``` + +### 自定义颜色和大小 +可以通过`color`和`size`属性自定义加载动画的颜色和大小。 + +```html + +``` + +### 带文本的加载动画 +通过设置`text`属性可以在加载动画下方显示文本。 + +```html + +``` + +### 垂直排列 +通过`vertical`属性可以设置加载动画和文本的排列方式。 + +```html + +``` + +### 自定义文本样式 +可以通过`textSize`和`textColor`属性自定义文本的大小和颜色。 + +```html + +``` + +## Vue2使用说明 +main.js中添加以下代码: +```js +// vue2项目中使用 +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +详细配置请参考官方文档:[Vue Composition API](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html) + +## 插件标签说明 +`l-loading` 为组件标签 +`lime-loading` 为演示标签 + +## API文档 + +### Props 属性说明 + +| 参数 | 说明 | 类型 | 默认值 | +| ---------- | ----------------------------- | ------------------ | ---------- | +| color | 颜色 | _string_ | `` | +| type | 类型,可选值为 `spinner` | _string_ | `circular` | +| size | 加载图标大小,默认单位为 `px`,uvue只支持string | _number \| string_ | `40rpx` | +| text | 加载文本 | _string_ | `-` | +| textColor | 文本颜色 | _string_ | `-` | +| textSize | 文本大小 `px`,uvue只支持string | _number \| string_ | `-` | +| vertical | 是否垂直排列图标和文字内容 | _boolean_ | `false` | +| mode | 动画实现的模式.只针对APP,可选值有:`animate` | _string_ | `raf` | + +## 主题定制 + +组件提供了丰富的CSS变量,可以通过自定义CSS变量来自定义组件样式: + +| 变量名 | 默认值 | 说明 | +| ---- | ---- | ---- | +| --l-loading-color | #1677ff | 加载动画颜色 | +| --l-loading-size | 20px | 加载动画大小 | +| --l-loading-text-color | `$text-color-3` | 文本颜色 | +| --l-loading-text-size | `$font-size`| 文本大小 | + +由于`uniappx app`是基于canvas故暂时`uniappx app`无效 + + +## 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: + +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![支付宝赞赏码](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![微信赞赏码](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | \ No newline at end of file diff --git a/uni_modules/lime-picker/changelog.md b/uni_modules/lime-picker/changelog.md new file mode 100644 index 0000000..f854f3a --- /dev/null +++ b/uni_modules/lime-picker/changelog.md @@ -0,0 +1,76 @@ +## 0.3.8(2026-05-11) +- fix: 修复缺失watch +## 0.3.7(2026-01-16) +- fix: 修复uniapp vue2问题 +## 0.3.6(2026-01-16) +- fix:修复uniapp vue2报错问题 +## 0.3.5(2025-12-13) +- fix: 修复uniappx ios鸿蒙显示不全问题 +## 0.3.4(2025-12-12) +- fix: 修复uniappx ios,鸿蒙显示问题 +## 0.3.3(2025-10-09) +- fix: 修复uniapp报错的问题 +## 0.3.2(2025-09-28) +- feat: 暴露`confirm`和`getSelectedOptions`方法 +## 0.3.1(2025-09-15) +- fix: 修复uniappx 安卓无法设置选中项的颜色 +## 0.3.0(2025-09-08) +- fix: 修复uniappx 鸿蒙 使用mask-class会导致选中项下边有阴影 +## 0.2.9(2025-09-01) +- fix:修复uniapp 选项高度问题 +## 0.2.8(2025-06-10) +- fix:鸿蒙当插件在弹窗里的时候,文本没有样式(估计为官方BUG) +## 0.2.7(2025-05-30) +- fix:修复ios报`error: Can't find variable: stop` +## 0.2.6(2025-05-12) +- fix:修复安卓尺寸的问题 +## 0.2.5(2025-05-06) +- fix:修复安卓初始化-1报错的问题 +## 0.2.4(2025-04-24) +- feat:字体由rpx转成px +## 0.2.3(2025-04-23) +- fix:安卓更新问题 +## 0.2.2(2025-04-23) +- feat:优化边界 +## 0.2.1(2025-04-22) +- feat:兼容uniappx 鸿蒙next +## 0.2.0(2025-04-18) +- fix:修复安卓字体无加粗的问题 +## 0.1.9(2025-04-18) +- fix:修复安卓更新数据后绘制尺寸不对的问题 +## 0.1.8(2025-03-25) +- fix:修复安卓设置日期大小不居中的问题 +## 0.1.7(2025-03-25) +- fix:修复安卓单标题时不居中的问题 +## 0.1.6(2025-03-25) +- fix:修复单标题时不居中的问题 +## 0.1.5(2025-02-25) +- chore:更新文档 +## 0.1.4(2025-02-20) +- fix:修复uniapp 级联缺少keys问题 +## 0.1.3(2025-02-13) +- fix:修复ios 默认值问题 +## 0.1.2(2025-02-12) +- fix:修复默认值问题 +## 0.1.1(2025-02-11) +- fix:修复uniapp indicator样式问题 +## 0.1.0(2025-02-10) +- fix:修复uniapp pickerItemInstanceArray缺少.value的问题 +## 0.0.9(2025-01-09) +- feat:更新文档 +## 0.0.8(2025-01-09) +- feat:增加级联`l-cascade`组件 +## 0.0.7(2024-12-31) +- fix:修复缺少resetindex +## 0.0.6(2024-12-27) +- feat:更新样式 +## 0.0.5(2024-12-27) +- feat:更新样式 +## 0.0.4(2024-12-27) +- fix:优化列表数据无法更新的问题 +## 0.0.3(2024-12-24) +- feat:去掉多余文本 +## 0.0.2(2024-12-24) +- feat:兼容vue2 +## 0.0.1(2024-12-24) +- init diff --git a/uni_modules/lime-picker/components/l-cascade/l-cascade.uvue b/uni_modules/lime-picker/components/l-cascade/l-cascade.uvue new file mode 100644 index 0000000..03b5617 --- /dev/null +++ b/uni_modules/lime-picker/components/l-cascade/l-cascade.uvue @@ -0,0 +1,129 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-cascade/l-cascade.vue b/uni_modules/lime-picker/components/l-cascade/l-cascade.vue new file mode 100644 index 0000000..1edc780 --- /dev/null +++ b/uni_modules/lime-picker/components/l-cascade/l-cascade.vue @@ -0,0 +1,154 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-cascade/type.ts b/uni_modules/lime-picker/components/l-cascade/type.ts new file mode 100644 index 0000000..257152c --- /dev/null +++ b/uni_modules/lime-picker/components/l-cascade/type.ts @@ -0,0 +1,58 @@ +// @ts-nocheck +import {PickerColumn, PickerColumnItem ,PickerValue} from '../l-picker/type'; +export type KeysType = { + value: string; + label: string; + children:string; + disabled?: string; +} +export interface CascadeProps { + /** + * 取消按钮文字 + */ + cancelBtn ?: string; + cancelStyle ?: string; + /** + * 确定按钮文字 + */ + confirmBtn ?: string; + confirmStyle ?: string; + /** + * 标题 + */ + title ?: string; + titleStyle ?: string; + /** + * 用来定义 value / label 在 `options` 中对应的字段别名 + */ + keys?: UTSJSONObject; + /** + * 配置每一列的选项 + */ + columns : UTSJSONObject[]; + /** + * 选中值 + */ + modelValue ?: PickerValue[]; + defaultValue ?: PickerValue[]; + value ?: PickerValue[]; + /** + * 是否为加载状态 + */ + loading: boolean; + loadingColor?: string; + loadingMaskColor ?: string; + loadingSize: string; + + itemHeight?: string; + itemColor?: string; + itemFontSize?: string; + itemActiveColor?: string; + + indicatorStyle?: string; + maskColors?: string[]; + bgColor?: string; + groupHeight?: string; + radius?: string; + resetIndex: boolean +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-cascade/utils.uts b/uni_modules/lime-picker/components/l-cascade/utils.uts new file mode 100644 index 0000000..8959d97 --- /dev/null +++ b/uni_modules/lime-picker/components/l-cascade/utils.uts @@ -0,0 +1,123 @@ +// @ts-nocheck +import { clamp } from '@/uni_modules/lime-shared/clamp' +import { PickerValue, PickerColumn, PickerColumnItem, PickerPickEvent } from '../l-picker/type'; +import { KeysType } from './type'; +// #ifndef UNI-APP-X +import type { Ref } from '@/uni_modules/lime-shared/vue' +type UTSJSONObject = Record +// #endif + +/** + * 解析键配置对象,生成用于访问选项属性的键映射。 + * + * @param {UTSJSONObject|null} keys - 配置对象,包含 label、value 和 children 的键名。 + * @returns {KeysType} 包含 label、value 和 children 键名的映射对象。 + */ +export function parseKeys(keys : UTSJSONObject | null) : KeysType { + const _labelKey = `${keys?.['label'] ?? 'label'}` + const _valueKey = `${keys?.['value'] ?? 'value'}` + const _childrenKey = `${keys?.['children'] ?? 'children'}` + + return { + label: _labelKey, + value: _valueKey, + children: _childrenKey, + } as KeysType +} + + +/** + * 获取选项数组中第一个未被禁用的选项。 + * + * @param {UTSJSONObject[]} options - 选项对象数组。 + * @returns {UTSJSONObject|null} 第一个未被禁用的选项对象,如果所有选项都被禁用则返回第一个选项。 + */ +export const getFirstEnabledOption = ( + options : UTSJSONObject[], +) : UTSJSONObject | null => + options.find((option) : boolean => option['disabled'] != true) ?? options[0]; + +/** + * 在选项数组中查找指定索引之后或之前的第一个未被禁用的选项的索引。 + * + * @param {UTSJSONObject[]} options - 选项对象数组。 + * @param {number} index - 当前索引位置。 + * @returns {number} 第一个未被禁用的选项的索引,如果不存在则返回 0。 + */ +export function findIndexOfEnabledOption( + options : UTSJSONObject[], + index : number, +) { + index = clamp(index, 0, options.length); + + // for (let i = index; i < options.length; i++) { + // if (options[i]['disabled'] != true) return i; + // } + // for (let i = index - 1; i >= 0; i--) { + // if (options[i]['disabled'] != true) return i; + // } + + // return 0; + return index +} + +/** + * 根据指定的值在选项数组中查找对应的选项对象。 + * + * @param {UTSJSONObject[]} options - 选项对象数组。 + * @param {PickerValue} value - 要查找的值。 + * @param {KeysType} fields - 包含 label、value 和 children 键名的映射对象。 + * @returns {UTSJSONObject|null} 找到的选项对象,如果未找到则返回 null。 + */ +export function findOptionByValue( + options : UTSJSONObject[], + value : PickerValue, + fields : KeysType, +) : UTSJSONObject | null { + if(options.length == 0) return null + const index = options.findIndex((option) : boolean => option[fields.value] == value); + const enabledIndex = findIndexOfEnabledOption(options, index); + return options[enabledIndex]; +} + +/** + * 格式化级联选择器的列数据。 + * + * @param {UTSJSONObject[]} columns - 初始的列数据数组。 + * @param {KeysType} fields - 包含 label、value 和 children 键名的映射对象。 + * @param {Ref} selectedValues - 当前选中的值数组。 + * @returns {PickerColumn[]} 格式化后的级联列数据数组。 + */ +export function formatCascadeColumns( + columns : UTSJSONObject[], + fields : KeysType, + selectedValues : Ref +) { + const formatted : PickerColumn[] = []; + + let cursor : UTSJSONObject | null = {}; + cursor![fields.children] = columns; + let columnIndex = 0; + + while (cursor != null && cursor[fields.children] != null) { + const options : UTSJSONObject[] = cursor[fields.children]! as UTSJSONObject[]; + const value = selectedValues.value.length > columnIndex ? selectedValues.value[columnIndex] : null; + cursor = value != null + ? findOptionByValue(options, value, fields) + : null; + + if (cursor == null && options.length > 0) { + const firstValue = getFirstEnabledOption(options)![fields.value]!; + cursor = findOptionByValue(options, firstValue, fields); + } + + columnIndex++; + formatted.push( + options.map((option : UTSJSONObject) : PickerColumnItem => ({ + label: `${option['label']}`, + value: `${option['value']}`, + } as PickerColumnItem)) + ); + } + return formatted; +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/PickerRenderer.uts b/uni_modules/lime-picker/components/l-picker-item/PickerRenderer.uts new file mode 100644 index 0000000..fb0a5d5 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/PickerRenderer.uts @@ -0,0 +1,187 @@ +// @ts-nocheck +import { unitConvert } from '@/uni_modules/lime-shared/unitConvert' +import type { PickerColumnItem, PickerValue } from '../l-picker/type'; +// #ifdef APP-ANDROID || APP-IOS +type PickerCanvasElement = UniElement +type PickerDrawableContext = DrawableContext +// #endif +// #ifdef APP-HARMONY +type PickerCanvasElement = UniElement//UniCanvasElement +type PickerDrawableContext = DrawableContext//CanvasRenderingContext2D +// #endif + + +export type PickerCanvasConfig = { + itemHeight : number; + itemFontSize : number; + itemActiveFontWeight ?: number; + itemColor ?: string; + itemActiveColor ?: string; + canvasWidth : number; + canvasHeight : number; +} + +export class PickerCanvasRenderer { + // private canvas : PickerCanvasElement | null = null; + private ctx : PickerDrawableContext | null = null; + private dpr : number = 1; + private isInitialized : boolean = false; + private canvas : PickerCanvasElement + private lastWidth : number = 0; + private lastHeight : number = 0; + constructor(itemRef : PickerCanvasElement) { + this.canvas = itemRef + this.initCanvas(); + } + + private initCanvas() { + // #ifdef APP-ANDROID||APP-IOS || APP-HARMONY + // this.ctx = this.canvas.getDrawableContext(); + this.isInitialized = true; + return + // #endif + + // #ifdef APP-HARMONY + const rect = this.canvas.getBoundingClientRect() + // this.ctx = this.canvas.getContext('2d'); + this.ctx = this.canvas.getDrawableContext(); + this.dpr = uni.getDeviceInfo().devicePixelRatio ?? 1; + this.isInitialized = true; + // this.canvas.height = rect.height * this.dpr; + // this.canvas.width = rect.width * this.dpr; + // this.ctx.scale(this.dpr, this.dpr); + this.lastWidth = rect.width; + this.lastHeight = rect.height; + // #endif + } + + private setupCanvas(width : number, height : number) { + // if (!this.isInitialized) return; + // #ifdef APP-ANDROID || APP-IOS || APP-HARMONY + // this.canvas.style.setProperty('height', `${height}px`); + // this.ctx?.reset(); + return + // #endif + + // #ifdef APP-HARMONY + if (this.lastWidth == width && this.lastHeight == height) return; + + this.lastWidth = width; + this.lastHeight = height; + // this.canvas.height = height * this.dpr; + // this.canvas.width = width * this.dpr; + // this.ctx?.setTransform(1, 0, 0, 1, 0, 0); + // this.ctx?.scale(this.dpr, this.dpr); + // #endif + } + clearRect(width : number = 1000, height : number = 100000) { + // #ifdef APP-ANDROID || APP-IOS || APP-HARMONY + this.ctx?.reset(); + return + // #endif + // #ifdef APP-HARMONY + this.ctx?.clearRect(0, 0, width, height); + // #endif + } + render(options : PickerColumnItem[], curIndex : number, config : PickerCanvasConfig, isDarkMode : boolean) { + // 安卓不能把ctx存在实例中? + // if(this.ctx == null) return + + const ctx = this.canvas.getDrawableContext()! + const itemHeight = config.itemHeight; + const fontSize = config.itemFontSize; + const canvasWidth = config.canvasWidth + const canvasHeight = config.canvasHeight + // this.ctx = ctx + // 设置容器和Canvas尺寸 + this.setupCanvas(canvasWidth, canvasHeight); + ctx.reset(); + const x = canvasWidth / 2; + const itemActiveFontWeight = config?.itemActiveFontWeight ?? 700; + + const color = config?.itemColor ?? (isDarkMode ? `rgba(255,255,255,0.88)` : 'rgba(0,0,0,0.88)'); + const itemActiveColor = config?.itemActiveColor ?? (isDarkMode ? `rgba(255,255,255,0.88)` : 'rgba(0,0,0,0.88)'); + + + // 设置绘图上下文 + // #ifndef APP-HARMONY + ctx.font = `${fontSize}px`; + // #endif + // #ifdef APP-HARMONY + ctx.font = `${fontSize}px`;// sans-serif + // #endif + ctx.textAlign = 'center'; + // ctx.textBaseline = 'middle'; // 使用中间基线实现垂直居中 + ctx.lineWidth = 0.5; + + // 清空画布 + this.clearRect(canvasWidth, canvasHeight); + + // 绘制所有选项 + options.forEach((item, index) => { + // const y = itemHeight * index + (itemHeight + fontSize) / 2; + let offset = 0.4 + // #ifdef APP-IOS + offset = 0.55 + // #endif + const y = itemHeight * index + fontSize + (itemHeight - fontSize) * offset; + // const y = itemHeight * index + itemHeight / 2; // 垂直居中 + + const isActive = index == curIndex && itemActiveFontWeight > 600; + ctx.fillStyle = isActive ? itemActiveColor : color; + ctx.strokeStyle = isActive ? itemActiveColor : color; + + ctx.fillText(item.label, x, y); + + if (isActive) { + // #ifdef APP-IOS || APP-HARMONY + // ctx.strokeText(item.label, x, y); + ctx.fillText(item.label, x - 0.2, y); + ctx.fillText(item.label, x + 0.2, y); + ctx.fillText(item.label, x, y - 0.2); + ctx.fillText(item.label, x, y + 0.2); + // #endif + // #ifndef APP-IOS|| APP-HARMONY + ctx.strokeText(item.label, x, y); + // #endif + } + }); + + // #ifdef APP-ANDROID || APP-IOS || APP-HARMONY + ctx.update(); + // #endif + } + + destroy() { + // this.canvas = null; + this.ctx = null; + this.isInitialized = false; + } +} + +// // 在组件中使用 +// const canvasRenderer = ref(null); + +// const updateItemStyle = () => { +// if (!itemRef.value) return; + +// // 初始化渲染器(只初始化一次) +// if (!canvasRenderer.value) { +// canvasRenderer.value = new PickerCanvasRenderer( +// itemRef.value, +// isDarkMode.value, +// picker +// ); +// } + +// // 执行渲染 +// canvasRenderer.value.render(props.options, curIndex.value); +// }; + +// // 在组件卸载时清理 +// onBeforeUnmount(() => { +// if (canvasRenderer.value) { +// canvasRenderer.value.destroy(); +// canvasRenderer.value = null; +// } +// }); \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/index.scss b/uni_modules/lime-picker/components/l-picker-item/index.scss new file mode 100644 index 0000000..6bf8613 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/index.scss @@ -0,0 +1,82 @@ +@import '~@/uni_modules/lime-style/index.scss'; +/* #ifdef uniVersion >= 4.75 */ +$use-css-var: true; +/* #endif */ + +$item: #{$prefix}-picker-item; + +$picker-group-height: create-var(picker-group-height, 200px); +$picker-indicator-bg-color: create-var(picker-indicator-bg-color, $fill-4); +$picker-indicator-border-radius: create-var(picker-indicator-border-radius, 6px); + +$picker-item-height: create-var(picker-item-height, 50px); +$picker-item-active-color: create-var(picker-item-active-color, $text-color-1); +$picker-item-active-font-weight: create-var(picker-item-active-font-weight, 700); +$picker-item-color: create-var(picker-item-color, $text-color-1); +$picker-item-font-size: create-var(picker-item-font-size, $font-size-md); +$picker-mask-top-color: create-var(picker-mask-top-color, white); +$picker-mask-bottom-color: create-var(picker-mask-bottom-color, rgba(36, 36, 36, 0)); + + +/* #ifndef UNI-APP-X && APP */ +:host { + flex: 1; + display: flex; +} +/* #endif */ + + +.#{$item} { + /* #ifndef UNI-APP-X && APP */ + // uniapp x鸿蒙这个设置导致选中项下边黑影 + &__mask { + background-image: + linear-gradient(180deg, $picker-mask-top-color, $picker-mask-bottom-color), + linear-gradient(0deg, $picker-mask-top-color, $picker-mask-bottom-color) + } + /* #endif */ + &__group { + /* #ifdef WEB */ + :deep(.uni-picker-view-content) { + // 300ms + transition-duration: var(--picker-duration, 0); + } + /* #endif */ + flex: 1; + + // height: $picker-group-height; + &-item { + height: $picker-item-height; + line-height: $picker-item-height; + text-align: center; + /* #ifndef UNI-APP-X && APP */ + display: flex; + justify-content: center; + /* #endif */ + transition-duration: 100ms; + transition-property: font-weight, color; + transition-timing-function: linear; + font-weight: 400; + color: $picker-item-color; + font-size: $picker-item-font-size; + white-space: nowrap; + &--active { + color: $picker-item-active-color; + font-weight: $picker-item-active-font-weight; + } + } + } + &__wrapper { + width: 100%; + // background-color: red; + } + &__indicator { + /* #ifndef UNI-APP-X && APP */ + height: $picker-item-height; + &:after,&:before{ + display: none; + } + /* #endif */ + } +} + diff --git a/uni_modules/lime-picker/components/l-picker-item/l-picker-item-old.uvue b/uni_modules/lime-picker/components/l-picker-item/l-picker-item-old.uvue new file mode 100644 index 0000000..ff4fd36 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/l-picker-item-old.uvue @@ -0,0 +1,324 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/l-picker-item.uvue b/uni_modules/lime-picker/components/l-picker-item/l-picker-item.uvue new file mode 100644 index 0000000..973c3e0 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/l-picker-item.uvue @@ -0,0 +1,297 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/l-picker-item.vue b/uni_modules/lime-picker/components/l-picker-item/l-picker-item.vue new file mode 100644 index 0000000..f5ab756 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/l-picker-item.vue @@ -0,0 +1,212 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/props.ts b/uni_modules/lime-picker/components/l-picker-item/props.ts new file mode 100644 index 0000000..3e8cc96 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/props.ts @@ -0,0 +1,15 @@ +// @ts-nocheck +export default { + options: { + type: Array, + default: () => [] + }, + value: { + type: [String, Number], + default: null + }, + column: { + type: Number, + default: -1 + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/type.ts b/uni_modules/lime-picker/components/l-picker-item/type.ts new file mode 100644 index 0000000..7125295 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/type.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +import type{ PickerColumnItem, PickerValue } from '../l-picker/type'; + +export type ManageChildInList = (child: LPickerItemComponentPublicInstance, shouldAdd: boolean) => void; +export type OnPick = (value: PickerValue, index:number, column: number) => void; +export type UpdateItems = (value: PickerValue, index:number, column: number) => void; + +export interface PickerItemProps { + options: PickerColumnItem[] + value?: PickerValue; + column: number + name?: string|number +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-item/usePickerMask.ts b/uni_modules/lime-picker/components/l-picker-item/usePickerMask.ts new file mode 100644 index 0000000..dc2c846 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-item/usePickerMask.ts @@ -0,0 +1,86 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +import { computed, ComputedRef, Ref } from '@/uni_modules/lime-shared/vue'; +// #endif +export type MaskConfig = { + maskStartColor : string; + maskEndColor : string; +}; + +export type PlatformMaskStyles = { + common : string; + top : string; + bottom : string; +}; +export type UsePickerMaskReturn = { + maskConfig : ComputedRef; + platformMaskStyles : ComputedRef; +} + +/** + * 生成 Picker 组件顶部与底部的渐变遮罩样式(完全响应式) + * + * @param backgroundColorRef - 背景色 ref 或 computed(可为 null) + * @param isDarkModeRef - 是否暗色模式(响应式) + * @param maskColorsRef - 自定义遮罩颜色 [start, end](响应式) + * @param isInitializedRef - 是否已初始化(响应式) + */ +export const usePickerMask = ( + backgroundColorRef : ComputedRef, + isDarkModeRef :ComputedRef, + maskColorsRef :ComputedRef, + isInitializedRef : Ref +) : UsePickerMaskReturn => { + const maskConfig = computed(() => { + const bgColor = backgroundColorRef.value; + const isDark = isDarkModeRef.value; + const maskColors = maskColorsRef?.value; + + // 优先使用用户提供的 maskColors + if (maskColors != null && maskColors.length >= 1) { + const maskStartColor = maskColors![0] + const maskEndColor = maskColors!.length > 1 ? maskColors[1] : 'rgba(0,0,0,0)' + return { + maskStartColor, + maskEndColor + } as MaskConfig + } + + const bg = bgColor ?? (isDark ? '#242424' : '#ffffff'); + const endColor = isDark + ? 'rgba(36, 36, 36, 0)' + : 'rgba(255, 255, 255, 0)'; + + return { + maskStartColor: bg, + maskEndColor: endColor + } as MaskConfig + }); + + const platformMaskStyles = computed(() => { + const { maskStartColor, maskEndColor } = maskConfig.value; + + const clean = (str : string) => str.replace(/\s+/g, ' ').trim(); + + return { + common: backgroundColorRef.value == null && !isDarkModeRef.value + ? clean(`background-image: + linear-gradient(180deg, ${maskStartColor}, ${maskEndColor}), + linear-gradient(0deg, ${maskStartColor}, ${maskEndColor})`) + : '', + // #ifndef APP-IOS + top: `background-image: linear-gradient(to bottom, ${maskStartColor}, ${maskEndColor})`, + bottom: `background-image: linear-gradient(to top, ${maskStartColor}, ${maskEndColor})`, + // #endif + // #ifdef APP-IOS + top: isInitializedRef.value ? 'background-color: rgba(0,0,0,0)' : '', + bottom: isInitializedRef.value ? 'background-color: rgba(0,0,0,0)' : '' + // #endif + } as PlatformMaskStyles + }); + + return { + maskConfig, + platformMaskStyles + } as UsePickerMaskReturn +}; \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/index.scss b/uni_modules/lime-picker/components/l-picker-view/index.scss new file mode 100644 index 0000000..3f0c17d --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/index.scss @@ -0,0 +1,191 @@ +@import '~@/uni_modules/lime-style/index.scss'; + +/* #ifdef uniVersion >= 4.75 */ +$use-css-var: true; +/* #endif */ + +$picker: #{$prefix}-picker-view; + + +$picker-border-radius: create-var(picker-border-radius, $border-radius-xl); +$picker-bg-color: create-var(picker-bg-color, $bg-color-container); +$picker-toolbar-height: create-var(picker-toolbar-height, 58px); + +$picker-cancel-color: create-var(picker-cancel-color, $text-color-2); +$picker-confirm-color: create-var(picker-confirm-color, $primary-color); +$picker-button-font-size: create-var(picker-button-font-size, $font-size-md); + +$picker-title-font-size: create-var(picker-title-font-size, 18px); +$picker-title-font-weight: create-var(picker-title-font-weight, 700); +$picker-title-line-height: create-var(picker-title-line-height, 26px); +$picker-title-color: create-var(picker-title-color, $text-color-1); + + +$picker-group-height: create-var(picker-group-height, 200px); +$picker-indicator-bg-color: create-var(picker-indicator-bg-color, $fill-3); +$picker-indicator-border-radius: create-var(picker-indicator-border-radius, $border-radius); +$picker-indicator-margin: create-var(picker-indicator-margin, 10px); + +$picker-item-height: create-var(picker-item-height, 50px); +$picker-item-active-color: create-var(picker-item-active-color, $text-color-1); + + +$picker-loading-mask-color: create-var(picker-loading-mask-color, rgba(255,255,255,.9)); +$picker-loading-color: create-var(picker-loading-color, $primary-color); + + +// $item: #{$prefix}-picker-item; +$picker-item-active-font-weight: create-var(picker-item-active-font-weight, 700); +$picker-item-color: create-var(picker-item-color, $text-color-1); +$picker-item-font-size: create-var(picker-item-font-size, $font-size-md); +$picker-mask-top-color: create-var(picker-mask-top-color, white); +$picker-mask-bottom-color: create-var(picker-mask-bottom-color, rgba(36, 36, 36, 0)); + + +.#{$picker} { + position: relative; + background-color: $picker-bg-color; + border-top-left-radius: $picker-border-radius; + border-top-right-radius: $picker-border-radius; + + &__toolbar { + display: flex; + align-items: center; + justify-content: space-between; + // overflow: hidden; + height: $picker-toolbar-height; + flex-direction: row; + position: relative; + } + &__title { + /* #ifdef UNI-APP-X && APP */ + position: absolute; + left: 50%; + top: 50%; + transform: translateX(-50%) translateY(-50%); + /* #endif */ + text-align: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: $picker-title-color; + // line-height: $picker-toolbar-height; + line-height: $picker-title-line-height; + font-weight: $picker-title-font-weight; + font-size: $picker-title-font-size; + } + + &__cancel, + &__confirm { + white-space: nowrap; + // position: absolute; + /* #ifndef UNI-APP-X && APP */ + display: flex; + align-items: center; + justify-content: center; + user-select: none; + /* #endif */ + font-size: $picker-button-font-size; + line-height: $picker-toolbar-height; + height: 100%; + // padding: 0 $spacer; + @include padding(0 $spacer); + } + + &__cancel { + // left: 0; + margin-right: auto; + color: $picker-cancel-color; + } + + &__confirm { + margin-left: auto; + color: $picker-confirm-color; + // right: 0 + } + + + &__main { + position: relative; + display: flex; + height: $picker-group-height; + flex-direction: row; + z-index: 2; + // padding: 0 $spacer-xs; + @include padding(0 $spacer-xs); + } + &__mask { + + } + &__empty { + pointer-events: none; + justify-content: center; + align-items: center; + display: flex; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 3; + } + &__loading { + z-index: 3; + // color: $picker-loading-color; + background-color: $picker-loading-mask-color; + // background-color: red; + justify-content: center; + align-items: center; + display: flex; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0 + } + &__indicator{ + position: absolute; + background-color: $picker-indicator-bg-color; + top: 50%; + left: $picker-indicator-margin; + right: $picker-indicator-margin; + height: $picker-item-height; + transform: translateY(-50%); + z-index: -1; + @include border-radius($picker-indicator-border-radius); + } + + &__group { + flex: 1; + width: 100%; + + &-item { + height: $picker-item-height; + line-height: $picker-item-height; + text-align: center; + /* #ifndef UNI-APP-X && APP */ + display: flex; + justify-content: center; + /* #endif */ + transition-duration: 100ms; + transition-property: font-weight, color; + transition-timing-function: linear; + font-weight: 400; + color: $picker-item-color; + font-size: $picker-item-font-size; + white-space: nowrap; + &--active { + color: $picker-item-active-color; + font-weight: $picker-item-active-font-weight; + } + } + } + &__indicator { + /* #ifndef UNI-APP-X && APP */ + height: $picker-item-height; + &:after,&:before{ + display: none; + } + /* #endif */ + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/l-picker-view.uvue b/uni_modules/lime-picker/components/l-picker-view/l-picker-view.uvue new file mode 100644 index 0000000..891570a --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/l-picker-view.uvue @@ -0,0 +1,285 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/l-picker-view.vue b/uni_modules/lime-picker/components/l-picker-view/l-picker-view.vue new file mode 100644 index 0000000..7a230f4 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/l-picker-view.vue @@ -0,0 +1,173 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/props.ts b/uni_modules/lime-picker/components/l-picker-view/props.ts new file mode 100644 index 0000000..90b128c --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/props.ts @@ -0,0 +1,128 @@ +// @ts-nocheck +export default { + /** + * 取消按钮文字 + */ + cancelBtn: { + type: String, + default: null + }, + cancelStyle: { + type: [String, Object], + default: null + }, + /** + * 确定按钮文字 + */ + confirmBtn: { + type: String, + default: null + }, + confirmStyle: { + type: [String, Object], + default: null + }, + keys: { + type: Object, + default: null + }, + /** + * 标题 + */ + title: { + type: String, + default: null + }, + titleStyle: { + type: [String, Object], + default: null + }, + /** + * 配置每一列的选项 + */ + columns: { + type: Array, + default: () => [] + }, + /** + * 选中值 + */ + modelValue: { + type: Array, + default: null + }, + defaultValue: { + type: Array, + default: null + }, + value: { + type: Array, + default: null + }, + /** + * 是否为加载状态 + */ + loading: { + type: Boolean, + default: false + }, + loadingColor: { + type: String, + default: null + }, + loadingMaskColor: { + type: String, + default: null + }, + loadingSize: { + type: String, + default: '64rpx' + }, + + itemHeight: { + type: String + }, + itemColor: { + type: String, + default: '' + }, + itemFontSize: { + type: String, + default: '' + }, + itemActiveColor: { + type: String, + default: '' + }, + itemActiveFontWeight: { + type: Number, + default: null + }, + + indicatorStyle: { + type: String, + default: '' + }, + bgColor: { + type: String, + default: null + }, + groupHeight: { + type: String, + default: '' + }, + radius: { + type: String, + default: null + }, + /** + * 列表更新后,是否归0 + */ + resetIndex: { + type: Boolean, + default: false + }, + maskColors: { + type: Array, + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/type.ts b/uni_modules/lime-picker/components/l-picker-view/type.ts new file mode 100644 index 0000000..efdb5dd --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/type.ts @@ -0,0 +1,10 @@ +// @ts-nocheck +import type{ PickerProps, PickerColumn, PickerValue, PickerColumnItem, PickerConfirmEvent, PickerPickEvent, PickerChangeInfo } from '../l-picker/type'; + +export type ManageChildInList = (child: LPickerItemComponentPublicInstance, shouldAdd: boolean) => void; +export type OnPick = (value: PickerValue, index:number, column: number) => void; +export type UpdateItems = (value: PickerValue, index:number, column: number) => void; + +export interface PickerViewProps extends PickerProps { + // 可以在这里添加l-picker-view特有的属性 +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker-view/usePickerView.ts b/uni_modules/lime-picker/components/l-picker-view/usePickerView.ts new file mode 100644 index 0000000..ad9379c --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker-view/usePickerView.ts @@ -0,0 +1,339 @@ +// @ts-nocheck +import type { PickerProps, PickerValue, PickerColumnItem, PickerColumn, PickerConfirmEvent, PickerPickEvent } from '../l-picker/type'; +import { arrayEqual } from '@/uni_modules/lime-shared/arrayEqual'; +import { clamp } from '@/uni_modules/lime-shared/clamp'; +import { assignAtIndex } from '@/uni_modules/lime-shared/assignAtIndex' +// #ifndef UNI-APP-X +import { computed, ref, watch, onMounted, nextTick, onBeforeUnmount, toRaw, WritableComputedOptions, Ref, ComputedRef } from '@/uni_modules/lime-shared/vue'; +// #endif +// #ifdef UNI-APP-X +import type { ComputedRef } from 'vue' +// #endif + +// 定义 usePickerView 钩子的返回类型接口 +export type UsePickerViewReturn = { + // 状态 + defaultValue : Ref; + curIndex : Ref; + curValue : Ref; + curItem : Ref; + + // 计算属性 + modelValue : ComputedRef; + isEmpty : ComputedRef; + innerIndex : ComputedRef; + + // 方法 + getIndexByValue : (val : PickerValue | null, columnIndex : number) => number; + setIndex : (indexes : number[]) => void; + setValue : (values : PickerValue[]) => void; + updatePickerItems : () => void; + handlePick : (e : UniPickerViewChangeEvent) => void; + onCancel : (e : UniPointerEvent) => void; + onConfirm : () => void; + getSelectedOptions : () => PickerConfirmEvent; +} + + +/** + * 检测变化的列索引 + * @param newIndexes 新的索引数组 + * @param oldIndexes 旧的索引数组 + * @returns 变化的列索引,如果没有变化返回-1 + */ +const findChangedColumnIndex = ( + newIndexes : number[], + oldIndexes : number[] +) : number => { + // 比较两个数组的长度,取较长的进行遍历 + const maxLength = Math.max(newIndexes.length, oldIndexes.length); + + for (let i = 0; i < maxLength; i++) { + const newIndex = i < newIndexes.length ? newIndexes[i] : null; + const oldIndex = i < oldIndexes.length ? oldIndexes[i] : null; + + // 如果索引不相等,说明该列发生了变化 + if (newIndex != oldIndex) { + return i; + } + } + + return -1; // 没有变化 +}; + + +export function usePickerView(props : PickerProps) : UsePickerViewReturn { + // 内部状态管理 + const defaultValue = ref(props.value ?? props.modelValue ?? props.defaultValue ?? []); + const curIndex = ref([]); + const curValue = ref([]); + const curItem = ref([]); + // 添加初始化标志 + let isInitialized = false; + let isInternalChange = false; + + const instance = getCurrentInstance()?.proxy + // 计算属性 + const modelValue = computed({ + set(value : PickerValue[]) { + if (arrayEqual(value, defaultValue.value)) return; + defaultValue.value = value; + instance?.$emit('update:modelValue', value); + instance?.$emit('change', value); + }, + get() : PickerValue[] { + return props.value ?? props.modelValue ?? defaultValue.value; + } + } as WritableComputedOptions); + + const isEmpty = computed(() : boolean => { + return props.columns.length == 0 || props.columns.every(column => column.length == 0); + }); + + const innerIndex = computed(() : number[] => { + return curIndex.value; + }); + + // 辅助方法 + const getIndexByValue = (val : PickerValue | null, columnIndex : number) : number => { + let defaultIndex = 0; + if (val != null && props.columns.length > columnIndex) { + defaultIndex = props.columns[columnIndex].findIndex((item) => item.value == val); + + } + + return defaultIndex < 0 ? 0 : defaultIndex; + }; + + const setIndex = (indexes : number[]) => { + const oldIndex = [...curIndex.value] + indexes.forEach((index, columnIndex) => { + if (props.columns.length < columnIndex + 1) return; + // let lastIndex = curIndex.value[columnIndex] || 0; + let _index = clamp(index, 0, props.columns[columnIndex].length - 1); + if (props.columns[columnIndex].length > _index) { + assignAtIndex(curIndex.value, columnIndex, _index) + assignAtIndex(curValue.value, columnIndex, props.columns[columnIndex][_index].value) + assignAtIndex(curItem.value, columnIndex, props.columns[columnIndex][_index]) + } + }); + // 只有创建新的数组 watch才能监听到 + curIndex.value = [...curIndex.value] + curValue.value = [...curValue.value] + curItem.value = [...curItem.value] + }; + + const setValue = (values : PickerValue[]) => { + if (arrayEqual(values, curValue.value)) return; + + const indexes : number[] = []; + values.forEach((value, columnIndex) => { + const index = getIndexByValue(value, columnIndex); + indexes.push(index); + }); + // _changedColumn = -1 + setIndex(indexes); + }; + + const updatePickerItems = () => { + const _indexs : number[] = []; + const _values : PickerValue[] = []; + const _oldIndexs = curIndex.value + props.columns.forEach((column, columnIndex) => { + if (column.length == 0) return; + const value = curValue.value.length > columnIndex ? curValue.value[columnIndex] : null; + const index = value == null ? 0 : getIndexByValue(value, columnIndex); + const item = column[index]; + + _indexs.push(index); + _values.push(item.value); + assignAtIndex(curItem.value, columnIndex, item) + + }); + + if (arrayEqual(curValue.value, _values) && arrayEqual(curIndex.value, _indexs)) return; + curIndex.value = _indexs; + curValue.value = _values; + modelValue.value = [...curValue.value]; + + // #ifdef APP-IOS + + if (_oldIndexs.length != _indexs.length) return + // uniappx ios可能无法滚动到指定项 + // 所以先找到变化的列 让列里的项先前滚动再滚回 + // 找出变化的列 + const changedColumn = findChangedColumnIndex(_indexs, _oldIndexs) + isInternalChange = true + requestAnimationFrame(() => { + const value = curIndex.value[changedColumn] + curIndex.value[changedColumn] = value - 1 + requestAnimationFrame(() => { + curIndex.value[changedColumn] = value + requestAnimationFrame(() => { + isInternalChange = false + }) + }) + }) + // #endif + + + }; + + // 事件处理 + const handlePick = (e : UniPickerViewChangeEvent) => { + // 如果是初始化阶段,不处理 + if (!isInitialized || isInternalChange) return; + const indexes = [...e.detail.value]; + if (arrayEqual(indexes, curIndex.value)) return; + // 处理索引越界问题 + indexes.forEach((v, i) => { + if (i < props.columns.length) { + const n = props.columns[i].length; + + if (v >= n) { + indexes[i] = n - 1; + } + } + }); + // 找出变化的列 + const changedColumn = findChangedColumnIndex(indexes, curIndex.value) + // let changedColumn = -1; + // for (let i = 0; i < indexes.length; i++) { + + // if (i < curIndex.value.length) { + // if (indexes[i] != curIndex.value[i]) { + // changedColumn = i; + // break; + // } + // } else { + // // 如果当前索引不存在,说明是新增的列 + // changedColumn = i; + // break; + // } + // } + setIndex(indexes); + if (changedColumn != -1) { + const column = props.columns[changedColumn]; + const index = indexes[changedColumn]; + const item = column[index]; + + const obj : PickerPickEvent = { + values: curValue.value, + column: changedColumn, + index + }; + + modelValue.value = [...curValue.value]; + instance?.$emit('pick', obj); + } + }; + + const onCancel = (e : UniPointerEvent) => { + updatePickerItems(); + instance?.$emit('cancel', e); + }; + + const onConfirm = () => { + const values = [...curValue.value]; + const indexs = [...curIndex.value]; + const items = curItem.value.map((item) : PickerColumnItem => toRaw(item)); + + if (!arrayEqual(modelValue.value, values)) { + modelValue.value = values; + } + + const obj : PickerConfirmEvent = { + values, + indexs, + items + }; + + instance?.$emit('confirm', obj); + }; + + const getSelectedOptions = () : PickerConfirmEvent => { + const values = [...curValue.value]; + const indexs = [...curIndex.value]; + const items = curItem.value.map((item) : PickerColumnItem => toRaw(item)); + + if (!arrayEqual(modelValue.value, values)) { + modelValue.value = values; + } + + const obj : PickerConfirmEvent = { + values, + indexs, + items + }; + + return obj; + }; + + // 生命周期管理 + const stopModelValue = watch(modelValue, () => { + // 如果是初始化阶段,不处理 + if (!isInitialized) return; + if (arrayEqual(modelValue.value, curValue.value)) return; + curValue.value = modelValue.value.map((item : PickerValue) => item); + updatePickerItems(); + }); + + // const stopColumns = watch(() : PickerColumn[] => props.columns, () => { + // updatePickerItems(); + // }, { deep: true }); + + const stopColumns = watchEffect(() => { + const currentColumns = props.columns; + if (!isInitialized) return + nextTick(() => { + // 可能会跟change发生冲突 + updatePickerItems(); + }) + }) + + onMounted(() => { + if ( + !arrayEqual(modelValue.value, curValue.value) && + modelValue.value.length > 0) { + isInternalChange = true; // 标记为内部变化 + curValue.value = [...modelValue.value]; + } + updatePickerItems(); + // 延迟设置初始化完成标志 + nextTick(() => { + setTimeout(() => { + isInitialized = true; + isInternalChange = false; + }, 300) + }); + }); + + onBeforeUnmount(() => { + stopModelValue(); + stopColumns(); + }); + + // 返回所有需要在模板中使用的状态和方法 + return { + // 状态 + defaultValue, + curIndex, + curValue, + curItem, + + // 计算属性 + modelValue, + isEmpty, + innerIndex, + + // 方法 + getIndexByValue, + setIndex, + setValue, + updatePickerItems, + handlePick, + onCancel, + onConfirm, + getSelectedOptions + } as UsePickerViewReturn; +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/index.scss b/uni_modules/lime-picker/components/l-picker/index.scss new file mode 100644 index 0000000..687094c --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/index.scss @@ -0,0 +1,149 @@ +@import '~@/uni_modules/lime-style/index.scss'; + +/* #ifdef uniVersion >= 4.75 */ +$use-css-var: true; +/* #endif */ + +$picker: #{$prefix}-picker; + + +$picker-border-radius: create-var(picker-border-radius, $border-radius-xl); +$picker-bg-color: create-var(picker-bg-color, $bg-color-container); +$picker-toolbar-height: create-var(picker-toolbar-height, 58px); + +$picker-cancel-color: create-var(picker-cancel-color, $text-color-2); +$picker-confirm-color: create-var(picker-confirm-color, $primary-color); +$picker-button-font-size: create-var(picker-button-font-size, $font-size-md); + +$picker-title-font-size: create-var(picker-title-font-size, 18px); +$picker-title-font-weight: create-var(picker-title-font-weight, 700); +$picker-title-line-height: create-var(picker-title-line-height, 26px); +$picker-title-color: create-var(picker-title-color, $text-color-1); + + +$picker-group-height: create-var(picker-group-height, 200px); +$picker-indicator-bg-color: create-var(picker-indicator-bg-color, $fill-3); +$picker-indicator-border-radius: create-var(picker-indicator-border-radius, $border-radius); +$picker-indicator-margin: create-var(picker-indicator-margin, 10px); + +$picker-item-height: create-var(picker-item-height, 50px); +$picker-item-active-color: create-var(picker-item-active-color, $text-color-1); + + +$picker-loading-mask-color: create-var(picker-loading-mask-color, rgba(255,255,255,.9)); +$picker-loading-color: create-var(picker-loading-color, $primary-color); + +.#{$picker} { + position: relative; + background-color: $picker-bg-color; + border-top-left-radius: $picker-border-radius; + border-top-right-radius: $picker-border-radius; + + &__toolbar { + display: flex; + align-items: center; + justify-content: space-between; + // overflow: hidden; + height: $picker-toolbar-height; + flex-direction: row; + position: relative; + } + &__title { + /* #ifdef APP-ANDROID || APP-IOS */ + // 鸿蒙使用定位在弹窗里会导致样式不生效 + position: absolute; + left: 50%; + top: 50%; + transform: translateX(-50%) translateY(-50%); + /* #endif */ + text-align: center; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + color: $picker-title-color; + // line-height: $picker-toolbar-height; + line-height: $picker-title-line-height; + font-weight: $picker-title-font-weight; + font-size: $picker-title-font-size; + } + + &__cancel, + &__confirm { + white-space: nowrap; + // position: absolute; + /* #ifndef UNI-APP-X && APP */ + display: flex; + align-items: center; + justify-content: center; + user-select: none; + /* #endif */ + font-size: $picker-button-font-size; + line-height: $picker-toolbar-height; + height: 100%; + // padding: 0 $spacer; + @include padding(0 $spacer); + } + + &__cancel { + // left: 0; + margin-right: auto; + color: $picker-cancel-color; + } + + &__confirm { + margin-left: auto; + color: $picker-confirm-color; + // right: 0 + } + + + &__main { + position: relative; + display: flex; + height: $picker-group-height; + flex-direction: row; + z-index: 2; + // padding: 0 $spacer-xs; + @include padding(0 $spacer-xs); + } + &__mask { + + } + &__empty { + pointer-events: none; + justify-content: center; + align-items: center; + display: flex; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: 3; + } + &__loading { + z-index: 3; + // color: $picker-loading-color; + background-color: $picker-loading-mask-color; + // background-color: red; + justify-content: center; + align-items: center; + display: flex; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0 + } + &__indicator{ + position: absolute; + background-color: $picker-indicator-bg-color; + top: 50%; + left: $picker-indicator-margin; + right: $picker-indicator-margin; + height: $picker-item-height; + transform: translateY(-50%); + z-index: -1; + @include border-radius($picker-indicator-border-radius); + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/l-picker.uvue b/uni_modules/lime-picker/components/l-picker/l-picker.uvue new file mode 100644 index 0000000..f77c044 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/l-picker.uvue @@ -0,0 +1,269 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/l-picker.vue b/uni_modules/lime-picker/components/l-picker/l-picker.vue new file mode 100644 index 0000000..b129e29 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/l-picker.vue @@ -0,0 +1,271 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/props.ts b/uni_modules/lime-picker/components/l-picker/props.ts new file mode 100644 index 0000000..b920383 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/props.ts @@ -0,0 +1,126 @@ +// @ts-nocheck +export default { + /** + * 取消按钮文字 + */ + cancelBtn: { + type: String, + default: null + }, + cancelStyle: { + type: [String, Object], + default: null + }, + /** + * 确定按钮文字 + */ + confirmBtn: { + type: String, + default: null + }, + confirmStyle: { + type: [String, Object], + default: null + }, + keys: { + type: Object, + default: null + }, + /** + * 标题 + */ + title: { + type: String, + default: null + }, + titleStyle: { + type: [String, Object], + default: null + }, + /** + * 配置每一列的选项 + */ + columns: { + type: Array, + default: () => [] + }, + /** + * 选中值 + */ + modelValue: { + type: Array, + default: null + }, + defaultValue: { + type: Array, + default: null + }, + value: { + type: Array, + default: null + }, + /** + * 是否为加载状态 + */ + loading: { + type: Boolean, + default: false + }, + loadingColor: { + type: String, + default: null + }, + loadingMaskColor: { + type: String, + default: null + }, + loadingSize: { + type: String, + default: '64rpx' + }, + itemHeight: { + type: String + }, + itemColor: { + type: String, + default: '' + }, + itemFontSize: { + type: String, + default: '' + }, + itemActiveColor: { + type: String, + default: '' + }, + itemActiveFontWeight: { + type: Number, + default: null + }, + indicatorStyle: { + type: String, + default: '' + }, + bgColor: { + type: String, + default: null + }, + groupHeight: { + type: String, + default: '' + }, + radius: { + type: String, + default: null + }, + /** + * 列表更新后,是否归0 + */ + resetIndex: { + type: Boolean, + default: false + }, + maskColors: { + type: Array, + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/type.ts b/uni_modules/lime-picker/components/l-picker/type.ts new file mode 100644 index 0000000..0325033 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/type.ts @@ -0,0 +1,87 @@ +// @ts-nocheck +export type PickerValue = string | number; +export type LimePickerValue = string | number; +export type PickerColumnItem = { + id: any|null; + label : string; + disabled: boolean | null; + value : string;//string | number; + children : PickerColumn | null +} +export type PickerColumn = PickerColumnItem[]; +export type PickerPickEvent= { + values: PickerValue[]; + column : number; + index : number; +} +export type PickerConfirmEvent = { + values: PickerValue[] + indexs: number[] + items: PickerColumnItem[] +} +/** + * 定义比较数组时返回的变化对象类型。 + */ +export type PickerChangeInfo = { + column: number; // 变化的列索引 + direction: 1 | -1 | 0; // 变化方向:1 表示增加,-1 表示减少, 0表示无变化 + index: number; // 变化后的新值,在列表中表示下标 +} + + +export interface PickerProps { + /** + * 取消按钮文字 + */ + cancelBtn ?: string; + cancelStyle ?: string | UTSJSONObject; + /** + * 确定按钮文字 + */ + confirmBtn ?: string; + confirmStyle ?: string | UTSJSONObject; + /** + * 标题 + */ + title ?: string; + titleStyle ?: string | UTSJSONObject; + /** + * 用来定义 value / label 在 `options` 中对应的字段别名 + */ + keys?: UTSJSONObject; + /** + * 配置每一列的选项 + */ + columns : PickerColumn[]; + /** + * 选中值 + */ + modelValue ?: PickerValue[]; + defaultValue ?: PickerValue[]; + value ?: PickerValue[]; + /** + * 是否为加载状态 + */ + loading: boolean; + loadingColor?: string; + loadingMaskColor?: string; + loadingSize: string; + + itemHeight?: string; + itemColor?: string; + itemFontSize?: string; + itemActiveColor?: string; + itemActiveFontWeight?: number; + + indicatorStyle?: string; + /** + * 遮罩渐变颜色,格式为 [起始颜色, 结束颜色] + * 例如:['#ffffff', 'rgba(255,255,255,0)'] + * 若未提供,则根据主题(明/暗)自动计算 + */ + maskColors?: string[]; + bgColor?:string; + groupHeight?:string; + radius?:string; + resetIndex: boolean +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/l-picker/utils.ts b/uni_modules/lime-picker/components/l-picker/utils.ts new file mode 100644 index 0000000..00bdab8 --- /dev/null +++ b/uni_modules/lime-picker/components/l-picker/utils.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +/** + * 在数组的指定位置插入或更新值。 + * 如果指定的索引小于数组的长度,则更新该位置的值。 + * 如果指定的索引大于或等于数组的长度,则将值添加到数组的末尾。 + * + * @param {number[]} arr - 要操作的数字数组。 + * @param {number} index - 要插入或更新值的索引位置。 + * @param {number} value - 要插入或更新的值。 + */ +export function pushAt(arr : T[], index : number, value : T) { + // #ifdef APP-ANDROID + if (index < arr.length) { + arr[index] = value; + } else { + arr.push(value); + } + // #endif + // #ifndef APP-ANDROID + arr[index] = value; + // #endif +}; + + +/** + * 精确比较两个数组是否相等(浅比较) + * @param arr1 数组1 + * @param arr2 数组2 + * @returns 是否相等 + */ +export function arraysEqual(arr1 : T[], arr2 : T[]) : boolean { + return ( + arr1.length == arr2.length && + arr1.every((val, i):boolean => val == arr2[i]) + ) +} \ No newline at end of file diff --git a/uni_modules/lime-picker/components/lime-picker/lime-picker.uvue b/uni_modules/lime-picker/components/lime-picker/lime-picker.uvue new file mode 100644 index 0000000..f2108a3 --- /dev/null +++ b/uni_modules/lime-picker/components/lime-picker/lime-picker.uvue @@ -0,0 +1,411 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/components/lime-picker/lime-picker.vue b/uni_modules/lime-picker/components/lime-picker/lime-picker.vue new file mode 100644 index 0000000..978b1b4 --- /dev/null +++ b/uni_modules/lime-picker/components/lime-picker/lime-picker.vue @@ -0,0 +1,398 @@ + + + \ No newline at end of file diff --git a/uni_modules/lime-picker/index.uts b/uni_modules/lime-picker/index.uts new file mode 100644 index 0000000..7cfb56a --- /dev/null +++ b/uni_modules/lime-picker/index.uts @@ -0,0 +1,6 @@ +// @ts-nocheck +export * from './components/l-picker/type' +// export { LimePickerValue } from './components/l-picker/type' + +// export type PickerValue = string | number; +// export type LimePickerValue = PickerValue; \ No newline at end of file diff --git a/uni_modules/lime-picker/package.json b/uni_modules/lime-picker/package.json new file mode 100644 index 0000000..0436ffe --- /dev/null +++ b/uni_modules/lime-picker/package.json @@ -0,0 +1,110 @@ +{ + "id": "lime-picker", + "displayName": "lime-picker 选择器", + "version": "0.3.8", + "description": "lime-picker 用于一组预设数据中的选择。支持单列选择、多列选择,兼容uniapp/uniappx", + "keywords": [ + "lime-picker", + "picker", + "选择器" +], + "repository": "", + "engines": { + "HBuilderX": "^4.36", + "uni-app": "^4.51", + "uni-app-x": "^4.45" + }, + "dcloudext": { + "type": "component-vue", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "lime-style", + "lime-shared", + "lime-loading" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-picker/readme.md b/uni_modules/lime-picker/readme.md new file mode 100644 index 0000000..81c499e --- /dev/null +++ b/uni_modules/lime-picker/readme.md @@ -0,0 +1,573 @@ +# lime-picker 选择器 +一个功能丰富的选择器组件,用于在一组预设数据中进行选择,支持单列/多列选择、级联选择、多列联动、自定义样式、加载状态和空状态等功能。 + +> 插件依赖:`lime-style`、`lime-shared`、`lime-loading` + +## 文档链接 +📚 组件详细文档请访问以下站点: +- [选择器文档 - 站点1](https://limex.qcoon.cn/components/picker.html) +- [选择器文档 - 站点2](https://limeui.netlify.app/components/picker.html) +- [选择器文档 - 站点3](https://limeui.familyzone.top/components/picker.html) + +## 安装方法 +1. 在uni-app插件市场中搜索并导入`lime-picker` +2. 首次导入可能需要重新编译 +3. 在页面中使用`l-picker`组件(组件)或`lime-picker`(演示) + + +## 代码演示 + +### 基础用法 + +Picker 组件可通过 `columns` 属性配置选项数据,或子组件`l-picker-item`的`options`配置数据,二选一。
+顶部栏包含标题、确认按钮和取消按钮,点击确认按钮触发 `confirm` 事件,点击取消按钮触发 `cancel` 事件。 +```html + + + + + + +``` +```js +// 非TS项目不需要引入类型 +import type { PickerColumn, PickerConfirmEvent } from '@/uni_modules/lime-picker'; + +// 通过`l-picker-item`子组件时,数据结构为单数组 +// PickerColumn +const cityOptions = [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + } +] as PickerColumn + +// 通过 Picker 的 columns 属性的数组结构为[PickerColumn, PickerColumn] + +const columns = [ + // 第一列 + cityOptions, +] + +const onConfirm = ({values} : PickerConfirmEvent) => { + showToast(`当前值: ${values.join(',')}`); +}; +const onChange = ({values, column, index} : PickerPickEvent) => { + showToast(`当前值: ${values.join(',')}`); +}; +const onCancel = () => {console.log('取消')}; +``` + + + + +### 搭配弹出层使用 + +在实际场景中,Picker 通常作为用于辅助表单填写,可以搭配 [Popup](https://ext.dcloud.net.cn/plugin?id=20769)。 + +```html + + + + + +``` +```js +import type { PickerColumn } from '@/uni_modules/lime-picker'; +const showPicker = ref(false) +const cityOptions = [ + [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + } + ] +] as PickerColumn[] +``` + + +### 多列 +`columns` 属性可以通过二维数组的形式配置多列选择。也可以使用`l-picker-item`子组件实现多列。 +```html + + + + + + +``` +```js +import type { PickerColumn } from '@/uni_modules/lime-picker'; +const showPicker = ref(false) +const years = [ + { + label: '2024', + value: '2024', + }, + { + label: '2025', + value: '2025', + } +] as PickerColumn +const seasonOptions = [ + { + label: '春', + value: '春', + }, + { + label: '夏', + value: '夏', + }, + { + label: '秋', + value: '秋', + }, + { + label: '冬', + value: '冬', + }, +] as PickerColumn + +const seasonColumns = [years, seasonOptions] + +``` + +### 双向绑定 + +通过 `v-model` 可以绑定当前选中项的 `values`,修改 `v-model` 绑定的值时,`Picker` 的选中状态也会随之改变。 + +`v-model` 的值是一个数组,数组的第一位对应第一列选中项的 `value`,第二位对应第二列选中项的 `value`,以此类推。 + +```html + + + +``` +```js +import type { PickerColumn } from '@/uni_modules/lime-picker'; +const citys = ref(['上海市']) +const cityOptions = [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + }, + { + label: '广州市', + value: '广州市', + }, + { + label: '深圳市', + value: '深圳市', + }, +] as PickerColumn +``` + + +### 加载状态 + +若选择器数据是异步获取的,可以通过 `loading` 属性显示加载提示。 +```html + +``` +```js +import type { PickerColumn } from '@/uni_modules/lime-picker'; +const cityOptions = [ + [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + }, + { + label: '广州市', + value: '广州市', + }, + { + label: '深圳市', + value: '深圳市', + }, + ] +] as PickerColumn[] +``` + +### 空状态 +当数据为空时,可以使用 `empty` 插槽自定义空状态内容。[empty插件](https://ext.dcloud.net.cn/plugin?id=19563) +```html + + + +``` +```js +import type { PickerColumn } from '@/uni_modules/lime-picker'; +const cityOptions = [] as PickerColumn[] +``` + + +### 多列联动 +通过`pick`事件完成联动操作。 +```html + + + + + +``` +```js +import type { PickerColumn, PickerColumnItem, PickerConfirmEvent, PickerPickEvent } from '@/uni_modules/lime-picker'; +const areaList = { + provinces: { + '110000': '北京市', + '440000': '广东省', + }, + cities: { + '110100': '北京市', + '440100': '广州市', + '440200': '韶关市', + '440300': '深圳市', + '440400': '珠海市', + '440500': '汕头市', + '440600': '佛山市', + }, + counties: { + '110101': '东城区', + '110102': '西城区', + '110105': '朝阳区', + '110106': '丰台区', + '110107': '石景山区', + '110108': '海淀区', + '110109': '门头沟区', + '110111': '房山区', + '110112': '通州区', + '110113': '顺义区', + '110114': '昌平区', + '110115': '大兴区', + '110116': '怀柔区', + '110117': '平谷区', + '110118': '密云区', + '110119': '延庆区', + '440103': '荔湾区', + '440104': '越秀区', + '440105': '海珠区', + '440106': '天河区', + '440111': '白云区', + '440112': '黄埔区', + '440113': '番禺区', + '440114': '花都区', + '440115': '南沙区', + '440117': '从化区', + '440118': '增城区', + '440203': '武江区', + '440204': '浈江区', + '440205': '曲江区', + '440222': '始兴县', + '440224': '仁化县', + '440229': '翁源县', + '440232': '乳源瑶族自治县', + '440233': '新丰县', + '440281': '乐昌市', + '440282': '南雄市', + '440303': '罗湖区', + '440304': '福田区', + '440305': '南山区', + '440306': '宝安区', + '440307': '龙岗区', + '440308': '盐田区', + '440309': '龙华区', + '440310': '坪山区', + '440311': '光明区', + '440402': '香洲区', + '440403': '斗门区', + '440404': '金湾区', + '440507': '龙湖区', + '440511': '金平区', + '440512': '濠江区', + '440513': '潮阳区', + '440514': '潮南区', + '440515': '澄海区', + '440523': '南澳县', + '440604': '禅城区', + '440605': '南海区', + '440606': '顺德区', + '440607': '三水区', + '440608': '高明区', + }, +}; + +// UTSJSONObject 为uniapp x的 object,非uniapp 可使用Object +const getOptions = (obj : UTSJSONObject, filter ?: ((value : PickerColumnItem) => boolean) | null) : PickerColumn => { + const res = UTSJSONObject.keys(obj).map((key) : PickerColumnItem => { + return { + // id: key, + value: `${key}`, + label: `${obj[key]}` + } as PickerColumnItem + }) + if (filter != null) { + return res.filter(filter) + } + return res +} +const match = (v1 : string, v2 : string, size : number) : boolean => { + return v1.slice(0, size) == v2.slice(0, size) +}; +const getCounties = (cityValue : string) : PickerColumn => { + return getOptions(areaList.counties as UTSJSONObject, (county : PickerColumnItem) : boolean => match(county.value, cityValue, 4)); +}; +const getCities = (provinceValue : string) : PickerColumn[] => { + const cities = getOptions(areaList.cities as UTSJSONObject, (city : PickerColumnItem) : boolean => match(city.value, provinceValue, 2)); + const counties = getCounties(cities[0].value); + return [cities, counties]; +}; +// 省 +const provinces = ref([]); +provinces.value = getOptions(areaList.provinces as UTSJSONObject, null) +const data = getCities(provinces.value[0].value); +// 市 +const cities = ref(data[0]); +// 区 +const counties = ref(data[1]); + +const onConfirm = (context : PickerConfirmEvent) => { + console.log('context', context) +} +const onChange = ({values, column, index} : PickerPickEvent) => { + // column 表示第几列 + // index 表示列数组里的下标 + if (column == 0) { + // 更改省份 + const data = getCities(provinces.value[index].value); + cities.value = data[0]; + counties.value = data[1]; + } + + if (column == 1) { + // 更改城市 + counties.value = getCounties(cities.value[index].value); + } + + if (column == 2) { + // 更改区县 + } +} +``` + +### 级联选择 +使用 `l-cascade` 组件 通过`columns` 的 `children` 字段可以实现选项级联的效果。如果级联层级较多,推荐使用 [Cascader 级联选项组件](https://ext.dcloud.net.cn/plugin?id=20880)。 + +```html + +``` +```js + const columns = [ + { + lable: '浙江', + value: 'Zhejiang', + children: [ + { + lable: '杭州', + value: 'Hangzhou', + children: [ + { lable: '西湖区', value: 'Xihu' }, + { lable: '余杭区', value: 'Yuhang' }, + ], + }, + { + lable: '温州', + value: 'Wenzhou', + children: [ + { lable: '鹿城区', value: 'Lucheng' }, + { lable: '瓯海区', value: 'Ouhai' }, + ], + }, + ], + }, + { + lable: '福建', + value: 'Fujian', + children: [ + { + lable: '福州', + value: 'Fuzhou', + children: [ + { lable: '鼓楼区', value: 'Gulou' }, + { lable: '台江区', value: 'Taijiang' }, + ], + }, + { + lable: '厦门', + value: 'Xiamen', + children: [ + { lable: '思明区', value: 'Siming' }, + { lable: '海沧区', value: 'Haicang' }, + ], + }, + ], + }, + ]; +``` + +## 快速预览 +导入后直接使用这个标签查看演示效果 + +```html + + +``` + +## 插件标签说明 +- `l-picker`: 组件标签 +- `lime-picker`: 演示标签 + + +## Vue2使用说明 +本插件使用了`composition-api`,请按照[官方教程](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置。 + +```js +// main.js +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +## API 文档 + +### Picker Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| v-model | 当前选中项对应的值 | _string\|number[]_ | - | +| value | 当前选中项对应的值 | _string\|number[]_ | - | +| columns | 对象数组,配置每一列显示的数据 | _PickerColumn[]_ | `false` | +| cancelBtn | 取消按钮文字 | _string_ | `` | +| cancelStyle | 取消按钮样式 | _string_ | `` | +| confirmBtn | 确定按钮文字 | _string_ | `` | +| confirmStyle | 确定按钮样式 | _string_ | `` | +| title | 标题 | _string_ | `` | +| titleStyle | 标题样式 | _string_ | `` | +| loading | 是否显示加载状态 | _boolean_ | `false` | +| loadingColor | 加载图标颜色 | _string_ | `` | +| loadingMaskColor | 加载遮罩背景颜色 | _string_ | `` | +| loadingSize | 加载图标大小 | _string_ | `` | +| itemHeight | 每项高度 | _string_ | `50px` | +| itemColor | 每项文本颜色 | _string_ | `` | +| itemFontSize | 每项文本字体大小 | _string_ | `` | +| itemActiveColor | 每项文本选中颜色 | _string_ | `` | +| indicatorStyle | 选择器中间选中框的样式 | _string_ | `` | +| maskColors | 选择器遮罩颜色样式,`[开始颜色, 结束颜色]` | _string[]_ | `` | +| bgColor | 选择器背景色 | _string_ | `` | +| groupHeight | 选项组高度 | _string_ | `400rpx` | +| radius | 圆角 | _string_ | | + +### PickerItem Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| options | 对象数组,配置列显示的数据 | _PickerColumnItem[]_ | `false` | +| value | 值 | _string_ | | +| column | 当前为第几列 | _number_ | | + + +### Events +| 事件名 | 说明 | 回调参数 | +| ------ | ------------------------ | ---------------------- | +| cancel | 点击取消按钮时触发 | __ | +| change | 选中变化时候触发 | _value: string\|number[]_ | +| confirm | 点击确认按钮时触发 | _{values: PickerValue[], indexs:number[], items:PickerColumnItem[]}:PickerConfirmEvent_ | +| pick | 任何一列选中都会触发,不同的列参数不同,column 表示第几列变化,index 表示变化那一列的选中项下标 | _{values: PickerValue[], column:number,index:number}:PickerPickEvent_ | + +### Picker Slots +| 插槽名 | 说明 | 回调参数 | +| ------ | ------------------------ | ---------------------- | +| default | | __ | +| header | 头部 | __ | +| footer | 底部 | __ | +| empty | 空数据插槽 | __ | + +### 方法 +通过 ref 可以获取到 Picker 实例并调用实例方法: + +| 方法名 | 说明 | 返回值 | +| ------ | ------------------------ | ---------------------- | +| confirm | 停止惯性滚动并触发 `confirm` 事件 | __ | +| getSelectedOptions | 获取当前选中的选项 | PickerConfirmEvent[] | + +```js +// cascade 组件类型为 LCascadeComponentPublicInstance +// picker 组件类型为 LPickerComponentPublicInstance +const pickerRef = ref(null) +pickerRef.value?.confirm() +const res = pickerRef.value?.getSelectedOptions() +``` + +## 主题定制 + +组件提供了下列 CSS 变量,可用于自定义样式。 + +| 变量名 | 默认值 | 说明 | +|--------|--------|------| +| `--l-picker-border-radius` | `$border-radius-xl` | 选择器整体圆角 | +| `--l-picker-bg-color` | `$bg-color-container` | 选择器背景色 | +| `--l-picker-toolbar-height` | `58px` | 工具栏高度 | +| `--l-picker-cancel-color` | `$text-color-2` | 取消按钮文字颜色 | +| `--l-picker-confirm-color` | `$primary-color` | 确认按钮文字颜色 | +| `--l-picker-button-font-size` | `$font-size-md` | 按钮文字大小 | +| `--l-picker-title-font-size` | `18px` | 标题文字大小 | +| `--l-picker-title-font-weight` | `700` | 标题文字粗细 | +| `--l-picker-title-line-height` | `26px` | 标题行高 | +| `--l-picker-title-color` | `$text-color-1` | 标题文字颜色 | +| `--l-picker-group-height` | `200px` | 选择器内容区高度 | +| `--l-picker-indicator-bg-color` | `$fill-4` | 选中指示器背景色 | +| `--l-picker-indicator-border-radius` | `6px` | 选中指示器圆角 | +| `--l-picker-indicator-margin` | `10px` | 选中指示器边距 | +| `--l-picker-item-height` | `50px` | 每个选项高度 | +| `--l-picker-item-color` | `$text-color-1` | 选项文字颜色 | +| `--l-picker-item-active-color` | `$text-color-1` | 选中项文字颜色 | +| `--l-picker-mask-top-color` | `white` | 遮罩开始颜色 | +| `--l-picker-mask-bottom-color` | `white` | 遮罩结束颜色 | +| `--l-picker-item-active-font-weight` | `700` | 选中项文字粗细 | +| `--l-picker-item-font-size` | `$font-size-md` | 选项文字大小 | +| `--l-picker-loading-mask-color` | `rgba(255,255,255,.9)` | 加载遮罩颜色 | +| `--l-picker-loading-color` | `$primary-color` | 加载动画颜色 | + + +## 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | \ No newline at end of file diff --git a/uni_modules/lime-picker/readme_old.md b/uni_modules/lime-picker/readme_old.md new file mode 100644 index 0000000..f4d762b --- /dev/null +++ b/uni_modules/lime-picker/readme_old.md @@ -0,0 +1,555 @@ +# lime-picker 选择器 +用于一组预设数据中的选择。通常与弹出层组件配合使用。 +插件依赖`lime-style`,`lime-shared`,`lime-loading`不喜勿下 + +## 文档 + 🚀 [picker【站点1】](https://limex.qcoon.cn/components/picker.html) + 🌍 [picker【站点2】](https://limeui.netlify.app/components/picker.html) + 🔥 [picker【站点3】](https://limeui.familyzone.top/components/picker.html) + + +## 安装 +插件市场导入即可。首次导入可能需要重新编译 + + +## 代码演示 + +### 基础用法 + +Picker 组件可通过 `columns` 属性配置选项数据,或子组件`l-picker-item`的`options`配置数据,二选一。
+顶部栏包含标题、确认按钮和取消按钮,点击确认按钮触发 `confirm` 事件,点击取消按钮触发 `cancel` 事件。 +```html + + + + + + +``` +```js +// 非TS项目不需要引入类型 +import type { PickerColumn, PickerConfirmEvent } from '@/uni_modules/lime-picker'; + +// 通过`l-picker-item`子组件时,数据结构为单数组 +// PickerColumn +const cityOptions = [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + } +] as PickerColumn + +// 通过 Picker 的 columns 属性的数组结构为[PickerColumn, PickerColumn] + +const columns = [ + // 第一列 + cityOptions, +] + +const onConfirm = ({values} : PickerConfirmEvent) => { + showToast(`当前值: ${values.join(',')}`); +}; +const onChange = ({values, column, index} : PickerPickEvent) => { + showToast(`当前值: ${values.join(',')}`); +}; +const onCancel = () => {console.log('取消')}; +``` + + + + +### 搭配弹出层使用 + +在实际场景中,Picker 通常作为用于辅助表单填写,可以搭配 [Popup](https://ext.dcloud.net.cn/plugin?id=20769)。 + +```html + + + + + +``` +```js +import { PickerColumn } from '@/uni_modules/lime-picker'; +const showPicker = ref(false) +const cityOptions = [ + [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + } + ] +] as PickerColumn[] +``` + + +### 多列 +`columns` 属性可以通过二维数组的形式配置多列选择。也可以使用`l-picker-item`子组件实现多列。 +```html + + + + + + +``` +```js +import { PickerColumn } from '@/uni_modules/lime-picker'; +const showPicker = ref(false) +const years = [ + { + label: '2024', + value: '2024', + }, + { + label: '2025', + value: '2025', + } +] as PickerColumn +const seasonOptions = [ + { + label: '春', + value: '春', + }, + { + label: '夏', + value: '夏', + }, + { + label: '秋', + value: '秋', + }, + { + label: '冬', + value: '冬', + }, +] as PickerColumn + +const seasonColumns = [years, seasonOptions] + +``` + +### 双向绑定 + +通过 `v-model` 可以绑定当前选中项的 `values`,修改 `v-model` 绑定的值时,`Picker` 的选中状态也会随之改变。 + +`v-model` 的值是一个数组,数组的第一位对应第一列选中项的 `value`,第二位对应第二列选中项的 `value`,以此类推。 + +```html + + + +``` +```js +import { PickerColumn } from '@/uni_modules/lime-picker'; +const citys = ref(['上海市']) +const cityOptions = [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + }, + { + label: '广州市', + value: '广州市', + }, + { + label: '深圳市', + value: '深圳市', + }, +] as PickerColumn +``` + + +### 加载状态 + +若选择器数据是异步获取的,可以通过 `loading` 属性显示加载提示。 +```html + +``` +```js +import { PickerColumn } from '@/uni_modules/lime-picker'; +const cityOptions = [ + [ + { + label: '北京市', + value: '北京市', + }, + { + label: '上海市', + value: '上海市', + }, + { + label: '广州市', + value: '广州市', + }, + { + label: '深圳市', + value: '深圳市', + }, + ] +] as PickerColumn[] +``` + +### 空状态 +当数据为空时,可以使用 `empty` 插槽自定义空状态内容。[empty插件](https://ext.dcloud.net.cn/plugin?id=19563) +```html + + + +``` +```js +import { PickerColumn } from '@/uni_modules/lime-picker'; +const cityOptions = [] as PickerColumn[] +``` + + +### 多列联动 +通过`pick`事件完成联动操作。 +```html + + + + + +``` +```js +import { PickerColumn, PickerColumnItem, PickerConfirmEvent, PickerPickEvent } from '@/uni_modules/lime-picker'; +const areaList = { + provinces: { + '110000': '北京市', + '440000': '广东省', + }, + cities: { + '110100': '北京市', + '440100': '广州市', + '440200': '韶关市', + '440300': '深圳市', + '440400': '珠海市', + '440500': '汕头市', + '440600': '佛山市', + }, + counties: { + '110101': '东城区', + '110102': '西城区', + '110105': '朝阳区', + '110106': '丰台区', + '110107': '石景山区', + '110108': '海淀区', + '110109': '门头沟区', + '110111': '房山区', + '110112': '通州区', + '110113': '顺义区', + '110114': '昌平区', + '110115': '大兴区', + '110116': '怀柔区', + '110117': '平谷区', + '110118': '密云区', + '110119': '延庆区', + '440103': '荔湾区', + '440104': '越秀区', + '440105': '海珠区', + '440106': '天河区', + '440111': '白云区', + '440112': '黄埔区', + '440113': '番禺区', + '440114': '花都区', + '440115': '南沙区', + '440117': '从化区', + '440118': '增城区', + '440203': '武江区', + '440204': '浈江区', + '440205': '曲江区', + '440222': '始兴县', + '440224': '仁化县', + '440229': '翁源县', + '440232': '乳源瑶族自治县', + '440233': '新丰县', + '440281': '乐昌市', + '440282': '南雄市', + '440303': '罗湖区', + '440304': '福田区', + '440305': '南山区', + '440306': '宝安区', + '440307': '龙岗区', + '440308': '盐田区', + '440309': '龙华区', + '440310': '坪山区', + '440311': '光明区', + '440402': '香洲区', + '440403': '斗门区', + '440404': '金湾区', + '440507': '龙湖区', + '440511': '金平区', + '440512': '濠江区', + '440513': '潮阳区', + '440514': '潮南区', + '440515': '澄海区', + '440523': '南澳县', + '440604': '禅城区', + '440605': '南海区', + '440606': '顺德区', + '440607': '三水区', + '440608': '高明区', + }, +}; + +// UTSJSONObject 为uniapp x的 object,非uniapp 可使用Object +const getOptions = (obj : UTSJSONObject, filter ?: ((value : PickerColumnItem) => boolean) | null) : PickerColumn => { + const res = UTSJSONObject.keys(obj).map((key) : PickerColumnItem => { + return { + // id: key, + value: `${key}`, + label: `${obj[key]}` + } as PickerColumnItem + }) + if (filter != null) { + return res.filter(filter) + } + return res +} +const match = (v1 : string, v2 : string, size : number) : boolean => { + return v1.slice(0, size) == v2.slice(0, size) +}; +const getCounties = (cityValue : string) : PickerColumn => { + return getOptions(areaList.counties as UTSJSONObject, (county : PickerColumnItem) : boolean => match(county.value, cityValue, 4)); +}; +const getCities = (provinceValue : string) : PickerColumn[] => { + const cities = getOptions(areaList.cities as UTSJSONObject, (city : PickerColumnItem) : boolean => match(city.value, provinceValue, 2)); + const counties = getCounties(cities[0].value); + return [cities, counties]; +}; +// 省 +const provinces = ref([]); +provinces.value = getOptions(areaList.provinces as UTSJSONObject, null) +const data = getCities(provinces.value[0].value); +// 市 +const cities = ref(data[0]); +// 区 +const counties = ref(data[1]); + +const onConfirm = (context : PickerConfirmEvent) => { + console.log('context', context) +} +const onChange = ({values, column, index} : PickerPickEvent) => { + // column 表示第几列 + // index 表示列数组里的下标 + if (column == 0) { + // 更改省份 + const data = getCities(provinces.value[index].value); + cities.value = data[0]; + counties.value = data[1]; + } + + if (column == 1) { + // 更改城市 + counties.value = getCounties(cities.value[index].value); + } + + if (column == 2) { + // 更改区县 + } +} +``` + +### 级联选择 +使用 `l-cascade` 组件 通过`columns` 的 `children` 字段可以实现选项级联的效果。如果级联层级较多,推荐使用 [Cascader 级联选项组件](https://ext.dcloud.net.cn/plugin?id=20880)。 + +```html + +``` +```js + const columns = [ + { + lable: '浙江', + value: 'Zhejiang', + children: [ + { + lable: '杭州', + value: 'Hangzhou', + children: [ + { lable: '西湖区', value: 'Xihu' }, + { lable: '余杭区', value: 'Yuhang' }, + ], + }, + { + lable: '温州', + value: 'Wenzhou', + children: [ + { lable: '鹿城区', value: 'Lucheng' }, + { lable: '瓯海区', value: 'Ouhai' }, + ], + }, + ], + }, + { + lable: '福建', + value: 'Fujian', + children: [ + { + lable: '福州', + value: 'Fuzhou', + children: [ + { lable: '鼓楼区', value: 'Gulou' }, + { lable: '台江区', value: 'Taijiang' }, + ], + }, + { + lable: '厦门', + value: 'Xiamen', + children: [ + { lable: '思明区', value: 'Siming' }, + { lable: '海沧区', value: 'Haicang' }, + ], + }, + ], + }, + ]; +``` + +### 查看示例 +导入后直接使用这个标签查看演示效果 + +```html + + +``` + + +### 插件标签 +`l-picker` 为 component +`lime-picker` 为 demo + +### Vue2使用 +插件使用了`composition-api`, 如果你希望在vue2中使用请按官方的教程[vue-composition-api](https://uniapp.dcloud.net.cn/tutorial/vue-composition-api.html)配置 +关键代码是: 在main.js中 在vue2部分加上这一段即可 + +```js +// vue2 +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + + + +## API + +### Picker Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| v-model | 当前选中项对应的值 | _string\|number[]_ | - | +| value | 当前选中项对应的值 | _string\|number[]_ | - | +| columns | 对象数组,配置每一列显示的数据 | _PickerColumn[]_ | `false` | +| cancelBtn | 取消按钮文字 | _string_ | `` | +| cancelStyle | 取消按钮样式 | _string_ | `` | +| confirmBtn | 确定按钮文字 | _string_ | `` | +| confirmStyle | 确定按钮样式 | _string_ | `` | +| title | 标题 | _string_ | `` | +| titleStyle | 标题样式 | _string_ | `` | +| loading | 是否显示加载状态 | _boolean_ | `false` | +| loadingColor | 加载图标颜色 | _string_ | `` | +| loadingMaskColor | 加载遮罩背景颜色 | _string_ | `` | +| loadingSize | 加载图标大小 | _string_ | `` | +| itemHeight | 每项高度 | _string_ | `50px` | +| itemColor | 每项文本颜色 | _string_ | `` | +| itemFontSize | 每项文本字体大小 | _string_ | `` | +| itemActiveColor | 每项文本选中颜色 | _string_ | `` | +| indicatorStyle | 选择器中间选中框的样式 | _string_ | `` | +| bgColor | 选择器背景色 | _string_ | `` | +| groupHeight | 选项组高度 | _string_ | `400rpx` | +| radius | 圆角 | _string_ | | + +### PickerItem Props + +| 参数 | 说明 | 类型 | 默认值 | +| --- | --- | --- | --- | +| options | 对象数组,配置列显示的数据 | _PickerColumnItem[]_ | `false` | +| value | 值 | _string_ | | +| column | 当前为第几列 | _number_ | | + + +### Events +| 事件名 | 说明 | 回调参数 | +| ------ | ------------------------ | ---------------------- | +| cancel | 点击取消按钮时触发 | __ | +| change | 选中变化时候触发 | _value: string\|number[]_ | +| confirm | 点击确认按钮时触发 | _{values: PickerValue[], indexs:number[], items:PickerColumnItem[]}:PickerConfirmEvent_ | +| pick | 任何一列选中都会触发,不同的列参数不同,column 表示第几列变化,index 表示变化那一列的选中项下标 | _{values: PickerValue[], column:number,index:number}:PickerPickEvent_ | + +### Picker Slots +| 插槽名 | 说明 | 回调参数 | +| ------ | ------------------------ | ---------------------- | +| default | | __ | +| header | 头部 | __ | +| footer | 底部 | __ | +| empty | 空数据插槽 | __ | + + + +## 主题定制 + +### 样式变量 + +组件提供了下列 CSS 变量,可用于自定义样式,uvue app无效。 + +| 名称 | 默认值 | 描述 | +| ------------------------ | -------------------- | ---- | +| --l-picker-border-radius | _24rpx_ | - | +| --l-picker-bg-color | _$bg-color-container_ | - | +| --l-picker-toolbar-height | _116rpx_ | - | +| --l-picker-cancel-color | _text-color-2_ | - | +| --l-picker-confirm-color | _$primary-color_ | - | +| --l-picker-button-font-size | _32rpx_ | - | +| --l-picker-title-font-size | _36rpx_ | - | +| --l-picker-title-font-weight | _700_ | - | +| --l-picker-title-line-height | _52rpx_ | - | +| --l-picker-title-color | _$text-color-1_ | - | +| --l-picker-group-height | _400rpx_ | - | +| --l-picker-indicator-bg-color | _$fill-4_ | - | +| --l-picker-indicator-border-radius | _12rpx_ | - | +| --l-picker-item-height | _50px_ | - | +| --l-picker-item-color | _$text-color-1_ | - | +| --l-picker-item-active-color | _$text-color-1_ | - | +| --l-picker-item-active-color | _$text-color-1_ | - | +| --l-picker-loading-mask-color | _rgba(255,255,255,.9)_ | - | +| --l-picker-item-font-size | _$font-size-md_ | - | + + +## 打赏 + +如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。 +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) +![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) \ No newline at end of file diff --git a/uni_modules/lime-shared/addSeparator/index.ts b/uni_modules/lime-shared/addSeparator/index.ts new file mode 100644 index 0000000..e2df12b --- /dev/null +++ b/uni_modules/lime-shared/addSeparator/index.ts @@ -0,0 +1,10 @@ +// @ts-nocheck +/** + * 每n位数字添加一个分隔符 + */ +export function addSeparator(num : number | string, separator = ',', digit = 3) { + return `${num}`.replace( + new RegExp(`\\B(?=(\\d{${digit}})+(?!\\d))`, 'g'), + separator, + ) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/addUnit/index.ts b/uni_modules/lime-shared/addUnit/index.ts new file mode 100644 index 0000000..19a1393 --- /dev/null +++ b/uni_modules/lime-shared/addUnit/index.ts @@ -0,0 +1,41 @@ +// @ts-nocheck +import {isNumeric} from '../isNumeric' +import {isDef} from '../isDef' +/** + * 给一个值添加单位(像素 px) + * @param value 要添加单位的值,可以是字符串或数字 + * @param unit 单位,默认为 'px' + * @returns 添加了单位的值,如果值为 null 则返回 null + */ + +// #ifndef UNI-APP-X && APP +export function addUnit(value?: string | number, unit: string = 'px'): string | null { + if (!isDef(value)) { + return null; + } + value = String(value); // 将值转换为字符串 + // 如果值是数字,则在后面添加单位 "px",否则保持原始值 + return isNumeric(value) ? `${value}${unit}` : value; +} +// #endif + + +// #ifdef UNI-APP-X && APP +function addUnit(value: string|number|null, unit: string = 'px'): string|null { + if (!isDef(value)) { + return null; + } + value = `${value}` //value.toString(); // 将值转换为字符串 + + // 如果值是数字,则在后面添加单位 "px",否则保持原始值 + return isNumeric(value) ? `${value}${unit}` : value; +} +export {addUnit} +// #endif + + +// console.log(addUnit(100)); // 输出: "100px" +// console.log(addUnit("200")); // 输出: "200px" +// console.log(addUnit("300px")); // 输出: "300px"(已经包含单位) +// console.log(addUnit()); // 输出: undefined(值为 undefined) +// console.log(addUnit(null)); // 输出: undefined(值为 null) \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/bezier.ts b/uni_modules/lime-shared/animation/bezier.ts new file mode 100644 index 0000000..ca9190f --- /dev/null +++ b/uni_modules/lime-shared/animation/bezier.ts @@ -0,0 +1,83 @@ +// @ts-nocheck +export function cubicBezier(p1x : number, p1y : number, p2x : number, p2y : number):(x: number)=> number { + const ZERO_LIMIT = 1e-6; + // Calculate the polynomial coefficients, + // implicit first and last control points are (0,0) and (1,1). + const ax = 3 * p1x - 3 * p2x + 1; + const bx = 3 * p2x - 6 * p1x; + const cx = 3 * p1x; + + const ay = 3 * p1y - 3 * p2y + 1; + const by = 3 * p2y - 6 * p1y; + const cy = 3 * p1y; + + function sampleCurveDerivativeX(t : number) : number { + // `ax t^3 + bx t^2 + cx t` expanded using Horner's rule + return (3 * ax * t + 2 * bx) * t + cx; + } + + function sampleCurveX(t : number) : number { + return ((ax * t + bx) * t + cx) * t; + } + + function sampleCurveY(t : number) : number { + return ((ay * t + by) * t + cy) * t; + } + + // Given an x value, find a parametric value it came from. + function solveCurveX(x : number) : number { + let t2 = x; + let derivative : number; + let x2 : number; + + // https://trac.webkit.org/browser/trunk/Source/WebCore/platform/animation + // first try a few iterations of Newton's method -- normally very fast. + // http://en.wikipedia.org/wikiNewton's_method + for (let i = 0; i < 8; i++) { + // f(t) - x = 0 + x2 = sampleCurveX(t2) - x; + if (Math.abs(x2) < ZERO_LIMIT) { + return t2; + } + derivative = sampleCurveDerivativeX(t2); + // == 0, failure + /* istanbul ignore if */ + if (Math.abs(derivative) < ZERO_LIMIT) { + break; + } + t2 -= x2 / derivative; + } + + // Fall back to the bisection method for reliability. + // bisection + // http://en.wikipedia.org/wiki/Bisection_method + let t1 = 1; + /* istanbul ignore next */ + let t0 = 0; + + /* istanbul ignore next */ + t2 = x; + /* istanbul ignore next */ + while (t1 > t0) { + x2 = sampleCurveX(t2) - x; + if (Math.abs(x2) < ZERO_LIMIT) { + return t2; + } + if (x2 > 0) { + t1 = t2; + } else { + t0 = t2; + } + t2 = (t1 + t0) / 2; + } + + // Failure + return t2; + } + + return function (x : number) : number { + return sampleCurveY(solveCurveX(x)); + } + + // return solve; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/ease.ts b/uni_modules/lime-shared/animation/ease.ts new file mode 100644 index 0000000..49f066b --- /dev/null +++ b/uni_modules/lime-shared/animation/ease.ts @@ -0,0 +1,4 @@ +// @ts-nocheck +import {cubicBezier} from './bezier'; +export let ease = cubicBezier(0.25, 0.1, 0.25, 1); +export let linear = cubicBezier(0,0,1,1); \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/index.ts b/uni_modules/lime-shared/animation/index.ts new file mode 100644 index 0000000..60e56b9 --- /dev/null +++ b/uni_modules/lime-shared/animation/index.ts @@ -0,0 +1,10 @@ +// @ts-nocheck +// #ifdef UNI-APP-X && APP +export { Timeline, Animation } from './uvue' +// #endif + + + +// #ifndef UNI-APP-X && APP +export { Timeline, Animation } from './vue' +// #endif diff --git a/uni_modules/lime-shared/animation/useTransition.ts b/uni_modules/lime-shared/animation/useTransition.ts new file mode 100644 index 0000000..57120b8 --- /dev/null +++ b/uni_modules/lime-shared/animation/useTransition.ts @@ -0,0 +1,110 @@ +// @ts-nocheck +import type { ComponentPublicInstance, Ref } from 'vue' +import { ease, linear } from './ease'; +import { Timeline, Animation } from './'; +export type UseTransitionOptions = { + duration ?: number + immediate ?: boolean + context ?: ComponentPublicInstance + onChange?: (v: number) => void +} +// #ifndef UNI-APP-X && APP +import { ref, watch } from '@/uni_modules/lime-shared/vue' + +export function useTransition(percent : Ref|(() => number), options : UseTransitionOptions) : Ref { + const current = ref(0) + const { immediate, duration = 300, onChange } = options + let tl:Timeline|null = null; + let timer = -1 + const isFunction = typeof percent === 'function' + watch(isFunction ? percent : () => percent.value, (v) => { + if(tl == null){ + tl = new Timeline() + } + tl.start(); + tl.add( + new Animation( + current.value, + v, + duration, + 0, + ease, + nowValue => { + current.value = nowValue + onChange?.(nowValue) + clearTimeout(timer) + if(current.value == v){ + timer = setTimeout(()=>{ + tl?.pause(); + tl = null + }, duration) + } + } + ) + ); + }, { immediate }) + + return current +} + +// #endif + +// #ifdef UNI-APP-X && APP +type UseTransitionReturnType = Ref +export function useTransition(source : any, options : UseTransitionOptions) : UseTransitionReturnType { + const outputRef : Ref = ref(0) + const immediate = options.immediate ?? false + const duration = options.duration ?? 300 + const context = options.context //as ComponentPublicInstance | null + let tl:Timeline|null = null; + let timer = -1 + const watchFunc = (v : number) => { + if(tl == null){ + tl = new Timeline() + } + tl!.start(); + tl!.add( + new Animation( + outputRef.value, + v, + duration, + 0, + ease, + nowValue => { + outputRef.value = nowValue + clearTimeout(timer) + if(outputRef.value == v){ + timer = setTimeout(()=>{ + tl?.pause(); + tl = null + }, duration) + } + } + ), + null + ); + } + + if (context != null && typeof source == 'string') { + context.$watch(source, watchFunc, { immediate } as WatchOptions) + } else if(typeof source == 'function'){ + watch(source, watchFunc, { immediate }) + } + // #ifdef APP-ANDROID + else if(isRef(source) && source instanceof Ref) { + watch(source as Ref, watchFunc, { immediate }) + } + // #endif + // #ifndef APP-ANDROID + else if(isRef(source) && typeof source.value == 'number') { + watch(source, watchFunc, { immediate }) + } + // #endif + + const stop = ()=>{ + + } + return outputRef //as UseTransitionReturnType +} + +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/uvue.ts b/uni_modules/lime-shared/animation/uvue.ts new file mode 100644 index 0000000..45a7a23 --- /dev/null +++ b/uni_modules/lime-shared/animation/uvue.ts @@ -0,0 +1,119 @@ +// @ts-nocheck +import { raf, cancelRaf} from '../raf' +export class Timeline { + state : string + animations : Set = new Set() + delAnimations : Animation[] = [] + startTimes : Map = new Map() + pauseTime : number = 0 + pauseStart : number = Date.now() + tickHandler : number = 0 + tickHandlers : number[] = [] + tick : (() => void) | null = null + constructor() { + this.state = 'Initiated'; + } + start() { + if (!(this.state == 'Initiated')) return; + this.state = 'Started'; + + let startTime = Date.now(); + this.pauseTime = 0; + this.tick = () => { + let now = Date.now(); + this.animations.forEach((animation : Animation) => { + let t:number; + const ani = this.startTimes.get(animation) + if (ani == null) return + if (ani < startTime) { + t = now - startTime - animation.delay - this.pauseTime; + } else { + t = now - ani - animation.delay - this.pauseTime; + } + if (t > animation.duration) { + this.delAnimations.push(animation) + // 不能在 foreach 里面 对 集合进行删除操作 + // this.animations.delete(animation); + t = animation.duration; + } + if (t > 0) animation.run(t); + }) + // 不能在 foreach 里面 对 集合进行删除操作 + while (this.delAnimations.length > 0) { + const animation = this.delAnimations.pop(); + if (animation == null) return + this.animations.delete(animation); + } + // cancelAnimationFrame(this.tickHandler); + if (this.state != 'Started') return + + this.tickHandler = raf(()=>{ + this.tick!() + }) + + this.tickHandlers.push(this.tickHandler) + } + if(this.tick != null) { + this.tick!() + } + + } + pause() { + if (!(this.state === 'Started')) return; + this.state = 'Paused'; + this.pauseStart = Date.now(); + cancelRaf(this.tickHandler); + // cancelRaf(this.tickHandler); + } + resume() { + if (!(this.state === 'Paused')) return; + this.state = 'Started'; + this.pauseTime += Date.now() - this.pauseStart; + this.tick!(); + } + reset() { + this.pause(); + this.state = 'Initiated'; + this.pauseTime = 0; + this.pauseStart = 0; + this.animations.clear() + this.delAnimations.clear() + this.startTimes.clear() + this.tickHandler = 0; + } + add(animation : Animation, startTime ?: number | null) { + if (startTime == null) startTime = Date.now(); + this.animations.add(animation); + this.startTimes.set(animation, startTime); + } +} + +export class Animation { + startValue : number + endValue : number + duration : number + timingFunction : (t : number) => number + delay : number + template : (t : number) => void + constructor( + startValue : number, + endValue : number, + duration : number, + delay : number, + timingFunction : (t : number) => number, + template : (v : number) => void) { + this.startValue = startValue; + this.endValue = endValue; + this.duration = duration; + this.timingFunction = timingFunction; + this.delay = delay; + this.template = template; + } + + run(time : number) { + let range = this.endValue - this.startValue; + let progress = time / this.duration + if(progress != 1) progress = this.timingFunction(progress) + this.template(this.startValue + range * progress) + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/uvue.uts b/uni_modules/lime-shared/animation/uvue.uts new file mode 100644 index 0000000..45a7a23 --- /dev/null +++ b/uni_modules/lime-shared/animation/uvue.uts @@ -0,0 +1,119 @@ +// @ts-nocheck +import { raf, cancelRaf} from '../raf' +export class Timeline { + state : string + animations : Set = new Set() + delAnimations : Animation[] = [] + startTimes : Map = new Map() + pauseTime : number = 0 + pauseStart : number = Date.now() + tickHandler : number = 0 + tickHandlers : number[] = [] + tick : (() => void) | null = null + constructor() { + this.state = 'Initiated'; + } + start() { + if (!(this.state == 'Initiated')) return; + this.state = 'Started'; + + let startTime = Date.now(); + this.pauseTime = 0; + this.tick = () => { + let now = Date.now(); + this.animations.forEach((animation : Animation) => { + let t:number; + const ani = this.startTimes.get(animation) + if (ani == null) return + if (ani < startTime) { + t = now - startTime - animation.delay - this.pauseTime; + } else { + t = now - ani - animation.delay - this.pauseTime; + } + if (t > animation.duration) { + this.delAnimations.push(animation) + // 不能在 foreach 里面 对 集合进行删除操作 + // this.animations.delete(animation); + t = animation.duration; + } + if (t > 0) animation.run(t); + }) + // 不能在 foreach 里面 对 集合进行删除操作 + while (this.delAnimations.length > 0) { + const animation = this.delAnimations.pop(); + if (animation == null) return + this.animations.delete(animation); + } + // cancelAnimationFrame(this.tickHandler); + if (this.state != 'Started') return + + this.tickHandler = raf(()=>{ + this.tick!() + }) + + this.tickHandlers.push(this.tickHandler) + } + if(this.tick != null) { + this.tick!() + } + + } + pause() { + if (!(this.state === 'Started')) return; + this.state = 'Paused'; + this.pauseStart = Date.now(); + cancelRaf(this.tickHandler); + // cancelRaf(this.tickHandler); + } + resume() { + if (!(this.state === 'Paused')) return; + this.state = 'Started'; + this.pauseTime += Date.now() - this.pauseStart; + this.tick!(); + } + reset() { + this.pause(); + this.state = 'Initiated'; + this.pauseTime = 0; + this.pauseStart = 0; + this.animations.clear() + this.delAnimations.clear() + this.startTimes.clear() + this.tickHandler = 0; + } + add(animation : Animation, startTime ?: number | null) { + if (startTime == null) startTime = Date.now(); + this.animations.add(animation); + this.startTimes.set(animation, startTime); + } +} + +export class Animation { + startValue : number + endValue : number + duration : number + timingFunction : (t : number) => number + delay : number + template : (t : number) => void + constructor( + startValue : number, + endValue : number, + duration : number, + delay : number, + timingFunction : (t : number) => number, + template : (v : number) => void) { + this.startValue = startValue; + this.endValue = endValue; + this.duration = duration; + this.timingFunction = timingFunction; + this.delay = delay; + this.template = template; + } + + run(time : number) { + let range = this.endValue - this.startValue; + let progress = time / this.duration + if(progress != 1) progress = this.timingFunction(progress) + this.template(this.startValue + range * progress) + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/animation/vue.ts b/uni_modules/lime-shared/animation/vue.ts new file mode 100644 index 0000000..30f89e5 --- /dev/null +++ b/uni_modules/lime-shared/animation/vue.ts @@ -0,0 +1,123 @@ +// @ts-nocheck +const TICK = Symbol('tick'); +const TICK_HANDLER = Symbol('tick-handler'); +const ANIMATIONS = Symbol('animations'); +const START_TIMES = Symbol('start-times'); +const PAUSE_START = Symbol('pause-start'); +const PAUSE_TIME = Symbol('pause-time'); +const _raf = typeof requestAnimationFrame !== 'undefined' ? requestAnimationFrame : function(cb: Function) {return setTimeout(cb, 1000/60)} +const _caf = typeof cancelAnimationFrame !== 'undefined' ? cancelAnimationFrame: function(id: any) {clearTimeout(id)} + +// const TICK = 'tick'; +// const TICK_HANDLER = 'tick-handler'; +// const ANIMATIONS = 'animations'; +// const START_TIMES = 'start-times'; +// const PAUSE_START = 'pause-start'; +// const PAUSE_TIME = 'pause-time'; +// const _raf = function(callback):number|null {return setTimeout(callback, 1000/60)} +// const _caf = function(id: number):void {clearTimeout(id)} + +export class Timeline { + state: string + constructor() { + this.state = 'Initiated'; + this[ANIMATIONS] = new Set(); + this[START_TIMES] = new Map(); + } + start() { + if (!(this.state === 'Initiated')) return; + this.state = 'Started'; + + let startTime = Date.now(); + this[PAUSE_TIME] = 0; + this[TICK] = () => { + let now = Date.now(); + this[ANIMATIONS].forEach((animation) => { + let t: number; + if (this[START_TIMES].get(animation) < startTime) { + t = now - startTime - animation.delay - this[PAUSE_TIME]; + } else { + t = now - this[START_TIMES].get(animation) - animation.delay - this[PAUSE_TIME]; + } + + if (t > animation.duration) { + this[ANIMATIONS].delete(animation); + t = animation.duration; + } + if (t > 0) animation.run(t); + }) + // for (let animation of this[ANIMATIONS]) { + // let t: number; + // console.log('animation', animation) + // if (this[START_TIMES].get(animation) < startTime) { + // t = now - startTime - animation.delay - this[PAUSE_TIME]; + // } else { + // t = now - this[START_TIMES].get(animation) - animation.delay - this[PAUSE_TIME]; + // } + + // if (t > animation.duration) { + // this[ANIMATIONS].delete(animation); + // t = animation.duration; + // } + // if (t > 0) animation.run(t); + // } + this[TICK_HANDLER] = _raf(this[TICK]); + }; + this[TICK](); + } + pause() { + if (!(this.state === 'Started')) return; + this.state = 'Paused'; + + this[PAUSE_START] = Date.now(); + _caf(this[TICK_HANDLER]); + } + resume() { + if (!(this.state === 'Paused')) return; + this.state = 'Started'; + + this[PAUSE_TIME] += Date.now() - this[PAUSE_START]; + this[TICK](); + } + reset() { + this.pause(); + this.state = 'Initiated'; + this[PAUSE_TIME] = 0; + this[PAUSE_START] = 0; + this[ANIMATIONS] = new Set(); + this[START_TIMES] = new Map(); + this[TICK_HANDLER] = null; + } + add(animation: any, startTime?: number) { + if (arguments.length < 2) startTime = Date.now(); + this[ANIMATIONS].add(animation); + this[START_TIMES].set(animation, startTime); + } +} + +export class Animation { + startValue: number + endValue: number + duration: number + timingFunction: (t: number) => number + delay: number + template: (t: number) => void + constructor(startValue: number, endValue: number, duration: number, delay: number, timingFunction: (t: number) => number, template: (v: number) => void) { + timingFunction = timingFunction || (v => v); + template = template || (v => v); + + this.startValue = startValue; + this.endValue = endValue; + this.duration = duration; + this.timingFunction = timingFunction; + this.delay = delay; + this.template = template; + } + + run(time: number) { + let range = this.endValue - this.startValue; + let progress = time / this.duration + if(progress != 1) progress = this.timingFunction(progress) + this.template(this.startValue + range * progress) + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/areaData/city-china.json b/uni_modules/lime-shared/areaData/city-china.json new file mode 100644 index 0000000..d9872a0 --- /dev/null +++ b/uni_modules/lime-shared/areaData/city-china.json @@ -0,0 +1,3888 @@ +{ + "province_list": { + "110000": "北京市", + "120000": "天津市", + "130000": "河北省", + "140000": "山西省", + "150000": "内蒙古自治区", + "210000": "辽宁省", + "220000": "吉林省", + "230000": "黑龙江省", + "310000": "上海市", + "320000": "江苏省", + "330000": "浙江省", + "340000": "安徽省", + "350000": "福建省", + "360000": "江西省", + "370000": "山东省", + "410000": "河南省", + "420000": "湖北省", + "430000": "湖南省", + "440000": "广东省", + "450000": "广西壮族自治区", + "460000": "海南省", + "500000": "重庆市", + "510000": "四川省", + "520000": "贵州省", + "530000": "云南省", + "540000": "西藏自治区", + "610000": "陕西省", + "620000": "甘肃省", + "630000": "青海省", + "640000": "宁夏回族自治区", + "650000": "新疆维吾尔自治区", + "710000": "台湾省", + "810000": "香港特别行政区", + "820000": "澳门特别行政区" + }, + "city_list": { + "110100": "北京市", + "120100": "天津市", + "130100": "石家庄市", + "130200": "唐山市", + "130300": "秦皇岛市", + "130400": "邯郸市", + "130500": "邢台市", + "130600": "保定市", + "130700": "张家口市", + "130800": "承德市", + "130900": "沧州市", + "131000": "廊坊市", + "131100": "衡水市", + "140100": "太原市", + "140200": "大同市", + "140300": "阳泉市", + "140400": "长治市", + "140500": "晋城市", + "140600": "朔州市", + "140700": "晋中市", + "140800": "运城市", + "140900": "忻州市", + "141000": "临汾市", + "141100": "吕梁市", + "150100": "呼和浩特市", + "150200": "包头市", + "150300": "乌海市", + "150400": "赤峰市", + "150500": "通辽市", + "150600": "鄂尔多斯市", + "150700": "呼伦贝尔市", + "150800": "巴彦淖尔市", + "150900": "乌兰察布市", + "152200": "兴安盟", + "152500": "锡林郭勒盟", + "152900": "阿拉善盟", + "210100": "沈阳市", + "210200": "大连市", + "210300": "鞍山市", + "210400": "抚顺市", + "210500": "本溪市", + "210600": "丹东市", + "210700": "锦州市", + "210800": "营口市", + "210900": "阜新市", + "211000": "辽阳市", + "211100": "盘锦市", + "211200": "铁岭市", + "211300": "朝阳市", + "211400": "葫芦岛市", + "220100": "长春市", + "220200": "吉林市", + "220300": "四平市", + "220400": "辽源市", + "220500": "通化市", + "220600": "白山市", + "220700": "松原市", + "220800": "白城市", + "222400": "延边朝鲜族自治州", + "230100": "哈尔滨市", + "230200": "齐齐哈尔市", + "230300": "鸡西市", + "230400": "鹤岗市", + "230500": "双鸭山市", + "230600": "大庆市", + "230700": "伊春市", + "230800": "佳木斯市", + "230900": "七台河市", + "231000": "牡丹江市", + "231100": "黑河市", + "231200": "绥化市", + "232700": "大兴安岭地区", + "310100": "上海市", + "320100": "南京市", + "320200": "无锡市", + "320300": "徐州市", + "320400": "常州市", + "320500": "苏州市", + "320600": "南通市", + "320700": "连云港市", + "320800": "淮安市", + "320900": "盐城市", + "321000": "扬州市", + "321100": "镇江市", + "321200": "泰州市", + "321300": "宿迁市", + "330100": "杭州市", + "330200": "宁波市", + "330300": "温州市", + "330400": "嘉兴市", + "330500": "湖州市", + "330600": "绍兴市", + "330700": "金华市", + "330800": "衢州市", + "330900": "舟山市", + "331000": "台州市", + "331100": "丽水市", + "340100": "合肥市", + "340200": "芜湖市", + "340300": "蚌埠市", + "340400": "淮南市", + "340500": "马鞍山市", + "340600": "淮北市", + "340700": "铜陵市", + "340800": "安庆市", + "341000": "黄山市", + "341100": "滁州市", + "341200": "阜阳市", + "341300": "宿州市", + "341500": "六安市", + "341600": "亳州市", + "341700": "池州市", + "341800": "宣城市", + "350100": "福州市", + "350200": "厦门市", + "350300": "莆田市", + "350400": "三明市", + "350500": "泉州市", + "350600": "漳州市", + "350700": "南平市", + "350800": "龙岩市", + "350900": "宁德市", + "360100": "南昌市", + "360200": "景德镇市", + "360300": "萍乡市", + "360400": "九江市", + "360500": "新余市", + "360600": "鹰潭市", + "360700": "赣州市", + "360800": "吉安市", + "360900": "宜春市", + "361000": "抚州市", + "361100": "上饶市", + "370100": "济南市", + "370200": "青岛市", + "370300": "淄博市", + "370400": "枣庄市", + "370500": "东营市", + "370600": "烟台市", + "370700": "潍坊市", + "370800": "济宁市", + "370900": "泰安市", + "371000": "威海市", + "371100": "日照市", + "371300": "临沂市", + "371400": "德州市", + "371500": "聊城市", + "371600": "滨州市", + "371700": "菏泽市", + "410100": "郑州市", + "410200": "开封市", + "410300": "洛阳市", + "410400": "平顶山市", + "410500": "安阳市", + "410600": "鹤壁市", + "410700": "新乡市", + "410800": "焦作市", + "410900": "濮阳市", + "411000": "许昌市", + "411100": "漯河市", + "411200": "三门峡市", + "411300": "南阳市", + "411400": "商丘市", + "411500": "信阳市", + "411600": "周口市", + "411700": "驻马店市", + "419000": "省直辖县", + "420100": "武汉市", + "420200": "黄石市", + "420300": "十堰市", + "420500": "宜昌市", + "420600": "襄阳市", + "420700": "鄂州市", + "420800": "荆门市", + "420900": "孝感市", + "421000": "荆州市", + "421100": "黄冈市", + "421200": "咸宁市", + "421300": "随州市", + "422800": "恩施土家族苗族自治州", + "429000": "省直辖县", + "430100": "长沙市", + "430200": "株洲市", + "430300": "湘潭市", + "430400": "衡阳市", + "430500": "邵阳市", + "430600": "岳阳市", + "430700": "常德市", + "430800": "张家界市", + "430900": "益阳市", + "431000": "郴州市", + "431100": "永州市", + "431200": "怀化市", + "431300": "娄底市", + "433100": "湘西土家族苗族自治州", + "440100": "广州市", + "440200": "韶关市", + "440300": "深圳市", + "440400": "珠海市", + "440500": "汕头市", + "440600": "佛山市", + "440700": "江门市", + "440800": "湛江市", + "440900": "茂名市", + "441200": "肇庆市", + "441300": "惠州市", + "441400": "梅州市", + "441500": "汕尾市", + "441600": "河源市", + "441700": "阳江市", + "441800": "清远市", + "441900": "东莞市", + "442000": "中山市", + "445100": "潮州市", + "445200": "揭阳市", + "445300": "云浮市", + "450100": "南宁市", + "450200": "柳州市", + "450300": "桂林市", + "450400": "梧州市", + "450500": "北海市", + "450600": "防城港市", + "450700": "钦州市", + "450800": "贵港市", + "450900": "玉林市", + "451000": "百色市", + "451100": "贺州市", + "451200": "河池市", + "451300": "来宾市", + "451400": "崇左市", + "460100": "海口市", + "460200": "三亚市", + "460300": "三沙市", + "460400": "儋州市", + "469000": "省直辖县", + "500100": "重庆市", + "500200": "县", + "510100": "成都市", + "510300": "自贡市", + "510400": "攀枝花市", + "510500": "泸州市", + "510600": "德阳市", + "510700": "绵阳市", + "510800": "广元市", + "510900": "遂宁市", + "511000": "内江市", + "511100": "乐山市", + "511300": "南充市", + "511400": "眉山市", + "511500": "宜宾市", + "511600": "广安市", + "511700": "达州市", + "511800": "雅安市", + "511900": "巴中市", + "512000": "资阳市", + "513200": "阿坝藏族羌族自治州", + "513300": "甘孜藏族自治州", + "513400": "凉山彝族自治州", + "520100": "贵阳市", + "520200": "六盘水市", + "520300": "遵义市", + "520400": "安顺市", + "520500": "毕节市", + "520600": "铜仁市", + "522300": "黔西南布依族苗族自治州", + "522600": "黔东南苗族侗族自治州", + "522700": "黔南布依族苗族自治州", + "530100": "昆明市", + "530300": "曲靖市", + "530400": "玉溪市", + "530500": "保山市", + "530600": "昭通市", + "530700": "丽江市", + "530800": "普洱市", + "530900": "临沧市", + "532300": "楚雄彝族自治州", + "532500": "红河哈尼族彝族自治州", + "532600": "文山壮族苗族自治州", + "532800": "西双版纳傣族自治州", + "532900": "大理白族自治州", + "533100": "德宏傣族景颇族自治州", + "533300": "怒江傈僳族自治州", + "533400": "迪庆藏族自治州", + "540100": "拉萨市", + "540200": "日喀则市", + "540300": "昌都市", + "540400": "林芝市", + "540500": "山南市", + "540600": "那曲市", + "542500": "阿里地区", + "610100": "西安市", + "610200": "铜川市", + "610300": "宝鸡市", + "610400": "咸阳市", + "610500": "渭南市", + "610600": "延安市", + "610700": "汉中市", + "610800": "榆林市", + "610900": "安康市", + "611000": "商洛市", + "620100": "兰州市", + "620200": "嘉峪关市", + "620300": "金昌市", + "620400": "白银市", + "620500": "天水市", + "620600": "武威市", + "620700": "张掖市", + "620800": "平凉市", + "620900": "酒泉市", + "621000": "庆阳市", + "621100": "定西市", + "621200": "陇南市", + "622900": "临夏回族自治州", + "623000": "甘南藏族自治州", + "630100": "西宁市", + "630200": "海东市", + "632200": "海北藏族自治州", + "632300": "黄南藏族自治州", + "632500": "海南藏族自治州", + "632600": "果洛藏族自治州", + "632700": "玉树藏族自治州", + "632800": "海西蒙古族藏族自治州", + "640100": "银川市", + "640200": "石嘴山市", + "640300": "吴忠市", + "640400": "固原市", + "640500": "中卫市", + "650100": "乌鲁木齐市", + "650200": "克拉玛依市", + "650400": "吐鲁番市", + "650500": "哈密市", + "652300": "昌吉回族自治州", + "652700": "博尔塔拉蒙古自治州", + "652800": "巴音郭楞蒙古自治州", + "652900": "阿克苏地区", + "653000": "克孜勒苏柯尔克孜自治州", + "653100": "喀什地区", + "653200": "和田地区", + "654000": "伊犁哈萨克自治州", + "654200": "塔城地区", + "654300": "阿勒泰地区", + "659000": "自治区直辖县级行政区划", + "710100": "台北市", + "710200": "高雄市", + "710300": "台南市", + "710400": "台中市", + "710500": "金门县", + "710600": "南投县", + "710700": "基隆市", + "710800": "新竹市", + "710900": "嘉义市", + "711100": "新北市", + "711200": "宜兰县", + "711300": "新竹县", + "711400": "桃园市", + "711500": "苗栗县", + "711700": "彰化县", + "711900": "嘉义县", + "712100": "云林县", + "712400": "屏东县", + "712500": "台东县", + "712600": "花莲县", + "712700": "澎湖县", + "712800": "连江县", + "810100": "香港岛", + "810200": "九龙", + "810300": "新界", + "820100": "澳门半岛", + "820200": "离岛" + }, + "county_list": { + "110101": "东城区", + "110102": "西城区", + "110105": "朝阳区", + "110106": "丰台区", + "110107": "石景山区", + "110108": "海淀区", + "110109": "门头沟区", + "110111": "房山区", + "110112": "通州区", + "110113": "顺义区", + "110114": "昌平区", + "110115": "大兴区", + "110116": "怀柔区", + "110117": "平谷区", + "110118": "密云区", + "110119": "延庆区", + "120101": "和平区", + "120102": "河东区", + "120103": "河西区", + "120104": "南开区", + "120105": "河北区", + "120106": "红桥区", + "120110": "东丽区", + "120111": "西青区", + "120112": "津南区", + "120113": "北辰区", + "120114": "武清区", + "120115": "宝坻区", + "120116": "滨海新区", + "120117": "宁河区", + "120118": "静海区", + "120119": "蓟州区", + "130102": "长安区", + "130104": "桥西区", + "130105": "新华区", + "130107": "井陉矿区", + "130108": "裕华区", + "130109": "藁城区", + "130110": "鹿泉区", + "130111": "栾城区", + "130121": "井陉县", + "130123": "正定县", + "130125": "行唐县", + "130126": "灵寿县", + "130127": "高邑县", + "130128": "深泽县", + "130129": "赞皇县", + "130130": "无极县", + "130131": "平山县", + "130132": "元氏县", + "130133": "赵县", + "130171": "石家庄高新技术产业开发区", + "130172": "石家庄循环化工园区", + "130181": "辛集市", + "130183": "晋州市", + "130184": "新乐市", + "130202": "路南区", + "130203": "路北区", + "130204": "古冶区", + "130205": "开平区", + "130207": "丰南区", + "130208": "丰润区", + "130209": "曹妃甸区", + "130224": "滦南县", + "130225": "乐亭县", + "130227": "迁西县", + "130229": "玉田县", + "130273": "唐山高新技术产业开发区", + "130274": "河北唐山海港经济开发区", + "130281": "遵化市", + "130283": "迁安市", + "130284": "滦州市", + "130302": "海港区", + "130303": "山海关区", + "130304": "北戴河区", + "130306": "抚宁区", + "130321": "青龙满族自治县", + "130322": "昌黎县", + "130324": "卢龙县", + "130371": "秦皇岛市经济技术开发区", + "130372": "北戴河新区", + "130390": "经济技术开发区", + "130402": "邯山区", + "130403": "丛台区", + "130404": "复兴区", + "130406": "峰峰矿区", + "130407": "肥乡区", + "130408": "永年区", + "130423": "临漳县", + "130424": "成安县", + "130425": "大名县", + "130426": "涉县", + "130427": "磁县", + "130430": "邱县", + "130431": "鸡泽县", + "130432": "广平县", + "130433": "馆陶县", + "130434": "魏县", + "130435": "曲周县", + "130471": "邯郸经济技术开发区", + "130473": "邯郸冀南新区", + "130481": "武安市", + "130502": "襄都区", + "130503": "信都区", + "130505": "任泽区", + "130506": "南和区", + "130522": "临城县", + "130523": "内丘县", + "130524": "柏乡县", + "130525": "隆尧县", + "130528": "宁晋县", + "130529": "巨鹿县", + "130530": "新河县", + "130531": "广宗县", + "130532": "平乡县", + "130533": "威县", + "130534": "清河县", + "130535": "临西县", + "130571": "河北邢台经济开发区", + "130581": "南宫市", + "130582": "沙河市", + "130602": "竞秀区", + "130606": "莲池区", + "130607": "满城区", + "130608": "清苑区", + "130609": "徐水区", + "130623": "涞水县", + "130624": "阜平县", + "130626": "定兴县", + "130627": "唐县", + "130628": "高阳县", + "130629": "容城县", + "130630": "涞源县", + "130631": "望都县", + "130632": "安新县", + "130633": "易县", + "130634": "曲阳县", + "130635": "蠡县", + "130636": "顺平县", + "130637": "博野县", + "130638": "雄县", + "130671": "保定高新技术产业开发区", + "130672": "保定白沟新城", + "130681": "涿州市", + "130682": "定州市", + "130683": "安国市", + "130684": "高碑店市", + "130702": "桥东区", + "130703": "桥西区", + "130705": "宣化区", + "130706": "下花园区", + "130708": "万全区", + "130709": "崇礼区", + "130722": "张北县", + "130723": "康保县", + "130724": "沽源县", + "130725": "尚义县", + "130726": "蔚县", + "130727": "阳原县", + "130728": "怀安县", + "130730": "怀来县", + "130731": "涿鹿县", + "130732": "赤城县", + "130772": "张家口市察北管理区", + "130802": "双桥区", + "130803": "双滦区", + "130804": "鹰手营子矿区", + "130821": "承德县", + "130822": "兴隆县", + "130824": "滦平县", + "130825": "隆化县", + "130826": "丰宁满族自治县", + "130827": "宽城满族自治县", + "130828": "围场满族蒙古族自治县", + "130871": "承德高新技术产业开发区", + "130881": "平泉市", + "130902": "新华区", + "130903": "运河区", + "130921": "沧县", + "130922": "青县", + "130923": "东光县", + "130924": "海兴县", + "130925": "盐山县", + "130926": "肃宁县", + "130927": "南皮县", + "130928": "吴桥县", + "130929": "献县", + "130930": "孟村回族自治县", + "130971": "河北沧州经济开发区", + "130972": "沧州高新技术产业开发区", + "130973": "沧州渤海新区", + "130981": "泊头市", + "130982": "任丘市", + "130983": "黄骅市", + "130984": "河间市", + "131002": "安次区", + "131003": "广阳区", + "131022": "固安县", + "131023": "永清县", + "131024": "香河县", + "131025": "大城县", + "131026": "文安县", + "131028": "大厂回族自治县", + "131071": "廊坊经济技术开发区", + "131081": "霸州市", + "131082": "三河市", + "131090": "开发区", + "131102": "桃城区", + "131103": "冀州区", + "131121": "枣强县", + "131122": "武邑县", + "131123": "武强县", + "131124": "饶阳县", + "131125": "安平县", + "131126": "故城县", + "131127": "景县", + "131128": "阜城县", + "131171": "河北衡水经济开发区", + "131172": "衡水滨湖新区", + "131182": "深州市", + "140105": "小店区", + "140106": "迎泽区", + "140107": "杏花岭区", + "140108": "尖草坪区", + "140109": "万柏林区", + "140110": "晋源区", + "140121": "清徐县", + "140122": "阳曲县", + "140123": "娄烦县", + "140181": "古交市", + "140212": "新荣区", + "140213": "平城区", + "140214": "云冈区", + "140215": "云州区", + "140221": "阳高县", + "140222": "天镇县", + "140223": "广灵县", + "140224": "灵丘县", + "140225": "浑源县", + "140226": "左云县", + "140271": "山西大同经济开发区", + "140302": "城区", + "140303": "矿区", + "140311": "郊区", + "140321": "平定县", + "140322": "盂县", + "140403": "潞州区", + "140404": "上党区", + "140405": "屯留区", + "140406": "潞城区", + "140423": "襄垣县", + "140425": "平顺县", + "140426": "黎城县", + "140427": "壶关县", + "140428": "长子县", + "140429": "武乡县", + "140430": "沁县", + "140431": "沁源县", + "140471": "山西长治高新技术产业园区", + "140502": "城区", + "140521": "沁水县", + "140522": "阳城县", + "140524": "陵川县", + "140525": "泽州县", + "140581": "高平市", + "140602": "朔城区", + "140603": "平鲁区", + "140621": "山阴县", + "140622": "应县", + "140623": "右玉县", + "140671": "山西朔州经济开发区", + "140681": "怀仁市", + "140702": "榆次区", + "140703": "太谷区", + "140721": "榆社县", + "140722": "左权县", + "140723": "和顺县", + "140724": "昔阳县", + "140725": "寿阳县", + "140727": "祁县", + "140728": "平遥县", + "140729": "灵石县", + "140781": "介休市", + "140802": "盐湖区", + "140821": "临猗县", + "140822": "万荣县", + "140823": "闻喜县", + "140824": "稷山县", + "140825": "新绛县", + "140826": "绛县", + "140827": "垣曲县", + "140828": "夏县", + "140829": "平陆县", + "140830": "芮城县", + "140881": "永济市", + "140882": "河津市", + "140902": "忻府区", + "140921": "定襄县", + "140922": "五台县", + "140923": "代县", + "140924": "繁峙县", + "140925": "宁武县", + "140926": "静乐县", + "140927": "神池县", + "140928": "五寨县", + "140929": "岢岚县", + "140930": "河曲县", + "140931": "保德县", + "140932": "偏关县", + "140971": "五台山风景名胜区", + "140981": "原平市", + "141002": "尧都区", + "141021": "曲沃县", + "141022": "翼城县", + "141023": "襄汾县", + "141024": "洪洞县", + "141025": "古县", + "141026": "安泽县", + "141027": "浮山县", + "141028": "吉县", + "141029": "乡宁县", + "141030": "大宁县", + "141031": "隰县", + "141032": "永和县", + "141033": "蒲县", + "141034": "汾西县", + "141081": "侯马市", + "141082": "霍州市", + "141102": "离石区", + "141121": "文水县", + "141122": "交城县", + "141123": "兴县", + "141124": "临县", + "141125": "柳林县", + "141126": "石楼县", + "141127": "岚县", + "141128": "方山县", + "141129": "中阳县", + "141130": "交口县", + "141181": "孝义市", + "141182": "汾阳市", + "150102": "新城区", + "150103": "回民区", + "150104": "玉泉区", + "150105": "赛罕区", + "150121": "土默特左旗", + "150122": "托克托县", + "150123": "和林格尔县", + "150124": "清水河县", + "150125": "武川县", + "150172": "呼和浩特经济技术开发区", + "150202": "东河区", + "150203": "昆都仑区", + "150204": "青山区", + "150205": "石拐区", + "150206": "白云鄂博矿区", + "150207": "九原区", + "150221": "土默特右旗", + "150222": "固阳县", + "150223": "达尔罕茂明安联合旗", + "150271": "包头稀土高新技术产业开发区", + "150302": "海勃湾区", + "150303": "海南区", + "150304": "乌达区", + "150402": "红山区", + "150403": "元宝山区", + "150404": "松山区", + "150421": "阿鲁科尔沁旗", + "150422": "巴林左旗", + "150423": "巴林右旗", + "150424": "林西县", + "150425": "克什克腾旗", + "150426": "翁牛特旗", + "150428": "喀喇沁旗", + "150429": "宁城县", + "150430": "敖汉旗", + "150502": "科尔沁区", + "150521": "科尔沁左翼中旗", + "150522": "科尔沁左翼后旗", + "150523": "开鲁县", + "150524": "库伦旗", + "150525": "奈曼旗", + "150526": "扎鲁特旗", + "150571": "通辽经济技术开发区", + "150581": "霍林郭勒市", + "150602": "东胜区", + "150603": "康巴什区", + "150621": "达拉特旗", + "150622": "准格尔旗", + "150623": "鄂托克前旗", + "150624": "鄂托克旗", + "150625": "杭锦旗", + "150626": "乌审旗", + "150627": "伊金霍洛旗", + "150702": "海拉尔区", + "150703": "扎赉诺尔区", + "150721": "阿荣旗", + "150722": "莫力达瓦达斡尔族自治旗", + "150723": "鄂伦春自治旗", + "150724": "鄂温克族自治旗", + "150725": "陈巴尔虎旗", + "150726": "新巴尔虎左旗", + "150727": "新巴尔虎右旗", + "150781": "满洲里市", + "150782": "牙克石市", + "150783": "扎兰屯市", + "150784": "额尔古纳市", + "150785": "根河市", + "150802": "临河区", + "150821": "五原县", + "150822": "磴口县", + "150823": "乌拉特前旗", + "150824": "乌拉特中旗", + "150825": "乌拉特后旗", + "150826": "杭锦后旗", + "150902": "集宁区", + "150921": "卓资县", + "150922": "化德县", + "150923": "商都县", + "150924": "兴和县", + "150925": "凉城县", + "150926": "察哈尔右翼前旗", + "150927": "察哈尔右翼中旗", + "150928": "察哈尔右翼后旗", + "150929": "四子王旗", + "150981": "丰镇市", + "152201": "乌兰浩特市", + "152202": "阿尔山市", + "152221": "科尔沁右翼前旗", + "152222": "科尔沁右翼中旗", + "152223": "扎赉特旗", + "152224": "突泉县", + "152501": "二连浩特市", + "152502": "锡林浩特市", + "152522": "阿巴嘎旗", + "152523": "苏尼特左旗", + "152524": "苏尼特右旗", + "152525": "东乌珠穆沁旗", + "152526": "西乌珠穆沁旗", + "152527": "太仆寺旗", + "152528": "镶黄旗", + "152529": "正镶白旗", + "152530": "正蓝旗", + "152531": "多伦县", + "152571": "乌拉盖管委会", + "152921": "阿拉善左旗", + "152922": "阿拉善右旗", + "152923": "额济纳旗", + "152971": "内蒙古阿拉善经济开发区", + "210102": "和平区", + "210103": "沈河区", + "210104": "大东区", + "210105": "皇姑区", + "210106": "铁西区", + "210111": "苏家屯区", + "210112": "浑南区", + "210113": "沈北新区", + "210114": "于洪区", + "210115": "辽中区", + "210123": "康平县", + "210124": "法库县", + "210181": "新民市", + "210190": "经济技术开发区", + "210202": "中山区", + "210203": "西岗区", + "210204": "沙河口区", + "210211": "甘井子区", + "210212": "旅顺口区", + "210213": "金州区", + "210214": "普兰店区", + "210224": "长海县", + "210281": "瓦房店市", + "210283": "庄河市", + "210302": "铁东区", + "210303": "铁西区", + "210304": "立山区", + "210311": "千山区", + "210321": "台安县", + "210323": "岫岩满族自治县", + "210381": "海城市", + "210390": "高新区", + "210402": "新抚区", + "210403": "东洲区", + "210404": "望花区", + "210411": "顺城区", + "210421": "抚顺县", + "210422": "新宾满族自治县", + "210423": "清原满族自治县", + "210502": "平山区", + "210503": "溪湖区", + "210504": "明山区", + "210505": "南芬区", + "210521": "本溪满族自治县", + "210522": "桓仁满族自治县", + "210602": "元宝区", + "210603": "振兴区", + "210604": "振安区", + "210624": "宽甸满族自治县", + "210681": "东港市", + "210682": "凤城市", + "210702": "古塔区", + "210703": "凌河区", + "210711": "太和区", + "210726": "黑山县", + "210727": "义县", + "210781": "凌海市", + "210782": "北镇市", + "210793": "经济技术开发区", + "210802": "站前区", + "210803": "西市区", + "210804": "鲅鱼圈区", + "210811": "老边区", + "210881": "盖州市", + "210882": "大石桥市", + "210902": "海州区", + "210903": "新邱区", + "210904": "太平区", + "210905": "清河门区", + "210911": "细河区", + "210921": "阜新蒙古族自治县", + "210922": "彰武县", + "211002": "白塔区", + "211003": "文圣区", + "211004": "宏伟区", + "211005": "弓长岭区", + "211011": "太子河区", + "211021": "辽阳县", + "211081": "灯塔市", + "211102": "双台子区", + "211103": "兴隆台区", + "211104": "大洼区", + "211122": "盘山县", + "211202": "银州区", + "211204": "清河区", + "211221": "铁岭县", + "211223": "西丰县", + "211224": "昌图县", + "211281": "调兵山市", + "211282": "开原市", + "211302": "双塔区", + "211303": "龙城区", + "211321": "朝阳县", + "211322": "建平县", + "211324": "喀喇沁左翼蒙古族自治县", + "211381": "北票市", + "211382": "凌源市", + "211402": "连山区", + "211403": "龙港区", + "211404": "南票区", + "211421": "绥中县", + "211422": "建昌县", + "211481": "兴城市", + "220102": "南关区", + "220103": "宽城区", + "220104": "朝阳区", + "220105": "二道区", + "220106": "绿园区", + "220112": "双阳区", + "220113": "九台区", + "220122": "农安县", + "220171": "长春经济技术开发区", + "220172": "长春净月高新技术产业开发区", + "220173": "长春高新技术产业开发区", + "220174": "长春汽车经济技术开发区", + "220182": "榆树市", + "220183": "德惠市", + "220184": "公主岭市", + "220192": "经济技术开发区", + "220202": "昌邑区", + "220203": "龙潭区", + "220204": "船营区", + "220211": "丰满区", + "220221": "永吉县", + "220271": "吉林经济开发区", + "220272": "吉林高新技术产业开发区", + "220281": "蛟河市", + "220282": "桦甸市", + "220283": "舒兰市", + "220284": "磐石市", + "220302": "铁西区", + "220303": "铁东区", + "220322": "梨树县", + "220323": "伊通满族自治县", + "220382": "双辽市", + "220402": "龙山区", + "220403": "西安区", + "220421": "东丰县", + "220422": "东辽县", + "220502": "东昌区", + "220503": "二道江区", + "220521": "通化县", + "220523": "辉南县", + "220524": "柳河县", + "220581": "梅河口市", + "220582": "集安市", + "220602": "浑江区", + "220605": "江源区", + "220621": "抚松县", + "220622": "靖宇县", + "220623": "长白朝鲜族自治县", + "220681": "临江市", + "220702": "宁江区", + "220721": "前郭尔罗斯蒙古族自治县", + "220722": "长岭县", + "220723": "乾安县", + "220771": "吉林松原经济开发区", + "220781": "扶余市", + "220802": "洮北区", + "220821": "镇赉县", + "220822": "通榆县", + "220871": "吉林白城经济开发区", + "220881": "洮南市", + "220882": "大安市", + "222401": "延吉市", + "222402": "图们市", + "222403": "敦化市", + "222404": "珲春市", + "222405": "龙井市", + "222406": "和龙市", + "222424": "汪清县", + "222426": "安图县", + "230102": "道里区", + "230103": "南岗区", + "230104": "道外区", + "230108": "平房区", + "230109": "松北区", + "230110": "香坊区", + "230111": "呼兰区", + "230112": "阿城区", + "230113": "双城区", + "230123": "依兰县", + "230124": "方正县", + "230125": "宾县", + "230126": "巴彦县", + "230127": "木兰县", + "230128": "通河县", + "230129": "延寿县", + "230183": "尚志市", + "230184": "五常市", + "230202": "龙沙区", + "230203": "建华区", + "230204": "铁锋区", + "230205": "昂昂溪区", + "230206": "富拉尔基区", + "230207": "碾子山区", + "230208": "梅里斯达斡尔族区", + "230221": "龙江县", + "230223": "依安县", + "230224": "泰来县", + "230225": "甘南县", + "230227": "富裕县", + "230229": "克山县", + "230230": "克东县", + "230231": "拜泉县", + "230281": "讷河市", + "230302": "鸡冠区", + "230303": "恒山区", + "230304": "滴道区", + "230305": "梨树区", + "230306": "城子河区", + "230307": "麻山区", + "230321": "鸡东县", + "230381": "虎林市", + "230382": "密山市", + "230402": "向阳区", + "230403": "工农区", + "230404": "南山区", + "230405": "兴安区", + "230406": "东山区", + "230407": "兴山区", + "230421": "萝北县", + "230422": "绥滨县", + "230502": "尖山区", + "230503": "岭东区", + "230505": "四方台区", + "230506": "宝山区", + "230521": "集贤县", + "230522": "友谊县", + "230523": "宝清县", + "230524": "饶河县", + "230602": "萨尔图区", + "230603": "龙凤区", + "230604": "让胡路区", + "230605": "红岗区", + "230606": "大同区", + "230621": "肇州县", + "230622": "肇源县", + "230623": "林甸县", + "230624": "杜尔伯特蒙古族自治县", + "230671": "大庆高新技术产业开发区", + "230717": "伊美区", + "230718": "乌翠区", + "230719": "友好区", + "230722": "嘉荫县", + "230723": "汤旺县", + "230724": "丰林县", + "230725": "大箐山县", + "230726": "南岔县", + "230751": "金林区", + "230781": "铁力市", + "230803": "向阳区", + "230804": "前进区", + "230805": "东风区", + "230811": "郊区", + "230822": "桦南县", + "230826": "桦川县", + "230828": "汤原县", + "230881": "同江市", + "230882": "富锦市", + "230883": "抚远市", + "230902": "新兴区", + "230903": "桃山区", + "230904": "茄子河区", + "230921": "勃利县", + "231002": "东安区", + "231003": "阳明区", + "231004": "爱民区", + "231005": "西安区", + "231025": "林口县", + "231081": "绥芬河市", + "231083": "海林市", + "231084": "宁安市", + "231085": "穆棱市", + "231086": "东宁市", + "231102": "爱辉区", + "231123": "逊克县", + "231124": "孙吴县", + "231181": "北安市", + "231182": "五大连池市", + "231183": "嫩江市", + "231202": "北林区", + "231221": "望奎县", + "231222": "兰西县", + "231223": "青冈县", + "231224": "庆安县", + "231225": "明水县", + "231226": "绥棱县", + "231281": "安达市", + "231282": "肇东市", + "231283": "海伦市", + "232701": "漠河市", + "232721": "呼玛县", + "232722": "塔河县", + "232761": "加格达奇区", + "232762": "松岭区", + "232763": "新林区", + "232764": "呼中区", + "310101": "黄浦区", + "310104": "徐汇区", + "310105": "长宁区", + "310106": "静安区", + "310107": "普陀区", + "310109": "虹口区", + "310110": "杨浦区", + "310112": "闵行区", + "310113": "宝山区", + "310114": "嘉定区", + "310115": "浦东新区", + "310116": "金山区", + "310117": "松江区", + "310118": "青浦区", + "310120": "奉贤区", + "310151": "崇明区", + "320102": "玄武区", + "320104": "秦淮区", + "320105": "建邺区", + "320106": "鼓楼区", + "320111": "浦口区", + "320112": "江北新区", + "320113": "栖霞区", + "320114": "雨花台区", + "320115": "江宁区", + "320116": "六合区", + "320117": "溧水区", + "320118": "高淳区", + "320205": "锡山区", + "320206": "惠山区", + "320211": "滨湖区", + "320213": "梁溪区", + "320214": "新吴区", + "320281": "江阴市", + "320282": "宜兴市", + "320302": "鼓楼区", + "320303": "云龙区", + "320305": "贾汪区", + "320311": "泉山区", + "320312": "铜山区", + "320321": "丰县", + "320322": "沛县", + "320324": "睢宁县", + "320371": "徐州经济技术开发区", + "320381": "新沂市", + "320382": "邳州市", + "320391": "工业园区", + "320402": "天宁区", + "320404": "钟楼区", + "320411": "新北区", + "320412": "武进区", + "320413": "金坛区", + "320481": "溧阳市", + "320505": "虎丘区", + "320506": "吴中区", + "320507": "相城区", + "320508": "姑苏区", + "320509": "吴江区", + "320571": "苏州工业园区", + "320581": "常熟市", + "320582": "张家港市", + "320583": "昆山市", + "320585": "太仓市", + "320590": "工业园区", + "320591": "高新区", + "320611": "港闸区", + "320612": "通州区", + "320613": "崇川区", + "320614": "海门区", + "320623": "如东县", + "320681": "启东市", + "320682": "如皋市", + "320685": "海安市", + "320691": "高新区", + "320703": "连云区", + "320706": "海州区", + "320707": "赣榆区", + "320722": "东海县", + "320723": "灌云县", + "320724": "灌南县", + "320771": "连云港经济技术开发区", + "320803": "淮安区", + "320804": "淮阴区", + "320812": "清江浦区", + "320813": "洪泽区", + "320826": "涟水县", + "320830": "盱眙县", + "320831": "金湖县", + "320871": "淮安经济技术开发区", + "320890": "经济开发区", + "320902": "亭湖区", + "320903": "盐都区", + "320904": "大丰区", + "320921": "响水县", + "320922": "滨海县", + "320923": "阜宁县", + "320924": "射阳县", + "320925": "建湖县", + "320971": "盐城经济技术开发区", + "320981": "东台市", + "321002": "广陵区", + "321003": "邗江区", + "321012": "江都区", + "321023": "宝应县", + "321071": "扬州经济技术开发区", + "321081": "仪征市", + "321084": "高邮市", + "321090": "经济开发区", + "321102": "京口区", + "321111": "润州区", + "321112": "丹徒区", + "321150": "镇江新区", + "321181": "丹阳市", + "321182": "扬中市", + "321183": "句容市", + "321202": "海陵区", + "321203": "高港区", + "321204": "姜堰区", + "321271": "泰州医药高新技术产业开发区", + "321281": "兴化市", + "321282": "靖江市", + "321283": "泰兴市", + "321302": "宿城区", + "321311": "宿豫区", + "321322": "沭阳县", + "321323": "泗阳县", + "321324": "泗洪县", + "321371": "宿迁经济技术开发区", + "330102": "上城区", + "330105": "拱墅区", + "330106": "西湖区", + "330108": "滨江区", + "330109": "萧山区", + "330110": "余杭区", + "330111": "富阳区", + "330112": "临安区", + "330113": "临平区", + "330114": "钱塘区", + "330122": "桐庐县", + "330127": "淳安县", + "330182": "建德市", + "330203": "海曙区", + "330205": "江北区", + "330206": "北仑区", + "330211": "镇海区", + "330212": "鄞州区", + "330213": "奉化区", + "330225": "象山县", + "330226": "宁海县", + "330281": "余姚市", + "330282": "慈溪市", + "330302": "鹿城区", + "330303": "龙湾区", + "330304": "瓯海区", + "330305": "洞头区", + "330324": "永嘉县", + "330326": "平阳县", + "330327": "苍南县", + "330328": "文成县", + "330329": "泰顺县", + "330381": "瑞安市", + "330382": "乐清市", + "330383": "龙港市", + "330402": "南湖区", + "330411": "秀洲区", + "330421": "嘉善县", + "330424": "海盐县", + "330481": "海宁市", + "330482": "平湖市", + "330483": "桐乡市", + "330502": "吴兴区", + "330503": "南浔区", + "330521": "德清县", + "330522": "长兴县", + "330523": "安吉县", + "330602": "越城区", + "330603": "柯桥区", + "330604": "上虞区", + "330624": "新昌县", + "330681": "诸暨市", + "330683": "嵊州市", + "330702": "婺城区", + "330703": "金东区", + "330723": "武义县", + "330726": "浦江县", + "330727": "磐安县", + "330781": "兰溪市", + "330782": "义乌市", + "330783": "东阳市", + "330784": "永康市", + "330802": "柯城区", + "330803": "衢江区", + "330822": "常山县", + "330824": "开化县", + "330825": "龙游县", + "330881": "江山市", + "330902": "定海区", + "330903": "普陀区", + "330921": "岱山县", + "330922": "嵊泗县", + "331002": "椒江区", + "331003": "黄岩区", + "331004": "路桥区", + "331022": "三门县", + "331023": "天台县", + "331024": "仙居县", + "331081": "温岭市", + "331082": "临海市", + "331083": "玉环市", + "331102": "莲都区", + "331121": "青田县", + "331122": "缙云县", + "331123": "遂昌县", + "331124": "松阳县", + "331125": "云和县", + "331126": "庆元县", + "331127": "景宁畲族自治县", + "331181": "龙泉市", + "340102": "瑶海区", + "340103": "庐阳区", + "340104": "蜀山区", + "340111": "包河区", + "340121": "长丰县", + "340122": "肥东县", + "340123": "肥西县", + "340124": "庐江县", + "340171": "合肥高新技术产业开发区", + "340172": "合肥经济技术开发区", + "340173": "合肥新站高新技术产业开发区", + "340181": "巢湖市", + "340190": "高新技术开发区", + "340191": "经济技术开发区", + "340202": "镜湖区", + "340207": "鸠江区", + "340209": "弋江区", + "340210": "湾沚区", + "340212": "繁昌区", + "340223": "南陵县", + "340281": "无为市", + "340302": "龙子湖区", + "340303": "蚌山区", + "340304": "禹会区", + "340311": "淮上区", + "340321": "怀远县", + "340322": "五河县", + "340323": "固镇县", + "340371": "蚌埠市高新技术开发区", + "340372": "蚌埠市经济开发区", + "340402": "大通区", + "340403": "田家庵区", + "340404": "谢家集区", + "340405": "八公山区", + "340406": "潘集区", + "340421": "凤台县", + "340422": "寿县", + "340503": "花山区", + "340504": "雨山区", + "340506": "博望区", + "340521": "当涂县", + "340522": "含山县", + "340523": "和县", + "340602": "杜集区", + "340603": "相山区", + "340604": "烈山区", + "340621": "濉溪县", + "340705": "铜官区", + "340706": "义安区", + "340711": "郊区", + "340722": "枞阳县", + "340802": "迎江区", + "340803": "大观区", + "340811": "宜秀区", + "340822": "怀宁县", + "340825": "太湖县", + "340826": "宿松县", + "340827": "望江县", + "340828": "岳西县", + "340881": "桐城市", + "340882": "潜山市", + "341002": "屯溪区", + "341003": "黄山区", + "341004": "徽州区", + "341021": "歙县", + "341022": "休宁县", + "341023": "黟县", + "341024": "祁门县", + "341102": "琅琊区", + "341103": "南谯区", + "341122": "来安县", + "341124": "全椒县", + "341125": "定远县", + "341126": "凤阳县", + "341181": "天长市", + "341182": "明光市", + "341202": "颍州区", + "341203": "颍东区", + "341204": "颍泉区", + "341221": "临泉县", + "341222": "太和县", + "341225": "阜南县", + "341226": "颍上县", + "341271": "阜阳合肥现代产业园区", + "341282": "界首市", + "341302": "埇桥区", + "341321": "砀山县", + "341322": "萧县", + "341323": "灵璧县", + "341324": "泗县", + "341371": "宿州马鞍山现代产业园区", + "341372": "宿州经济技术开发区", + "341390": "经济开发区", + "341502": "金安区", + "341503": "裕安区", + "341504": "叶集区", + "341522": "霍邱县", + "341523": "舒城县", + "341524": "金寨县", + "341525": "霍山县", + "341602": "谯城区", + "341621": "涡阳县", + "341622": "蒙城县", + "341623": "利辛县", + "341702": "贵池区", + "341721": "东至县", + "341722": "石台县", + "341723": "青阳县", + "341802": "宣州区", + "341821": "郎溪县", + "341823": "泾县", + "341824": "绩溪县", + "341825": "旌德县", + "341871": "宣城市经济开发区", + "341881": "宁国市", + "341882": "广德市", + "350102": "鼓楼区", + "350103": "台江区", + "350104": "仓山区", + "350105": "马尾区", + "350111": "晋安区", + "350112": "长乐区", + "350121": "闽侯县", + "350122": "连江县", + "350123": "罗源县", + "350124": "闽清县", + "350125": "永泰县", + "350128": "平潭县", + "350181": "福清市", + "350203": "思明区", + "350205": "海沧区", + "350206": "湖里区", + "350211": "集美区", + "350212": "同安区", + "350213": "翔安区", + "350302": "城厢区", + "350303": "涵江区", + "350304": "荔城区", + "350305": "秀屿区", + "350322": "仙游县", + "350402": "梅列区", + "350404": "三元区", + "350405": "沙县区", + "350421": "明溪县", + "350423": "清流县", + "350424": "宁化县", + "350425": "大田县", + "350426": "尤溪县", + "350428": "将乐县", + "350429": "泰宁县", + "350430": "建宁县", + "350481": "永安市", + "350502": "鲤城区", + "350503": "丰泽区", + "350504": "洛江区", + "350505": "泉港区", + "350521": "惠安县", + "350524": "安溪县", + "350525": "永春县", + "350526": "德化县", + "350527": "金门县", + "350581": "石狮市", + "350582": "晋江市", + "350583": "南安市", + "350602": "芗城区", + "350603": "龙文区", + "350604": "龙海区", + "350605": "长泰区", + "350622": "云霄县", + "350623": "漳浦县", + "350624": "诏安县", + "350626": "东山县", + "350627": "南靖县", + "350628": "平和县", + "350629": "华安县", + "350702": "延平区", + "350703": "建阳区", + "350721": "顺昌县", + "350722": "浦城县", + "350723": "光泽县", + "350724": "松溪县", + "350725": "政和县", + "350781": "邵武市", + "350782": "武夷山市", + "350783": "建瓯市", + "350802": "新罗区", + "350803": "永定区", + "350821": "长汀县", + "350823": "上杭县", + "350824": "武平县", + "350825": "连城县", + "350881": "漳平市", + "350902": "蕉城区", + "350921": "霞浦县", + "350922": "古田县", + "350923": "屏南县", + "350924": "寿宁县", + "350925": "周宁县", + "350926": "柘荣县", + "350981": "福安市", + "350982": "福鼎市", + "360102": "东湖区", + "360103": "西湖区", + "360104": "青云谱区", + "360111": "青山湖区", + "360112": "新建区", + "360113": "红谷滩区", + "360121": "南昌县", + "360123": "安义县", + "360124": "进贤县", + "360190": "经济技术开发区", + "360192": "高新区", + "360202": "昌江区", + "360203": "珠山区", + "360222": "浮梁县", + "360281": "乐平市", + "360302": "安源区", + "360313": "湘东区", + "360321": "莲花县", + "360322": "上栗县", + "360323": "芦溪县", + "360402": "濂溪区", + "360403": "浔阳区", + "360404": "柴桑区", + "360423": "武宁县", + "360424": "修水县", + "360425": "永修县", + "360426": "德安县", + "360428": "都昌县", + "360429": "湖口县", + "360430": "彭泽县", + "360481": "瑞昌市", + "360482": "共青城市", + "360483": "庐山市", + "360490": "经济技术开发区", + "360502": "渝水区", + "360521": "分宜县", + "360602": "月湖区", + "360603": "余江区", + "360681": "贵溪市", + "360702": "章贡区", + "360703": "南康区", + "360704": "赣县区", + "360722": "信丰县", + "360723": "大余县", + "360724": "上犹县", + "360725": "崇义县", + "360726": "安远县", + "360728": "定南县", + "360729": "全南县", + "360730": "宁都县", + "360731": "于都县", + "360732": "兴国县", + "360733": "会昌县", + "360734": "寻乌县", + "360735": "石城县", + "360781": "瑞金市", + "360783": "龙南市", + "360802": "吉州区", + "360803": "青原区", + "360821": "吉安县", + "360822": "吉水县", + "360823": "峡江县", + "360824": "新干县", + "360825": "永丰县", + "360826": "泰和县", + "360827": "遂川县", + "360828": "万安县", + "360829": "安福县", + "360830": "永新县", + "360881": "井冈山市", + "360902": "袁州区", + "360921": "奉新县", + "360922": "万载县", + "360923": "上高县", + "360924": "宜丰县", + "360925": "靖安县", + "360926": "铜鼓县", + "360981": "丰城市", + "360982": "樟树市", + "360983": "高安市", + "361002": "临川区", + "361003": "东乡区", + "361021": "南城县", + "361022": "黎川县", + "361023": "南丰县", + "361024": "崇仁县", + "361025": "乐安县", + "361026": "宜黄县", + "361027": "金溪县", + "361028": "资溪县", + "361030": "广昌县", + "361102": "信州区", + "361103": "广丰区", + "361104": "广信区", + "361123": "玉山县", + "361124": "铅山县", + "361125": "横峰县", + "361126": "弋阳县", + "361127": "余干县", + "361128": "鄱阳县", + "361129": "万年县", + "361130": "婺源县", + "361181": "德兴市", + "370102": "历下区", + "370103": "市中区", + "370104": "槐荫区", + "370105": "天桥区", + "370112": "历城区", + "370113": "长清区", + "370114": "章丘区", + "370115": "济阳区", + "370116": "莱芜区", + "370117": "钢城区", + "370124": "平阴县", + "370126": "商河县", + "370171": "济南高新技术产业开发区", + "370190": "高新区", + "370202": "市南区", + "370203": "市北区", + "370211": "黄岛区", + "370212": "崂山区", + "370213": "李沧区", + "370214": "城阳区", + "370215": "即墨区", + "370271": "青岛高新技术产业开发区", + "370281": "胶州市", + "370283": "平度市", + "370285": "莱西市", + "370290": "开发区", + "370302": "淄川区", + "370303": "张店区", + "370304": "博山区", + "370305": "临淄区", + "370306": "周村区", + "370321": "桓台县", + "370322": "高青县", + "370323": "沂源县", + "370402": "市中区", + "370403": "薛城区", + "370404": "峄城区", + "370405": "台儿庄区", + "370406": "山亭区", + "370481": "滕州市", + "370502": "东营区", + "370503": "河口区", + "370505": "垦利区", + "370522": "利津县", + "370523": "广饶县", + "370571": "东营经济技术开发区", + "370572": "东营港经济开发区", + "370602": "芝罘区", + "370611": "福山区", + "370612": "牟平区", + "370613": "莱山区", + "370614": "蓬莱区", + "370634": "长岛县", + "370671": "烟台高新技术产业开发区", + "370672": "烟台经济技术开发区", + "370681": "龙口市", + "370682": "莱阳市", + "370683": "莱州市", + "370685": "招远市", + "370686": "栖霞市", + "370687": "海阳市", + "370690": "开发区", + "370702": "潍城区", + "370703": "寒亭区", + "370704": "坊子区", + "370705": "奎文区", + "370724": "临朐县", + "370725": "昌乐县", + "370772": "潍坊滨海经济技术开发区", + "370781": "青州市", + "370782": "诸城市", + "370783": "寿光市", + "370784": "安丘市", + "370785": "高密市", + "370786": "昌邑市", + "370790": "开发区", + "370791": "高新区", + "370811": "任城区", + "370812": "兖州区", + "370826": "微山县", + "370827": "鱼台县", + "370828": "金乡县", + "370829": "嘉祥县", + "370830": "汶上县", + "370831": "泗水县", + "370832": "梁山县", + "370871": "济宁高新技术产业开发区", + "370881": "曲阜市", + "370883": "邹城市", + "370890": "高新区", + "370902": "泰山区", + "370911": "岱岳区", + "370921": "宁阳县", + "370923": "东平县", + "370982": "新泰市", + "370983": "肥城市", + "371002": "环翠区", + "371003": "文登区", + "371071": "威海火炬高技术产业开发区", + "371072": "威海经济技术开发区", + "371082": "荣成市", + "371083": "乳山市", + "371091": "经济技术开发区", + "371102": "东港区", + "371103": "岚山区", + "371121": "五莲县", + "371122": "莒县", + "371171": "日照经济技术开发区", + "371302": "兰山区", + "371311": "罗庄区", + "371312": "河东区", + "371321": "沂南县", + "371322": "郯城县", + "371323": "沂水县", + "371324": "兰陵县", + "371325": "费县", + "371326": "平邑县", + "371327": "莒南县", + "371328": "蒙阴县", + "371329": "临沭县", + "371371": "临沂高新技术产业开发区", + "371402": "德城区", + "371403": "陵城区", + "371422": "宁津县", + "371423": "庆云县", + "371424": "临邑县", + "371425": "齐河县", + "371426": "平原县", + "371427": "夏津县", + "371428": "武城县", + "371472": "德州运河经济开发区", + "371481": "乐陵市", + "371482": "禹城市", + "371502": "东昌府区", + "371503": "茌平区", + "371521": "阳谷县", + "371522": "莘县", + "371524": "东阿县", + "371525": "冠县", + "371526": "高唐县", + "371581": "临清市", + "371602": "滨城区", + "371603": "沾化区", + "371621": "惠民县", + "371622": "阳信县", + "371623": "无棣县", + "371625": "博兴县", + "371681": "邹平市", + "371702": "牡丹区", + "371703": "定陶区", + "371721": "曹县", + "371722": "单县", + "371723": "成武县", + "371724": "巨野县", + "371725": "郓城县", + "371726": "鄄城县", + "371728": "东明县", + "371771": "菏泽经济技术开发区", + "371772": "菏泽高新技术开发区", + "410102": "中原区", + "410103": "二七区", + "410104": "管城回族区", + "410105": "金水区", + "410106": "上街区", + "410108": "惠济区", + "410122": "中牟县", + "410171": "郑州经济技术开发区", + "410172": "郑州高新技术产业开发区", + "410173": "郑州航空港经济综合实验区", + "410181": "巩义市", + "410182": "荥阳市", + "410183": "新密市", + "410184": "新郑市", + "410185": "登封市", + "410190": "高新技术开发区", + "410191": "经济技术开发区", + "410202": "龙亭区", + "410203": "顺河回族区", + "410204": "鼓楼区", + "410205": "禹王台区", + "410212": "祥符区", + "410221": "杞县", + "410222": "通许县", + "410223": "尉氏县", + "410225": "兰考县", + "410302": "老城区", + "410303": "西工区", + "410304": "瀍河回族区", + "410305": "涧西区", + "410307": "偃师区", + "410308": "孟津区", + "410311": "洛龙区", + "410323": "新安县", + "410324": "栾川县", + "410325": "嵩县", + "410326": "汝阳县", + "410327": "宜阳县", + "410328": "洛宁县", + "410329": "伊川县", + "410402": "新华区", + "410403": "卫东区", + "410404": "石龙区", + "410411": "湛河区", + "410421": "宝丰县", + "410422": "叶县", + "410423": "鲁山县", + "410425": "郏县", + "410471": "平顶山高新技术产业开发区", + "410481": "舞钢市", + "410482": "汝州市", + "410502": "文峰区", + "410503": "北关区", + "410505": "殷都区", + "410506": "龙安区", + "410522": "安阳县", + "410523": "汤阴县", + "410526": "滑县", + "410527": "内黄县", + "410581": "林州市", + "410590": "开发区", + "410602": "鹤山区", + "410603": "山城区", + "410611": "淇滨区", + "410621": "浚县", + "410622": "淇县", + "410702": "红旗区", + "410703": "卫滨区", + "410704": "凤泉区", + "410711": "牧野区", + "410721": "新乡县", + "410724": "获嘉县", + "410725": "原阳县", + "410726": "延津县", + "410727": "封丘县", + "410771": "新乡高新技术产业开发区", + "410772": "新乡经济技术开发区", + "410781": "卫辉市", + "410782": "辉县市", + "410783": "长垣市", + "410802": "解放区", + "410803": "中站区", + "410804": "马村区", + "410811": "山阳区", + "410821": "修武县", + "410822": "博爱县", + "410823": "武陟县", + "410825": "温县", + "410871": "焦作城乡一体化示范区", + "410882": "沁阳市", + "410883": "孟州市", + "410902": "华龙区", + "410922": "清丰县", + "410923": "南乐县", + "410926": "范县", + "410927": "台前县", + "410928": "濮阳县", + "410971": "河南濮阳工业园区", + "411002": "魏都区", + "411003": "建安区", + "411024": "鄢陵县", + "411025": "襄城县", + "411071": "许昌经济技术开发区", + "411081": "禹州市", + "411082": "长葛市", + "411102": "源汇区", + "411103": "郾城区", + "411104": "召陵区", + "411121": "舞阳县", + "411122": "临颍县", + "411171": "漯河经济技术开发区", + "411202": "湖滨区", + "411203": "陕州区", + "411221": "渑池县", + "411224": "卢氏县", + "411271": "河南三门峡经济开发区", + "411281": "义马市", + "411282": "灵宝市", + "411302": "宛城区", + "411303": "卧龙区", + "411321": "南召县", + "411322": "方城县", + "411323": "西峡县", + "411324": "镇平县", + "411325": "内乡县", + "411326": "淅川县", + "411327": "社旗县", + "411328": "唐河县", + "411329": "新野县", + "411330": "桐柏县", + "411372": "南阳市城乡一体化示范区", + "411381": "邓州市", + "411402": "梁园区", + "411403": "睢阳区", + "411421": "民权县", + "411422": "睢县", + "411423": "宁陵县", + "411424": "柘城县", + "411425": "虞城县", + "411426": "夏邑县", + "411481": "永城市", + "411502": "浉河区", + "411503": "平桥区", + "411521": "罗山县", + "411522": "光山县", + "411523": "新县", + "411524": "商城县", + "411525": "固始县", + "411526": "潢川县", + "411527": "淮滨县", + "411528": "息县", + "411602": "川汇区", + "411603": "淮阳区", + "411621": "扶沟县", + "411622": "西华县", + "411623": "商水县", + "411624": "沈丘县", + "411625": "郸城县", + "411627": "太康县", + "411628": "鹿邑县", + "411671": "河南周口经济开发区", + "411681": "项城市", + "411690": "经济开发区", + "411702": "驿城区", + "411721": "西平县", + "411722": "上蔡县", + "411723": "平舆县", + "411724": "正阳县", + "411725": "确山县", + "411726": "泌阳县", + "411727": "汝南县", + "411728": "遂平县", + "411729": "新蔡县", + "419001": "济源市", + "420102": "江岸区", + "420103": "江汉区", + "420104": "硚口区", + "420105": "汉阳区", + "420106": "武昌区", + "420107": "青山区", + "420111": "洪山区", + "420112": "东西湖区", + "420113": "汉南区", + "420114": "蔡甸区", + "420115": "江夏区", + "420116": "黄陂区", + "420117": "新洲区", + "420202": "黄石港区", + "420203": "西塞山区", + "420204": "下陆区", + "420205": "铁山区", + "420222": "阳新县", + "420281": "大冶市", + "420302": "茅箭区", + "420303": "张湾区", + "420304": "郧阳区", + "420322": "郧西县", + "420323": "竹山县", + "420324": "竹溪县", + "420325": "房县", + "420381": "丹江口市", + "420502": "西陵区", + "420503": "伍家岗区", + "420504": "点军区", + "420505": "猇亭区", + "420506": "夷陵区", + "420525": "远安县", + "420526": "兴山县", + "420527": "秭归县", + "420528": "长阳土家族自治县", + "420529": "五峰土家族自治县", + "420581": "宜都市", + "420582": "当阳市", + "420583": "枝江市", + "420590": "经济开发区", + "420602": "襄城区", + "420606": "樊城区", + "420607": "襄州区", + "420624": "南漳县", + "420625": "谷城县", + "420626": "保康县", + "420682": "老河口市", + "420683": "枣阳市", + "420684": "宜城市", + "420702": "梁子湖区", + "420703": "华容区", + "420704": "鄂城区", + "420802": "东宝区", + "420804": "掇刀区", + "420822": "沙洋县", + "420881": "钟祥市", + "420882": "京山市", + "420902": "孝南区", + "420921": "孝昌县", + "420922": "大悟县", + "420923": "云梦县", + "420981": "应城市", + "420982": "安陆市", + "420984": "汉川市", + "421002": "沙市区", + "421003": "荆州区", + "421022": "公安县", + "421024": "江陵县", + "421081": "石首市", + "421083": "洪湖市", + "421087": "松滋市", + "421088": "监利市", + "421102": "黄州区", + "421121": "团风县", + "421122": "红安县", + "421123": "罗田县", + "421124": "英山县", + "421125": "浠水县", + "421126": "蕲春县", + "421127": "黄梅县", + "421171": "龙感湖管理区", + "421181": "麻城市", + "421182": "武穴市", + "421202": "咸安区", + "421221": "嘉鱼县", + "421222": "通城县", + "421223": "崇阳县", + "421224": "通山县", + "421281": "赤壁市", + "421303": "曾都区", + "421321": "随县", + "421381": "广水市", + "422801": "恩施市", + "422802": "利川市", + "422822": "建始县", + "422823": "巴东县", + "422825": "宣恩县", + "422826": "咸丰县", + "422827": "来凤县", + "422828": "鹤峰县", + "429004": "仙桃市", + "429005": "潜江市", + "429006": "天门市", + "429021": "神农架林区", + "430102": "芙蓉区", + "430103": "天心区", + "430104": "岳麓区", + "430105": "开福区", + "430111": "雨花区", + "430112": "望城区", + "430121": "长沙县", + "430181": "浏阳市", + "430182": "宁乡市", + "430202": "荷塘区", + "430203": "芦淞区", + "430204": "石峰区", + "430211": "天元区", + "430212": "渌口区", + "430223": "攸县", + "430224": "茶陵县", + "430225": "炎陵县", + "430271": "云龙示范区", + "430281": "醴陵市", + "430302": "雨湖区", + "430304": "岳塘区", + "430321": "湘潭县", + "430373": "湘潭九华示范区", + "430381": "湘乡市", + "430382": "韶山市", + "430405": "珠晖区", + "430406": "雁峰区", + "430407": "石鼓区", + "430408": "蒸湘区", + "430412": "南岳区", + "430421": "衡阳县", + "430422": "衡南县", + "430423": "衡山县", + "430424": "衡东县", + "430426": "祁东县", + "430481": "耒阳市", + "430482": "常宁市", + "430502": "双清区", + "430503": "大祥区", + "430511": "北塔区", + "430522": "新邵县", + "430523": "邵阳县", + "430524": "隆回县", + "430525": "洞口县", + "430527": "绥宁县", + "430528": "新宁县", + "430529": "城步苗族自治县", + "430581": "武冈市", + "430582": "邵东市", + "430602": "岳阳楼区", + "430603": "云溪区", + "430611": "君山区", + "430621": "岳阳县", + "430623": "华容县", + "430624": "湘阴县", + "430626": "平江县", + "430681": "汨罗市", + "430682": "临湘市", + "430702": "武陵区", + "430703": "鼎城区", + "430721": "安乡县", + "430722": "汉寿县", + "430723": "澧县", + "430724": "临澧县", + "430725": "桃源县", + "430726": "石门县", + "430781": "津市市", + "430802": "永定区", + "430811": "武陵源区", + "430821": "慈利县", + "430822": "桑植县", + "430902": "资阳区", + "430903": "赫山区", + "430921": "南县", + "430922": "桃江县", + "430923": "安化县", + "430971": "益阳市大通湖管理区", + "430981": "沅江市", + "431002": "北湖区", + "431003": "苏仙区", + "431021": "桂阳县", + "431022": "宜章县", + "431023": "永兴县", + "431024": "嘉禾县", + "431025": "临武县", + "431026": "汝城县", + "431027": "桂东县", + "431028": "安仁县", + "431081": "资兴市", + "431102": "零陵区", + "431103": "冷水滩区", + "431122": "东安县", + "431123": "双牌县", + "431124": "道县", + "431125": "江永县", + "431126": "宁远县", + "431127": "蓝山县", + "431128": "新田县", + "431129": "江华瑶族自治县", + "431181": "祁阳市", + "431202": "鹤城区", + "431221": "中方县", + "431222": "沅陵县", + "431223": "辰溪县", + "431224": "溆浦县", + "431225": "会同县", + "431226": "麻阳苗族自治县", + "431227": "新晃侗族自治县", + "431228": "芷江侗族自治县", + "431229": "靖州苗族侗族自治县", + "431230": "通道侗族自治县", + "431271": "怀化市洪江管理区", + "431281": "洪江市", + "431302": "娄星区", + "431321": "双峰县", + "431322": "新化县", + "431381": "冷水江市", + "431382": "涟源市", + "433101": "吉首市", + "433122": "泸溪县", + "433123": "凤凰县", + "433124": "花垣县", + "433125": "保靖县", + "433126": "古丈县", + "433127": "永顺县", + "433130": "龙山县", + "440103": "荔湾区", + "440104": "越秀区", + "440105": "海珠区", + "440106": "天河区", + "440111": "白云区", + "440112": "黄埔区", + "440113": "番禺区", + "440114": "花都区", + "440115": "南沙区", + "440117": "从化区", + "440118": "增城区", + "440203": "武江区", + "440204": "浈江区", + "440205": "曲江区", + "440222": "始兴县", + "440224": "仁化县", + "440229": "翁源县", + "440232": "乳源瑶族自治县", + "440233": "新丰县", + "440281": "乐昌市", + "440282": "南雄市", + "440303": "罗湖区", + "440304": "福田区", + "440305": "南山区", + "440306": "宝安区", + "440307": "龙岗区", + "440308": "盐田区", + "440309": "龙华区", + "440310": "坪山区", + "440311": "光明区", + "440402": "香洲区", + "440403": "斗门区", + "440404": "金湾区", + "440507": "龙湖区", + "440511": "金平区", + "440512": "濠江区", + "440513": "潮阳区", + "440514": "潮南区", + "440515": "澄海区", + "440523": "南澳县", + "440604": "禅城区", + "440605": "南海区", + "440606": "顺德区", + "440607": "三水区", + "440608": "高明区", + "440703": "蓬江区", + "440704": "江海区", + "440705": "新会区", + "440781": "台山市", + "440783": "开平市", + "440784": "鹤山市", + "440785": "恩平市", + "440802": "赤坎区", + "440803": "霞山区", + "440804": "坡头区", + "440811": "麻章区", + "440823": "遂溪县", + "440825": "徐闻县", + "440881": "廉江市", + "440882": "雷州市", + "440883": "吴川市", + "440890": "经济技术开发区", + "440902": "茂南区", + "440904": "电白区", + "440981": "高州市", + "440982": "化州市", + "440983": "信宜市", + "441202": "端州区", + "441203": "鼎湖区", + "441204": "高要区", + "441223": "广宁县", + "441224": "怀集县", + "441225": "封开县", + "441226": "德庆县", + "441284": "四会市", + "441302": "惠城区", + "441303": "惠阳区", + "441322": "博罗县", + "441323": "惠东县", + "441324": "龙门县", + "441402": "梅江区", + "441403": "梅县区", + "441422": "大埔县", + "441423": "丰顺县", + "441424": "五华县", + "441426": "平远县", + "441427": "蕉岭县", + "441481": "兴宁市", + "441502": "城区", + "441521": "海丰县", + "441523": "陆河县", + "441581": "陆丰市", + "441602": "源城区", + "441621": "紫金县", + "441622": "龙川县", + "441623": "连平县", + "441624": "和平县", + "441625": "东源县", + "441702": "江城区", + "441704": "阳东区", + "441721": "阳西县", + "441781": "阳春市", + "441802": "清城区", + "441803": "清新区", + "441821": "佛冈县", + "441823": "阳山县", + "441825": "连山壮族瑶族自治县", + "441826": "连南瑶族自治县", + "441881": "英德市", + "441882": "连州市", + "441901": "中堂镇", + "441903": "南城街道", + "441904": "长安镇", + "441905": "东坑镇", + "441906": "樟木头镇", + "441907": "莞城街道", + "441908": "石龙镇", + "441909": "桥头镇", + "441910": "万江街道", + "441911": "麻涌镇", + "441912": "虎门镇", + "441913": "谢岗镇", + "441914": "石碣镇", + "441915": "茶山镇", + "441916": "东城街道", + "441917": "洪梅镇", + "441918": "道滘镇", + "441919": "高埗镇", + "441920": "企石镇", + "441921": "凤岗镇", + "441922": "大岭山镇", + "441923": "松山湖", + "441924": "清溪镇", + "441925": "望牛墩镇", + "441926": "厚街镇", + "441927": "常平镇", + "441928": "寮步镇", + "441929": "石排镇", + "441930": "横沥镇", + "441931": "塘厦镇", + "441932": "黄江镇", + "441933": "大朗镇", + "441934": "东莞港", + "441935": "东莞生态园", + "441990": "沙田镇", + "442001": "南头镇", + "442002": "神湾镇", + "442003": "东凤镇", + "442004": "五桂山街道", + "442005": "黄圃镇", + "442006": "小榄镇", + "442007": "石岐街道", + "442008": "横栏镇", + "442009": "三角镇", + "442010": "三乡镇", + "442011": "港口镇", + "442012": "沙溪镇", + "442013": "板芙镇", + "442015": "东升镇", + "442016": "阜沙镇", + "442017": "民众镇", + "442018": "东区街道", + "442019": "火炬开发区街道办事处", + "442020": "西区街道", + "442021": "南区街道", + "442022": "古镇镇", + "442023": "坦洲镇", + "442024": "大涌镇", + "442025": "南朗镇", + "445102": "湘桥区", + "445103": "潮安区", + "445122": "饶平县", + "445202": "榕城区", + "445203": "揭东区", + "445222": "揭西县", + "445224": "惠来县", + "445281": "普宁市", + "445302": "云城区", + "445303": "云安区", + "445321": "新兴县", + "445322": "郁南县", + "445381": "罗定市", + "450102": "兴宁区", + "450103": "青秀区", + "450105": "江南区", + "450107": "西乡塘区", + "450108": "良庆区", + "450109": "邕宁区", + "450110": "武鸣区", + "450123": "隆安县", + "450124": "马山县", + "450125": "上林县", + "450126": "宾阳县", + "450181": "横州市", + "450202": "城中区", + "450203": "鱼峰区", + "450204": "柳南区", + "450205": "柳北区", + "450206": "柳江区", + "450222": "柳城县", + "450223": "鹿寨县", + "450224": "融安县", + "450225": "融水苗族自治县", + "450226": "三江侗族自治县", + "450302": "秀峰区", + "450303": "叠彩区", + "450304": "象山区", + "450305": "七星区", + "450311": "雁山区", + "450312": "临桂区", + "450321": "阳朔县", + "450323": "灵川县", + "450324": "全州县", + "450325": "兴安县", + "450326": "永福县", + "450327": "灌阳县", + "450328": "龙胜各族自治县", + "450329": "资源县", + "450330": "平乐县", + "450332": "恭城瑶族自治县", + "450381": "荔浦市", + "450403": "万秀区", + "450405": "长洲区", + "450406": "龙圩区", + "450421": "苍梧县", + "450422": "藤县", + "450423": "蒙山县", + "450481": "岑溪市", + "450502": "海城区", + "450503": "银海区", + "450512": "铁山港区", + "450521": "合浦县", + "450602": "港口区", + "450603": "防城区", + "450621": "上思县", + "450681": "东兴市", + "450702": "钦南区", + "450703": "钦北区", + "450721": "灵山县", + "450722": "浦北县", + "450802": "港北区", + "450803": "港南区", + "450804": "覃塘区", + "450821": "平南县", + "450881": "桂平市", + "450902": "玉州区", + "450903": "福绵区", + "450921": "容县", + "450922": "陆川县", + "450923": "博白县", + "450924": "兴业县", + "450981": "北流市", + "451002": "右江区", + "451003": "田阳区", + "451022": "田东县", + "451024": "德保县", + "451026": "那坡县", + "451027": "凌云县", + "451028": "乐业县", + "451029": "田林县", + "451030": "西林县", + "451031": "隆林各族自治县", + "451081": "靖西市", + "451082": "平果市", + "451102": "八步区", + "451103": "平桂区", + "451121": "昭平县", + "451122": "钟山县", + "451123": "富川瑶族自治县", + "451202": "金城江区", + "451203": "宜州区", + "451221": "南丹县", + "451222": "天峨县", + "451223": "凤山县", + "451224": "东兰县", + "451225": "罗城仫佬族自治县", + "451226": "环江毛南族自治县", + "451227": "巴马瑶族自治县", + "451228": "都安瑶族自治县", + "451229": "大化瑶族自治县", + "451302": "兴宾区", + "451321": "忻城县", + "451322": "象州县", + "451323": "武宣县", + "451324": "金秀瑶族自治县", + "451381": "合山市", + "451402": "江州区", + "451421": "扶绥县", + "451422": "宁明县", + "451423": "龙州县", + "451424": "大新县", + "451425": "天等县", + "451481": "凭祥市", + "460105": "秀英区", + "460106": "龙华区", + "460107": "琼山区", + "460108": "美兰区", + "460202": "海棠区", + "460203": "吉阳区", + "460204": "天涯区", + "460205": "崖州区", + "460321": "西沙区", + "460322": "南沙区", + "460401": "那大镇", + "460402": "和庆镇", + "460403": "南丰镇", + "460404": "大成镇", + "460405": "雅星镇", + "460406": "兰洋镇", + "460407": "光村镇", + "460408": "木棠镇", + "460409": "海头镇", + "460410": "峨蔓镇", + "460411": "王五镇", + "460412": "白马井镇", + "460413": "中和镇", + "460414": "排浦镇", + "460415": "东成镇", + "460416": "新州镇", + "460417": "洋浦经济开发区", + "460418": "华南热作学院", + "469001": "五指山市", + "469002": "琼海市", + "469005": "文昌市", + "469006": "万宁市", + "469007": "东方市", + "469021": "定安县", + "469022": "屯昌县", + "469023": "澄迈县", + "469024": "临高县", + "469025": "白沙黎族自治县", + "469026": "昌江黎族自治县", + "469027": "乐东黎族自治县", + "469028": "陵水黎族自治县", + "469029": "保亭黎族苗族自治县", + "469030": "琼中黎族苗族自治县", + "500101": "万州区", + "500102": "涪陵区", + "500103": "渝中区", + "500104": "大渡口区", + "500105": "江北区", + "500106": "沙坪坝区", + "500107": "九龙坡区", + "500108": "南岸区", + "500109": "北碚区", + "500110": "綦江区", + "500111": "大足区", + "500112": "渝北区", + "500113": "巴南区", + "500114": "黔江区", + "500115": "长寿区", + "500116": "江津区", + "500117": "合川区", + "500118": "永川区", + "500119": "南川区", + "500120": "璧山区", + "500151": "铜梁区", + "500152": "潼南区", + "500153": "荣昌区", + "500154": "开州区", + "500155": "梁平区", + "500156": "武隆区", + "500229": "城口县", + "500230": "丰都县", + "500231": "垫江县", + "500233": "忠县", + "500235": "云阳县", + "500236": "奉节县", + "500237": "巫山县", + "500238": "巫溪县", + "500240": "石柱土家族自治县", + "500241": "秀山土家族苗族自治县", + "500242": "酉阳土家族苗族自治县", + "500243": "彭水苗族土家族自治县", + "510104": "锦江区", + "510105": "青羊区", + "510106": "金牛区", + "510107": "武侯区", + "510108": "成华区", + "510112": "龙泉驿区", + "510113": "青白江区", + "510114": "新都区", + "510115": "温江区", + "510116": "双流区", + "510117": "郫都区", + "510118": "新津区", + "510121": "金堂县", + "510129": "大邑县", + "510131": "蒲江县", + "510181": "都江堰市", + "510182": "彭州市", + "510183": "邛崃市", + "510184": "崇州市", + "510185": "简阳市", + "510191": "高新区", + "510302": "自流井区", + "510303": "贡井区", + "510304": "大安区", + "510311": "沿滩区", + "510321": "荣县", + "510322": "富顺县", + "510402": "东区", + "510403": "西区", + "510411": "仁和区", + "510421": "米易县", + "510422": "盐边县", + "510502": "江阳区", + "510503": "纳溪区", + "510504": "龙马潭区", + "510521": "泸县", + "510522": "合江县", + "510524": "叙永县", + "510525": "古蔺县", + "510603": "旌阳区", + "510604": "罗江区", + "510623": "中江县", + "510681": "广汉市", + "510682": "什邡市", + "510683": "绵竹市", + "510703": "涪城区", + "510704": "游仙区", + "510705": "安州区", + "510722": "三台县", + "510723": "盐亭县", + "510725": "梓潼县", + "510726": "北川羌族自治县", + "510727": "平武县", + "510781": "江油市", + "510791": "高新区", + "510802": "利州区", + "510811": "昭化区", + "510812": "朝天区", + "510821": "旺苍县", + "510822": "青川县", + "510823": "剑阁县", + "510824": "苍溪县", + "510903": "船山区", + "510904": "安居区", + "510921": "蓬溪县", + "510923": "大英县", + "510981": "射洪市", + "511002": "市中区", + "511011": "东兴区", + "511024": "威远县", + "511025": "资中县", + "511083": "隆昌市", + "511102": "市中区", + "511111": "沙湾区", + "511112": "五通桥区", + "511113": "金口河区", + "511123": "犍为县", + "511124": "井研县", + "511126": "夹江县", + "511129": "沐川县", + "511132": "峨边彝族自治县", + "511133": "马边彝族自治县", + "511181": "峨眉山市", + "511302": "顺庆区", + "511303": "高坪区", + "511304": "嘉陵区", + "511321": "南部县", + "511322": "营山县", + "511323": "蓬安县", + "511324": "仪陇县", + "511325": "西充县", + "511381": "阆中市", + "511402": "东坡区", + "511403": "彭山区", + "511421": "仁寿县", + "511423": "洪雅县", + "511424": "丹棱县", + "511425": "青神县", + "511502": "翠屏区", + "511503": "南溪区", + "511504": "叙州区", + "511523": "江安县", + "511524": "长宁县", + "511525": "高县", + "511526": "珙县", + "511527": "筠连县", + "511528": "兴文县", + "511529": "屏山县", + "511602": "广安区", + "511603": "前锋区", + "511621": "岳池县", + "511622": "武胜县", + "511623": "邻水县", + "511681": "华蓥市", + "511702": "通川区", + "511703": "达川区", + "511722": "宣汉县", + "511723": "开江县", + "511724": "大竹县", + "511725": "渠县", + "511781": "万源市", + "511802": "雨城区", + "511803": "名山区", + "511822": "荥经县", + "511823": "汉源县", + "511824": "石棉县", + "511825": "天全县", + "511826": "芦山县", + "511827": "宝兴县", + "511902": "巴州区", + "511903": "恩阳区", + "511921": "通江县", + "511922": "南江县", + "511923": "平昌县", + "511971": "巴中经济开发区", + "512002": "雁江区", + "512021": "安岳县", + "512022": "乐至县", + "513201": "马尔康市", + "513221": "汶川县", + "513222": "理县", + "513223": "茂县", + "513224": "松潘县", + "513225": "九寨沟县", + "513226": "金川县", + "513227": "小金县", + "513228": "黑水县", + "513230": "壤塘县", + "513231": "阿坝县", + "513232": "若尔盖县", + "513233": "红原县", + "513301": "康定市", + "513322": "泸定县", + "513323": "丹巴县", + "513324": "九龙县", + "513325": "雅江县", + "513326": "道孚县", + "513327": "炉霍县", + "513328": "甘孜县", + "513329": "新龙县", + "513330": "德格县", + "513331": "白玉县", + "513332": "石渠县", + "513333": "色达县", + "513334": "理塘县", + "513335": "巴塘县", + "513336": "乡城县", + "513337": "稻城县", + "513338": "得荣县", + "513401": "西昌市", + "513402": "会理市", + "513422": "木里藏族自治县", + "513423": "盐源县", + "513424": "德昌县", + "513426": "会东县", + "513427": "宁南县", + "513428": "普格县", + "513429": "布拖县", + "513430": "金阳县", + "513431": "昭觉县", + "513432": "喜德县", + "513433": "冕宁县", + "513434": "越西县", + "513435": "甘洛县", + "513436": "美姑县", + "513437": "雷波县", + "520102": "南明区", + "520103": "云岩区", + "520111": "花溪区", + "520112": "乌当区", + "520113": "白云区", + "520115": "观山湖区", + "520121": "开阳县", + "520122": "息烽县", + "520123": "修文县", + "520181": "清镇市", + "520201": "钟山区", + "520203": "六枝特区", + "520204": "水城区", + "520281": "盘州市", + "520302": "红花岗区", + "520303": "汇川区", + "520304": "播州区", + "520322": "桐梓县", + "520323": "绥阳县", + "520324": "正安县", + "520325": "道真仡佬族苗族自治县", + "520326": "务川仡佬族苗族自治县", + "520327": "凤冈县", + "520328": "湄潭县", + "520329": "余庆县", + "520330": "习水县", + "520381": "赤水市", + "520382": "仁怀市", + "520402": "西秀区", + "520403": "平坝区", + "520422": "普定县", + "520423": "镇宁布依族苗族自治县", + "520424": "关岭布依族苗族自治县", + "520425": "紫云苗族布依族自治县", + "520502": "七星关区", + "520521": "大方县", + "520523": "金沙县", + "520524": "织金县", + "520525": "纳雍县", + "520526": "威宁彝族回族苗族自治县", + "520527": "赫章县", + "520581": "黔西市", + "520602": "碧江区", + "520603": "万山区", + "520621": "江口县", + "520622": "玉屏侗族自治县", + "520623": "石阡县", + "520624": "思南县", + "520625": "印江土家族苗族自治县", + "520626": "德江县", + "520627": "沿河土家族自治县", + "520628": "松桃苗族自治县", + "522301": "兴义市", + "522302": "兴仁市", + "522323": "普安县", + "522324": "晴隆县", + "522325": "贞丰县", + "522326": "望谟县", + "522327": "册亨县", + "522328": "安龙县", + "522601": "凯里市", + "522622": "黄平县", + "522623": "施秉县", + "522624": "三穗县", + "522625": "镇远县", + "522626": "岑巩县", + "522627": "天柱县", + "522628": "锦屏县", + "522629": "剑河县", + "522630": "台江县", + "522631": "黎平县", + "522632": "榕江县", + "522633": "从江县", + "522634": "雷山县", + "522635": "麻江县", + "522636": "丹寨县", + "522701": "都匀市", + "522702": "福泉市", + "522722": "荔波县", + "522723": "贵定县", + "522725": "瓮安县", + "522726": "独山县", + "522727": "平塘县", + "522728": "罗甸县", + "522729": "长顺县", + "522730": "龙里县", + "522731": "惠水县", + "522732": "三都水族自治县", + "530102": "五华区", + "530103": "盘龙区", + "530111": "官渡区", + "530112": "西山区", + "530113": "东川区", + "530114": "呈贡区", + "530115": "晋宁区", + "530124": "富民县", + "530125": "宜良县", + "530126": "石林彝族自治县", + "530127": "嵩明县", + "530128": "禄劝彝族苗族自治县", + "530129": "寻甸回族彝族自治县", + "530181": "安宁市", + "530302": "麒麟区", + "530303": "沾益区", + "530304": "马龙区", + "530322": "陆良县", + "530323": "师宗县", + "530324": "罗平县", + "530325": "富源县", + "530326": "会泽县", + "530381": "宣威市", + "530402": "红塔区", + "530403": "江川区", + "530423": "通海县", + "530424": "华宁县", + "530425": "易门县", + "530426": "峨山彝族自治县", + "530427": "新平彝族傣族自治县", + "530428": "元江哈尼族彝族傣族自治县", + "530481": "澄江市", + "530502": "隆阳区", + "530521": "施甸县", + "530523": "龙陵县", + "530524": "昌宁县", + "530581": "腾冲市", + "530602": "昭阳区", + "530621": "鲁甸县", + "530622": "巧家县", + "530623": "盐津县", + "530624": "大关县", + "530625": "永善县", + "530626": "绥江县", + "530627": "镇雄县", + "530628": "彝良县", + "530629": "威信县", + "530681": "水富市", + "530702": "古城区", + "530721": "玉龙纳西族自治县", + "530722": "永胜县", + "530723": "华坪县", + "530724": "宁蒗彝族自治县", + "530802": "思茅区", + "530821": "宁洱哈尼族彝族自治县", + "530822": "墨江哈尼族自治县", + "530823": "景东彝族自治县", + "530824": "景谷傣族彝族自治县", + "530825": "镇沅彝族哈尼族拉祜族自治县", + "530826": "江城哈尼族彝族自治县", + "530827": "孟连傣族拉祜族佤族自治县", + "530828": "澜沧拉祜族自治县", + "530829": "西盟佤族自治县", + "530902": "临翔区", + "530921": "凤庆县", + "530922": "云县", + "530923": "永德县", + "530924": "镇康县", + "530925": "双江拉祜族佤族布朗族傣族自治县", + "530926": "耿马傣族佤族自治县", + "530927": "沧源佤族自治县", + "532301": "楚雄市", + "532302": "禄丰市", + "532322": "双柏县", + "532323": "牟定县", + "532324": "南华县", + "532325": "姚安县", + "532326": "大姚县", + "532327": "永仁县", + "532328": "元谋县", + "532329": "武定县", + "532501": "个旧市", + "532502": "开远市", + "532503": "蒙自市", + "532504": "弥勒市", + "532523": "屏边苗族自治县", + "532524": "建水县", + "532525": "石屏县", + "532527": "泸西县", + "532528": "元阳县", + "532529": "红河县", + "532530": "金平苗族瑶族傣族自治县", + "532531": "绿春县", + "532532": "河口瑶族自治县", + "532601": "文山市", + "532622": "砚山县", + "532623": "西畴县", + "532624": "麻栗坡县", + "532625": "马关县", + "532626": "丘北县", + "532627": "广南县", + "532628": "富宁县", + "532801": "景洪市", + "532822": "勐海县", + "532823": "勐腊县", + "532901": "大理市", + "532922": "漾濞彝族自治县", + "532923": "祥云县", + "532924": "宾川县", + "532925": "弥渡县", + "532926": "南涧彝族自治县", + "532927": "巍山彝族回族自治县", + "532928": "永平县", + "532929": "云龙县", + "532930": "洱源县", + "532931": "剑川县", + "532932": "鹤庆县", + "533102": "瑞丽市", + "533103": "芒市", + "533122": "梁河县", + "533123": "盈江县", + "533124": "陇川县", + "533301": "泸水市", + "533323": "福贡县", + "533324": "贡山独龙族怒族自治县", + "533325": "兰坪白族普米族自治县", + "533401": "香格里拉市", + "533422": "德钦县", + "533423": "维西傈僳族自治县", + "540102": "城关区", + "540103": "堆龙德庆区", + "540104": "达孜区", + "540121": "林周县", + "540122": "当雄县", + "540123": "尼木县", + "540124": "曲水县", + "540127": "墨竹工卡县", + "540202": "桑珠孜区", + "540221": "南木林县", + "540222": "江孜县", + "540223": "定日县", + "540224": "萨迦县", + "540225": "拉孜县", + "540226": "昂仁县", + "540227": "谢通门县", + "540228": "白朗县", + "540229": "仁布县", + "540230": "康马县", + "540231": "定结县", + "540232": "仲巴县", + "540233": "亚东县", + "540234": "吉隆县", + "540235": "聂拉木县", + "540236": "萨嘎县", + "540237": "岗巴县", + "540302": "卡若区", + "540321": "江达县", + "540322": "贡觉县", + "540323": "类乌齐县", + "540324": "丁青县", + "540325": "察雅县", + "540326": "八宿县", + "540327": "左贡县", + "540328": "芒康县", + "540329": "洛隆县", + "540330": "边坝县", + "540402": "巴宜区", + "540421": "工布江达县", + "540423": "墨脱县", + "540424": "波密县", + "540425": "察隅县", + "540426": "朗县", + "540481": "米林市", + "540502": "乃东区", + "540521": "扎囊县", + "540522": "贡嘎县", + "540523": "桑日县", + "540524": "琼结县", + "540525": "曲松县", + "540526": "措美县", + "540527": "洛扎县", + "540528": "加查县", + "540529": "隆子县", + "540531": "浪卡子县", + "540581": "错那市", + "540602": "色尼区", + "540621": "嘉黎县", + "540622": "比如县", + "540623": "聂荣县", + "540624": "安多县", + "540625": "申扎县", + "540626": "索县", + "540627": "班戈县", + "540628": "巴青县", + "540629": "尼玛县", + "540630": "双湖县", + "542521": "普兰县", + "542522": "札达县", + "542523": "噶尔县", + "542524": "日土县", + "542525": "革吉县", + "542526": "改则县", + "542527": "措勤县", + "610102": "新城区", + "610103": "碑林区", + "610104": "莲湖区", + "610111": "灞桥区", + "610112": "未央区", + "610113": "雁塔区", + "610114": "阎良区", + "610115": "临潼区", + "610116": "长安区", + "610117": "高陵区", + "610118": "鄠邑区", + "610122": "蓝田县", + "610124": "周至县", + "610202": "王益区", + "610203": "印台区", + "610204": "耀州区", + "610222": "宜君县", + "610302": "渭滨区", + "610303": "金台区", + "610304": "陈仓区", + "610305": "凤翔区", + "610323": "岐山县", + "610324": "扶风县", + "610326": "眉县", + "610327": "陇县", + "610328": "千阳县", + "610329": "麟游县", + "610330": "凤县", + "610331": "太白县", + "610402": "秦都区", + "610403": "杨陵区", + "610404": "渭城区", + "610422": "三原县", + "610423": "泾阳县", + "610424": "乾县", + "610425": "礼泉县", + "610426": "永寿县", + "610428": "长武县", + "610429": "旬邑县", + "610430": "淳化县", + "610431": "武功县", + "610481": "兴平市", + "610482": "彬州市", + "610502": "临渭区", + "610503": "华州区", + "610522": "潼关县", + "610523": "大荔县", + "610524": "合阳县", + "610525": "澄城县", + "610526": "蒲城县", + "610527": "白水县", + "610528": "富平县", + "610581": "韩城市", + "610582": "华阴市", + "610602": "宝塔区", + "610603": "安塞区", + "610621": "延长县", + "610622": "延川县", + "610625": "志丹县", + "610626": "吴起县", + "610627": "甘泉县", + "610628": "富县", + "610629": "洛川县", + "610630": "宜川县", + "610631": "黄龙县", + "610632": "黄陵县", + "610681": "子长市", + "610702": "汉台区", + "610703": "南郑区", + "610722": "城固县", + "610723": "洋县", + "610724": "西乡县", + "610725": "勉县", + "610726": "宁强县", + "610727": "略阳县", + "610728": "镇巴县", + "610729": "留坝县", + "610730": "佛坪县", + "610802": "榆阳区", + "610803": "横山区", + "610822": "府谷县", + "610824": "靖边县", + "610825": "定边县", + "610826": "绥德县", + "610827": "米脂县", + "610828": "佳县", + "610829": "吴堡县", + "610830": "清涧县", + "610831": "子洲县", + "610881": "神木市", + "610902": "汉滨区", + "610921": "汉阴县", + "610922": "石泉县", + "610923": "宁陕县", + "610924": "紫阳县", + "610925": "岚皋县", + "610926": "平利县", + "610927": "镇坪县", + "610929": "白河县", + "610981": "旬阳市", + "611002": "商州区", + "611021": "洛南县", + "611022": "丹凤县", + "611023": "商南县", + "611024": "山阳县", + "611025": "镇安县", + "611026": "柞水县", + "620102": "城关区", + "620103": "七里河区", + "620104": "西固区", + "620105": "安宁区", + "620111": "红古区", + "620121": "永登县", + "620122": "皋兰县", + "620123": "榆中县", + "620171": "兰州新区", + "620201": "市辖区", + "620290": "雄关区", + "620291": "长城区", + "620292": "镜铁区", + "620293": "新城镇", + "620294": "峪泉镇", + "620295": "文殊镇", + "620302": "金川区", + "620321": "永昌县", + "620402": "白银区", + "620403": "平川区", + "620421": "靖远县", + "620422": "会宁县", + "620423": "景泰县", + "620502": "秦州区", + "620503": "麦积区", + "620521": "清水县", + "620522": "秦安县", + "620523": "甘谷县", + "620524": "武山县", + "620525": "张家川回族自治县", + "620602": "凉州区", + "620621": "民勤县", + "620622": "古浪县", + "620623": "天祝藏族自治县", + "620702": "甘州区", + "620721": "肃南裕固族自治县", + "620722": "民乐县", + "620723": "临泽县", + "620724": "高台县", + "620725": "山丹县", + "620802": "崆峒区", + "620821": "泾川县", + "620822": "灵台县", + "620823": "崇信县", + "620825": "庄浪县", + "620826": "静宁县", + "620881": "华亭市", + "620902": "肃州区", + "620921": "金塔县", + "620922": "瓜州县", + "620923": "肃北蒙古族自治县", + "620924": "阿克塞哈萨克族自治县", + "620981": "玉门市", + "620982": "敦煌市", + "621002": "西峰区", + "621021": "庆城县", + "621022": "环县", + "621023": "华池县", + "621024": "合水县", + "621025": "正宁县", + "621026": "宁县", + "621027": "镇原县", + "621102": "安定区", + "621121": "通渭县", + "621122": "陇西县", + "621123": "渭源县", + "621124": "临洮县", + "621125": "漳县", + "621126": "岷县", + "621202": "武都区", + "621221": "成县", + "621222": "文县", + "621223": "宕昌县", + "621224": "康县", + "621225": "西和县", + "621226": "礼县", + "621227": "徽县", + "621228": "两当县", + "622901": "临夏市", + "622921": "临夏县", + "622922": "康乐县", + "622923": "永靖县", + "622924": "广河县", + "622925": "和政县", + "622926": "东乡族自治县", + "622927": "积石山保安族东乡族撒拉族自治县", + "623001": "合作市", + "623021": "临潭县", + "623022": "卓尼县", + "623023": "舟曲县", + "623024": "迭部县", + "623025": "玛曲县", + "623026": "碌曲县", + "623027": "夏河县", + "630102": "城东区", + "630103": "城中区", + "630104": "城西区", + "630105": "城北区", + "630106": "湟中区", + "630121": "大通回族土族自治县", + "630123": "湟源县", + "630202": "乐都区", + "630203": "平安区", + "630222": "民和回族土族自治县", + "630223": "互助土族自治县", + "630224": "化隆回族自治县", + "630225": "循化撒拉族自治县", + "632221": "门源回族自治县", + "632222": "祁连县", + "632223": "海晏县", + "632224": "刚察县", + "632301": "同仁市", + "632322": "尖扎县", + "632323": "泽库县", + "632324": "河南蒙古族自治县", + "632521": "共和县", + "632522": "同德县", + "632523": "贵德县", + "632524": "兴海县", + "632525": "贵南县", + "632621": "玛沁县", + "632622": "班玛县", + "632623": "甘德县", + "632624": "达日县", + "632625": "久治县", + "632626": "玛多县", + "632701": "玉树市", + "632722": "杂多县", + "632723": "称多县", + "632724": "治多县", + "632725": "囊谦县", + "632726": "曲麻莱县", + "632801": "格尔木市", + "632802": "德令哈市", + "632803": "茫崖市", + "632821": "乌兰县", + "632822": "都兰县", + "632823": "天峻县", + "632857": "大柴旦行政委员会", + "640104": "兴庆区", + "640105": "西夏区", + "640106": "金凤区", + "640121": "永宁县", + "640122": "贺兰县", + "640181": "灵武市", + "640202": "大武口区", + "640205": "惠农区", + "640221": "平罗县", + "640302": "利通区", + "640303": "红寺堡区", + "640323": "盐池县", + "640324": "同心县", + "640381": "青铜峡市", + "640402": "原州区", + "640422": "西吉县", + "640423": "隆德县", + "640424": "泾源县", + "640425": "彭阳县", + "640502": "沙坡头区", + "640521": "中宁县", + "640522": "海原县", + "650102": "天山区", + "650103": "沙依巴克区", + "650104": "新市区", + "650105": "水磨沟区", + "650106": "头屯河区", + "650107": "达坂城区", + "650109": "米东区", + "650121": "乌鲁木齐县", + "650202": "独山子区", + "650203": "克拉玛依区", + "650204": "白碱滩区", + "650205": "乌尔禾区", + "650402": "高昌区", + "650421": "鄯善县", + "650422": "托克逊县", + "650502": "伊州区", + "650521": "巴里坤哈萨克自治县", + "650522": "伊吾县", + "652301": "昌吉市", + "652302": "阜康市", + "652323": "呼图壁县", + "652324": "玛纳斯县", + "652325": "奇台县", + "652327": "吉木萨尔县", + "652328": "木垒哈萨克自治县", + "652701": "博乐市", + "652702": "阿拉山口市", + "652722": "精河县", + "652723": "温泉县", + "652801": "库尔勒市", + "652822": "轮台县", + "652823": "尉犁县", + "652824": "若羌县", + "652825": "且末县", + "652826": "焉耆回族自治县", + "652827": "和静县", + "652828": "和硕县", + "652829": "博湖县", + "652901": "阿克苏市", + "652902": "库车市", + "652922": "温宿县", + "652924": "沙雅县", + "652925": "新和县", + "652926": "拜城县", + "652927": "乌什县", + "652928": "阿瓦提县", + "652929": "柯坪县", + "653001": "阿图什市", + "653022": "阿克陶县", + "653023": "阿合奇县", + "653024": "乌恰县", + "653101": "喀什市", + "653121": "疏附县", + "653122": "疏勒县", + "653123": "英吉沙县", + "653124": "泽普县", + "653125": "莎车县", + "653126": "叶城县", + "653127": "麦盖提县", + "653128": "岳普湖县", + "653129": "伽师县", + "653130": "巴楚县", + "653131": "塔什库尔干塔吉克自治县", + "653201": "和田市", + "653221": "和田县", + "653222": "墨玉县", + "653223": "皮山县", + "653224": "洛浦县", + "653225": "策勒县", + "653226": "于田县", + "653227": "民丰县", + "654002": "伊宁市", + "654003": "奎屯市", + "654004": "霍尔果斯市", + "654021": "伊宁县", + "654022": "察布查尔锡伯自治县", + "654023": "霍城县", + "654024": "巩留县", + "654025": "新源县", + "654026": "昭苏县", + "654027": "特克斯县", + "654028": "尼勒克县", + "654201": "塔城市", + "654202": "乌苏市", + "654203": "沙湾市", + "654221": "额敏县", + "654224": "托里县", + "654225": "裕民县", + "654226": "和布克赛尔蒙古自治县", + "654301": "阿勒泰市", + "654321": "布尔津县", + "654322": "富蕴县", + "654323": "福海县", + "654324": "哈巴河县", + "654325": "青河县", + "654326": "吉木乃县", + "659001": "石河子市", + "659002": "阿拉尔市", + "659003": "图木舒克市", + "659004": "五家渠市", + "659005": "北屯市", + "659006": "铁门关市", + "659007": "双河市", + "659008": "可克达拉市", + "659009": "昆玉市", + "659010": "胡杨河市", + "659011": "新星市", + "659012": "白杨市", + "710101": "中正区", + "710102": "大同区", + "710103": "中山区", + "710104": "松山区", + "710105": "大安区", + "710106": "万华区", + "710107": "信义区", + "710108": "士林区", + "710109": "北投区", + "710110": "内湖区", + "710111": "南港区", + "710112": "文山区", + "710199": "其它区", + "710201": "新兴区", + "710202": "前金区", + "710203": "芩雅区", + "710204": "盐埕区", + "710205": "鼓山区", + "710206": "旗津区", + "710207": "前镇区", + "710208": "三民区", + "710209": "左营区", + "710210": "楠梓区", + "710211": "小港区", + "710241": "苓雅区", + "710242": "仁武区", + "710243": "大社区", + "710244": "冈山区", + "710245": "路竹区", + "710246": "阿莲区", + "710247": "田寮区", + "710248": "燕巢区", + "710249": "桥头区", + "710250": "梓官区", + "710251": "弥陀区", + "710252": "永安区", + "710253": "湖内区", + "710254": "凤山区", + "710255": "大寮区", + "710256": "林园区", + "710257": "鸟松区", + "710258": "大树区", + "710259": "旗山区", + "710260": "美浓区", + "710261": "六龟区", + "710262": "内门区", + "710263": "杉林区", + "710264": "甲仙区", + "710265": "桃源区", + "710266": "那玛夏区", + "710267": "茂林区", + "710268": "茄萣区", + "710299": "其它区", + "710301": "中西区", + "710302": "东区", + "710303": "南区", + "710304": "北区", + "710305": "安平区", + "710306": "安南区", + "710339": "永康区", + "710340": "归仁区", + "710341": "新化区", + "710342": "左镇区", + "710343": "玉井区", + "710344": "楠西区", + "710345": "南化区", + "710346": "仁德区", + "710347": "关庙区", + "710348": "龙崎区", + "710349": "官田区", + "710350": "麻豆区", + "710351": "佳里区", + "710352": "西港区", + "710353": "七股区", + "710354": "将军区", + "710355": "学甲区", + "710356": "北门区", + "710357": "新营区", + "710358": "后壁区", + "710359": "白河区", + "710360": "东山区", + "710361": "六甲区", + "710362": "下营区", + "710363": "柳营区", + "710364": "盐水区", + "710365": "善化区", + "710366": "大内区", + "710367": "山上区", + "710368": "新市区", + "710369": "安定区", + "710399": "其它区", + "710401": "中区", + "710402": "东区", + "710403": "南区", + "710404": "西区", + "710405": "北区", + "710406": "北屯区", + "710407": "西屯区", + "710408": "南屯区", + "710431": "太平区", + "710432": "大里区", + "710433": "雾峰区", + "710434": "乌日区", + "710435": "丰原区", + "710436": "后里区", + "710437": "石冈区", + "710438": "东势区", + "710439": "和平区", + "710440": "新社区", + "710441": "潭子区", + "710442": "大雅区", + "710443": "神冈区", + "710444": "大肚区", + "710445": "沙鹿区", + "710446": "龙井区", + "710447": "梧栖区", + "710448": "清水区", + "710449": "大甲区", + "710450": "外埔区", + "710451": "大安区", + "710499": "其它区", + "710507": "金沙镇", + "710508": "金湖镇", + "710509": "金宁乡", + "710510": "金城镇", + "710511": "烈屿乡", + "710512": "乌坵乡", + "710614": "南投市", + "710615": "中寮乡", + "710616": "草屯镇", + "710617": "国姓乡", + "710618": "埔里镇", + "710619": "仁爱乡", + "710620": "名间乡", + "710621": "集集镇", + "710622": "水里乡", + "710623": "鱼池乡", + "710624": "信义乡", + "710625": "竹山镇", + "710626": "鹿谷乡", + "710701": "仁爱区", + "710702": "信义区", + "710703": "中正区", + "710704": "中山区", + "710705": "安乐区", + "710706": "暖暖区", + "710707": "七堵区", + "710799": "其它区", + "710801": "东区", + "710802": "北区", + "710803": "香山区", + "710899": "其它区", + "710901": "东区", + "710902": "西区", + "710999": "其它区", + "711130": "万里区", + "711132": "板桥区", + "711133": "汐止区", + "711134": "深坑区", + "711135": "石碇区", + "711136": "瑞芳区", + "711137": "平溪区", + "711138": "双溪区", + "711139": "贡寮区", + "711140": "新店区", + "711141": "坪林区", + "711142": "乌来区", + "711143": "永和区", + "711144": "中和区", + "711145": "土城区", + "711146": "三峡区", + "711147": "树林区", + "711148": "莺歌区", + "711149": "三重区", + "711150": "新庄区", + "711151": "泰山区", + "711152": "林口区", + "711153": "芦洲区", + "711154": "五股区", + "711155": "八里区", + "711156": "淡水区", + "711157": "三芝区", + "711158": "石门区", + "711287": "宜兰市", + "711288": "头城镇", + "711289": "礁溪乡", + "711290": "壮围乡", + "711291": "员山乡", + "711292": "罗东镇", + "711293": "三星乡", + "711294": "大同乡", + "711295": "五结乡", + "711296": "冬山乡", + "711297": "苏澳镇", + "711298": "南澳乡", + "711299": "钓鱼台", + "711387": "竹北市", + "711388": "湖口乡", + "711389": "新丰乡", + "711390": "新埔镇", + "711391": "关西镇", + "711392": "芎林乡", + "711393": "宝山乡", + "711394": "竹东镇", + "711395": "五峰乡", + "711396": "横山乡", + "711397": "尖石乡", + "711398": "北埔乡", + "711399": "峨眉乡", + "711414": "中坜区", + "711415": "平镇区", + "711417": "杨梅区", + "711418": "新屋区", + "711419": "观音区", + "711420": "桃园区", + "711421": "龟山区", + "711422": "八德区", + "711423": "大溪区", + "711425": "大园区", + "711426": "芦竹区", + "711487": "中坜市", + "711488": "平镇市", + "711489": "龙潭乡", + "711490": "杨梅市", + "711491": "新屋乡", + "711492": "观音乡", + "711493": "桃园市", + "711494": "龟山乡", + "711495": "八德市", + "711496": "大溪镇", + "711497": "复兴乡", + "711498": "大园乡", + "711499": "芦竹乡", + "711520": "头份市", + "711582": "竹南镇", + "711583": "头份镇", + "711584": "三湾乡", + "711585": "南庄乡", + "711586": "狮潭乡", + "711587": "后龙镇", + "711588": "通霄镇", + "711589": "苑里镇", + "711590": "苗栗市", + "711591": "造桥乡", + "711592": "头屋乡", + "711593": "公馆乡", + "711594": "大湖乡", + "711595": "泰安乡", + "711596": "铜锣乡", + "711597": "三义乡", + "711598": "西湖乡", + "711599": "卓兰镇", + "711736": "员林市", + "711774": "彰化市", + "711775": "芬园乡", + "711776": "花坛乡", + "711777": "秀水乡", + "711778": "鹿港镇", + "711779": "福兴乡", + "711780": "线西乡", + "711781": "和美镇", + "711782": "伸港乡", + "711783": "员林镇", + "711784": "社头乡", + "711785": "永靖乡", + "711786": "埔心乡", + "711787": "溪湖镇", + "711788": "大村乡", + "711789": "埔盐乡", + "711790": "田中镇", + "711791": "北斗镇", + "711792": "田尾乡", + "711793": "埤头乡", + "711794": "溪州乡", + "711795": "竹塘乡", + "711796": "二林镇", + "711797": "大城乡", + "711798": "芳苑乡", + "711799": "二水乡", + "711982": "番路乡", + "711983": "梅山乡", + "711984": "竹崎乡", + "711985": "阿里山乡", + "711986": "中埔乡", + "711987": "大埔乡", + "711988": "水上乡", + "711989": "鹿草乡", + "711990": "太保市", + "711991": "朴子市", + "711992": "东石乡", + "711993": "六脚乡", + "711994": "新港乡", + "711995": "民雄乡", + "711996": "大林镇", + "711997": "溪口乡", + "711998": "义竹乡", + "711999": "布袋镇", + "712180": "斗南镇", + "712181": "大埤乡", + "712182": "虎尾镇", + "712183": "土库镇", + "712184": "褒忠乡", + "712185": "东势乡", + "712186": "台西乡", + "712187": "仑背乡", + "712188": "麦寮乡", + "712189": "斗六市", + "712190": "林内乡", + "712191": "古坑乡", + "712192": "莿桐乡", + "712193": "西螺镇", + "712194": "二仑乡", + "712195": "北港镇", + "712196": "水林乡", + "712197": "口湖乡", + "712198": "四湖乡", + "712199": "元长乡", + "712451": "崁顶乡", + "712467": "屏东市", + "712468": "三地门乡", + "712469": "雾台乡", + "712470": "玛家乡", + "712471": "九如乡", + "712472": "里港乡", + "712473": "高树乡", + "712474": "盐埔乡", + "712475": "长治乡", + "712476": "麟洛乡", + "712477": "竹田乡", + "712478": "内埔乡", + "712479": "万丹乡", + "712480": "潮州镇", + "712481": "泰武乡", + "712482": "来义乡", + "712483": "万峦乡", + "712484": "莰顶乡", + "712485": "新埤乡", + "712486": "南州乡", + "712487": "林边乡", + "712488": "东港镇", + "712489": "琉球乡", + "712490": "佳冬乡", + "712491": "新园乡", + "712492": "枋寮乡", + "712493": "枋山乡", + "712494": "春日乡", + "712495": "狮子乡", + "712496": "车城乡", + "712497": "牡丹乡", + "712498": "恒春镇", + "712499": "满州乡", + "712584": "台东市", + "712585": "绿岛乡", + "712586": "兰屿乡", + "712587": "延平乡", + "712588": "卑南乡", + "712589": "鹿野乡", + "712590": "关山镇", + "712591": "海端乡", + "712592": "池上乡", + "712593": "东河乡", + "712594": "成功镇", + "712595": "长滨乡", + "712596": "金峰乡", + "712597": "大武乡", + "712598": "达仁乡", + "712599": "太麻里乡", + "712686": "花莲市", + "712687": "新城乡", + "712688": "太鲁阁", + "712689": "秀林乡", + "712690": "吉安乡", + "712691": "寿丰乡", + "712692": "凤林镇", + "712693": "光复乡", + "712694": "丰滨乡", + "712695": "瑞穗乡", + "712696": "万荣乡", + "712697": "玉里镇", + "712698": "卓溪乡", + "712699": "富里乡", + "712794": "马公市", + "712795": "西屿乡", + "712796": "望安乡", + "712797": "七美乡", + "712798": "白沙乡", + "712799": "湖西乡", + "712896": "南竿乡", + "712897": "北竿乡", + "712898": "东引乡", + "712899": "莒光乡", + "810101": "中西区", + "810102": "湾仔区", + "810103": "东区", + "810104": "南区", + "810201": "九龙城区", + "810202": "油尖旺区", + "810203": "深水埗区", + "810204": "黄大仙区", + "810205": "观塘区", + "810301": "北区", + "810302": "大埔区", + "810303": "沙田区", + "810304": "西贡区", + "810305": "元朗区", + "810306": "屯门区", + "810307": "荃湾区", + "810308": "葵青区", + "810309": "离岛区", + "820102": "花地玛堂区", + "820103": "花王堂区", + "820104": "望德堂区", + "820105": "大堂区", + "820106": "风顺堂区", + "820202": "嘉模堂区", + "820203": "路氹填海区", + "820204": "圣方济各堂区" + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/areaData/index.ts b/uni_modules/lime-shared/areaData/index.ts new file mode 100644 index 0000000..401f77f --- /dev/null +++ b/uni_modules/lime-shared/areaData/index.ts @@ -0,0 +1,71 @@ +// @ts-nocheck +import _areaList from './city-china.json'; +export const areaList = _areaList +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif +// #ifdef UNI-APP-X +type Object = UTSJSONObject +// #endif +type AreaList = { + province_list : Map; + city_list : Map; + county_list : Map; +} +// type CascaderOption = { +// text : string; +// value : string; +// children ?: CascaderOption[]; +// }; + +const makeOption = ( + label : string, + value : string, + children ?: UTSJSONObject[], +) : UTSJSONObject => ({ + label, + value, + children, +}); + + + +export function useCascaderAreaData() : UTSJSONObject[] { + const city = areaList['city_list'] as UTSJSONObject + const county = areaList['county_list'] as UTSJSONObject + const province = areaList['province_list'] as UTSJSONObject + const provinceMap = new Map(); + Object.keys(province).forEach((code) => { + provinceMap.set(code.slice(0, 2), makeOption(`${province[code]}`, code, [])); + }); + + const cityMap = new Map(); + + Object.keys(city).forEach((code) => { + const option = makeOption(`${city[code]}`, code, []); + cityMap.set(code.slice(0, 4), option); + + const _province = provinceMap.get(code.slice(0, 2)); + if (_province != null) { + (_province['children'] as UTSJSONObject[]).push(option) + } + }); + + Object.keys(county).forEach((code) => { + const _city = cityMap.get(code.slice(0, 4)); + if (_city != null) { + (_city['children'] as UTSJSONObject[]).push(makeOption(`${county[code]}`, code, null)); + } + }); + + // #ifndef APP-ANDROID || APP-IOS + return Array.from(provinceMap.values()); + // #endif + // #ifdef APP-ANDROID || APP-IOS + const obj : UTSJSONObject[] = [] + provinceMap.forEach((value, code) => { + obj.push(value) + }) + return obj + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/arrayBufferToFile/index.ts b/uni_modules/lime-shared/arrayBufferToFile/index.ts new file mode 100644 index 0000000..d40e0d0 --- /dev/null +++ b/uni_modules/lime-shared/arrayBufferToFile/index.ts @@ -0,0 +1,10 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +// export * from './vue.ts' +export { arrayBufferToFile } from './vue' +// #endif + +// #ifdef UNI-APP-X && APP +// export * from './uvue.uts' +export { arrayBufferToFile } from './uvue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/arrayBufferToFile/uvue.ts b/uni_modules/lime-shared/arrayBufferToFile/uvue.ts new file mode 100644 index 0000000..65c7b14 --- /dev/null +++ b/uni_modules/lime-shared/arrayBufferToFile/uvue.ts @@ -0,0 +1,10 @@ +// @ts-nocheck +// import {platform} from '../platform' +/** + * buffer转路径 + * @param {Object} buffer + */ +// @ts-nocheck +export function arrayBufferToFile(buffer: ArrayBuffer, name?: string, format?:string):Promise<(File|string)> { + console.error('[arrayBufferToFile] 当前环境不支持') +} \ No newline at end of file diff --git a/uni_modules/lime-shared/arrayBufferToFile/uvue.uts b/uni_modules/lime-shared/arrayBufferToFile/uvue.uts new file mode 100644 index 0000000..65c7b14 --- /dev/null +++ b/uni_modules/lime-shared/arrayBufferToFile/uvue.uts @@ -0,0 +1,10 @@ +// @ts-nocheck +// import {platform} from '../platform' +/** + * buffer转路径 + * @param {Object} buffer + */ +// @ts-nocheck +export function arrayBufferToFile(buffer: ArrayBuffer, name?: string, format?:string):Promise<(File|string)> { + console.error('[arrayBufferToFile] 当前环境不支持') +} \ No newline at end of file diff --git a/uni_modules/lime-shared/arrayBufferToFile/vue.ts b/uni_modules/lime-shared/arrayBufferToFile/vue.ts new file mode 100644 index 0000000..9760b20 --- /dev/null +++ b/uni_modules/lime-shared/arrayBufferToFile/vue.ts @@ -0,0 +1,63 @@ +// @ts-nocheck +import {platform} from '../platform' +/** + * buffer转路径 + * @param {Object} buffer + */ +// @ts-nocheck +export function arrayBufferToFile(buffer: ArrayBuffer | Blob, name?: string, format?:string):Promise<(File|string)> { + return new Promise((resolve, reject) => { + // #ifdef MP + const fs = uni.getFileSystemManager() + //自定义文件名 + if (!name && !format) { + reject(new Error('ERROR_NAME_PARSE')) + } + const fileName = `${name || new Date().getTime()}.${format.replace(/(.+)?\//,'')}`; + let pre = platform() + const filePath = `${pre.env.USER_DATA_PATH}/${fileName}` + fs.writeFile({ + filePath, + data: buffer, + success() { + resolve(filePath) + }, + fail(err) { + console.error(err) + reject(err) + } + }) + // #endif + + // #ifdef H5 + const file = new File([buffer], name, { + type: format, + }); + resolve(file) + // #endif + + // #ifdef APP-PLUS + const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now()) + const base64 = uni.arrayBufferToBase64(buffer) + bitmap.loadBase64Data(base64, () => { + if (!name && !format) { + reject(new Error('ERROR_NAME_PARSE')) + } + const fileNmae = `${name || new Date().getTime()}.${format.replace(/(.+)?\//,'')}`; + const filePath = `_doc/uniapp_temp/${fileNmae}` + bitmap.save(filePath, {}, + () => { + bitmap.clear() + resolve(filePath) + }, + (error) => { + bitmap.clear() + reject(error) + }) + }, (error) => { + bitmap.clear() + reject(error) + }) + // #endif + }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/arrayEqual/index.ts b/uni_modules/lime-shared/arrayEqual/index.ts new file mode 100644 index 0000000..58d7788 --- /dev/null +++ b/uni_modules/lime-shared/arrayEqual/index.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +/** + * 精确比较两个数组是否相等(浅比较) + * @param arr1 数组1 + * @param arr2 数组2 + * @returns 是否相等 + */ +export function arrayEqual(arr1 : T[], arr2 : T[]) : boolean { + return ( + arr1.length == arr2.length && + arr1.every((val, i) : boolean => val == arr2[i]) + ) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/assignAtIndex/index.ts b/uni_modules/lime-shared/assignAtIndex/index.ts new file mode 100644 index 0000000..7de9b2b --- /dev/null +++ b/uni_modules/lime-shared/assignAtIndex/index.ts @@ -0,0 +1,42 @@ +// @ts-nocheck +/** + * 安全地在数组指定索引处赋值,兼容 Android 平台对稀疏数组的限制。 + * + * 行为说明: + * - 非 Android:等同于 arr[index] = value(可能产生稀疏数组) + * - Android:若 index >= length,则先用 undefined 填充至 index,再赋值(紧凑数组,无空槽) + * + * @param arr - 目标数组(会被修改) + * @param index - 非负整数索引 + * @param value - 要设置的值 + * @throws {Error} 如果 index 不是非负整数 + */ +export function assignAtIndex(arr : T[], index : number, value : T) : void { + + // 输入校验 + if (index < 0) { + throw new Error(`Index must be a non-negative integer, got ${index}`); + } + + // #ifndef APP-ANDROID + // 标准环境:直接赋值(允许稀疏数组) + arr[index] = value; + // #endif + + // #ifdef APP-ANDROID + // Android 环境:安全赋值,避免稀疏数组导致的异常 + if (index < arr.length) { + arr[index] = value; + } else { + // 手动扩展数组,中间填充 undefined + // 注意:使用 push(undefined) 而不是 arr[length++] = undefined, + // 因为某些 Android 引擎对直接 length 赋值也敏感 + while (arr.length <= index) { + arr.push(null as T); + } + + // arr.set(index, value) + arr[index] = value; + } + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/base64ToArrayBuffer/index.ts b/uni_modules/lime-shared/base64ToArrayBuffer/index.ts new file mode 100644 index 0000000..f83b640 --- /dev/null +++ b/uni_modules/lime-shared/base64ToArrayBuffer/index.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +// 未完成 +export function base64ToArrayBuffer(base64 : string) { + const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64) || []; + if (!format) { + new Error('ERROR_BASE64SRC_PARSE') + } + if(uni.base64ToArrayBuffer) { + return uni.base64ToArrayBuffer(bodyData) + } else { + + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/base64ToPath/index.ts b/uni_modules/lime-shared/base64ToPath/index.ts new file mode 100644 index 0000000..2bd01df --- /dev/null +++ b/uni_modules/lime-shared/base64ToPath/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +// export * from './vue.ts' +export { base64ToPath } from './vue' +// #endif + + +// #ifdef UNI-APP-X && APP +// export * from './uvue.uts' +export { base64ToPath } from './uvue' +// #endif diff --git a/uni_modules/lime-shared/base64ToPath/uvue.ts b/uni_modules/lime-shared/base64ToPath/uvue.ts new file mode 100644 index 0000000..364b494 --- /dev/null +++ b/uni_modules/lime-shared/base64ToPath/uvue.ts @@ -0,0 +1,22 @@ +// @ts-nocheck +import { processFile, type ProcessFileOptions } from '@/uni_modules/lime-file-utils' + +/** + * base64转路径 + * @param {Object} base64 + */ +export function base64ToPath(base64: string, filename: string | null = null):Promise { + return new Promise((resolve,reject) => { + processFile({ + type: 'toDataURL', + path: base64, + filename, + success(res: string){ + resolve(res) + }, + fail(err){ + reject(err) + } + } as ProcessFileOptions) + }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/base64ToPath/uvue.uts b/uni_modules/lime-shared/base64ToPath/uvue.uts new file mode 100644 index 0000000..364b494 --- /dev/null +++ b/uni_modules/lime-shared/base64ToPath/uvue.uts @@ -0,0 +1,22 @@ +// @ts-nocheck +import { processFile, type ProcessFileOptions } from '@/uni_modules/lime-file-utils' + +/** + * base64转路径 + * @param {Object} base64 + */ +export function base64ToPath(base64: string, filename: string | null = null):Promise { + return new Promise((resolve,reject) => { + processFile({ + type: 'toDataURL', + path: base64, + filename, + success(res: string){ + resolve(res) + }, + fail(err){ + reject(err) + } + } as ProcessFileOptions) + }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/base64ToPath/vue.ts b/uni_modules/lime-shared/base64ToPath/vue.ts new file mode 100644 index 0000000..735000f --- /dev/null +++ b/uni_modules/lime-shared/base64ToPath/vue.ts @@ -0,0 +1,75 @@ +// @ts-nocheck +import {platform} from '../platform' +/** + * base64转路径 + * @param {Object} base64 + */ +export function base64ToPath(base64: string, filename?: string):Promise { + const [, format] = /^data:image\/(\w+);base64,/.exec(base64) || []; + return new Promise((resolve, reject) => { + // #ifdef MP + const fs = uni.getFileSystemManager() + //自定义文件名 + if (!filename && !format) { + reject(new Error('ERROR_BASE64SRC_PARSE')) + } + // const time = new Date().getTime(); + const name = filename || `${new Date().getTime()}.${format}`; + let pre = platform() + const filePath = `${pre.env.USER_DATA_PATH}/${name}` + fs.writeFile({ + filePath, + data: base64.split(',')[1], + encoding: 'base64', + success() { + resolve(filePath) + }, + fail(err) { + console.error(err) + reject(err) + } + }) + // #endif + + // #ifdef H5 + // mime类型 + let mimeString = base64.split(',')[0].split(':')[1].split(';')[0]; + //base64 解码 + let byteString = atob(base64.split(',')[1]); + //创建缓冲数组 + let arrayBuffer = new ArrayBuffer(byteString.length); + //创建视图 + let intArray = new Uint8Array(arrayBuffer); + for (let i = 0; i < byteString.length; i++) { + intArray[i] = byteString.charCodeAt(i); + } + resolve(URL.createObjectURL(new Blob([intArray], { + type: mimeString + }))) + // #endif + + // #ifdef APP-PLUS + const bitmap = new plus.nativeObj.Bitmap('bitmap' + Date.now()) + bitmap.loadBase64Data(base64, () => { + if (!filename && !format) { + reject(new Error('ERROR_BASE64SRC_PARSE')) + } + // const time = new Date().getTime(); + const name = filename || `${new Date().getTime()}.${format}`; + const filePath = `_doc/uniapp_temp/${name}` + bitmap.save(filePath, {}, + () => { + bitmap.clear() + resolve(filePath) + }, + (error) => { + bitmap.clear() + reject(error) + }) + }, (error) => { + bitmap.clear() + reject(error) + }) + // #endif + }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/bem/index.ts b/uni_modules/lime-shared/bem/index.ts new file mode 100644 index 0000000..f4451af --- /dev/null +++ b/uni_modules/lime-shared/bem/index.ts @@ -0,0 +1,289 @@ +// @ts-nocheck +/** + * BEM 配置类型定义 + * @description 定义 BEM 命名规范中的命名空间和分隔符配置 + */ +export type BemConfig = { + /** 命名空间,用于所有 BEM 类名的前缀 */ + namespace : string + /** Block 和命名空间之间的分隔符 */ + blockSeparator : string + /** Element 和 Block 之间的分隔符 */ + elementSeparator : string + /** Modifier 和 Block/Element 之间的分隔符 */ + modifierSeparator : string +} + +/** + * 默认 BEM 配置 + * @description 使用 'l' 作为命名空间,'-' 作为 block 分隔符,'__' 作为 element 分隔符,'--' 作为 modifier 分隔符 + */ +const defaultBem : BemConfig = { + namespace: 'l', + blockSeparator: '-', + elementSeparator: '__', + modifierSeparator: '--', +} + +/** + * 条件类型,用于判断是否需要生成类名 + * @description 支持布尔值、数字、字符串和 null 类型 + */ +type IsType = boolean | number | string | null// | undefined + +/** + * BEM 类 + * @description 用于生成符合 BEM 命名规范的 CSS 类名 + * @example + * const bem = createBem('button') + * bem.b() // 'l-button' + * bem.e('text') // 'l-button__text' + * bem.m('primary') // 'l-button--primary' + * bem.em('text', 'small') // 'l-button__text--small' + */ +export class Bem { + /** 命名空间 */ + private namespace : string + /** Block 分隔符 */ + private blockSeparator : string + /** Element 分隔符 */ + private elementSeparator : string + /** Modifier 分隔符 */ + private modifierSeparator : string + /** 前缀,由命名空间和 block 组成 */ + private prefix : string + + /** + * 构造函数 + * @param config BEM 配置对象 + * @param block Block 名称,可以是字符串或数字 + */ + constructor( + config : BemConfig, + block : string, + ) { + this.namespace = config.namespace + this.blockSeparator = config.blockSeparator + this.elementSeparator = config.elementSeparator + this.modifierSeparator = config.modifierSeparator + this.prefix = this.namespace + this.blockSeparator + block + } + + /** + * 判断是否需要生成类名 + * @description 当 is 参数为 false、0 或空字符串时,返回 false,表示不需要生成类名;否则返回 true + * @param is 条件参数,默认为 true + * @returns 是否需要生成类名 + * @example + * shouldGenerate() // true + * shouldGenerate(true) // true + * shouldGenerate(false) // false + * shouldGenerate(0) // false + * shouldGenerate('') // false + */ + private shouldGenerate(is : IsType = true) : boolean { + return !(is == false || is == 0 || is == '') + } + + /** + * 生成 Block 类名 + * @description 返回当前 block 的完整类名 + * @returns Block 类名字符串 + * @example + * const bem = createBem('button') + * bem.b() // 'l-button' + */ + b() : string { + return this.prefix + } + + /** + * 生成 Element 类名 + * @description 生成 Block__Element 格式的类名,当 is 参数为 false、0 或空字符串时返回空字符串,当 element 为 null 时返回 Block 类名 + * @param element Element 名称,可以是字符串,为 null 时返回 Block 类名 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns Element 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.e('text') // 'l-button__text' + * bem.e('text', true) // 'l-button__text' + * bem.e('text', false) // '' + * bem.e('text', 0) // '' + * bem.e(null) // 'l-button' + */ + e(element : string | null, is : IsType = true) : string { + if (!this.shouldGenerate(is)) { + return '' + } + if (element == null) { + return this.prefix + } + return this.prefix + this.elementSeparator + element + } + + /** + * 生成 Modifier 类名 + * @description 生成 Block--modifier 格式的类名,当 is 参数为 false、0 或空字符串时返回空字符串,当 modifier 为 null 时返回 Block 类名 + * @param modifier Modifier 名称,可以是字符串或数字,为 null 时返回 Block 类名 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns Modifier 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.m('primary') // 'l-button--primary' + * bem.m('primary', true) // 'l-button--primary' + * bem.m('primary', false) // '' + * bem.m('primary', 0) // '' + * bem.m(null) // 'l-button' + */ + m(modifier : string | number | null, is : IsType = true) : string { + if (!this.shouldGenerate(is)) { + return '' + } + if (modifier == null || modifier == '') { + return this.prefix + } + return this.prefix + this.modifierSeparator + modifier + } + + /** + * 生成 Element-Modifier 类名 + * @description 生成 Block__Element--modifier 格式的类名,当 is 参数为 false、0 或空字符串时返回空字符串,当 modifier 为 null 时返回 Element 类名 + * @param element Element 名称,可以是字符串 + * @param modifier Modifier 名称,可以是字符串或数字,为 null 时返回 Element 类名 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns Element-Modifier 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.em('text', 'small') // 'l-button__text--small' + * bem.em('text', 'small', true) // 'l-button__text--small' + * bem.em('text', 'small', false) // '' + * bem.em('text', 'small', 0) // '' + * bem.em('text', null) // 'l-button__text' + */ + em( + element : string, + modifier : string | number | null, + is : IsType = true, + ) : string { + if (!this.shouldGenerate(is)) { + return '' + } + if (modifier == null || modifier == '') { + return this.prefix + this.elementSeparator + element + } + return ( + this.prefix + this.elementSeparator + element + this.modifierSeparator + modifier + ) + } + + /** + * 生成变体 Modifier 类名 + * @description 生成 Block--modifier1-modifier2 格式的类名,当 is 参数为 false、0 或空字符串时返回空字符串 + * @param modifiers Modifier 名称数组,可以是字符串或数字 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns Modifier 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.v(['active', 'primary']) // 'l-button--active-primary' + * bem.v(['active', 'primary'], true) // 'l-button--active-primary' + * bem.v(['active', 'primary'], false) // '' + */ + v(modifiers : Array, is : IsType = true) : string { + if (!this.shouldGenerate(is) || modifiers.length == 0) { + return '' + } + const joinedModifier = modifiers.join('-') + return this.prefix + this.modifierSeparator + joinedModifier + } + + /** + * 生成变体 Element-Modifier 类名 + * @description 生成 Block__Element--modifier1-modifier2 格式的类名,当 is 参数为 false、0 或空字符串时返回空字符串 + * @param element Element 名称,可以是字符串 + * @param modifiers Modifier 名称数组,可以是字符串或数字 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns Element-Modifier 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.ev('text', ['active', 'small']) // 'l-button__text--active-small' + * bem.ev('text', ['active', 'small'], true) // 'l-button__text--active-small' + * bem.ev('text', ['active', 'small'], false) // '' + */ + ev( + element : string, + modifiers : Array, + is : IsType = true, + ) : string { + if (!this.shouldGenerate(is) || modifiers.length == 0) { + return '' + } + const joinedModifier = modifiers.join('-') + return ( + this.prefix + this.elementSeparator + element + this.modifierSeparator + joinedModifier + ) + } + + /** + * 生成完整的 BEM 类名(Block-Element-Modifier) + * @description 生成完整的 BEM 类名,支持 Block、Block__Element、Block--modifier、Block__Element--modifier 四种格式 + * @param block Block 名称,可以是字符串或数字 + * @param element Element 名称,可以是字符串,为 null 时不拼接 + * @param modifier Modifier 名称,可以是字符串或数字,为 null 时不拼接 + * @param is 条件参数,默认为 true,当为 false、0 或空字符串时不生成类名 + * @returns BEM 类名字符串或空字符串 + * @example + * const bem = createBem('button') + * bem.bem('button') // 'l-button' + * bem.bem('button', 'text') // 'l-button__text' + * bem.bem('button', null, 'primary') // 'l-button--primary' + * bem.bem('button', 'text', 'small') // 'l-button__text--small' + * bem.bem('button', 'text', 'small', false) // '' + */ + bem( + block : string, + element : string | null, + modifier : string | number | null, + is : boolean | number | string | null = true, + ) : string { + if (!this.shouldGenerate(is)) { + return '' + } + + let className = this.namespace + this.blockSeparator + block + if (element != null) { + className += this.elementSeparator + element + } + if (modifier != null) { + className += this.modifierSeparator + modifier + } + return className + } +} + +/** + * 创建 BEM 结构函数 + * @description 根据配置创建一个 BEM 类生成器函数 + * @param config BEM 配置对象 + * @returns 返回一个函数,该函数接收 block 名称并返回 Bem 实例 + * @example + * const createBem = createBemStruct({ namespace: 'l', blockSeparator: '-', elementSeparator: '__', modifierSeparator: '--' }) + * const bem = createBem('button') + * bem.b() // 'l-button' + */ +export function createBemStruct(config : BemConfig) : (block : string) => Bem { + return (block : string) => { + return new Bem(config, block) + } +} + +/** + * 使用默认配置创建 BEM 函数 + * @description 使用默认配置(namespace: 'l', blockSeparator: '-', elementSeparator: '__', modifierSeparator: '--')创建 BEM 类生成器 + * @example + * const bem = createBem('button') + * bem.b() // 'l-button' + * bem.e('text') // 'l-button__text' + * bem.m('primary') // 'l-button--primary' + * bem.em('text', 'small') // 'l-button__text--small' + */ +export const createBem = createBemStruct(defaultBem) \ No newline at end of file diff --git a/uni_modules/lime-shared/camelCase/index.ts b/uni_modules/lime-shared/camelCase/index.ts new file mode 100644 index 0000000..c0efd7f --- /dev/null +++ b/uni_modules/lime-shared/camelCase/index.ts @@ -0,0 +1,22 @@ +// @ts-nocheck +/** + * 将字符串转换为 camelCase 或 PascalCase 风格的命名约定 + * @param str 要转换的字符串 + * @param isPascalCase 指示是否转换为 PascalCase 的布尔值,默认为 false + * @returns 转换后的字符串 + */ +export function camelCase(str: string, isPascalCase: boolean = false): string { + // 将字符串分割成单词数组 + let words: string[] = str.split(/[\s_-]+/); + + // 将数组中的每个单词首字母大写(除了第一个单词) + let camelCased: string[] = words.map((word, index):string => { + if (index == 0 && !isPascalCase) { + return word.toLowerCase(); // 第一个单词全小写 + } + return word.charAt(0).toUpperCase() + word.slice(1).toLowerCase(); + }); + + // 将数组中的单词拼接成一个字符串 + return camelCased.join(''); +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/canIUseCanvas2d/index.ts b/uni_modules/lime-shared/canIUseCanvas2d/index.ts new file mode 100644 index 0000000..be5623a --- /dev/null +++ b/uni_modules/lime-shared/canIUseCanvas2d/index.ts @@ -0,0 +1,67 @@ +// @ts-nocheck + +// #ifndef UNI-APP-X && APP + +// #ifdef MP-ALIPAY +interface My { + SDKVersion: string +} +declare var my: My +// #endif + +function compareVersion(v1:string, v2:string) { + let a1 = v1.split('.'); + let a2 = v2.split('.'); + const len = Math.max(a1.length, a2.length); + + while (a1.length < len) { + a1.push('0'); + } + while (a2.length < len) { + a2.push('0'); + } + + for (let i = 0; i < len; i++) { + const num1 = parseInt(a1[i], 10); + const num2 = parseInt(a2[i], 10); + + if (num1 > num2) { + return 1; + } + if (num1 < num2) { + return -1; + } + } + + return 0; +} + +function gte(version: string) { + let {SDKVersion} = uni.getSystemInfoSync(); + // #ifdef MP-ALIPAY + SDKVersion = my.SDKVersion + // #endif + return compareVersion(SDKVersion, version) >= 0; +} +// #endif + + +/** 环境是否支持canvas 2d */ +export function canIUseCanvas2d(): boolean { + // #ifdef MP-WEIXIN + return gte('2.9.0'); + // #endif + // #ifdef MP-ALIPAY + return gte('2.7.0'); + // #endif + // #ifdef MP-TOUTIAO + return gte('1.78.0'); + // #endif + // #ifdef UNI-APP-X && WEB || UNI-APP-X && APP + return true; + // #endif + // #ifndef MP-WEIXIN || MP-ALIPAY || MP-TOUTIAO + return false + // #endif + +} diff --git a/uni_modules/lime-shared/capitalizedAmount/index.ts b/uni_modules/lime-shared/capitalizedAmount/index.ts new file mode 100644 index 0000000..317e0af --- /dev/null +++ b/uni_modules/lime-shared/capitalizedAmount/index.ts @@ -0,0 +1,111 @@ +// @ts-nocheck +import { isString } from "../isString"; +import { isNumber } from "../isNumber"; +/** + * 将金额转换为中文大写形式 + * @param {number | string} amount - 需要转换的金额,可以是数字或字符串 + * @returns {string} 转换后的中文大写金额 + */ +export function capitalizedAmount(amount : number) : string +export function capitalizedAmount(amount : string) : string +export function capitalizedAmount(amount : any | null) : string { + try { + let _amountStr :string; + let _amountNum :number = 0; + // 如果输入是字符串,先将其转换为数字,并去除逗号 + if (typeof amount == 'string') { + _amountNum = parseFloat((amount as string).replace(/,/g, '')); + } + if(isNumber(amount)) { + _amountNum = amount as number + } + // 判断输入是否为有效的金额 || isNaN(amount) + if (amount == null) throw new Error('不是有效的金额!'); + + let result = ''; + + // 处理负数情况 + if (_amountNum < 0) { + result = '欠'; + _amountNum = Math.abs(_amountNum); + } + + // 金额不能超过千亿以上 + if (_amountNum >= 10e11) throw new Error('计算金额过大!'); + + // 保留两位小数并转换为字符串 + _amountStr = _amountNum.toFixed(2); + + // 定义数字、单位和小数单位的映射 + const digits = ['零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖']; + const units = ['', '拾', '佰', '仟']; + const bigUnits = ['', '万', '亿']; + const decimalUnits = ['角', '分']; + + // 分离整数部分和小数部分 + const amountArray = _amountStr.split('.'); + let integerPart = amountArray[0]; // string| number[] + const decimalPart = amountArray[1]; + + // 处理整数部分 + if (integerPart != '0') { + let _integerPart = integerPart.split('').map((item):number => parseInt(item)); + + // 将整数部分按四位一级进行分组 + const levels = _integerPart.reverse().reduce((prev:string[][], item, index):string[][] => { + // const level = prev?.[0]?.length < 4 ? prev[0] : []; + const level = prev.length > 0 && prev[0].length < 4 ? prev[0]: [] + + const value = item == 0 ? digits[item] : digits[item] + units[index % 4]; + + level.unshift(value); + + if (level.length == 1) { + prev.unshift(level); + } else { + prev[0] = level; + } + + return prev; + }, [] as string[][]); + // 将分组后的整数部分转换为中文大写形式 + result += levels.reduce((prev, item, index):string => { + let _level = bigUnits[levels.length - index - 1]; + let _item = item.join('').replace(/(零)\1+/g, '$1'); + + if (_item == '零') { + _level = ''; + _item = ''; + } else if (_item.endsWith('零')) { + _item = _item.slice(0, _item.length - 1); + } + + return prev + _item + _level; + }, ''); + } else { + result += '零'; + } + + // 添加元 + result += '元'; + + // 处理小数部分 + if (decimalPart != '00') { + if (result == '零元') result = ''; + + for (let i = 0; i < decimalPart.length; i++) { + const digit = parseInt(decimalPart.charAt(i)); + + if (digit != 0) { + result += digits[digit] + decimalUnits[i]; + } + } + } else { + result += '整'; + } + + return result; + } catch (error : Error) { + return error.message; + } +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/changelog.md b/uni_modules/lime-shared/changelog.md new file mode 100644 index 0000000..8bc96bd --- /dev/null +++ b/uni_modules/lime-shared/changelog.md @@ -0,0 +1,126 @@ +## 2.0.4(2026-08-26) +- fix: 修复非蒸版缺少getClassStr +## 2.0.3(2026-08-03) +- fix: 恢复obj2css +## 2.0.2(2026-08-03) +- fix: 恢复旧版css2obj +## 2.0.1(2026-07-29) +- fix: 恢复useVModel +## 2.0.0(2026-07-21) +- refactor: 全面兼容 uni-app x 蒸汽模式(uvue/uts) +- feat: 新增 `useTransition`、`Timeline`、`Animation` 动画过渡能力 +- feat: 新增 `createCanvasContextAsync` 统一 Canvas 上下文创建 +- feat: 新增 `selectElement`、`findClosestElementWithStyle` DOM 查询工具 +- feat: 新增 `getDeviceInfo`、`getWindowInfo` 平台信息获取 +- feat: 新增 `obj2url`、`guid`、`uniqid`、`coalesce`、`merge` 等工具函数 +- feat: 新增 `isIP`、`isByteLength`、`isRegExp`、`isURL`、`isValidDomain` 等验证器 +- feat: 新增 `areaData` 中国省市区数据及级联选择器数据 +- feat: 新增 `Bem` 类与 `stringifyStyle`、`parseStyle`、`classNames` 样式工具 +- feat: 新增 `arrayEqual`、`findLastIndex`、`assignAtIndex`、`fillArray`、`toArray` 等数组工具 +- feat: 新增 `addSeparator`、`characterLimit`、`toBoolean` 等字符串/类型工具 +- refactor: `getRect` 重构为支持节点查询、视口滚动、滚动定位计算 +- refactor: `selectComponent`/`selectAllComponent` 支持 class/id/ref/component 多种选择器 +- docs: 文档按插件文档规范重构 +## 0.4.8(2026-03-05) +- feat: 更新uniappx vue的实现 +## 0.4.7(2025-12-27) +- feat: 增加`getWindowInfo` +## 0.4.6(2025-12-26) +- fix: 修复useVModel可选问题 +## 0.4.5(2025-12-10) +- feat: 增加useVModel +## 0.4.4(2025-12-07) +- fix: 修复csstoobj uniappx安卓正则问题 +## 0.4.3(2025-12-02) +- feat: 增加`arrayEqual`,`findLastIndex` +## 0.4.2(2025-09-26) +- feat: 增加`cssToObj` +## 0.4.1(2025-06-13) +- fix:测试hbx4.71更新 +## 0.4.0(2025-06-04) +- fix:测试hbx4.71更新 +## 0.3.9(2025-06-04) + - fix: 因hbx4.71更新导致mac用户下载的文件被重命名,故退回4.66 +## 0.3.8(2025-06-03) +- fix: 修复`while`在vue2报错的问题 +## 0.3.7(2025-05-21) +- fix: 修复`merge`在vue2报错的问题 +## 0.3.6(2025-05-17) +- fix: 修复`raf`导错目录的问题 +## 0.3.5(2025-05-16) +- feat: 增加`isIP` +- feat: 增加`merge` +- feat: 增加`isByteLength` +- feat: 增加`isRegExp` +## 0.3.4(2025-04-27) +- fix: 修复exif缺少isBase64的问题 +## 0.3.3(2025-04-14) +- fix: 修复4.61上的类型问题 +## 0.3.2(2025-04-14) +- fix: 修复4.61上的类型问题 +## 0.3.1(2025-03-28) +- fix: 修复getRect在nvue上的问题 +## 0.3.0(2025-02-27) +- fix: 修复部分函数无法在uniappx上运行的问题 +## 0.2.9(2025-02-19) +- chore: 更新文档 +## 0.2.8(2025-02-11) +- chore: 更新文档 +## 0.2.7(2025-01-17) +- fix: 针对canvas 平台判断优化 +## 0.2.6(2025-01-09) +- feat: 增加`areaData`中国省市区数据 +## 0.2.5(2025-01-07) +- fix: animation在app上类型问题 +## 0.2.4(2025-01-04) +- feat: getRect类型问题 +## 0.2.3(2025-01-01) +- chore: unitConvert使用uni.rpx2px +## 0.2.2(2024-12-11) +- chore: 动画使用`requestAnimationFrame` +## 0.2.1(2024-11-20) +- feat: 增加`characterLimit` +## 0.2.0(2024-11-14) +- fix: vue2的类型问题 +## 0.1.9(2024-11-14) +- feat: 增加`shuffle` +## 0.1.8(2024-10-08) +- fix: vue2 条件编译 // #ifdef APP-IOS || APP-ANDROID 会生效 +## 0.1.7(2024-09-23) +- fix: raf 类型跟随版本变更 +## 0.1.6(2024-07-24) +- fix: vue2 app ts需要明确的后缀,所有补全 +- chore: 减少依赖 +## 0.1.5(2024-07-21) +- feat: 删除 Hooks +- feat: 兼容uniappx +## 0.1.4(2023-09-05) +- feat: 增加 Hooks `useIntersectionObserver` +- feat: 增加 `floatAdd` +- feat: 因为本人插件兼容 vue2 需要使用 `composition-api`,故增加vue文件代码插件的条件编译 +## 0.1.3(2023-08-13) +- feat: 增加 `camelCase` +## 0.1.2(2023-07-17) +- feat: 增加 `getClassStr` +## 0.1.1(2023-07-06) +- feat: 增加 `isNumeric`, 区别于 `isNumber` +## 0.1.0(2023-06-30) +- fix: `clamp`忘记导出了 +## 0.0.9(2023-06-27) +- feat: 增加`arrayBufferToFile` +## 0.0.8(2023-06-19) +- feat: 增加`createAnimation`、`clamp` +## 0.0.7(2023-06-08) +- chore: 更新注释 +## 0.0.6(2023-06-08) +- chore: 增加`createImage`为`lime-watermark`和`lime-qrcode`提供依赖 +## 0.0.5(2023-06-03) +- chore: 更新注释 +## 0.0.4(2023-05-22) +- feat: 增加`range`,`exif`,`selectComponent` +## 0.0.3(2023-05-08) +- feat: 增加`fillZero`,`debounce`,`throttle`,`random` +## 0.0.2(2023-05-05) +- chore: 更新文档 +## 0.0.1(2023-05-05) +- 无 diff --git a/uni_modules/lime-shared/characterLimit/index.ts b/uni_modules/lime-shared/characterLimit/index.ts new file mode 100644 index 0000000..215de23 --- /dev/null +++ b/uni_modules/lime-shared/characterLimit/index.ts @@ -0,0 +1,63 @@ +// @ts-nocheck +/** + * 计算字符串字符的长度并可以截取字符串。 + * @param char 传入字符串(maxcharacter条件下,一个汉字表示两个字符) + * @param max 规定最大字符串长度 + * @returns 当没有传入maxCharacter/maxLength 时返回字符串字符长度,当传入maxCharacter/maxLength时返回截取之后的字符串和长度。 + */ +export type CharacterLengthResult = { + length : number; + characters : string; +} +// #ifdef APP-ANDROID +type ChartType = any +// #endif +// #ifndef APP-ANDROID +type ChartType = string | number +// #endif + +export function characterLimit(type : string, char : ChartType, max : number) : CharacterLengthResult { + const str = `${char}`; + + if (str.length == 0) { + return { + length: 0, + characters: '', + } as CharacterLengthResult + } + + if (type == 'maxcharacter') { + let len = 0; + for (let i = 0; i < str.length; i += 1) { + let currentStringLength : number// = 0; + const code = str.charCodeAt(i)! + if (code > 127 || code == 94) { + currentStringLength = 2; + } else { + currentStringLength = 1; + } + if (len + currentStringLength > max) { + return { + length: len, + characters: str.slice(0, i), + } as CharacterLengthResult + } + len += currentStringLength; + } + return { + length: len, + characters: str, + } as CharacterLengthResult + } else if (type == 'maxlength') { + const length = str.length > max ? max : str.length; + return { + length: length, + characters: str.slice(0, length), + } as CharacterLengthResult + } + + return { + length: str.length, + characters: str, + } as CharacterLengthResult +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/clamp/index.ts b/uni_modules/lime-shared/clamp/index.ts new file mode 100644 index 0000000..0e16358 --- /dev/null +++ b/uni_modules/lime-shared/clamp/index.ts @@ -0,0 +1,16 @@ +// @ts-nocheck +/** + * 将一个值限制在指定的范围内 + * @param val 要限制的值 + * @param min 最小值 + * @param max 最大值 + * @returns 限制后的值 + */ +export function clamp(val: number, min: number, max: number): number { + return Math.max(min, Math.min(max, val)); +} + + +// console.log(clamp(5 ,0, 10)); // 输出: 5(在范围内,不做更改) +// console.log(clamp(-5 ,0, 10)); // 输出: 0(小于最小值,被限制为最小值) +// console.log(clamp(15 ,0, 10)); // 输出: 10(大于最大值,被限制为最大值) \ No newline at end of file diff --git a/uni_modules/lime-shared/classNames/index.ts b/uni_modules/lime-shared/classNames/index.ts new file mode 100644 index 0000000..931228d --- /dev/null +++ b/uni_modules/lime-shared/classNames/index.ts @@ -0,0 +1,96 @@ +// @ts-nocheck +/** + * 类名属性类型 + * @description 支持 string、number、null、undefined、对象和数组类型 + */ +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif + +export type ClassProp = + | string + | number + | null + | undefined + | UTSJSONObject + | ClassProp[] + +/** + * 把各种类型的参数拼接成字符串类名,以便解决小程序不支持 classObject 的问题 + * @description 支持多种参数类型的类名拼接,包括字符串、数字、数组和对象 + * @param args 类名参数,可以是字符串、数字、null、undefined、对象或数组 + * @returns 拼接后的类名字符串 + * @example + * classNames('foo', 'bar') // 'foo bar' + * classNames('foo', { bar: true, baz: false }) // 'foo bar' + * classNames('foo', ['bar', 'baz']) // 'foo bar baz' + * classNames('foo', null, 'bar') // 'foo bar' + * classNames({ foo: true, bar: false, baz: true }) // 'foo baz' + */ +// export function classNames(args:ClassProp[]): string +export function classNames(...args : ClassProp[]) : string { + return classNamesArray(args) +} + +/** + * 处理数组的类名 + * @description 用于内部递归处理数组类型的类名 + * @param args 类名数组 + * @returns 拼接后的类名字符串 + */ +export function classNamesArray(args : ClassProp[]) : string { + const result : string[] = [] + + for (let i = 0; i < args.length; i++) { + const arg = args[i] + if (arg == null) { + continue + } + + if (typeof arg == 'string') { + const trimmed = (arg as string).trim() + if (trimmed != '') { + result.push(trimmed) + } + } else if (typeof arg == 'number') { + if (isFinite(arg as number)) { + result.push(`${arg}`) + } + } else if (Array.isArray(arg)) { + if ((arg as ClassProp[]).length > 0) { + const className = classNamesArray(arg) + if (className != '') { + result.push(className) + } + } + } else if (typeof arg == 'object') { + // #ifndef UNI-APP-X && APP + for (const key in arg) { + const value = arg[key] + if (value == true) { + result.push(key) + } + } + // #endif + // #ifdef UNI-APP-X && APP + // #ifdef VUE3-VAPOR + for (const key in arg) { + const value = arg[key] + if (value == true) { + result.push(key) + } + } + // #endif + // #ifndef VUE3-VAPOR + UTSJSONObject.assign({}, arg as UTSJSONObject).toMap().forEach((value, key) => { + if (value == true) { + result.push(key) + } + }) + // #endif + // #endif + } + } + + return result.join(' ') +} \ No newline at end of file diff --git a/uni_modules/lime-shared/cloneDeep/index.ts b/uni_modules/lime-shared/cloneDeep/index.ts new file mode 100644 index 0000000..d7be272 --- /dev/null +++ b/uni_modules/lime-shared/cloneDeep/index.ts @@ -0,0 +1,10 @@ +// @ts-nocheck + +// #ifdef APP-ANDROID +export { cloneDeep } from './uvue' +// #endif + + +// #ifndef APP-ANDROID +export { cloneDeep } from './vue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/cloneDeep/uvue.ts b/uni_modules/lime-shared/cloneDeep/uvue.ts new file mode 100644 index 0000000..49570f8 --- /dev/null +++ b/uni_modules/lime-shared/cloneDeep/uvue.ts @@ -0,0 +1,44 @@ +// @ts-nocheck +/** + * 深度克隆一个对象或数组 + * @param obj 要克隆的对象或数组 + * @returns 克隆后的对象或数组 + */ +export function cloneDeep(obj : any) : T { + if (obj instanceof Set) { + const set = new Set(); + obj.forEach((item : any) => { + set.add(item) + }) + return set as T; + } + if (obj instanceof Map) { + const map = new Map(); + obj.forEach((value : any, key : any) => { + map.set(key, value) + }) + return map as T; + } + + if (obj instanceof RegExp) { + return new RegExp(obj) as T; + } + + if (Array.isArray(obj)) { + return (obj as any[]).map((item : any):any => item) as T; + } + + if (obj instanceof Date) { + return new Date(obj.getTime()) as T; + } + + if (typeof obj == 'object') { + // #ifdef VUE3-VAPOR + return Object.assign({}, toRaw(obj))! + // #endif + // #ifndef VUE3-VAPOR + return UTSJSONObject.assign({}, toRaw(obj))! + // #endif + } + return obj as T +} \ No newline at end of file diff --git a/uni_modules/lime-shared/cloneDeep/uvue.uts b/uni_modules/lime-shared/cloneDeep/uvue.uts new file mode 100644 index 0000000..9ee42d9 --- /dev/null +++ b/uni_modules/lime-shared/cloneDeep/uvue.uts @@ -0,0 +1,39 @@ +// @ts-nocheck +/** + * 深度克隆一个对象或数组 + * @param obj 要克隆的对象或数组 + * @returns 克隆后的对象或数组 + */ +export function cloneDeep(obj : any) : T { + if (obj instanceof Set) { + const set = new Set(); + obj.forEach((item : any) => { + set.add(item) + }) + return set as T; + } + if (obj instanceof Map) { + const map = new Map(); + obj.forEach((value : any, key : any) => { + map.set(key, value) + }) + return map as T; + } + + if (obj instanceof RegExp) { + return new RegExp(obj) as T; + } + + if (Array.isArray(obj)) { + return (obj as any[]).map((item : any):any => item) as T; + } + + if (obj instanceof Date) { + return new Date(obj.getTime()) as T; + } + + if (typeof obj == 'object') { + return UTSJSONObject.assign({}, toRaw(obj))! + } + return obj as T +} \ No newline at end of file diff --git a/uni_modules/lime-shared/cloneDeep/vue.ts b/uni_modules/lime-shared/cloneDeep/vue.ts new file mode 100644 index 0000000..ded334d --- /dev/null +++ b/uni_modules/lime-shared/cloneDeep/vue.ts @@ -0,0 +1,103 @@ +// @ts-nocheck +/** + * 深度克隆一个对象或数组 + * @param obj 要克隆的对象或数组 + * @returns 克隆后的对象或数组 + */ +export function cloneDeep(obj: any): T { + // 如果传入的对象为空,返回空 + if (obj === null) { + return null as unknown as T; + } + + // 如果传入的对象是 Set 类型,则将其转换为数组,并通过新的 Set 构造函数创建一个新的 Set 对象 + if (obj instanceof Set) { + return new Set([...obj]) as unknown as T; + } + + // 如果传入的对象是 Map 类型,则将其转换为数组,并通过新的 Map 构造函数创建一个新的 Map 对象 + if (obj instanceof Map) { + return new Map([...obj]) as unknown as T; + } + + // 如果传入的对象是 WeakMap 类型,则直接用传入的 WeakMap 对象进行赋值 + if (obj instanceof WeakMap) { + let weakMap = new WeakMap(); + weakMap = obj; + return weakMap as unknown as T; + } + + // 如果传入的对象是 WeakSet 类型,则直接用传入的 WeakSet 对象进行赋值 + if (obj instanceof WeakSet) { + let weakSet = new WeakSet(); + weakSet = obj; + return weakSet as unknown as T; + } + + // 如果传入的对象是 RegExp 类型,则通过新的 RegExp 构造函数创建一个新的 RegExp 对象 + if (obj instanceof RegExp) { + return new RegExp(obj) as unknown as T; + } + + // 如果传入的对象是 undefined 类型,则返回 undefined + if (typeof obj === 'undefined') { + return undefined as unknown as T; + } + + // 如果传入的对象是数组,则递归调用 cloneDeep 函数对数组中的每个元素进行克隆 + if (Array.isArray(obj)) { + return obj.map(cloneDeep) as unknown as T; + } + + // 如果传入的对象是 Date 类型,则通过新的 Date 构造函数创建一个新的 Date 对象 + if (obj instanceof Date) { + return new Date(obj.getTime()) as unknown as T; + } + + // 如果传入的对象是普通对象,则使用递归调用 cloneDeep 函数对对象的每个属性进行克隆 + if (typeof obj === 'object') { + const newObj: any = {}; + for (const [key, value] of Object.entries(obj)) { + newObj[key] = cloneDeep(value); + } + const symbolKeys = Object.getOwnPropertySymbols(obj); + for (const key of symbolKeys) { + newObj[key] = cloneDeep(obj[key]); + } + return newObj; + } + + // 如果传入的对象是基本数据类型(如字符串、数字等),则直接返回 + return obj; +} + +// 示例使用 + +// // 克隆一个对象 +// const obj = { name: 'John', age: 30 }; +// const clonedObj = cloneDeep(obj); + +// console.log(clonedObj); // 输出: { name: 'John', age: 30 } +// console.log(clonedObj === obj); // 输出: false (副本与原对象是独立的) + +// // 克隆一个数组 +// const arr = [1, 2, 3]; +// const clonedArr = cloneDeep(arr); + +// console.log(clonedArr); // 输出: [1, 2, 3] +// console.log(clonedArr === arr); // 输出: false (副本与原数组是独立的) + +// // 克隆一个包含嵌套对象的对象 +// const person = { +// name: 'Alice', +// age: 25, +// address: { +// city: 'New York', +// country: 'USA', +// }, +// }; +// const clonedPerson = cloneDeep(person); + +// console.log(clonedPerson); // 输出: { name: 'Alice', age: 25, address: { city: 'New York', country: 'USA' } } +// console.log(clonedPerson === person); // 输出: false (副本与原对象是独立的) +// console.log(clonedPerson.address === person.address); // 输出: false (嵌套对象的副本也是独立的) \ No newline at end of file diff --git a/uni_modules/lime-shared/closest/index.ts b/uni_modules/lime-shared/closest/index.ts new file mode 100644 index 0000000..e6e79c2 --- /dev/null +++ b/uni_modules/lime-shared/closest/index.ts @@ -0,0 +1,22 @@ +// @ts-nocheck + +/** + * 在给定数组中找到最接近目标数字的元素。 + * @param arr 要搜索的数字数组。 + * @param target 目标数字。 + * @returns 最接近目标数字的数组元素。 + */ +export function closest(arr: number[], target: number):number { + return arr.reduce((pre: number, cur: number):number => + Math.abs(pre - target) < Math.abs(cur - target) ? pre : cur + ); +} + +// 示例 +// // 定义一个数字数组 +// const numbers = [1, 3, 5, 7, 9]; + +// // 在数组中找到最接近目标数字 6 的元素 +// const closestNumber = closest(numbers, 6); + +// console.log(closestNumber); // 输出结果: 5 \ No newline at end of file diff --git a/uni_modules/lime-shared/coalesce/index.ts b/uni_modules/lime-shared/coalesce/index.ts new file mode 100644 index 0000000..bfaa1a6 --- /dev/null +++ b/uni_modules/lime-shared/coalesce/index.ts @@ -0,0 +1,27 @@ +// @ts-nocheck +/** + * 返回第一个非空值。 + * - 跳过 null、undefined + * - 对字符串类型,额外跳过空字符串 '' + * - 保留 0、false 等类型合法值 + */ +// #ifdef UNI-APP-X && APP +export function coalesce(...values : (any | null)[]) : T | null { + for (const value of values) { + if (value == null) continue; + if (typeof value == 'string' && value == '') continue; + return value as T; + } + return null; +} +// #endif +// #ifndef UNI-APP-X && APP +export function coalesce(...values : (T | null | undefined)[]) : T | null { + for (const value of values) { + if (value == null || value === undefined) continue; + if (typeof value === 'string' && value === '') continue; + return value as T; + } + return null; +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/components/lime-shared/lime-shared.vue b/uni_modules/lime-shared/components/lime-shared/lime-shared.vue new file mode 100644 index 0000000..edbf6e8 --- /dev/null +++ b/uni_modules/lime-shared/components/lime-shared/lime-shared.vue @@ -0,0 +1,407 @@ + + + + + \ No newline at end of file diff --git a/uni_modules/lime-shared/computed/index.ts b/uni_modules/lime-shared/computed/index.ts new file mode 100644 index 0000000..7b31651 --- /dev/null +++ b/uni_modules/lime-shared/computed/index.ts @@ -0,0 +1,16 @@ +// @ts-nocheck +// #ifndef VUE2 && APP +export { computed } from '../vue'; +// #endif + +// #ifdef VUE2 && APP +import { watchEffect, onScopeDispose, ref } from '../vue'; + +export function computed(getter) { + const result = ref(); + watchEffect(() => { + result.value = getter(); + }); + return result; +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/createAnimation/index.ts b/uni_modules/lime-shared/createAnimation/index.ts new file mode 100644 index 0000000..db81f5c --- /dev/null +++ b/uni_modules/lime-shared/createAnimation/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +export * from './type' +// export * from './vue.ts' +export { createAnimation } from './vue' +// #endif + +// #ifdef UNI-APP-X +// export * from './uvue' +export { createAnimation } from './uvue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/createAnimation/type.ts b/uni_modules/lime-shared/createAnimation/type.ts new file mode 100644 index 0000000..0f8ad34 --- /dev/null +++ b/uni_modules/lime-shared/createAnimation/type.ts @@ -0,0 +1,25 @@ +export type CreateAnimationOptions = { + /** + * 动画持续时间,单位ms + */ + duration ?: number; + /** + * 定义动画的效果 + * - linear: 动画从头到尾的速度是相同的 + * - ease: 动画以低速开始,然后加快,在结束前变慢 + * - ease-in: 动画以低速开始 + * - ease-in-out: 动画以低速开始和结束 + * - ease-out: 动画以低速结束 + * - step-start: 动画第一帧就跳至结束状态直到结束 + * - step-end: 动画一直保持开始状态,最后一帧跳到结束状态 + */ + timingFunction ?: string //'linear' | 'ease' | 'ease-in' | 'ease-in-out' | 'ease-out' | 'step-start' | 'step-end'; + /** + * 动画延迟时间,单位 ms + */ + delay ?: number; + /** + * 设置transform-origin + */ + transformOrigin ?: string; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/createAnimation/uvue.ts b/uni_modules/lime-shared/createAnimation/uvue.ts new file mode 100644 index 0000000..96d8263 --- /dev/null +++ b/uni_modules/lime-shared/createAnimation/uvue.ts @@ -0,0 +1,5 @@ +// @ts-nocheck +// export * from '@/uni_modules/lime-animateIt' +export function createAnimation() { + console.error('当前环境不支持,请使用:lime-animateIt') +} \ No newline at end of file diff --git a/uni_modules/lime-shared/createAnimation/uvue.uts b/uni_modules/lime-shared/createAnimation/uvue.uts new file mode 100644 index 0000000..96d8263 --- /dev/null +++ b/uni_modules/lime-shared/createAnimation/uvue.uts @@ -0,0 +1,5 @@ +// @ts-nocheck +// export * from '@/uni_modules/lime-animateIt' +export function createAnimation() { + console.error('当前环境不支持,请使用:lime-animateIt') +} \ No newline at end of file diff --git a/uni_modules/lime-shared/createAnimation/vue.ts b/uni_modules/lime-shared/createAnimation/vue.ts new file mode 100644 index 0000000..6934f27 --- /dev/null +++ b/uni_modules/lime-shared/createAnimation/vue.ts @@ -0,0 +1,148 @@ +// @ts-nocheck +// nvue 需要在节点上设置ref或在export里传入 +// const animation = createAnimation({ +// ref: this.$refs['xxx'], +// duration: 0, +// timingFunction: 'linear' +// }) +// animation.opacity(1).translate(x, y).step({duration}) +// animation.export(ref) + +// 抹平nvue 与 uni.createAnimation的使用差距 +// 但是nvue动画太慢 + + + +import { type CreateAnimationOptions } from './type' +// #ifdef APP-NVUE +const nvueAnimation = uni.requireNativePlugin('animation') + +type AnimationTypes = 'matrix' | 'matrix3d' | 'rotate' | 'rotate3d' | 'rotateX' | 'rotateY' | 'rotateZ' | 'scale' | 'scale3d' | 'scaleX' | 'scaleY' | 'scaleZ' | 'skew' | 'skewX' | 'skewY' | 'translate' | 'translate3d' | 'translateX' | 'translateY' | 'translateZ' + | 'opacity' | 'backgroundColor' | 'width' | 'height' | 'left' | 'right' | 'top' | 'bottom' + +interface Styles { + [key : string] : any +} + +interface StepConfig { + duration?: number + timingFunction?: string + delay?: number + needLayout?: boolean + transformOrigin?: string +} +interface StepAnimate { + styles?: Styles + config?: StepConfig +} +interface StepAnimates { + [key: number]: StepAnimate +} +// export interface CreateAnimationOptions extends UniApp.CreateAnimationOptions { +// ref?: string +// } + +type Callback = (time: number) => void +const animateTypes1 : AnimationTypes[] = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d', + 'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY', + 'translateZ' +] +const animateTypes2 : AnimationTypes[] = ['opacity', 'backgroundColor'] +const animateTypes3 : AnimationTypes[] = ['width', 'height', 'left', 'right', 'top', 'bottom'] + +class LimeAnimation { + ref : any + context : any + options : UniApp.CreateAnimationOptions + // stack : any[] = [] + next : number = 0 + currentStepAnimates : StepAnimates = {} + duration : number = 0 + constructor(options : CreateAnimationOptions) { + const {ref} = options + this.ref = ref + this.options = options + } + addAnimate(type : AnimationTypes, args: (string | number)[]) { + let aniObj = this.currentStepAnimates[this.next] + let stepAnimate:StepAnimate = {} + if (!aniObj) { + stepAnimate = {styles: {}, config: {}} + } else { + stepAnimate = aniObj + } + + if (animateTypes1.includes(type)) { + if (!stepAnimate.styles.transform) { + stepAnimate.styles.transform = '' + } + let unit = '' + if (type === 'rotate') { + unit = 'deg' + } + stepAnimate.styles.transform += `${type}(${args.map((v: number) => v + unit).join(',')}) ` + } else { + stepAnimate.styles[type] = `${args.join(',')}` + } + this.currentStepAnimates[this.next] = stepAnimate + } + animateRun(styles: Styles = {}, config:StepConfig = {}, ref: any) { + const el = ref || this.ref + if (!el) return + return new Promise((resolve) => { + const time = +new Date() + nvueAnimation.transition(el, { + styles, + ...config + }, () => { + resolve(+new Date() - time) + }) + }) + } + nextAnimate(animates: StepAnimates, step: number = 0, ref: any, cb: Callback) { + let obj = animates[step] + if (obj) { + let { styles, config } = obj + // this.duration += config.duration + this.animateRun(styles, config, ref).then((time: number) => { + step += 1 + this.duration += time + this.nextAnimate(animates, step, ref, cb) + }) + } else { + this.currentStepAnimates = {} + cb && cb(this.duration) + } + } + step(config:StepConfig = {}) { + this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config) + this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin + this.next++ + return this + } + export(ref: any, cb?: Callback) { + ref = ref || this.ref + if(!ref) return + this.duration = 0 + this.next = 0 + this.nextAnimate(this.currentStepAnimates, 0, ref, cb) + return null + } +} + + +animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => { + LimeAnimation.prototype[type] = function(...args: (string | number)[]) { + this.addAnimate(type, args) + return this + } +}) +// #endif +export function createAnimation(options : CreateAnimationOptions) { + // #ifndef APP-NVUE + return uni.createAnimation({ ...options }) + // #endif + // #ifdef APP-NVUE + return new LimeAnimation(options) + // #endif +} diff --git a/uni_modules/lime-shared/createCanvas/index.ts b/uni_modules/lime-shared/createCanvas/index.ts new file mode 100644 index 0000000..49c3242 --- /dev/null +++ b/uni_modules/lime-shared/createCanvas/index.ts @@ -0,0 +1,72 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +import type { ComponentInternalInstance } from '@/uni_modules/lime-shared/vue' +import { getRect } from '@/uni_modules/lime-shared/getRect' +import { canIUseCanvas2d } from '@/uni_modules/lime-shared/canIUseCanvas2d' +export const isCanvas2d = canIUseCanvas2d() +// #endif + + +export function createCanvas(canvasId : string, component : ComponentInternalInstance) { + // #ifdef UNI-APP-X + uni.createCanvasContextAsync({ + canvasId, + component, + success(context : CanvasContext) { + + }, + fail(error : UniError) { + + } + }) + // #endif + // #ifndef UNI-APP-X + const isCanvas2d = canIUseCanvas2d() + getRect('#' + canvasId, context, isCanvas2d).then(res => { + if (res.node) { + res.node.width = res.width + res.node.height = res.height + return res.node + } else { + const ctx = uni.createCanvasContext(canvasId, context) + if (!ctx._drawImage) { + ctx._drawImage = ctx.drawImage + ctx.drawImage = function (...args) { + const { path } = args.shift() + ctx._drawImage(path, ...args) + } + } + if (!ctx.getImageData) { + ctx.getImageData = function () { + return new Promise((resolve, reject) => { + uni.canvasGetImageData({ + canvasId, + x: parseInt(arguments[0]), + y: parseInt(arguments[1]), + width: parseInt(arguments[2]), + height: parseInt(arguments[3]), + success(res) { + resolve(res) + }, + fail(err) { + reject(err) + } + }, context) + }) + + } + return { + getContext(type: string) { + if(type == '2d') { + return ctx + } + }, + width: res.width, + height: res.height, + createImage + } + } + } + }) + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/createCanvasContextAsync/index.ts b/uni_modules/lime-shared/createCanvasContextAsync/index.ts new file mode 100644 index 0000000..b6e5cf9 --- /dev/null +++ b/uni_modules/lime-shared/createCanvasContextAsync/index.ts @@ -0,0 +1,329 @@ +// @ts-nocheck +/** + * Canvas上下文创建结果类型 + * 包含创建Canvas上下文时返回的各个组件 + */ +export type LimeCanvasInstance = { + canvasContext : CanvasContext, + node : UniCanvasElement, + renderContext : CanvasRenderingContext2D, + isCanvas2d : boolean, + width : number, + height : number, + toDataURL : (type?: string, quality?: number) => Promise, + flush : (reserve?: boolean) => Promise, + getImageData : (x: number, y: number, width: number, height: number) => Promise +} + + + +/** + * 异步创建Canvas上下文 + * 这个函数封装了uni-app不同平台下的Canvas创建逻辑: + * 1. 在uni-app X中使用uni.createCanvasContextAsync API + * 2. 在非uni-app X中使用uni.createSelectorQuery查询Canvas元素 + * + * @param canvasId - Canvas元素的id选择器 + * @param component - Vue组件实例 + * @returns Promise 包含Canvas上下文、元素和渲染上下文 + * + */ +export function createCanvasContextAsync( + canvasId : string, + component : ComponentPublicInstance +) : Promise { + return new Promise((resolve, reject) => { + // 条件编译:uni-app X平台 + // uni-app X使用新的Canvas API + // #ifdef UNI-APP-X + nextTick(() => { + uni.createCanvasContextAsync({ + id: canvasId, + component, + success(canvasContext : CanvasContext) { + // 从CanvasContext中获取2D渲染上下文 + const ctx = canvasContext.getContext('2d')!; + // 获取Canvas DOM元素 + const node = ctx.canvas; + // 确保获取有效的尺寸 + const width = node.offsetWidth; + const height = node.offsetHeight; + resolve({ + canvasContext: canvasContext, + node, + renderContext: ctx, + isCanvas2d: true, + width, + height, + toDataURL: (type?: string, quality?: number) : Promise => { + return new Promise((resolve) => { + const dataURL = canvasContext.toDataURL(type ?? 'image/png', quality ?? 1.0) + resolve(dataURL) + }) + }, + flush: (_reserve?: boolean):Promise => { + return Promise.resolve() + }, + getImageData: (x: number, y: number, w: number, h: number) : Promise => { + return new Promise((resolve, reject) => { + try { + const imageData = ctx.getImageData(x, y, w, h) + resolve(imageData) + } catch (error) { + reject(error) + } + }) + } + } as LimeCanvasInstance) + }, + fail(error) { + // uni-app X中创建失败时reject错误 + reject(error) + } + }) + }) + + // #endif + + // 条件编译:非uni-app X平台 + // 包括H5、小程序等平台,使用传统的Canvas查询方式 + // #ifndef UNI-APP-X + // 创建选择器查询 + uni.createSelectorQuery() + // 限定在指定组件内查询 + .in(component) + // 选择指定的Canvas元素 + .select(`#${canvasId}`) + // 指定需要查询的字段 + .fields({ + node: true, // 需要获取Canvas节点 + size: true, // 需要获取尺寸信息 + rect: true // 需要获取位置信息 + }, (queryResult) => { + // 成功查询到Canvas节点 + if (queryResult.node && queryResult.node.getContext) { + // 获取Canvas的2D渲染上下文 + const renderContext = queryResult.node.getContext('2d')!; + + let isCanvas2d = true; + + // #ifdef WEB + isCanvas2d = ![...queryResult.node.classList].includes('uni-canvas-canvas') + // #endif + + const canvasContext = { + createImage: () => { + if(queryResult.node.createImage) { + return queryResult.node.createImage() + } + return new LimeCanvasImage() + }, + requestAnimationFrame: (callback: (time: number) => void) : number => { + // #ifdef WEB + return requestAnimationFrame(callback) + // #endif + // #ifndef WEB + if (queryResult.node.requestAnimationFrame) { + return queryResult.node.requestAnimationFrame(callback) + } + // return setTimeout(callback, Math.floor(1000 / 60)) as unknown as number + return setTimeout(() => callback(Date.now()), Math.floor(1000 / 60)) as unknown as number + // #endif + }, + cancelAnimationFrame: (id: number) : void => { + // #ifdef WEB + cancelAnimationFrame(id) + // #endif + // #ifndef WEB + if (queryResult.node.cancelAnimationFrame) { + queryResult.node.cancelAnimationFrame(id) + } else { + clearTimeout(id) + } + // #endif + } + } + + resolve({ + renderContext, + node: queryResult.node, + canvasContext, + isCanvas2d, + width: queryResult.width, + height: queryResult.height, + toDataURL: (type?: string, quality?: number) : Promise => { + return new Promise((resolve) => { + if (queryResult.node != null && typeof queryResult.node.toDataURL == 'function') { + const dataURL = queryResult.node.toDataURL(type ?? 'image/png', quality ?? 1.0) + resolve(dataURL) + } else { + uni.canvasToTempFilePath({ + canvas: queryResult.node, + success: (res) => { + resolve(res.tempFilePath) + }, + fail: () => { + resolve('') + } + }) + } + }) + }, + flush: (_reserve?: boolean) => { + return Promise.resolve() + }, + getImageData: (x: number, y: number, w: number, h: number) : Promise => { + return new Promise((resolve, reject) => { + try { + const result = renderContext.getImageData(x, y, w, h) + if (result && typeof result.then === 'function') { + result.then((imageData : ImageData) => { + resolve(imageData) + }).catch(reject) + } else { + resolve(result as ImageData) + } + } catch(e) { + reject(e) + } + }) + } + } as LimeCanvasInstance) + } else { + // 未能获取到Canvas节点,回退到旧的API + // 使用uni.createCanvasContext创建绘图上下文 + const renderContext = uni.createCanvasContext(canvasId, component) + if (!renderContext._drawImage) { + renderContext._drawImage = renderContext.drawImage + renderContext.drawImage = function (...args) { + const {path} = args.shift(); + renderContext._drawImage(path, ...args) + } + } + + // 创建模拟的CanvasContext对象以保持接口一致 + const canvasContext = { + /** + * 模拟CanvasContext的getContext方法 + * 在旧版本API中返回绘图上下文 + */ + getContext(type : string) { + return renderContext + }, + createImage(){ + return new LimeCanvasImage() + }, + requestAnimationFrame: (callback: (time: number) => void) : number => { + return setTimeout(() => callback(Date.now()), Math.floor(1000 / 60)) as unknown as number + }, + cancelAnimationFrame: (id: number) : void => { + clearTimeout(id) + } + } + const node = { + ...canvasContext, + } + // 在回退方案中,无法获取到Canvas DOM元素 + resolve({ + renderContext, + node, + canvasContext, + isCanvas2d: false, + width: queryResult.width || 300, + height: queryResult.height || 150, + toDataURL: (type?: string, quality?: number) : Promise => { + return new Promise((resolve) => { + renderContext.draw(true, () => { + const fileType = type == 'image/jpeg' ? 'jpg' : 'png' + uni.canvasToTempFilePath({ + canvasId: canvasId, + fileType: fileType, + quality: quality ?? 1.0, + success: (res) => { + resolve(res.tempFilePath) + }, + fail: (err) => { + console.log('[createCanvasContextAsync]:生成图片失败', err) + resolve('') + } + }, component) + }) + }) + }, + flush: (reserve?: boolean) => { + return new Promise((resolve)=> { + renderContext.draw(reserve ?? true, resolve) + }) + }, + getImageData: (x: number, y: number, w: number, h: number) : Promise => { + return new Promise((resolve, reject) => { + renderContext.draw(true, () => { + uni.canvasGetImageData({ + canvasId: canvasId, + x: Math.round(x), + y: Math.round(y), + width: Math.round(w), + height: Math.round(h), + success(res : any) { + resolve(res as ImageData) + }, + fail(err : any) { + reject(err) + } + }, component) + }) + }) + } + } as LimeCanvasInstance) + } + }).exec() // 执行查询 + // #endif + }) +} + + +// #ifndef UNI-APP-X +// #ifndef WEB +class LimeCanvasImage { + currentSrc: string | null = null + naturalHeight: number = 0 + naturalWidth: number = 0 + width: number = 0 + height: number = 0 + tagName: string = 'IMG' + path: string = '' + crossOrigin: string = '' + referrerPolicy: string = '' + onload: () => void = () => {} + onerror: () => void = () => {} + complete: boolean = false + constructor() {} + set src(src: string) { + if(!src) { + return this.onerror() + } + src = src.replace(/^@\//,'/') + this.currentSrc = src + // this.path = src + // uniapp 好像不需要下载 + // this.onload() + uni.getImageInfo({ + src, + success: (res: any) => { + this.path = res.path + this.naturalWidth = this.width = res.width + this.naturalHeight = this.height = res.height + this.onload() + }, + fail: () => { this.onerror() } + }) + } + get src() { + return this.currentSrc + } +} +// #endif +// #ifdef WEB +const LimeCanvasImage = Image +// #endif +// #endif diff --git a/uni_modules/lime-shared/createImage/index.ts b/uni_modules/lime-shared/createImage/index.ts new file mode 100644 index 0000000..96ab11c --- /dev/null +++ b/uni_modules/lime-shared/createImage/index.ts @@ -0,0 +1,70 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +import {isBrowser} from '../isBrowser' +class Image { + currentSrc: string | null = null + naturalHeight: number = 0 + naturalWidth: number = 0 + width: number = 0 + height: number = 0 + tagName: string = 'IMG' + path: string = '' + crossOrigin: string = '' + referrerPolicy: string = '' + onload: () => void = () => {} + onerror: () => void = () => {} + complete: boolean = false + constructor() {} + set src(src: string) { + if(!src) { + return this.onerror() + } + src = src.replace(/^@\//,'/') + this.currentSrc = src + uni.getImageInfo({ + src, + success: (res) => { + const localReg = /^\.|^\/(?=[^\/])/; + // #ifdef MP-WEIXIN || MP-BAIDU || MP-QQ || MP-TOUTIAO + res.path = localReg.test(src) ? `/${res.path}` : res.path; + // #endif + this.complete = true + this.path = res.path + this.naturalWidth = this.width = res.width + this.naturalHeight = this.height = res.height + this.onload() + }, + fail: () => { + this.onerror() + } + }) + } + get src() { + return this.currentSrc + } +} +interface UniImage extends WechatMiniprogram.Image { + complete?: boolean + naturalHeight?: number + naturalWidth?: number +} +/** 创建用于 canvas 的 img */ +export function createImage(canvas?: any): HTMLImageElement | UniImage { + if(canvas && canvas.createImage) { + return (canvas as WechatMiniprogram.Canvas).createImage() + } else if(this && this['tagName'] == 'canvas' && !('toBlob' in this) || canvas && !('toBlob' in canvas)){ + return new Image() + } else if(isBrowser) { + return new window.Image() + } + return new Image() +} +// #endif + + +// #ifdef UNI-APP-X && APP +export function createImage():Image{ + // console.error('当前环境不支持') + return new Image() +} +// #endif diff --git a/uni_modules/lime-shared/cssToObj/index.ts b/uni_modules/lime-shared/cssToObj/index.ts new file mode 100644 index 0000000..74411af --- /dev/null +++ b/uni_modules/lime-shared/cssToObj/index.ts @@ -0,0 +1,50 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif + + +/** + * 将 CSS 字符串转换为样式对象 + * @param css CSS 字符串,例如 "color: red; font-size: 16px;" + * @returns CSSProperties 对象 + */ +export function cssToObj(css : string | UTSJSONObject | null) : UTSJSONObject { + // #ifdef APP-ANDROID + if(css == null) return {} + // #endif + // #ifndef APP-ANDROID + if(!css) return {} + // #endif + if(typeof css == 'object') return css as UTSJSONObject + + + const style : UTSJSONObject = {}; + + (css as string).split(';').forEach(decl => { + // #ifdef APP-ANDROID + const res = decl.split(':').map(s => s.trim()); + if(res.length > 1) { + const [prop, val] = res; + if (prop != '' && val != '') { + const camelProp = prop!.replace(/-([a-z])/g, (_a: string|null, b: string|null, _c: number, _d: string):string => { + return b?.toUpperCase() ?? '' + }); + style[camelProp] = val!; + } + } + // #endif + + // #ifndef APP-ANDROID + const [prop, val] = decl.split(':').map(s => s.trim()); + if (prop && val) { + const camelProp = prop.replace(/-([a-z])/g, (_, c) => { + return c.toUpperCase() + }); + style[camelProp] = val; + } + // #endif + }); + + return style; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/debounce/index.ts b/uni_modules/lime-shared/debounce/index.ts new file mode 100644 index 0000000..c7aa7cb --- /dev/null +++ b/uni_modules/lime-shared/debounce/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck + +// #ifdef UNI-APP-X && APP +// export * from './uvue.uts' +export { debounce } from './uvue' +// #endif + +// #ifndef UNI-APP-X && APP +// export * from './vue.ts' +export { debounce } from './vue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/debounce/uvue.ts b/uni_modules/lime-shared/debounce/uvue.ts new file mode 100644 index 0000000..f1fc29d --- /dev/null +++ b/uni_modules/lime-shared/debounce/uvue.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +/** + * 防抖函数,通过延迟一定时间来限制函数的执行频率。 + * @param fn 要防抖的函数。 + * @param wait 触发防抖的等待时间,单位为毫秒。 + * @returns 防抖函数。 + */ +export function debounce
(fn : (args: A)=> void, wait = 300): (args: A)=> void { + let timer = -1 + + return (args: A) => { + if (timer >-1) {clearTimeout(timer)}; + + timer = setTimeout(()=>{ + fn(args) + }, wait) + } +}; + + + +// 示例 +// 定义一个函数 +// function saveData(data: string) { +// // 模拟保存数据的操作 +// console.log(`Saving data: ${data}`); +// } + +// // 创建一个防抖函数,延迟 500 毫秒后调用 saveData 函数 +// const debouncedSaveData = debounce(saveData, 500); + +// // 连续调用防抖函数 +// debouncedSaveData('Data 1'); // 不会立即调用 saveData 函数 +// debouncedSaveData('Data 2'); // 不会立即调用 saveData 函数 + +// 在 500 毫秒后,只会调用一次 saveData 函数,输出结果为 "Saving data: Data 2" \ No newline at end of file diff --git a/uni_modules/lime-shared/debounce/uvue.uts b/uni_modules/lime-shared/debounce/uvue.uts new file mode 100644 index 0000000..f1fc29d --- /dev/null +++ b/uni_modules/lime-shared/debounce/uvue.uts @@ -0,0 +1,36 @@ +// @ts-nocheck +/** + * 防抖函数,通过延迟一定时间来限制函数的执行频率。 + * @param fn 要防抖的函数。 + * @param wait 触发防抖的等待时间,单位为毫秒。 + * @returns 防抖函数。 + */ +export function debounce(fn : (args: A)=> void, wait = 300): (args: A)=> void { + let timer = -1 + + return (args: A) => { + if (timer >-1) {clearTimeout(timer)}; + + timer = setTimeout(()=>{ + fn(args) + }, wait) + } +}; + + + +// 示例 +// 定义一个函数 +// function saveData(data: string) { +// // 模拟保存数据的操作 +// console.log(`Saving data: ${data}`); +// } + +// // 创建一个防抖函数,延迟 500 毫秒后调用 saveData 函数 +// const debouncedSaveData = debounce(saveData, 500); + +// // 连续调用防抖函数 +// debouncedSaveData('Data 1'); // 不会立即调用 saveData 函数 +// debouncedSaveData('Data 2'); // 不会立即调用 saveData 函数 + +// 在 500 毫秒后,只会调用一次 saveData 函数,输出结果为 "Saving data: Data 2" \ No newline at end of file diff --git a/uni_modules/lime-shared/debounce/vue.ts b/uni_modules/lime-shared/debounce/vue.ts new file mode 100644 index 0000000..694b44d --- /dev/null +++ b/uni_modules/lime-shared/debounce/vue.ts @@ -0,0 +1,40 @@ +// @ts-nocheck +type Timeout = ReturnType | null; +/** + * 防抖函数,通过延迟一定时间来限制函数的执行频率。 + * @param fn 要防抖的函数。 + * @param wait 触发防抖的等待时间,单位为毫秒。 + * @returns 防抖函数。 + */ +export function debounce( + fn : (...args : A) => R, + wait : number = 300) : (...args : A) => void { + let timer : Timeout = null; + + return function (...args : A) { + if (timer) clearTimeout(timer); // 如果上一个 setTimeout 存在,则清除它 + + // 设置一个新的 setTimeout,在指定的等待时间后调用防抖函数 + timer = setTimeout(() => { + fn.apply(this, args); // 使用提供的参数调用原始函数 + }, wait); + }; +}; + + + +// 示例 +// 定义一个函数 +// function saveData(data: string) { +// // 模拟保存数据的操作 +// console.log(`Saving data: ${data}`); +// } + +// // 创建一个防抖函数,延迟 500 毫秒后调用 saveData 函数 +// const debouncedSaveData = debounce(saveData, 500); + +// // 连续调用防抖函数 +// debouncedSaveData('Data 1'); // 不会立即调用 saveData 函数 +// debouncedSaveData('Data 2'); // 不会立即调用 saveData 函数 + +// 在 500 毫秒后,只会调用一次 saveData 函数,输出结果为 "Saving data: Data 2" \ No newline at end of file diff --git a/uni_modules/lime-shared/dom/index.ts b/uni_modules/lime-shared/dom/index.ts new file mode 100644 index 0000000..9c82e09 --- /dev/null +++ b/uni_modules/lime-shared/dom/index.ts @@ -0,0 +1,18 @@ +// @ts-nocheck +export function findClosestElementWithStyle(startEl: UniElement | null, styleProperty: string): UniElement | null { + let currentEl: UniElement | null = startEl; + + while (currentEl != null) { + // Check if the current element has the style property with a non-empty value + const styleValue = currentEl?.style.getPropertyValue(styleProperty) ?? ''; + if (styleValue.trim() != '') { + return currentEl; + } + + // Move to parent element + currentEl = currentEl.parentElement; + } + + // Return null if no element with the specified style was found + return null; +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/exif/index.ts b/uni_modules/lime-shared/exif/index.ts new file mode 100644 index 0000000..c9f3206 --- /dev/null +++ b/uni_modules/lime-shared/exif/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +// export * from './vue' +export { exif } from './vue' +// #endif + + +// #ifdef UNI-APP-X && APP +// export * from './uvue.uts' +export { exif } from './uvue' +// #endif diff --git a/uni_modules/lime-shared/exif/uvue.ts b/uni_modules/lime-shared/exif/uvue.ts new file mode 100644 index 0000000..01d21a2 --- /dev/null +++ b/uni_modules/lime-shared/exif/uvue.ts @@ -0,0 +1,7 @@ +class EXIF { + constructor(){ + console.error('当前环境不支持') + } +} + +export const exif = new EXIF() \ No newline at end of file diff --git a/uni_modules/lime-shared/exif/uvue.uts b/uni_modules/lime-shared/exif/uvue.uts new file mode 100644 index 0000000..01d21a2 --- /dev/null +++ b/uni_modules/lime-shared/exif/uvue.uts @@ -0,0 +1,7 @@ +class EXIF { + constructor(){ + console.error('当前环境不支持') + } +} + +export const exif = new EXIF() \ No newline at end of file diff --git a/uni_modules/lime-shared/exif/vue.ts b/uni_modules/lime-shared/exif/vue.ts new file mode 100644 index 0000000..6862263 --- /dev/null +++ b/uni_modules/lime-shared/exif/vue.ts @@ -0,0 +1,1057 @@ +// @ts-nocheck +import { base64ToArrayBuffer } from '../base64ToArrayBuffer'; +import { pathToBase64 } from '../pathToBase64'; +// import { isBase64 } from '../isBase64'; +import { isDataURI } from '../isBase64'; +import { isString } from '../isString'; + +interface File { + exifdata : any + iptcdata : any + xmpdata : any + src : string +} +class EXIF { + isXmpEnabled = false + debug = false + Tags = { + // version tags + 0x9000: "ExifVersion", // EXIF version + 0xA000: "FlashpixVersion", // Flashpix format version + + // colorspace tags + 0xA001: "ColorSpace", // Color space information tag + + // image configuration + 0xA002: "PixelXDimension", // Valid width of meaningful image + 0xA003: "PixelYDimension", // Valid height of meaningful image + 0x9101: "ComponentsConfiguration", // Information about channels + 0x9102: "CompressedBitsPerPixel", // Compressed bits per pixel + + // user information + 0x927C: "MakerNote", // Any desired information written by the manufacturer + 0x9286: "UserComment", // Comments by user + + // related file + 0xA004: "RelatedSoundFile", // Name of related sound file + + // date and time + 0x9003: "DateTimeOriginal", // Date and time when the original image was generated + 0x9004: "DateTimeDigitized", // Date and time when the image was stored digitally + 0x9290: "SubsecTime", // Fractions of seconds for DateTime + 0x9291: "SubsecTimeOriginal", // Fractions of seconds for DateTimeOriginal + 0x9292: "SubsecTimeDigitized", // Fractions of seconds for DateTimeDigitized + + // picture-taking conditions + 0x829A: "ExposureTime", // Exposure time (in seconds) + 0x829D: "FNumber", // F number + 0x8822: "ExposureProgram", // Exposure program + 0x8824: "SpectralSensitivity", // Spectral sensitivity + 0x8827: "ISOSpeedRatings", // ISO speed rating + 0x8828: "OECF", // Optoelectric conversion factor + 0x9201: "ShutterSpeedValue", // Shutter speed + 0x9202: "ApertureValue", // Lens aperture + 0x9203: "BrightnessValue", // Value of brightness + 0x9204: "ExposureBias", // Exposure bias + 0x9205: "MaxApertureValue", // Smallest F number of lens + 0x9206: "SubjectDistance", // Distance to subject in meters + 0x9207: "MeteringMode", // Metering mode + 0x9208: "LightSource", // Kind of light source + 0x9209: "Flash", // Flash status + 0x9214: "SubjectArea", // Location and area of main subject + 0x920A: "FocalLength", // Focal length of the lens in mm + 0xA20B: "FlashEnergy", // Strobe energy in BCPS + 0xA20C: "SpatialFrequencyResponse", // + 0xA20E: "FocalPlaneXResolution", // Number of pixels in width direction per FocalPlaneResolutionUnit + 0xA20F: "FocalPlaneYResolution", // Number of pixels in height direction per FocalPlaneResolutionUnit + 0xA210: "FocalPlaneResolutionUnit", // Unit for measuring FocalPlaneXResolution and FocalPlaneYResolution + 0xA214: "SubjectLocation", // Location of subject in image + 0xA215: "ExposureIndex", // Exposure index selected on camera + 0xA217: "SensingMethod", // Image sensor type + 0xA300: "FileSource", // Image source (3 == DSC) + 0xA301: "SceneType", // Scene type (1 == directly photographed) + 0xA302: "CFAPattern", // Color filter array geometric pattern + 0xA401: "CustomRendered", // Special processing + 0xA402: "ExposureMode", // Exposure mode + 0xA403: "WhiteBalance", // 1 = auto white balance, 2 = manual + 0xA404: "DigitalZoomRation", // Digital zoom ratio + 0xA405: "FocalLengthIn35mmFilm", // Equivalent foacl length assuming 35mm film camera (in mm) + 0xA406: "SceneCaptureType", // Type of scene + 0xA407: "GainControl", // Degree of overall image gain adjustment + 0xA408: "Contrast", // Direction of contrast processing applied by camera + 0xA409: "Saturation", // Direction of saturation processing applied by camera + 0xA40A: "Sharpness", // Direction of sharpness processing applied by camera + 0xA40B: "DeviceSettingDescription", // + 0xA40C: "SubjectDistanceRange", // Distance to subject + + // other tags + 0xA005: "InteroperabilityIFDPointer", + 0xA420: "ImageUniqueID" // Identifier assigned uniquely to each image + } + TiffTags = { + 0x0100: "ImageWidth", + 0x0101: "ImageHeight", + 0x8769: "ExifIFDPointer", + 0x8825: "GPSInfoIFDPointer", + 0xA005: "InteroperabilityIFDPointer", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x011C: "PlanarConfiguration", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x011A: "XResolution", + 0x011B: "YResolution", + 0x0128: "ResolutionUnit", + 0x0111: "StripOffsets", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteCounts", + 0x0201: "JPEGInterchangeFormat", + 0x0202: "JPEGInterchangeFormatLength", + 0x012D: "TransferFunction", + 0x013E: "WhitePoint", + 0x013F: "PrimaryChromaticities", + 0x0211: "YCbCrCoefficients", + 0x0214: "ReferenceBlackWhite", + 0x0132: "DateTime", + 0x010E: "ImageDescription", + 0x010F: "Make", + 0x0110: "Model", + 0x0131: "Software", + 0x013B: "Artist", + 0x8298: "Copyright" + } + GPSTags = { + 0x0000: "GPSVersionID", + 0x0001: "GPSLatitudeRef", + 0x0002: "GPSLatitude", + 0x0003: "GPSLongitudeRef", + 0x0004: "GPSLongitude", + 0x0005: "GPSAltitudeRef", + 0x0006: "GPSAltitude", + 0x0007: "GPSTimeStamp", + 0x0008: "GPSSatellites", + 0x0009: "GPSStatus", + 0x000A: "GPSMeasureMode", + 0x000B: "GPSDOP", + 0x000C: "GPSSpeedRef", + 0x000D: "GPSSpeed", + 0x000E: "GPSTrackRef", + 0x000F: "GPSTrack", + 0x0010: "GPSImgDirectionRef", + 0x0011: "GPSImgDirection", + 0x0012: "GPSMapDatum", + 0x0013: "GPSDestLatitudeRef", + 0x0014: "GPSDestLatitude", + 0x0015: "GPSDestLongitudeRef", + 0x0016: "GPSDestLongitude", + 0x0017: "GPSDestBearingRef", + 0x0018: "GPSDestBearing", + 0x0019: "GPSDestDistanceRef", + 0x001A: "GPSDestDistance", + 0x001B: "GPSProcessingMethod", + 0x001C: "GPSAreaInformation", + 0x001D: "GPSDateStamp", + 0x001E: "GPSDifferential" + } + // EXIF 2.3 Spec + IFD1Tags = { + 0x0100: "ImageWidth", + 0x0101: "ImageHeight", + 0x0102: "BitsPerSample", + 0x0103: "Compression", + 0x0106: "PhotometricInterpretation", + 0x0111: "StripOffsets", + 0x0112: "Orientation", + 0x0115: "SamplesPerPixel", + 0x0116: "RowsPerStrip", + 0x0117: "StripByteCounts", + 0x011A: "XResolution", + 0x011B: "YResolution", + 0x011C: "PlanarConfiguration", + 0x0128: "ResolutionUnit", + 0x0201: "JpegIFOffset", // When image format is JPEG, this value show offset to JPEG data stored.(aka "ThumbnailOffset" or "JPEGInterchangeFormat") + 0x0202: "JpegIFByteCount", // When image format is JPEG, this value shows data size of JPEG image (aka "ThumbnailLength" or "JPEGInterchangeFormatLength") + 0x0211: "YCbCrCoefficients", + 0x0212: "YCbCrSubSampling", + 0x0213: "YCbCrPositioning", + 0x0214: "ReferenceBlackWhite" + } + StringValues = { + ExposureProgram: { + 0: "Not defined", + 1: "Manual", + 2: "Normal program", + 3: "Aperture priority", + 4: "Shutter priority", + 5: "Creative program", + 6: "Action program", + 7: "Portrait mode", + 8: "Landscape mode" + }, + MeteringMode: { + 0: "Unknown", + 1: "Average", + 2: "CenterWeightedAverage", + 3: "Spot", + 4: "MultiSpot", + 5: "Pattern", + 6: "Partial", + 255: "Other" + }, + LightSource: { + 0: "Unknown", + 1: "Daylight", + 2: "Fluorescent", + 3: "Tungsten (incandescent light)", + 4: "Flash", + 9: "Fine weather", + 10: "Cloudy weather", + 11: "Shade", + 12: "Daylight fluorescent (D 5700 - 7100K)", + 13: "Day white fluorescent (N 4600 - 5400K)", + 14: "Cool white fluorescent (W 3900 - 4500K)", + 15: "White fluorescent (WW 3200 - 3700K)", + 17: "Standard light A", + 18: "Standard light B", + 19: "Standard light C", + 20: "D55", + 21: "D65", + 22: "D75", + 23: "D50", + 24: "ISO studio tungsten", + 255: "Other" + }, + Flash: { + 0x0000: "Flash did not fire", + 0x0001: "Flash fired", + 0x0005: "Strobe return light not detected", + 0x0007: "Strobe return light detected", + 0x0009: "Flash fired, compulsory flash mode", + 0x000D: "Flash fired, compulsory flash mode, return light not detected", + 0x000F: "Flash fired, compulsory flash mode, return light detected", + 0x0010: "Flash did not fire, compulsory flash mode", + 0x0018: "Flash did not fire, auto mode", + 0x0019: "Flash fired, auto mode", + 0x001D: "Flash fired, auto mode, return light not detected", + 0x001F: "Flash fired, auto mode, return light detected", + 0x0020: "No flash function", + 0x0041: "Flash fired, red-eye reduction mode", + 0x0045: "Flash fired, red-eye reduction mode, return light not detected", + 0x0047: "Flash fired, red-eye reduction mode, return light detected", + 0x0049: "Flash fired, compulsory flash mode, red-eye reduction mode", + 0x004D: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected", + 0x004F: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected", + 0x0059: "Flash fired, auto mode, red-eye reduction mode", + 0x005D: "Flash fired, auto mode, return light not detected, red-eye reduction mode", + 0x005F: "Flash fired, auto mode, return light detected, red-eye reduction mode" + }, + SensingMethod: { + 1: "Not defined", + 2: "One-chip color area sensor", + 3: "Two-chip color area sensor", + 4: "Three-chip color area sensor", + 5: "Color sequential area sensor", + 7: "Trilinear sensor", + 8: "Color sequential linear sensor" + }, + SceneCaptureType: { + 0: "Standard", + 1: "Landscape", + 2: "Portrait", + 3: "Night scene" + }, + SceneType: { + 1: "Directly photographed" + }, + CustomRendered: { + 0: "Normal process", + 1: "Custom process" + }, + WhiteBalance: { + 0: "Auto white balance", + 1: "Manual white balance" + }, + GainControl: { + 0: "None", + 1: "Low gain up", + 2: "High gain up", + 3: "Low gain down", + 4: "High gain down" + }, + Contrast: { + 0: "Normal", + 1: "Soft", + 2: "Hard" + }, + Saturation: { + 0: "Normal", + 1: "Low saturation", + 2: "High saturation" + }, + Sharpness: { + 0: "Normal", + 1: "Soft", + 2: "Hard" + }, + SubjectDistanceRange: { + 0: "Unknown", + 1: "Macro", + 2: "Close view", + 3: "Distant view" + }, + FileSource: { + 3: "DSC" + }, + + Components: { + 0: "", + 1: "Y", + 2: "Cb", + 3: "Cr", + 4: "R", + 5: "G", + 6: "B" + } + } + enableXmp() { + this.isXmpEnabled = true + } + disableXmp() { + this.isXmpEnabled = false; + } + /** + * 获取图片数据 + * @param img 图片地址 + * @param callback 回调 返回图片数据 + * */ + getData(img : any, callback : Function) { + // if (((self.Image && img instanceof self.Image) || (self.HTMLImageElement && img instanceof self.HTMLImageElement)) && !img.complete) + // return false; + let file : File = { + src: '', + exifdata: null, + iptcdata: null, + xmpdata: null, + } + if (isDataURI(img)) { + file.src = img + } else if (img.path) { + file.src = img.path + } else if (isString(img)) { + file.src = img + } else { + return false; + } + + + if (!imageHasData(file)) { + getImageData(file, callback); + } else { + if (callback) { + callback.call(file); + } + } + return true; + } + /** + * 获取图片tag + * @param img 图片数据 + * @param tag tag 类型 + * */ + getTag(img : File, tag : string) { + if (!imageHasData(img)) return; + return img.exifdata[tag]; + } + getIptcTag(img : File, tag : string) { + if (!imageHasData(img)) return; + return img.iptcdata[tag]; + } + getAllTags(img : File) { + if (!imageHasData(img)) return {}; + let a, + data = img.exifdata, + tags = {}; + for (a in data) { + if (data.hasOwnProperty(a)) { + tags[a] = data[a]; + } + } + return tags; + } + getAllIptcTags(img : File) { + if (!imageHasData(img)) return {}; + let a, + data = img.iptcdata, + tags = {}; + for (a in data) { + if (data.hasOwnProperty(a)) { + tags[a] = data[a]; + } + } + return tags; + } + pretty(img : File) { + if (!imageHasData(img)) return ""; + let a, + data = img.exifdata, + strPretty = ""; + for (a in data) { + if (data.hasOwnProperty(a)) { + if (typeof data[a] == "object") { + if (data[a] instanceof Number) { + strPretty += a + " : " + data[a] + " [" + data[a].numerator + "/" + data[a] + .denominator + "]\r\n"; + } else { + strPretty += a + " : [" + data[a].length + " values]\r\n"; + } + } else { + strPretty += a + " : " + data[a] + "\r\n"; + } + } + } + return strPretty; + } + readFromBinaryFile(file: ArrayBuffer) { + return findEXIFinJPEG(file); + } +} + +export const exif = new EXIF() +// export function getData(img, callback) { +// const exif = new EXIF() +// exif.getData(img, callback) +// } + +// export default {getData} +const ExifTags = exif.Tags +const TiffTags = exif.TiffTags +const IFD1Tags = exif.IFD1Tags +const GPSTags = exif.GPSTags +const StringValues = exif.StringValues + + +function imageHasData(img : File) : boolean { + return !!(img.exifdata); +} + +function objectURLToBlob(url : string, callback : Function) { + try { + const http = new XMLHttpRequest(); + http.open("GET", url, true); + http.responseType = "blob"; + http.onload = function (e) { + if (this.status == 200 || this.status === 0) { + callback(this.response); + } + }; + http.send(); + } catch (e) { + console.warn(e) + } +} + + +function getImageData(img : File, callback : Function) { + function handleBinaryFile(binFile: ArrayBuffer) { + const data = findEXIFinJPEG(binFile); + img.exifdata = data ?? {}; + const iptcdata = findIPTCinJPEG(binFile); + img.iptcdata = iptcdata ?? {}; + if (exif.isXmpEnabled) { + const xmpdata = findXMPinJPEG(binFile); + img.xmpdata = xmpdata ?? {}; + } + if (callback) { + callback.call(img); + } + } + + if (img.src) { + if (/^data\:/i.test(img.src)) { // Data URI + // var arrayBuffer = base64ToArrayBuffer(img.src); + handleBinaryFile(base64ToArrayBuffer(img.src)); + + } else if (/^blob\:/i.test(img.src) && typeof FileReader !== 'undefined') { // Object URL + var fileReader = new FileReader(); + fileReader.onload = function (e) { + handleBinaryFile(e.target.result); + }; + objectURLToBlob(img.src, function (blob : Blob) { + fileReader.readAsArrayBuffer(blob); + }); + } else if (typeof XMLHttpRequest !== 'undefined') { + var http = new XMLHttpRequest(); + http.onload = function () { + if (this.status == 200 || this.status === 0) { + handleBinaryFile(http.response); + } else { + throw "Could not load image"; + } + http = null; + }; + http.open("GET", img.src, true); + http.responseType = "arraybuffer"; + http.send(null); + } else { + pathToBase64(img.src).then(res => { + handleBinaryFile(base64ToArrayBuffer(res)); + }) + } + } else if (typeof FileReader !== 'undefined' && self.FileReader && (img instanceof self.Blob || img instanceof self.File)) { + var fileReader = new FileReader(); + fileReader.onload = function (e : any) { + if (exif.debug) console.log("Got file of length " + e.target.result.byteLength); + handleBinaryFile(e.target.result); + }; + + fileReader.readAsArrayBuffer(img); + } +} + +function findEXIFinJPEG(file: ArrayBuffer) { + const dataView = new DataView(file); + + if (exif.debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (exif.debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + let offset = 2, + length = file.byteLength, + marker; + + while (offset < length) { + if (dataView.getUint8(offset) != 0xFF) { + if (exif.debug) console.log("Not a valid marker at offset " + offset + ", found: " + dataView.getUint8( + offset)); + return false; // not a valid marker, something is wrong + } + + marker = dataView.getUint8(offset + 1); + if (exif.debug) console.log(marker); + + // we could implement handling for other markers here, + // but we're only looking for 0xFFE1 for EXIF data + + if (marker == 225) { + if (exif.debug) console.log("Found 0xFFE1 marker"); + + return readEXIFData(dataView, offset + 4, dataView.getUint16(offset + 2) - 2); + + // offset += 2 + file.getShortAt(offset+2, true); + + } else { + offset += 2 + dataView.getUint16(offset + 2); + } + + } + +} + +function findIPTCinJPEG(file: ArrayBuffer) { + const dataView = new DataView(file); + + if (exif.debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (exif.debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + let offset = 2, + length = file.byteLength; + + + const isFieldSegmentStart = function (dataView, offset: number) { + return ( + dataView.getUint8(offset) === 0x38 && + dataView.getUint8(offset + 1) === 0x42 && + dataView.getUint8(offset + 2) === 0x49 && + dataView.getUint8(offset + 3) === 0x4D && + dataView.getUint8(offset + 4) === 0x04 && + dataView.getUint8(offset + 5) === 0x04 + ); + }; + + while (offset < length) { + + if (isFieldSegmentStart(dataView, offset)) { + + // Get the length of the name header (which is padded to an even number of bytes) + var nameHeaderLength = dataView.getUint8(offset + 7); + if (nameHeaderLength % 2 !== 0) nameHeaderLength += 1; + // Check for pre photoshop 6 format + if (nameHeaderLength === 0) { + // Always 4 + nameHeaderLength = 4; + } + + var startOffset = offset + 8 + nameHeaderLength; + var sectionLength = dataView.getUint16(offset + 6 + nameHeaderLength); + + return readIPTCData(file, startOffset, sectionLength); + + break; + + } + + + // Not the marker, continue searching + offset++; + + } + +} + +const IptcFieldMap = { + 0x78: 'caption', + 0x6E: 'credit', + 0x19: 'keywords', + 0x37: 'dateCreated', + 0x50: 'byline', + 0x55: 'bylineTitle', + 0x7A: 'captionWriter', + 0x69: 'headline', + 0x74: 'copyright', + 0x0F: 'category' +}; + +function readIPTCData(file: ArrayBuffer, startOffset: number, sectionLength: number) { + const dataView = new DataView(file); + let data = {}; + let fieldValue, fieldName, dataSize, segmentType, segmentSize; + let segmentStartPos = startOffset; + while (segmentStartPos < startOffset + sectionLength) { + if (dataView.getUint8(segmentStartPos) === 0x1C && dataView.getUint8(segmentStartPos + 1) === 0x02) { + segmentType = dataView.getUint8(segmentStartPos + 2); + if (segmentType in IptcFieldMap) { + dataSize = dataView.getInt16(segmentStartPos + 3); + segmentSize = dataSize + 5; + fieldName = IptcFieldMap[segmentType]; + fieldValue = getStringFromDB(dataView, segmentStartPos + 5, dataSize); + // Check if we already stored a value with this name + if (data.hasOwnProperty(fieldName)) { + // Value already stored with this name, create multivalue field + if (data[fieldName] instanceof Array) { + data[fieldName].push(fieldValue); + } else { + data[fieldName] = [data[fieldName], fieldValue]; + } + } else { + data[fieldName] = fieldValue; + } + } + + } + segmentStartPos++; + } + return data; +} + +function readTags(file: DataView, tiffStart: number, dirStart: number, strings: any[], bigEnd: number) { + let entries = file.getUint16(dirStart, !bigEnd), + tags = {}, + entryOffset, tag; + + for (let i = 0; i < entries; i++) { + entryOffset = dirStart + i * 12 + 2; + tag = strings[file.getUint16(entryOffset, !bigEnd)]; + if (!tag && exif.debug) console.log("Unknown tag: " + file.getUint16(entryOffset, !bigEnd)); + tags[tag] = readTagValue(file, entryOffset, tiffStart, dirStart, bigEnd); + } + return tags; +} + +function readTagValue(file: DataView, entryOffset: number, tiffStart: number, dirStart: number, bigEnd: number) { + let type = file.getUint16(entryOffset + 2, !bigEnd), + numValues = file.getUint32(entryOffset + 4, !bigEnd), + valueOffset = file.getUint32(entryOffset + 8, !bigEnd) + tiffStart, + offset, + vals, val, n, + numerator, denominator; + + switch (type) { + case 1: // byte, 8-bit unsigned int + case 7: // undefined, 8-bit byte, value depending on field + if (numValues == 1) { + return file.getUint8(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 4 ? valueOffset : (entryOffset + 8); + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint8(offset + n); + } + return vals; + } + + case 2: // ascii, 8-bit byte + offset = numValues > 4 ? valueOffset : (entryOffset + 8); + return getStringFromDB(file, offset, numValues - 1); + + case 3: // short, 16 bit int + if (numValues == 1) { + return file.getUint16(entryOffset + 8, !bigEnd); + } else { + offset = numValues > 2 ? valueOffset : (entryOffset + 8); + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint16(offset + 2 * n, !bigEnd); + } + return vals; + } + + case 4: // long, 32 bit int + if (numValues == 1) { + return file.getUint32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getUint32(valueOffset + 4 * n, !bigEnd); + } + return vals; + } + + case 5: // rational = two long values, first is numerator, second is denominator + if (numValues == 1) { + numerator = file.getUint32(valueOffset, !bigEnd); + denominator = file.getUint32(valueOffset + 4, !bigEnd); + val = new Number(numerator / denominator); + val.numerator = numerator; + val.denominator = denominator; + return val; + } else { + vals = []; + for (n = 0; n < numValues; n++) { + numerator = file.getUint32(valueOffset + 8 * n, !bigEnd); + denominator = file.getUint32(valueOffset + 4 + 8 * n, !bigEnd); + vals[n] = new Number(numerator / denominator); + vals[n].numerator = numerator; + vals[n].denominator = denominator; + } + return vals; + } + + case 9: // slong, 32 bit signed int + if (numValues == 1) { + return file.getInt32(entryOffset + 8, !bigEnd); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getInt32(valueOffset + 4 * n, !bigEnd); + } + return vals; + } + + case 10: // signed rational, two slongs, first is numerator, second is denominator + if (numValues == 1) { + return file.getInt32(valueOffset, !bigEnd) / file.getInt32(valueOffset + 4, !bigEnd); + } else { + vals = []; + for (n = 0; n < numValues; n++) { + vals[n] = file.getInt32(valueOffset + 8 * n, !bigEnd) / file.getInt32(valueOffset + 4 + 8 * + n, !bigEnd); + } + return vals; + } + } +} +/** + * Given an IFD (Image File Directory) start offset + * returns an offset to next IFD or 0 if it's the last IFD. + */ +function getNextIFDOffset(dataView: DataView, dirStart: number, bigEnd: number) { + //the first 2bytes means the number of directory entries contains in this IFD + var entries = dataView.getUint16(dirStart, !bigEnd); + + // After last directory entry, there is a 4bytes of data, + // it means an offset to next IFD. + // If its value is '0x00000000', it means this is the last IFD and there is no linked IFD. + + return dataView.getUint32(dirStart + 2 + entries * 12, !bigEnd); // each entry is 12 bytes long +} + +function readThumbnailImage(dataView: DataView, tiffStart: number, firstIFDOffset: number, bigEnd: number) { + // get the IFD1 offset + const IFD1OffsetPointer = getNextIFDOffset(dataView, tiffStart + firstIFDOffset, bigEnd); + + if (!IFD1OffsetPointer) { + // console.log('******** IFD1Offset is empty, image thumb not found ********'); + return {}; + } else if (IFD1OffsetPointer > dataView.byteLength) { // this should not happen + // console.log('******** IFD1Offset is outside the bounds of the DataView ********'); + return {}; + } + // console.log('******* thumbnail IFD offset (IFD1) is: %s', IFD1OffsetPointer); + + let thumbTags : any = readTags(dataView, tiffStart, tiffStart + IFD1OffsetPointer, IFD1Tags, bigEnd) + + // EXIF 2.3 specification for JPEG format thumbnail + + // If the value of Compression(0x0103) Tag in IFD1 is '6', thumbnail image format is JPEG. + // Most of Exif image uses JPEG format for thumbnail. In that case, you can get offset of thumbnail + // by JpegIFOffset(0x0201) Tag in IFD1, size of thumbnail by JpegIFByteCount(0x0202) Tag. + // Data format is ordinary JPEG format, starts from 0xFFD8 and ends by 0xFFD9. It seems that + // JPEG format and 160x120pixels of size are recommended thumbnail format for Exif2.1 or later. + + if (thumbTags['Compression'] && typeof Blob !== 'undefined') { + // console.log('Thumbnail image found!'); + + switch (thumbTags['Compression']) { + case 6: + // console.log('Thumbnail image format is JPEG'); + if (thumbTags.JpegIFOffset && thumbTags.JpegIFByteCount) { + // extract the thumbnail + var tOffset = tiffStart + thumbTags.JpegIFOffset; + var tLength = thumbTags.JpegIFByteCount; + thumbTags['blob'] = new Blob([new Uint8Array(dataView.buffer, tOffset, tLength)], { + type: 'image/jpeg' + }); + } + break; + + case 1: + console.log("Thumbnail image format is TIFF, which is not implemented."); + break; + default: + console.log("Unknown thumbnail image format '%s'", thumbTags['Compression']); + } + } else if (thumbTags['PhotometricInterpretation'] == 2) { + console.log("Thumbnail image format is RGB, which is not implemented."); + } + return thumbTags; +} + +function getStringFromDB(buffer: DataView, start: number, length: number) { + let outstr = ""; + for (let n = start; n < start + length; n++) { + outstr += String.fromCharCode(buffer.getUint8(n)); + } + return outstr; +} + +function readEXIFData(file: DataView, start: number) { + if (getStringFromDB(file, start, 4) != "Exif") { + if (exif.debug) console.log("Not valid EXIF data! " + getStringFromDB(file, start, 4)); + return false; + } + + let bigEnd, + tags, tag, + exifData, gpsData, + tiffOffset = start + 6; + + // test for TIFF validity and endianness + if (file.getUint16(tiffOffset) == 0x4949) { + bigEnd = false; + } else if (file.getUint16(tiffOffset) == 0x4D4D) { + bigEnd = true; + } else { + if (exif.debug) console.log("Not valid TIFF data! (no 0x4949 or 0x4D4D)"); + return false; + } + + if (file.getUint16(tiffOffset + 2, !bigEnd) != 0x002A) { + if (exif.debug) console.log("Not valid TIFF data! (no 0x002A)"); + return false; + } + + const firstIFDOffset = file.getUint32(tiffOffset + 4, !bigEnd); + + if (firstIFDOffset < 0x00000008) { + if (exif.debug) console.log("Not valid TIFF data! (First offset less than 8)", file.getUint32(tiffOffset + 4, + !bigEnd)); + return false; + } + + tags = readTags(file, tiffOffset, tiffOffset + firstIFDOffset, TiffTags, bigEnd); + + if (tags.ExifIFDPointer) { + exifData = readTags(file, tiffOffset, tiffOffset + tags.ExifIFDPointer, ExifTags, bigEnd); + for (tag in exifData) { + switch (tag) { + case "LightSource": + case "Flash": + case "MeteringMode": + case "ExposureProgram": + case "SensingMethod": + case "SceneCaptureType": + case "SceneType": + case "CustomRendered": + case "WhiteBalance": + case "GainControl": + case "Contrast": + case "Saturation": + case "Sharpness": + case "SubjectDistanceRange": + case "FileSource": + exifData[tag] = StringValues[tag][exifData[tag]]; + break; + + case "ExifVersion": + case "FlashpixVersion": + exifData[tag] = String.fromCharCode(exifData[tag][0], exifData[tag][1], exifData[tag][2], + exifData[tag][3]); + break; + + case "ComponentsConfiguration": + exifData[tag] = + StringValues.Components[exifData[tag][0]] + + StringValues.Components[exifData[tag][1]] + + StringValues.Components[exifData[tag][2]] + + StringValues.Components[exifData[tag][3]]; + break; + } + tags[tag] = exifData[tag]; + } + } + + if (tags.GPSInfoIFDPointer) { + gpsData = readTags(file, tiffOffset, tiffOffset + tags.GPSInfoIFDPointer, GPSTags, bigEnd); + for (tag in gpsData) { + switch (tag) { + case "GPSVersionID": + gpsData[tag] = gpsData[tag][0] + + "." + gpsData[tag][1] + + "." + gpsData[tag][2] + + "." + gpsData[tag][3]; + break; + } + tags[tag] = gpsData[tag]; + } + } + + // extract thumbnail + tags['thumbnail'] = readThumbnailImage(file, tiffOffset, firstIFDOffset, bigEnd); + + return tags; +} + +function findXMPinJPEG(file: ArrayBuffer) { + + if (!('DOMParser' in self)) { + // console.warn('XML parsing not supported without DOMParser'); + return; + } + const dataView = new DataView(file); + + if (exif.debug) console.log("Got file of length " + file.byteLength); + if ((dataView.getUint8(0) != 0xFF) || (dataView.getUint8(1) != 0xD8)) { + if (exif.debug) console.log("Not a valid JPEG"); + return false; // not a valid jpeg + } + + let offset = 2, + length = file.byteLength, + dom = new DOMParser(); + + while (offset < (length - 4)) { + if (getStringFromDB(dataView, offset, 4) == "http") { + const startOffset = offset - 1; + const sectionLength = dataView.getUint16(offset - 2) - 1; + let xmpString = getStringFromDB(dataView, startOffset, sectionLength) + const xmpEndIndex = xmpString.indexOf('xmpmeta>') + 8; + xmpString = xmpString.substring(xmpString.indexOf(' 0) { + json['@attributes'] = {}; + for (var j = 0; j < xml.attributes.length; j++) { + var attribute = xml.attributes.item(j); + json['@attributes'][attribute.nodeName] = attribute.nodeValue; + } + } + } else if (xml.nodeType == 3) { // text node + return xml.nodeValue; + } + + // deal with children + if (xml.hasChildNodes()) { + for (var i = 0; i < xml.childNodes.length; i++) { + var child = xml.childNodes.item(i); + var nodeName = child.nodeName; + if (json[nodeName] == null) { + json[nodeName] = xml2json(child); + } else { + if (json[nodeName].push == null) { + var old = json[nodeName]; + json[nodeName] = []; + json[nodeName].push(old); + } + json[nodeName].push(xml2json(child)); + } + } + } + + return json; +} + +function xml2Object(xml: any) { + try { + var obj = {}; + if (xml.children.length > 0) { + for (var i = 0; i < xml.children.length; i++) { + var item = xml.children.item(i); + var attributes = item.attributes; + for (var idx in attributes) { + var itemAtt = attributes[idx]; + var dataKey = itemAtt.nodeName; + var dataValue = itemAtt.nodeValue; + + if (dataKey !== undefined) { + obj[dataKey] = dataValue; + } + } + var nodeName = item.nodeName; + + if (typeof (obj[nodeName]) == "undefined") { + obj[nodeName] = xml2json(item); + } else { + if (typeof (obj[nodeName].push) == "undefined") { + var old = obj[nodeName]; + + obj[nodeName] = []; + obj[nodeName].push(old); + } + obj[nodeName].push(xml2json(item)); + } + } + } else { + obj = xml.textContent; + } + return obj; + } catch (e) { + console.log(e.message); + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/fillArray/index.ts b/uni_modules/lime-shared/fillArray/index.ts new file mode 100644 index 0000000..9f40008 --- /dev/null +++ b/uni_modules/lime-shared/fillArray/index.ts @@ -0,0 +1,18 @@ +// @ts-nocheck +export function fillArray(length: number, value: T): T[] { + + // #ifdef APP-ANDROID + const result:T[] = [] + for (let i = 0; i < length; i++) { + result.push(value) + } + // #endif + + // #ifndef APP-ANDROID + const result = new Array(length).fill(value) + // #endif + + + + return result +} \ No newline at end of file diff --git a/uni_modules/lime-shared/fillZero/index.ts b/uni_modules/lime-shared/fillZero/index.ts new file mode 100644 index 0000000..9952c45 --- /dev/null +++ b/uni_modules/lime-shared/fillZero/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck +/** + * 在数字前填充零,返回字符串形式的结果 + * @param number 要填充零的数字 + * @param length 填充零后的字符串长度,默认为2 + * @returns 填充零后的字符串 + */ +export function fillZero(number: number, length: number = 2): string { + // 将数字转换为字符串,然后使用 padStart 方法填充零到指定长度 + return `${number}`.padStart(length, '0'); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/findLastIndex/index.ts b/uni_modules/lime-shared/findLastIndex/index.ts new file mode 100644 index 0000000..620750f --- /dev/null +++ b/uni_modules/lime-shared/findLastIndex/index.ts @@ -0,0 +1,23 @@ +// @/uni_modules/lime-shared/arrayUtils.ts + +/** + * 兼容版 findLastIndex(ES2023 polyfill) + */ +export function findLastIndex( + array : T[], + predicate : (value : T, index : number, obj : T[]) => boolean) : number { + + // #ifndef UNI-APP-X && APP-ANDROID + if (typeof array.findLastIndex == 'function') { + // 如果原生支持,直接用(未来兼容) + return array.findLastIndex(predicate); + } + // #endif + // 否则降级到 for 循环 + for (let i = array.length - 1; i >= 0; i--) { + if (predicate(array[i], i, array)) { + return i; + } + } + return -1; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/floatAdd/index.ts b/uni_modules/lime-shared/floatAdd/index.ts new file mode 100644 index 0000000..13557f8 --- /dev/null +++ b/uni_modules/lime-shared/floatAdd/index.ts @@ -0,0 +1,27 @@ +import { isNumber } from '../isNumber' +/** + * 返回两个浮点数相加的结果 + * @param num1 第一个浮点数 + * @param num2 第二个浮点数 + * @returns 两个浮点数的相加结果 + */ +export function floatAdd(num1 : number, num2 : number) : number { + // 检查 num1 和 num2 是否为数字类型 + if (!isNumber(num1) || !isNumber(num2)) { + console.warn('Please pass in the number type'); + return NaN; + } + + const getDecimalLen = (n: number):number => { + const arr = n.toString().split('.') + if(arr.length > 0) return arr[1].length + return 0 + }; + const r1 = getDecimalLen(num1); + const r2 = getDecimalLen(num2); + + // 计算需要扩大的倍数 + const m = Math.pow(10, Math.max(r1, r2)); + // 返回相加结果 + return Math.round((num1 * m + num2 * m)) / m; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/floatDiv/index.ts b/uni_modules/lime-shared/floatDiv/index.ts new file mode 100644 index 0000000..195d4ab --- /dev/null +++ b/uni_modules/lime-shared/floatDiv/index.ts @@ -0,0 +1,45 @@ +import { floatMul } from '../floatMul'; +import { isNumber } from '../isNumber'; + +/** + * 除法函数,用于处理浮点数除法并保持精度。 + * @param {number} num1 - 被除数。 + * @param {number} num2 - 除数。 + * @returns {number} 除法运算的结果,保留正确的精度。 + */ +export function floatDiv(num1:number, num2:number):number { + // 如果传入的不是数字类型,则打印警告并返回NaN + if (!isNumber(num1) || !isNumber(num2)) { + console.warn('请传入数字类型'); + return NaN; + } + + let m1 = 0, // 被除数小数点后的位数 + m2 = 0, // 除数小数点后的位数 + s1 = num1.toString(), // 将被除数转换为字符串 + s2 = num2.toString(); // 将除数转换为字符串 + + // 计算被除数小数点后的位数 + try { + m1 += s1.split('.')[1].length; + } catch (error) {} + + // 计算除数小数点后的位数 + try { + m2 += s2.split('.')[1].length; + } catch (error) {} + + // 进行除法运算并处理小数点后的位数,使用之前定义的乘法函数保持精度 + // #ifdef APP-ANDROID + return floatMul( + parseFloat(s1.replace('.', '')) / parseFloat(s2.replace('.', '')), + Math.pow(10, m2 - m1), + ); + // #endif + // #ifndef APP-ANDROID + return floatMul( + Number(s1.replace('.', '')) / Number(s2.replace('.', '')), + Math.pow(10, m2 - m1), + ); + // #endif +} diff --git a/uni_modules/lime-shared/floatMul/index.ts b/uni_modules/lime-shared/floatMul/index.ts new file mode 100644 index 0000000..51a867e --- /dev/null +++ b/uni_modules/lime-shared/floatMul/index.ts @@ -0,0 +1,44 @@ +// @ts-nocheck +import {isNumber} from '../isNumber'; +// #ifdef APP-ANDROID +import BigDecimal from 'java.math.BigDecimal' +// import BigDecimal from 'java.math.BigDecimal' +// import StringBuilder from 'java.lang.StringBuilder' +// import java.math.BigDecimal; +// #endif + +/** + * 乘法函数,用于处理浮点数乘法并保持精度。 + * @param {number} num1 - 第一个乘数。 + * @param {number} num2 - 第二个乘数。 + * @returns {number} 乘法运算的结果,保留正确的精度。 + */ +export function floatMul(num1 : number, num2 : number) : number { + if (!(isNumber(num1) || isNumber(num2))) { + console.warn('Please pass in the number type'); + return NaN; + } + let m = 0; + // #ifdef APP-ANDROID + let s1 = BigDecimal.valueOf(num1.toDouble()).toPlainString(); //new UTSNumber(num1).toString() // //`${num1.toFloat()}`// num1.toString(), + let s2 = BigDecimal.valueOf(num2.toDouble()).toPlainString(); //new UTSNumber(num2).toString() //`${num2.toFloat()}`//.toString(); + // #endif + // #ifndef APP-ANDROID + let s1:string = `${num1}`// num1.toString(), + let s2:string = `${num2}`//.toString(); + // #endif + + try { + m += s1.split('.')[1].length; + } catch (error) { } + try { + m += s2.split('.')[1].length; + } catch (error) { } + + // #ifdef APP-ANDROID + return parseFloat(s1.replace('.', '')) * parseFloat(s2.replace('.', '')) / Math.pow(10, m); + // #endif + // #ifndef APP-ANDROID + return Number(s1.replace('.', '')) * Number(s2.replace('.', '')) / Math.pow(10, m); + // #endif +} diff --git a/uni_modules/lime-shared/floatSub/index.ts b/uni_modules/lime-shared/floatSub/index.ts new file mode 100644 index 0000000..9bc25cb --- /dev/null +++ b/uni_modules/lime-shared/floatSub/index.ts @@ -0,0 +1,32 @@ +import { isNumber } from '../isNumber'; +/** + * 减法函数,用于处理浮点数减法并保持精度。 + * @param {number} num1 - 被减数。 + * @param {number} num2 - 减数。 + * @returns {number} 减法运算的结果,保留正确的精度。 + */ +export function floatSub(num1 : number, num2 : number) : number { + if (!(isNumber(num1) || isNumber(num2))) { + console.warn('Please pass in the number type'); + return NaN; + } + let r1:number, r2:number, m:number, n:number; + try { + r1 = num1.toString().split('.')[1].length; + } catch (error) { + r1 = 0; + } + try { + r2 = num2.toString().split('.')[1].length; + } catch (error) { + r2 = 0; + } + m = Math.pow(10, Math.max(r1, r2)); + n = r1 >= r2 ? r1 : r2; + // #ifndef APP-ANDROID + return Number(((num1 * m - num2 * m) / m).toFixed(n)); + // #endif + // #ifdef APP-ANDROID + return parseFloat(((num1 * m - num2 * m) / m).toFixed(n)); + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/getClassStr/index.ts b/uni_modules/lime-shared/getClassStr/index.ts new file mode 100644 index 0000000..34a26d2 --- /dev/null +++ b/uni_modules/lime-shared/getClassStr/index.ts @@ -0,0 +1,53 @@ +// @ts-nocheck + +// #ifdef UNI-APP-X && APP +import { isNumber } from '../isNumber' +import { isString } from '../isString' +import { isDef } from '../isDef' +// #endif + +/** + * 获取对象的类名字符串 + * @param obj - 需要处理的对象 + * @returns 由对象属性作为类名组成的字符串 + */ +export function getClassStr(obj : T) : string { + let classNames : string[] = []; + // #ifdef APP-ANDROID + if (obj instanceof UTSJSONObject) { + (obj as UTSJSONObject).toMap().forEach((value, key) => { + if (isDef(value)) { + if (isNumber(value)) { + classNames.push(key); + } + if (isString(value) && value !== '') { + classNames.push(key); + } + if (typeof value == 'boolean' && (value as boolean)) { + classNames.push(key); + } + } + }) + } + // #endif + // #ifndef APP-ANDROID + // 遍历对象的属性 + for (let key in obj) { + // 检查属性确实属于对象自身且其值为true + if ((obj as any).hasOwnProperty(key) && obj[key]) { + // 将属性名添加到类名数组中 + classNames.push(key); + } + } + // #endif + + + // 将类名数组用空格连接成字符串并返回 + return classNames.join(' '); +} + + +// 示例 +// const obj = { foo: true, bar: false, baz: true }; +// const classNameStr = getClassStr(obj); +// console.log(classNameStr); // 输出: "foo baz" \ No newline at end of file diff --git a/uni_modules/lime-shared/getCurrentPage/index.ts b/uni_modules/lime-shared/getCurrentPage/index.ts new file mode 100644 index 0000000..dd8dcb5 --- /dev/null +++ b/uni_modules/lime-shared/getCurrentPage/index.ts @@ -0,0 +1,9 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +export { getCurrentPage } from './vue' +// #endif + + +// #ifdef UNI-APP-X && APP +export { getCurrentPage } from './uvue' +// #endif diff --git a/uni_modules/lime-shared/getCurrentPage/uvue.ts b/uni_modules/lime-shared/getCurrentPage/uvue.ts new file mode 100644 index 0000000..9e96d2b --- /dev/null +++ b/uni_modules/lime-shared/getCurrentPage/uvue.ts @@ -0,0 +1,5 @@ +// @ts-nocheck +export const getCurrentPage = ():Page => { + const pages = getCurrentPages(); + return pages[pages.length - 1] +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/getCurrentPage/uvue.uts b/uni_modules/lime-shared/getCurrentPage/uvue.uts new file mode 100644 index 0000000..9e96d2b --- /dev/null +++ b/uni_modules/lime-shared/getCurrentPage/uvue.uts @@ -0,0 +1,5 @@ +// @ts-nocheck +export const getCurrentPage = ():Page => { + const pages = getCurrentPages(); + return pages[pages.length - 1] +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/getCurrentPage/vue.ts b/uni_modules/lime-shared/getCurrentPage/vue.ts new file mode 100644 index 0000000..79ecac8 --- /dev/null +++ b/uni_modules/lime-shared/getCurrentPage/vue.ts @@ -0,0 +1,6 @@ +// @ts-nocheck +/** 获取当前页 */ +export const getCurrentPage = () => { + const pages = getCurrentPages(); + return pages[pages.length - 1] //as T & WechatMiniprogram.Page.TrivialInstance; +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/getDeviceInfo/index.ts b/uni_modules/lime-shared/getDeviceInfo/index.ts new file mode 100644 index 0000000..cdeee18 --- /dev/null +++ b/uni_modules/lime-shared/getDeviceInfo/index.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +export function getDeviceInfo():GetDeviceInfoResult { + // #ifndef UNI-APP-X && APP + if (uni.getDeviceInfo || uni.canIUse('getDeviceInfo')) { + return uni.getDeviceInfo(); + } else { + return uni.getSystemInfoSync(); + } + // #endif + // #ifdef UNI-APP-X && APP + return uni.getDeviceInfo() + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/getLocalFilePath/index.ts b/uni_modules/lime-shared/getLocalFilePath/index.ts new file mode 100644 index 0000000..373ece2 --- /dev/null +++ b/uni_modules/lime-shared/getLocalFilePath/index.ts @@ -0,0 +1,64 @@ +// @ts-nocheck +// #ifdef APP-NVUE || APP-VUE +export const getLocalFilePath = (path : string) => { + if (typeof plus == 'undefined') return path + if (/^(_www|_doc|_documents|_downloads|file:\/\/|\/storage\/emulated\/0\/)/.test(path)) return path + console.log(/^\//.test(path)) + if (/^\//.test(path)) { + const localFilePath = plus.io.convertAbsoluteFileSystem(path) + console.log('localFilePath', localFilePath) + if (localFilePath !== path) { + return localFilePath + } else { + path = path.slice(1) + } + } + return '_www/' + path +} +// #endif + + +// #ifdef UNI-APP-X && APP +export { getResourcePath as getLocalFilePath } from '@/uni_modules/lime-file-utils' +// export const getLocalFilePath = (path : string) : string => { +// let uri = path +// if (uri.startsWith("http") || uri.startsWith(" { +// try { +// let uri = path +// if (uri.startsWith("http") || uri.startsWith(" { + return new Promise(resolve => { + uni.createSelectorQuery() + .selectViewport() + .scrollOffset((res) => { + resolve(res); + }).exec(); + }) +} + +/** +``` + page + ╱ + ╭───────────────╮ viewport + ╭─│─ ─ ─ ─ ─ ─ ─ ─│─╮ ╱ + │ │ ╭───────────╮ │ │ + │ │ │ element │ │ │ + │ │ ╰───────────╯ │ │ + ╰─│─ ─ ─ ─ ─ ─ ─ ─│─╯ + │ │ + │ │ + ╰───────────────╯ +``` + +# 参数 +- viewportHeight: viewport 高度 +- viewportScrollTop: viewport 垂直滚动值 +- elementHeight: element 高度 +- elementOffsetTop: element 距离页面顶部距离 + +# 选项 +- position: element 在视窗中的位置(start, center, end, nearest) +- startOffset: element 距离视窗顶部的偏移量 +- endOffset: element 距离视窗底部的偏移量 + +# 结果值 +- viewportScrollTop: viewport 新的垂直滚动值 + +*/ + +export type ScrollIntoViewOptions = { + /** 元素顶部需要保留的缓冲距离(默认 0) */ + startOffset ?: number; + /** 元素底部需要保留的缓冲距离(默认 0) */ + endOffset ?: number; + /** 滚动对齐方式:start/center/end/nearest(默认 nearest) */ + position ?: 'start' | 'center' | 'end' | 'nearest'; +} + +/** + * 计算元素需要滚动到可视区域的目标滚动位置 + * @param viewportHeight 视口高度(像素) + * @param viewportScrollTop 当前滚动位置(像素) + * @param elementHeight 元素高度(像素) + * @param elementOffsetTop 元素相对于父容器顶部的偏移量(像素) + * @param options 配置选项 + * @returns 计算后的目标滚动位置(像素) + * + * @example + * // 示例:将元素滚动到视口顶部对齐 + * const scrollTop = getScrollIntoViewValue( + * 500, // 视口高度 + * 200, // 当前滚动位置 + * 100, // 元素高度 + * 300, // 元素偏移量 + * { position: 'start' } + * ); + */ +export function getScrollIntoViewValue( + viewportHeight : number, + viewportScrollTop : number, + elementHeight : number, + elementOffsetTop : number, + options : ScrollIntoViewOptions = {} +) : number { + let { startOffset = 0, endOffset = 0, position = 'nearest'} = options; + + // 计算元素相对于视口的上下偏移量 + const elementToViewportTopOffset = elementOffsetTop - viewportScrollTop - startOffset; + const elementToViewportBottomOffset = + elementOffsetTop + + elementHeight - + viewportScrollTop - + viewportHeight + + endOffset; + + // 处理 nearest 模式,自动选择最近边缘 + if (position == 'nearest') { + if (elementToViewportTopOffset >= 0 && elementToViewportBottomOffset <= 0) { + return viewportScrollTop; + } + position = + Math.abs(elementToViewportTopOffset) > Math.abs(elementToViewportBottomOffset) + ? 'end' + : 'start'; + } + + // 根据不同的对齐位置计算目标滚动位置 + let nextScrollTop = 0; + switch (position) { + case 'start': + // 顶部对齐:元素顶部对齐视口顶部(考虑顶部缓冲) + nextScrollTop = elementOffsetTop - startOffset; + break; + case 'center': + // 居中对齐:元素中心对齐视口中心(考虑上下缓冲) + nextScrollTop = + elementOffsetTop - + (viewportHeight - elementHeight - endOffset - startOffset) / 2 + + startOffset; + break; + case 'end': + // 底部对齐:元素底部对齐视口底部(考虑底部缓冲) + nextScrollTop = + elementOffsetTop + elementHeight - viewportHeight + endOffset; + break; + } + + return nextScrollTop; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/getRect/uvue.ts b/uni_modules/lime-shared/getRect/uvue.ts new file mode 100644 index 0000000..bcdaccc --- /dev/null +++ b/uni_modules/lime-shared/getRect/uvue.ts @@ -0,0 +1,35 @@ +// @ts-nocheck +/** + * 获取节点信息 + * @param selector 选择器字符串 + * @param context ComponentPublicInstance 对象,传 null 时自动使用页面级 context + * @returns 包含节点信息的 Promise 对象 + */ +export function getRect(selector : string, context: ComponentPublicInstance|null=null):Promise { + return new Promise((resolve)=>{ + if(context != null) { + uni.createSelectorQuery().in(context!).select(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo) + }).exec(); + } else { + uni.createSelectorQuery().select(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo) + }).exec(); + } + + }) +} + +export function getAllRect(selector : string, context: ComponentPublicInstance|null=null):Promise { + return new Promise((resolve)=>{ + if(context != null){ + uni.createSelectorQuery().in(context!).selectAll(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo[]) + }).exec(); + } else { + uni.createSelectorQuery().selectAll(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo[]) + }).exec(); + } + }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/getRect/uvue.uts b/uni_modules/lime-shared/getRect/uvue.uts new file mode 100644 index 0000000..05f16ee --- /dev/null +++ b/uni_modules/lime-shared/getRect/uvue.uts @@ -0,0 +1,17 @@ +// @ts-nocheck +export function getRect(selector : string, context: ComponentPublicInstance):Promise { + return new Promise((resolve)=>{ + uni.createSelectorQuery().in(context).select(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo) + }).exec(); + }) +} + +export function getAllRect(selector : string, context: ComponentPublicInstance):Promise { + return new Promise((resolve)=>{ + uni.createSelectorQuery().in(context).selectAll(selector).boundingClientRect(res =>{ + resolve(res as NodeInfo[]) + }).exec(); + }) +} + diff --git a/uni_modules/lime-shared/getRect/vue.ts b/uni_modules/lime-shared/getRect/vue.ts new file mode 100644 index 0000000..240b510 --- /dev/null +++ b/uni_modules/lime-shared/getRect/vue.ts @@ -0,0 +1,130 @@ +// @ts-nocheck + +// #ifdef APP-NVUE +// 当编译环境是 APP-NVUE 时,引入 uni.requireNativePlugin('dom'),具体插件用途未知 +const dom = uni.requireNativePlugin('dom') +// #endif + +/** + * 获取节点信息 + * @param selector 选择器字符串 + * @param context ComponentInternalInstance 对象,传 null 时自动使用页面级查询 + * @param node 是否获取node + * @returns 包含节点信息的 Promise 对象 + */ +export function getRect(selector : string, context : ComponentInternalInstance|ComponentPublicInstance|null = null, node: boolean = false) { + if(context != null) { + if(context.context){ + context = context.context + } + // #ifdef MP || VUE2 + if (context.proxy) context = context.proxy + // #endif + } + + return new Promise((resolve, reject) => { + // #ifndef APP-NVUE + let dom = context != null + ? uni.createSelectorQuery().in(context) + : uni.createSelectorQuery(); + // #ifndef MP-TOUTIAO + // #endif + dom = dom.select(selector); + const result = (rect: UniNamespace.NodeInfo) => { + if (rect) { + resolve(rect) + } else { + reject('no rect') + } + } + + if (!node) { + dom.boundingClientRect(result).exec() + } else { + dom.fields({ + node: true, + size: true, + rect: true + }, result).exec() + } + // #endif + // #ifdef APP-NVUE + if (context == null) { + reject('context is null') + return + } + const refs = context.refs || context.$refs + if (/#|\./.test(selector) && refs) { + selector = selector.replace(/#|\./, '') + if (refs[selector]) { + selector = refs[selector] + if(Array.isArray(selector)) { + selector = selector[0] + } + } + } + dom.getComponentRect(selector, (res) => { + if (res.size) { + resolve(res.size) + } else { + reject('no rect') + } + }) + // #endif + }); +}; + + +export function getAllRect(selector : string, context: ComponentInternalInstance|ComponentPublicInstance|null = null, node:boolean = false) { + if(context != null) { + // #ifdef MP || VUE2 + if (context.proxy) context = context.proxy + // #endif + } + return new Promise((resolve, reject) => { + // #ifndef APP-NVUE + const dom = context != null + ? uni.createSelectorQuery().in(context).selectAll(selector) + : uni.createSelectorQuery().selectAll(selector); + const result = (rect: UniNamespace.NodeInfo[]) => { + if (rect) { + resolve(rect) + } else { + reject('no rect') + } + } + if (!node) { + dom.boundingClientRect(result).exec() + } else { + dom.fields({ + node: true, + size: true, + rect: true + }, result).exec() + } + // #endif + // #ifdef APP-NVUE + if (context == null) { + reject('context is null') + return + } + let { context } = options + if (/#|\./.test(selector) && context.refs) { + selector = selector.replace(/#|\./, '') + if (context.refs[selector]) { + selector = context.refs[selector] + if(Array.isArray(selector)) { + selector = selector[0] + } + } + } + dom.getComponentRect(selector, (res) => { + if (res.size) { + resolve([res.size]) + } else { + reject('no rect') + } + }) + // #endif + }); +}; \ No newline at end of file diff --git a/uni_modules/lime-shared/getStyleStr/index.ts b/uni_modules/lime-shared/getStyleStr/index.ts new file mode 100644 index 0000000..665941c --- /dev/null +++ b/uni_modules/lime-shared/getStyleStr/index.ts @@ -0,0 +1,54 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +interface CSSProperties { + [key : string] : string | number | null +} +// #endif + +// #ifdef VUE3 +// #ifdef UNI-APP-X && APP +type CSSProperties = UTSJSONObject +// #endif +// #endif +/** + * 将字符串转换为带有连字符分隔的小写形式 + * @param key - 要转换的字符串 + * @returns 转换后的字符串 + */ +export function toLowercaseSeparator(key : string):string { + return key.replace(/([A-Z])/g, '-$1').toLowerCase(); +} + +/** + * 获取样式对象对应的样式字符串 + * @param style - CSS样式对象 + * @returns 由非空有效样式属性键值对组成的字符串 + */ +export function getStyleStr(style : CSSProperties) : string { + + // #ifdef UNI-APP-X && APP + let styleStr = ''; + style.toMap().forEach((value, key) => { + if(value !== null && value != '') { + styleStr += `${toLowercaseSeparator(key as string)}: ${value};` + } + }) + return styleStr + // #endif + // #ifndef UNI-APP-X && APP + return Object.keys(style) + .filter( + (key) => + style[key] !== undefined && + style[key] !== null && + style[key] !== '') + .map((key : string) => `${toLowercaseSeparator(key)}: ${style[key]};`) + .join(' '); + // #endif +} + +// 示例 +// const style = { color: 'red', fontSize: '16px', backgroundColor: '', border: null }; +// const styleStr = getStyleStr(style); +// console.log(styleStr); +// 输出: "color: red; font-size: 16px;" \ No newline at end of file diff --git a/uni_modules/lime-shared/getWindowInfo/index.ts b/uni_modules/lime-shared/getWindowInfo/index.ts new file mode 100644 index 0000000..550f37f --- /dev/null +++ b/uni_modules/lime-shared/getWindowInfo/index.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +export function getWindowInfo():GetWindowInfoResult { + // #ifndef UNI-APP-X && APP + if (uni.getWindowInfo || uni.canIUse('getWindowInfo')) { + return uni.getWindowInfo(); + } else { + return uni.getSystemInfoSync(); + } + // #endif + // #ifdef UNI-APP-X && APP + return uni.getWindowInfo() + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/guid/index.ts b/uni_modules/lime-shared/guid/index.ts new file mode 100644 index 0000000..f963cb3 --- /dev/null +++ b/uni_modules/lime-shared/guid/index.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +/** + * 生成指定长度的伪随机字符串,通常用作唯一标识符(非标准GUID) + * + * 此函数使用Math.random()生成基于36进制(数字+小写字母)的随机字符串。当长度超过11位时, + * 会通过递归拼接多个随机段实现。注意:该方法生成的并非标准GUID/UUID,不适合高安全性场景。 + * + * @param {number} [len=32] - 要生成的字符串长度,默认32位 + * @returns {string} 生成的伪随机字符串,包含0-9和a-z字符 + * + * @example + * guid(); // 返回32位字符串,例如"3zyf6a5f3kb4ayy9jq9v1a70z0qdm0bk" + * guid(5); // 返回5位字符串,例如"kf3a9" + * guid(20); // 返回20位字符串,由两段随机字符串拼接而成 + * + * @note + * 1. 由于使用Math.random(),随机性存在安全缺陷,不适用于密码学用途 + * 2. 当长度>11时采用递归拼接,可能略微影响性能(在极端大长度情况下) + * 3. 字符串补全时使用'0'填充,可能略微降低末尾字符的随机性 + */ +export function guid(len : number = 32) : string { + // crypto.randomUUID(); + // #ifdef WEB + if (typeof crypto !== 'undefined' && crypto.randomUUID) { + const uuid = crypto.randomUUID().replace(/-/g, ''); + return len === 32 ? uuid : uuid.substring(0, len); + } + // #endif + + return len <= 11 + ? Math.random() + .toString(36) + .substring(2, 2 + len) + .padEnd(len, '0') + : guid(11) + guid(len - 11); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/hasOwn/index.ts b/uni_modules/lime-shared/hasOwn/index.ts new file mode 100644 index 0000000..4d677d5 --- /dev/null +++ b/uni_modules/lime-shared/hasOwn/index.ts @@ -0,0 +1,9 @@ +// @ts-nocheck +// #ifdef UNI-APP-X && APP +export { hasOwn } from './uvue' +// #endif + + +// #ifndef UNI-APP-X && APP +export { hasOwn } from './vue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/hasOwn/uvue.ts b/uni_modules/lime-shared/hasOwn/uvue.ts new file mode 100644 index 0000000..553ccdd --- /dev/null +++ b/uni_modules/lime-shared/hasOwn/uvue.ts @@ -0,0 +1,43 @@ +// @ts-nocheck +/** + * 检查对象或数组是否具有指定的属性或键 + * @param obj 要检查的对象或数组 + * @param key 指定的属性或键 + * @returns 如果对象或数组具有指定的属性或键,则返回true;否则返回false + */ +function hasOwn(obj: UTSJSONObject, key: string): boolean +function hasOwn(obj: Map, key: string): boolean +function hasOwn(obj: any, key: string): boolean { + if(obj instanceof UTSJSONObject){ + return obj[key] != null + } + if(obj instanceof Map){ + return (obj as Map).has(key) + } + if(typeof obj == 'object') { + const obj2 = {...toRaw(obj)} + return obj2[key] != null + } + return false +} +export { + hasOwn +} +// 示例 +// const obj = { name: 'John', age: 30 }; + +// if (hasOwn(obj, 'name')) { +// console.log("对象具有 'name' 属性"); +// } else { +// console.log("对象不具有 'name' 属性"); +// } +// // 输出: 对象具有 'name' 属性 + +// const arr = [1, 2, 3]; + +// if (hasOwn(arr, 'length')) { +// console.log("数组具有 'length' 属性"); +// } else { +// console.log("数组不具有 'length' 属性"); +// } +// 输出: 数组具有 'length' 属性 \ No newline at end of file diff --git a/uni_modules/lime-shared/hasOwn/uvue.uts b/uni_modules/lime-shared/hasOwn/uvue.uts new file mode 100644 index 0000000..553ccdd --- /dev/null +++ b/uni_modules/lime-shared/hasOwn/uvue.uts @@ -0,0 +1,43 @@ +// @ts-nocheck +/** + * 检查对象或数组是否具有指定的属性或键 + * @param obj 要检查的对象或数组 + * @param key 指定的属性或键 + * @returns 如果对象或数组具有指定的属性或键,则返回true;否则返回false + */ +function hasOwn(obj: UTSJSONObject, key: string): boolean +function hasOwn(obj: Map, key: string): boolean +function hasOwn(obj: any, key: string): boolean { + if(obj instanceof UTSJSONObject){ + return obj[key] != null + } + if(obj instanceof Map){ + return (obj as Map).has(key) + } + if(typeof obj == 'object') { + const obj2 = {...toRaw(obj)} + return obj2[key] != null + } + return false +} +export { + hasOwn +} +// 示例 +// const obj = { name: 'John', age: 30 }; + +// if (hasOwn(obj, 'name')) { +// console.log("对象具有 'name' 属性"); +// } else { +// console.log("对象不具有 'name' 属性"); +// } +// // 输出: 对象具有 'name' 属性 + +// const arr = [1, 2, 3]; + +// if (hasOwn(arr, 'length')) { +// console.log("数组具有 'length' 属性"); +// } else { +// console.log("数组不具有 'length' 属性"); +// } +// 输出: 数组具有 'length' 属性 \ No newline at end of file diff --git a/uni_modules/lime-shared/hasOwn/vue.ts b/uni_modules/lime-shared/hasOwn/vue.ts new file mode 100644 index 0000000..7317879 --- /dev/null +++ b/uni_modules/lime-shared/hasOwn/vue.ts @@ -0,0 +1,30 @@ +// @ts-nocheck +const hasOwnProperty = Object.prototype.hasOwnProperty +/** + * 检查对象或数组是否具有指定的属性或键 + * @param obj 要检查的对象或数组 + * @param key 指定的属性或键 + * @returns 如果对象或数组具有指定的属性或键,则返回true;否则返回false + */ +export function hasOwn(obj: Object | Array, key: string): boolean { + return hasOwnProperty.call(obj, key); +} + +// 示例 +// const obj = { name: 'John', age: 30 }; + +// if (hasOwn(obj, 'name')) { +// console.log("对象具有 'name' 属性"); +// } else { +// console.log("对象不具有 'name' 属性"); +// } +// // 输出: 对象具有 'name' 属性 + +// const arr = [1, 2, 3]; + +// if (hasOwn(arr, 'length')) { +// console.log("数组具有 'length' 属性"); +// } else { +// console.log("数组不具有 'length' 属性"); +// } +// 输出: 数组具有 'length' 属性 \ No newline at end of file diff --git a/uni_modules/lime-shared/index.ts b/uni_modules/lime-shared/index.ts new file mode 100644 index 0000000..2eb1d94 --- /dev/null +++ b/uni_modules/lime-shared/index.ts @@ -0,0 +1,43 @@ +// @ts-nocheck +// validator +// export * from './isString' +// export * from './isNumber' +// export * from './isNumeric' +// export * from './isDef' +// export * from './isFunction' +// export * from './isObject' +// export * from './isPromise' +// export * from './isBase64' + +// export * from './hasOwn' + +// // 单位转换 +// export * from './addUnit' +// export * from './unitConvert' +// export * from './toNumber' + +// export * from './random' +// export * from './range' +// export * from './fillZero' + +// // image +// export * from './base64ToPath' +// export * from './pathToBase64' +// export * from './exif' + +// // canvas +// export * from './canIUseCanvas2d' + +// // page +// export * from './getCurrentPage' + +// // dom +// export * from './getRect' +// export * from './selectComponent' +// export * from './createAnimation' + +// // delay +// export * from './sleep' +// export * from './debounce' +// export * from './throttle' + diff --git a/uni_modules/lime-shared/index.uts b/uni_modules/lime-shared/index.uts new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/lime-shared/isBase64/index.ts b/uni_modules/lime-shared/isBase64/index.ts new file mode 100644 index 0000000..53e065d --- /dev/null +++ b/uni_modules/lime-shared/isBase64/index.ts @@ -0,0 +1,23 @@ +// @ts-nocheck + +/** + * 判断一个字符串是否为Base64编码。 + * Base64编码的字符串只包含A-Z、a-z、0-9、+、/ 和 = 这些字符。 + * @param {string} str - 要检查的字符串。 + * @returns {boolean} 如果字符串是Base64编码,返回true,否则返回false。 + */ +export function isBase64(str: string): boolean { + const base64Regex = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; + return base64Regex.test(str); +} + +/** + * 判断一个字符串是否为Base64编码的data URI。 + * Base64编码的data URI通常以"data:"开头,后面跟着MIME类型和编码信息,然后是Base64编码的数据。 + * @param {string} str - 要检查的字符串。 + * @returns {boolean} 如果字符串是Base64编码的data URI,返回true,否则返回false。 + */ +export function isDataURI(str: string): boolean { + const dataUriRegex = /^data:([a-zA-Z]+\/[a-zA-Z0-9-+.]+)(;base64)?,([a-zA-Z0-9+/]+={0,2})$/; + return dataUriRegex.test(str); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isBoolean/index.ts b/uni_modules/lime-shared/isBoolean/index.ts new file mode 100644 index 0000000..93db565 --- /dev/null +++ b/uni_modules/lime-shared/isBoolean/index.ts @@ -0,0 +1,25 @@ +// @ts-nocheck +/** + * 检查一个值是否为严格的布尔值(仅限 `true` 或 `false`) + * + * @example + * isBoolean(true); // true + * isBoolean(false); // true + * isBoolean(0); // false + * isBoolean(null); // false + * + * @param {unknown} value - 要检查的值 + * @returns {value is boolean} 如果值是 `true` 或 `false` 则返回 `true`,否则返回 `false` + * + * @description + * 此函数使用严格相等(`===`)检查,避免隐式类型转换。 + * 注意:不适用于 `Boolean` 包装对象(如 `new Boolean(true)`)。 + */ +export function isBoolean(value: any|null): boolean { + // #ifdef APP-ANDROID + return value == true || value == false + // #endif + // #ifndef APP-ANDROID + return value === true || value === false + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isBrowser/index.ts b/uni_modules/lime-shared/isBrowser/index.ts new file mode 100644 index 0000000..6baee2b --- /dev/null +++ b/uni_modules/lime-shared/isBrowser/index.ts @@ -0,0 +1,8 @@ +// @ts-nocheck +// #ifdef WEB +export const isBrowser = typeof window !== 'undefined'; +// #endif + +// #ifndef WEB +export const isBrowser = false; +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/isByteLength/index.ts b/uni_modules/lime-shared/isByteLength/index.ts new file mode 100644 index 0000000..73774d8 --- /dev/null +++ b/uni_modules/lime-shared/isByteLength/index.ts @@ -0,0 +1,86 @@ +// @ts-nocheck +// import assertString from './util/assertString'; + +/** + * 字节长度验证配置选项 + */ +export type IsByteLengthOptions = { + /** 允许的最小字节长度 */ + min ?: number; + /** 允许的最大字节长度 */ + max ?: number; +} + +/** + * 检查字符串字节长度是否在指定范围内 + * @function + * @overload 使用配置对象 + * @param str - 要检查的字符串 + * @param options - 配置选项对象 + * @returns 是否满足字节长度要求 + * + * @overload 使用独立参数 + * @param str - 要检查的字符串 + * @param min - 最小字节长度 + * @param max - 最大字节长度(可选) + * @returns 是否满足字节长度要求 + * + * @example + * // 使用配置对象 + * isByteLength('🇨🇳', { min: 4, max: 8 }); // true(unicode 国旗符号占 8 字节) + * + * @example + * // 旧式参数调用 + * isByteLength('hello', 3, 7); // true(实际字节长度 5) + * + * @description + * 1. 使用 URL 编码计算字节长度(更准确处理多字节字符) + * 2. 同时支持两种参数格式: + * - 配置对象格式 { min, max } + * - 独立参数格式 (min, max) + * 3. 不传 max 参数时只验证最小长度 + * 4. 严格空值处理,允许设置 0 值 + */ +export function isByteLength(str : string, optionsOrMin ?: IsByteLengthOptions) : boolean; +export function isByteLength(str : string, optionsOrMin ?: number) : boolean; +export function isByteLength(str : string, optionsOrMin : number, maxParam : number | null) : boolean; +export function isByteLength( + str : string, + optionsOrMin ?: IsByteLengthOptions | number, + maxParam : number | null = null +) : boolean { + // assertString(str); + + /** 最终计算的最小长度 */ + let min: number; + + /** 最终计算的最大长度 */ + let max : number | null; + + // 参数逻辑处理 + if (optionsOrMin != null && typeof optionsOrMin == 'object') { + // 使用对象配置的情况 + const options = optionsOrMin as IsByteLengthOptions; + min = Math.max(options.min ?? 0, 0); // 确保最小值为正整数 + max = options.max; + } else { + // 使用独立参数的情况 + min = Math.max( + typeof optionsOrMin == 'number' ? optionsOrMin : 0, + 0 + ); + max = maxParam; + } + + // URL 编码后的字节长度计算 + const encoded = encodeURI(str); + const len = (encoded?.split(/%..|./).length ?? 0) - 1; + + // 执行验证逻辑 + // #ifndef APP-ANDROID + return len >= min && (typeof max == 'undefined' || len <= (max ?? 0)); + // #endif + // #ifdef APP-ANDROID + return len >= min && (max == null || len <= max); + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isDate/index.ts b/uni_modules/lime-shared/isDate/index.ts new file mode 100644 index 0000000..7ed893c --- /dev/null +++ b/uni_modules/lime-shared/isDate/index.ts @@ -0,0 +1,189 @@ +// @ts-nocheck + +/** + * 日期验证配置选项 + */ +export type IsDateOptions = { + /** 日期格式字符串,默认 'YYYY/MM/DD' */ + format ?: string; + /** 允许的分隔符数组,默认 ['/', '-'] */ + delimiters ?: string[]; + /** 是否严格匹配格式,默认 false */ + strictMode ?: boolean; +} + +/** + * 验证日期格式字符串是否合法 + * @param format - 需要验证的格式字符串 + * @returns 是否合法格式 + */ +function isValidFormat(format : string) : boolean { + return /(^(y{4}|y{2})[年./-](m{1,2})[月./-](d{1,2}(日)?)$)|(^(m{1,2})[./-](d{1,2})[./-]((y{4}|y{2})$))|(^(d{1,2})[./-](m{1,2})[./-]((y{4}|y{2})$))/i.test(format); +} + +/** + * 将日期部分和格式部分组合成键值对数组 + * @param date - 分割后的日期部分数组 + * @param format - 分割后的格式部分数组 + * @returns 组合后的二维数组 + */ +function zip(date : string[], format : string[]) : string[][] { + const zippedArr : string[][] = []; + const len = Math.max(date.length, format.length); + + for (let i = 0; i < len; i++) { + const key = i < date.length ? date[i] : '' + const value = i < format.length ? format[i] : '' + + zippedArr.push([key, value]) + } + + return zippedArr; +} + + +/** 验证日期对象 */ +function validateDateObject(date : Date, strictMode : boolean) : boolean { + // #ifndef APP-ANDROID + return !strictMode && Object.prototype.toString.call(date) === '[object Date]' && !isNaN(date.getTime()); + // #endif + // #ifdef APP-ANDROID + return !strictMode && !isNaN(date.getTime()) + // #endif +} + + +function escapeRegExp(str: string): string { + return str//.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} + +function enhancedSplit( + str: string, + delimiters: string[] +): string[] { + // 构建动态分隔符正则表达式 + const escapedDelimiters = delimiters.map(d => escapeRegExp(d)); + const pattern = new RegExp( + `[${escapedDelimiters.join('')}]+`, // 匹配任意允许的分隔符 + 'g' + ); + + return str.split(pattern).filter(p => p != ''); +} + +/** + * 验证输入是否为有效日期 + * @param input - 输入值,可以是字符串或 Date 对象 + * @param options - 配置选项,可以是字符串(简写格式)或配置对象 + * @returns 是否为有效日期 + * + * @example + * isDate('2023/12/31'); // true + * isDate(new Date()); // true + * isDate('02-29-2023', { strictMode: true }); // false(2023年不是闰年) + */ +export function isDate(input : Date, options ?: IsDateOptions) : boolean; +export function isDate(input : string, options ?: string | IsDateOptions) : boolean; +export function isDate(input : string | Date, options : string | IsDateOptions | null = null) : boolean { + // 处理参数重载:允许第二个参数直接传格式字符串 + // Date对象验证 + + + let format = 'YYYY/MM/DD' + let delimiters = ['/', '-'] + let strictMode = false + + + if (options != null) { + if (typeof options == 'string') { + format = options as string + } else { + format = (options as IsDateOptions).format ?? format + delimiters = (options as IsDateOptions).delimiters ?? delimiters + strictMode = (options as IsDateOptions).strictMode ?? strictMode + } + } + if (input instanceof Date) { + return validateDateObject(input, strictMode); + } + + + // 字符串类型验证 + if (!isValidFormat(format)) return false; + // 严格模式长度检查 + if (strictMode && input.length != format.length) { + return false; + } + // 获取格式中的分隔符 + const formatDelimiter = delimiters.find((d) : boolean => format.indexOf(d) != -1); + // 获取实际使用的分隔符 + const dateDelimiter = strictMode + ? formatDelimiter + : delimiters.find((d) : boolean => input.indexOf(d) != -1); + // 分割日期和格式 + const dateParts = strictMode ? enhancedSplit(input, delimiters) : input.split(dateDelimiter ?? ''); + const formatParts = strictMode ? enhancedSplit(format.toLowerCase(), delimiters) : format.toLowerCase().split(formatDelimiter ?? ''); + // 组合成键值对 + const dateAndFormat = zip(dateParts, formatParts); + const dateObj = new Map(); + + + // 解析日期组成部分 + for (const [dateWord, formatWord] of dateAndFormat) { + if (dateWord == '' || formatWord == '' || dateWord.length != formatWord.length) { + return false; + } + dateObj.set(formatWord.charAt(0), dateWord) + } + + // 年份处理 + let fullYear = dateObj.get('y'); + + if (fullYear == null) return false; + + // 检查年份前导负号 + if (fullYear.startsWith('-')) return false; + + // 两位年份转四位 + if (fullYear.length == 2) { + const parsedYear = parseInt(fullYear, 10); + + if (isNaN(parsedYear)) { + return false; + } + + const currentYear = new Date().getFullYear(); + const century = currentYear - (currentYear % 100); + fullYear = (parseInt(fullYear, 10) < (currentYear % 100)) + ? `${century + 100 + parseInt(fullYear, 10)}` + : `${century + parseInt(fullYear, 10)}`; + } + + // 月份补零 + const month = dateObj.get('m')?.padStart(2, '0') ?? ''; + // 日期补零 + const day = dateObj.get('d')?.padStart(2, '0') ?? ''; + + const isoDate = `${fullYear}-${month}-${day}T00:00:00.000Z`; + + // return new Date(time).getDate() == parseInt(day); + + // 构造 ISO 日期字符串验证 + try { + // #ifndef APP-ANDROID + const date = new Date(isoDate); + return date.getUTCDate() === parseInt(day, 10) && + (date.getUTCMonth() + 1) === parseInt(month, 10) && + date.getUTCFullYear() === parseInt(fullYear, 10); + // #endif + // #ifdef APP-ANDROID + const date = new Date(isoDate); + return date.getDate() == parseInt(day, 10) && + (date.getMonth() + 1) == parseInt(month, 10) && + date.getFullYear() == parseInt(fullYear, 10); + // #endif + } catch(e) { + return false; + } + +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isDef/index.ts b/uni_modules/lime-shared/isDef/index.ts new file mode 100644 index 0000000..f8ca9bc --- /dev/null +++ b/uni_modules/lime-shared/isDef/index.ts @@ -0,0 +1,23 @@ +// @ts-nocheck +/** + * 检查一个值是否已定义(不为 undefined)且不为 null + * @param value 要检查的值 + * @returns 如果值已定义且不为 null,则返回 true;否则返回 false + */ +// #ifndef UNI-APP-X +export function isDef(value: unknown): boolean { + return value !== undefined && value !== null; +} +// #endif + + +// #ifdef UNI-APP-X +export function isDef(value : any|null) : boolean { + // #ifdef UNI-APP-X && APP + return value != null; + // #endif + // #ifndef UNI-APP-X && APP + return value != null && value != undefined; + // #endif +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/isEmail/index.ts b/uni_modules/lime-shared/isEmail/index.ts new file mode 100644 index 0000000..01f78d4 --- /dev/null +++ b/uni_modules/lime-shared/isEmail/index.ts @@ -0,0 +1,11 @@ +// @ts-nocheck + +/** + * 验证电子邮件地址格式 + * @param email - 要验证的字符串 + * @returns 是否通过验证 + */ +export function isEmail(email : string) : boolean { + const emailRegex = /\S+@\S+\.\S+/; + return emailRegex.test(email); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isEmpty/index.ts b/uni_modules/lime-shared/isEmpty/index.ts new file mode 100644 index 0000000..2e89acb --- /dev/null +++ b/uni_modules/lime-shared/isEmpty/index.ts @@ -0,0 +1,81 @@ +// @ts-nocheck +import {isDef} from '../isDef' +import {isString} from '../isString' +import {isNumber} from '../isNumber' +/** + * 判断一个值是否为空。 + * + * 对于字符串,去除首尾空格后判断长度是否为0。 + * 对于数组,判断长度是否为0。 + * 对于对象,判断键的数量是否为0。 + * 对于null或undefined,直接返回true。 + * 其他类型(如数字、布尔值等)默认不为空。 + * + * @param {any} value - 要检查的值。 + * @returns {boolean} 如果值为空,返回true,否则返回false。 + */ + + +// #ifdef UNI-APP-X && APP +export function isEmpty(value : any | null) : boolean { + // 为null + if(!isDef(value)){ + return true + } + // 为空字符 + if(isString(value)){ + return value.toString().trim().length == 0 + } + // 为数值 + if(isNumber(value)){ + return false + } + if(typeof value == 'object'){ + // 数组 + if(Array.isArray(value)){ + return (value as Array).length == 0 + } + // Map + if(value instanceof Map) { + return value.size == 0 + } + // Set + if(value instanceof Set) { + return value.size == 0 + } + if(value instanceof UTSJSONObject) { + return value.toMap().size == 0 + } + return JSON.stringify(value) == '{}' + } + return false +} +// #endif + + +// #ifndef UNI-APP-X && APP +export function isEmpty(value: any): boolean { + // 检查是否为null或undefined + if (value == null || value == undefined || value == '') { + return true; + } + + // 检查字符串是否为空 + if (typeof value === 'string') { + return value.trim().length === 0; + } + + // 检查数组是否为空 + if (Array.isArray(value)) { + return value.length === 0; + } + + // 检查对象是否为空 + if (typeof value === 'object') { + return Object.keys(value).length === 0; + } + + // 其他类型(如数字、布尔值等)不为空 + return false; +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/isFunction/index.ts b/uni_modules/lime-shared/isFunction/index.ts new file mode 100644 index 0000000..12605c3 --- /dev/null +++ b/uni_modules/lime-shared/isFunction/index.ts @@ -0,0 +1,16 @@ +// @ts-nocheck +/** + * 检查一个值是否为函数类型 + * @param val 要检查的值 + * @returns 如果值的类型是函数类型,则返回 true;否则返回 false + */ + +// #ifdef UNI-APP-X && APP +export const isFunction = (val: any):boolean => typeof val == 'function'; + // #endif + + +// #ifndef UNI-APP-X && APP +export const isFunction = (val: unknown): val is Function => + typeof val === 'function'; +// #endif diff --git a/uni_modules/lime-shared/isIP/index.ts b/uni_modules/lime-shared/isIP/index.ts new file mode 100644 index 0000000..6f4e964 --- /dev/null +++ b/uni_modules/lime-shared/isIP/index.ts @@ -0,0 +1,64 @@ +// @ts-nocheck + +// #ifndef UNI-APP-X && APP +type UTSJSONObject = { + version : string | number | null; +}; +// #endif +// #ifdef UNI-APP-X && APP +// type Options = UTSJSONObject +// #endif + +const IPv4SegmentFormat = '(?:[0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])'; +const IPv4AddressFormat = `(${IPv4SegmentFormat}\\.){3}${IPv4SegmentFormat}`; +const IPv4AddressRegExp = new RegExp(`^${IPv4AddressFormat}$`); + +const IPv6SegmentFormat = '(?:[0-9a-fA-F]{1,4})'; +const IPv6AddressRegExp = new RegExp( + '^(' + + `(?:${IPv6SegmentFormat}:){7}(?:${IPv6SegmentFormat}|:)|` + + `(?:${IPv6SegmentFormat}:){6}(?:${IPv4AddressFormat}|:${IPv6SegmentFormat}|:)|` + + `(?:${IPv6SegmentFormat}:){5}(?::${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,2}|:)|` + + `(?:${IPv6SegmentFormat}:){4}(?:(:${IPv6SegmentFormat}){0,1}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,3}|:)|` + + `(?:${IPv6SegmentFormat}:){3}(?:(:${IPv6SegmentFormat}){0,2}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,4}|:)|` + + `(?:${IPv6SegmentFormat}:){2}(?:(:${IPv6SegmentFormat}){0,3}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,5}|:)|` + + `(?:${IPv6SegmentFormat}:){1}(?:(:${IPv6SegmentFormat}){0,4}:${IPv4AddressFormat}|(:${IPv6SegmentFormat}){1,6}|:)|` + + `(?::((?::${IPv6SegmentFormat}){0,5}:${IPv4AddressFormat}|(?::${IPv6SegmentFormat}){1,7}|:))` + + ')(%[0-9a-zA-Z.]{1,})?$' +); + + +/** + * 验证IP地址格式 + * @param {string} ipAddress - 要验证的IP地址 + * @param {Options|string|number} options - 配置选项或版本号 + * @returns {boolean} 是否匹配有效的IP地址格式 + */ +export function isIP(ipAddress : string | null, options : UTSJSONObject | string | number | null = null) : boolean { + // assertString(ipAddress); + if(ipAddress == null) return false + let version : string | number | null; + + if (typeof options == 'object') { + version = (options as UTSJSONObject|null)?.['version']; + } else { + version = options; + } + + const versionStr = version != null ? `${version}` : ''; + + if (versionStr == '') { + return isIP(ipAddress, 4) || isIP(ipAddress, 6); + } + + if (versionStr == '4') { + return IPv4AddressRegExp.test(ipAddress.trim()); + } + + if (versionStr == '6') { + return IPv6AddressRegExp.test(ipAddress.trim()); + } + + return false; +} + diff --git a/uni_modules/lime-shared/isNumber/index.ts b/uni_modules/lime-shared/isNumber/index.ts new file mode 100644 index 0000000..040bc11 --- /dev/null +++ b/uni_modules/lime-shared/isNumber/index.ts @@ -0,0 +1,26 @@ +// @ts-nocheck +/** + * 检查一个值是否为数字类型 + * @param value 要检查的值,可以是 number 类型或 string 类型的数字 + * @returns 如果值是数字类型且不是 NaN,则返回 true;否则返回 false + */ + +// #ifndef UNI-APP-X +export function isNumber(value: number | string | null): boolean { + return typeof value === 'number' && !isNaN(value); +} +// #endif + +// #ifdef UNI-APP-X +export function isNumber(value: any|null): boolean { + // #ifdef APP-ANDROID + return ['Byte', 'UByte','Short','UShort','Int','UInt','Long','ULong','Float','Double','number'].includes(typeof value) + // #endif + // #ifdef APP-IOS + return ['Int8', 'UInt8','Int16','UInt16','Int32','UInt32','Int64','UInt64','Int','UInt','Float','Float16','Float32','Float64','Double', 'number'].includes(typeof value) + // #endif + // #ifndef APP-ANDROID || APP-IOS + return typeof value === 'number' && !isNaN(value); + // #endif +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/isNumeric/index.ts b/uni_modules/lime-shared/isNumeric/index.ts new file mode 100644 index 0000000..af5020e --- /dev/null +++ b/uni_modules/lime-shared/isNumeric/index.ts @@ -0,0 +1,33 @@ +// @ts-nocheck + +/** + * 检查一个值是否为数字类型或表示数字的字符串 + * @param value 要检查的值,可以是 string 类型或 number 类型 + * @returns 如果值是数字类型或表示数字的字符串,则返回 true;否则返回 false + */ + +// #ifndef UNI-APP-X && APP +export function isNumeric(value: string | number | undefined | null): boolean { + return /^(-)?\d+(\.\d+)?$/.test(value); +} +// #endif + + +// #ifdef UNI-APP-X && APP +import {isNumber} from '../isNumber'; +import {isString} from '../isString'; +export function isNumeric(value : any|null) : boolean { + if(value == null) { + return false + } + if(isNumber(value)) { + return true + } else if(isString(value)) { + // const regex = "-?\\d+(\\.\\d+)?".toRegex() + const regex = new RegExp("^(-)?\\d+(\\.\\d+)?$") + return regex.test(value as string) //regex.matches(value as string) + } + return false + // return /^(-)?\d+(\.\d+)?$/.test(value); +} +// #endif diff --git a/uni_modules/lime-shared/isObject/index.ts b/uni_modules/lime-shared/isObject/index.ts new file mode 100644 index 0000000..26fec28 --- /dev/null +++ b/uni_modules/lime-shared/isObject/index.ts @@ -0,0 +1,19 @@ +// @ts-nocheck +/** + * 检查一个值是否为对象类型 + * @param val 要检查的值 + * @returns 如果值的类型是对象类型,则返回 true;否则返回 false + */ + +// #ifndef APP-ANDROID +export const isObject = (val : unknown) : val is Record => + val !== null && typeof val === 'object'; + +// #endif + + +// #ifdef APP-ANDROID +export const isObject = (val : any | null) : boolean =>{ + return val != null && typeof val == 'object'; +} +// #endif diff --git a/uni_modules/lime-shared/isPromise/index.ts b/uni_modules/lime-shared/isPromise/index.ts new file mode 100644 index 0000000..b13c10b --- /dev/null +++ b/uni_modules/lime-shared/isPromise/index.ts @@ -0,0 +1,22 @@ +// @ts-nocheck +import {isFunction} from '../isFunction' +import {isObject} from '../isObject' +/** + * 检查一个值是否为 Promise 类型 + * @param val 要检查的值 + * @returns 如果值的类型是 Promise 类型,则返回 true;否则返回 false + */ +// #ifndef APP-ANDROID +export const isPromise = (val: unknown): val is Promise => { + // 使用 isObject 函数判断值是否为对象类型 + // 使用 isFunction 函数判断值是否具有 then 方法和 catch 方法 + return isObject(val) && isFunction(val.then) && isFunction(val.catch); +}; +// #endif + + +// #ifdef APP-ANDROID +export const isPromise = (val: any): boolean => { + return val instanceof Promise +}; +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/isRegExp/index.ts b/uni_modules/lime-shared/isRegExp/index.ts new file mode 100644 index 0000000..8aaefdf --- /dev/null +++ b/uni_modules/lime-shared/isRegExp/index.ts @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * 检测输入值是否为正则表达式对象 + * @param obj - 需要检测的任意类型值 + * @returns 如果检测值是正则表达式返回 true,否则返回 false + * + * @example + * // 基础检测 + * isRegExp(/abc/); // true + * isRegExp(new RegExp('abc')); // true + * + * @example + * // 非正则表达式检测 + * isRegExp('hello'); // false + * isRegExp({}); // false + * isRegExp(null); // false + * + * @description + * 1. 通过 Object.prototype.toString 的可靠类型检测 + * 2. 支持跨执行环境的可靠检测: + * - 浏览器多 iframe 环境 + * - Node.js 的 vm 模块 + * 3. 比 instanceof 检测更可靠 + * 4. 支持 ES3+ 全环境兼容 + */ +export function isRegExp(obj : any) : boolean { + // #ifndef APP-ANDROID + return Object.prototype.toString.call(obj) === '[object RegExp]'; + // #endif + // #ifdef APP-ANDROID + return obj instanceof RegExp//Object.prototype.toString.call(obj) === '[object RegExp]'; + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isString/index.ts b/uni_modules/lime-shared/isString/index.ts new file mode 100644 index 0000000..143f876 --- /dev/null +++ b/uni_modules/lime-shared/isString/index.ts @@ -0,0 +1,19 @@ +// @ts-nocheck +/** + * 检查一个值是否为字符串类型 + * @param str 要检查的值 + * @returns 如果值的类型是字符串类型,则返回 true;否则返回 false + */ +// #ifndef UNI-APP-X && APP +// export const isString = (str: unknown): str is string => typeof str === 'string'; +export function isString (str: unknown): str is string { + return typeof str == 'string' +} +// #endif + + +// #ifdef UNI-APP-X && APP +export function isString (str: any|null): boolean { + return typeof str == 'string' +} +// #endif diff --git a/uni_modules/lime-shared/isURL/index.ts b/uni_modules/lime-shared/isURL/index.ts new file mode 100644 index 0000000..4121143 --- /dev/null +++ b/uni_modules/lime-shared/isURL/index.ts @@ -0,0 +1,198 @@ +// @ts-nocheck +import { isValidDomain, type IsValidDomainOptions } from '../isValidDomain'; +import { isIP } from '../isIP'; +import { isRegExp } from '../isRegExp'; +// import {merge} from '../merge'; + +/** URL 验证配置选项 */ +export type IsURLOptions = { + /** 允许的协议列表(默认 ['http', 'https', 'ftp']) */ + protocols ?: string[]; + /** 需要顶级域名(默认 true) */ + requireTld ?: boolean; + /** 需要协议头(默认 false) */ + requireProtocol ?: boolean; + /** 需要主机地址(默认 true) */ + requireHost ?: boolean; + /** 需要端口号(默认 false) */ + requirePort ?: boolean; + /** 需要有效协议(默认 true) */ + requireValidProtocol ?: boolean; + /** 允许下划线(默认 false) */ + allowUnderscores ?: boolean; + /** 允许结尾点号(默认 false) */ + allowTrailingDot ?: boolean; + /** 允许协议相对地址(默认 false) */ + allowProtocolRelativeUrls ?: boolean; + /** 允许片段标识(默认 true) */ + allowFragments ?: boolean; + /** 允许查询参数(默认 true) */ + allowQueryComponents ?: boolean; + /** 禁用认证信息(默认 false) */ + disallowAuth ?: boolean; + /** 验证长度(默认 true) */ + validateLength ?: boolean; + /** 最大允许长度(默认 2084) */ + maxAllowedLength ?: number; + /** 白名单主机列表 */ + hostWhitelist ?: Array; + /** 黑名单主机列表 */ + hostBlacklist ?: Array; +} + +export function checkHost(host : string, matches : any[]) : boolean { + for (let i = 0; i < matches.length; i++) { + let match = matches[i]; + if (host == match || (isRegExp(match) && (match as RegExp).test(host))) { + return true; + } + } + return false; +} + +// 辅助函数 +function isValidPort(port : number | null) : boolean { + return port != null && !isNaN(port) && port > 0 && port <= 65535; +} + +function validateHost(host : string, options : IsURLOptions | null, isIPv6 : boolean) : boolean { + if (isIPv6) return isIP(host, 6); + return isIP(host) || isValidDomain(host, { + requireTld: options?.requireTld ?? true, + allowUnderscore: options?.allowUnderscores ?? true, + allowTrailingDot: options?.allowTrailingDot ?? false + } as IsValidDomainOptions); +} + + + + +/** 匹配 IPv6 地址的正则表达式 */ +const WRAPPED_IPV6_REGEX = /^\[([^\]]+)\](?::([0-9]+))?$/; + +/** + * 验证字符串是否为有效的 URL + * @param url - 需要验证的字符串 + * @param options - 配置选项 + * @returns 是否为有效 URL + * + * @example + * ```typescript + * isURL('https://example.com'); // true + * isURL('user:pass@example.com', { disallowAuth: true }); // false + * ``` + */ +export function isURL(url : string | null, options : IsURLOptions | null = null) : boolean { + // assertString(url); + + // 1. 基础格式校验 + if (url == null || url == '' || url.length == 0 || /[\s<>]/.test(url) || url.startsWith('mailto:')) { + return false; + } + // 合并配置选项 + let protocols = options?.protocols ?? ['http', 'https', 'ftp'] + // let requireTld = options?.requireTld ?? true + let requireProtocol = options?.requireProtocol ?? false + let requireHost = options?.requireHost ?? true + let requirePort = options?.requirePort ?? false + let requireValidProtocol = options?.requireValidProtocol ?? true + // let allowUnderscores = options?.allowUnderscores ?? false + // let allowTrailingDot = options?.allowTrailingDot ?? false + let allowProtocolRelativeUrls = options?.allowProtocolRelativeUrls ?? false + let allowFragments = options?.allowFragments ?? true + let allowQueryComponents = options?.allowQueryComponents ?? true + let validateLength = options?.validateLength ?? true + let maxAllowedLength = options?.maxAllowedLength ?? 2084 + let hostWhitelist = options?.hostWhitelist + let hostBlacklist = options?.hostBlacklist + let disallowAuth = options?.disallowAuth ?? false + + + // 2. 长度校验 + if (validateLength && url!.length > maxAllowedLength) { + return false; + } + // 3. 片段和查询参数校验 + if (!allowFragments && url.includes('#')) return false; + if (!allowQueryComponents && (url.includes('?') || url.includes('&'))) return false; + + // 处理 URL 组成部分 + const [urlWithoutFragment] = url.split('#'); + const [baseUrl] = urlWithoutFragment.split('?'); + // 4. 协议处理 + const protocolParts = baseUrl.split('://'); + let protocol:string; + let remainingUrl = baseUrl; + + if (protocolParts.length > 1) { + protocol = protocolParts.shift()!.toLowerCase(); + if (requireValidProtocol && !protocols!.includes(protocol)) { + return false; + } + remainingUrl = protocolParts.join('://'); + } else if (requireProtocol) { + return false; + } else if (baseUrl.startsWith('//')) { + if (!allowProtocolRelativeUrls) return false; + remainingUrl = baseUrl.slice(2); + } + + if (remainingUrl == '') return false; + + // 5. 处理主机部分 + const [hostPart] = remainingUrl.split('/', 1); + const authParts = hostPart.split('@'); + + // 认证信息校验 + if (authParts.length > 1) { + if (disallowAuth || authParts[0] == '') return false; + const auth = authParts.shift()!; + if (auth.split(':').length > 2) return false; + const [user, password] = auth.split(':'); + if (user == '' && password == '') return false; + } + + const hostname = authParts.join('@'); + + // 6. 解析主机和端口 + type HostInfo = { + host ?: string; + ipv6 ?: string; + port ?: number; + }; + + const hostInfo : HostInfo = {}; + const ipv6Match = hostname.match(WRAPPED_IPV6_REGEX); + if (ipv6Match != null) { + hostInfo.ipv6 = ipv6Match.length > 1 ? ipv6Match[1] : null; + const portStr = ipv6Match.length > 2 ? ipv6Match[2] : null; + if (portStr != null) { + hostInfo.port = parseInt(portStr); + if (!isValidPort(hostInfo.port)) return false; + } + } else { + const [host, ...portParts] = hostname.split(':'); + hostInfo.host = host; + if (portParts.length > 0) { + const portStr = portParts.join(':'); + hostInfo.port = parseInt(portStr); + if (!isValidPort(hostInfo.port)) return false; + } + } + + // 7. 端口校验 + if (requirePort && hostInfo.port == null) return false; + // 8. 主机验证逻辑 + const finalHost = hostInfo.host ?? hostInfo.ipv6; + if (finalHost == null) return requireHost ? false : true; + // 白名单/黑名单检查 + if (hostWhitelist != null && !checkHost(finalHost!, hostWhitelist!)) return false; + if (hostBlacklist != null && checkHost(finalHost!, hostBlacklist!)) return false; + + // 9. 综合校验 + return validateHost( + finalHost, + options, + !(hostInfo.ipv6 == null || hostInfo.ipv6 == '') + ); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/isValidDomain/index.ts b/uni_modules/lime-shared/isValidDomain/index.ts new file mode 100644 index 0000000..40c717f --- /dev/null +++ b/uni_modules/lime-shared/isValidDomain/index.ts @@ -0,0 +1,90 @@ +// @ts-nocheck +/** + * 域名验证配置选项 + */ +export type IsValidDomainOptions = { + /** + * 是否要求必须包含顶级域名(TLD) + * @default true + * @example + * true -> "example.com" 有效 + * false -> "localhost" 有效 + */ + requireTld : boolean; + + /** + * 是否允许域名部分包含下划线(_) + * @default false + * @example + * true -> "my_site.com" 有效 + * false -> "my_site.com" 无效 + */ + allowUnderscore : boolean; + + /** + * 是否允许域名以点号(.)结尾 + * @default false + * @example + * true -> "example.com." 有效 + * false -> "example.com." 无效 + */ + allowTrailingDot : boolean; +} + + +/** + * 验证字符串是否为合法域名 + * @param str 要验证的字符串 + * @param options 配置选项,默认 { + * requireTld: true, // 需要顶级域名 + * allowUnderscore: false,// 允许下划线 + * allowTrailingDot: false// 允许结尾点号 + * } + * @returns 验证结果 + * + * 示例: + * isValidDomain("example.com") // true + * isValidDomain("my_site.com", { allowUnderscore: true }) // true + */ +export function isValidDomain( + str : string, + options : IsValidDomainOptions = { + requireTld: true, + allowUnderscore: false, + allowTrailingDot: false + } +) : boolean { + // 预处理字符串 + let domain = str; + + // 处理结尾点号 + if (options.allowTrailingDot && domain.endsWith('.')) { + domain = domain.slice(0, -1); + } + + // 分割域名部分 + const parts = domain.split('.'); + if (parts.length == 1 && options.requireTld) return false; + + // 验证顶级域名 + const tld = parts[parts.length - 1]; + if (options.requireTld) { + if (!/^[a-z\u00A1-\uFFFF]{2,}$/i.test(tld) || /\s/.test(tld)) { + return false; + } + } + + // 验证每个部分 + const domainRegex = options.allowUnderscore + ? /^[a-z0-9\u00A1-\uFFFF](?:[a-z0-9-\u00A1-\uFFFF_]*[a-z0-9\u00A1-\uFFFF])?$/i + : /^[a-z0-9\u00A1-\uFFFF](?:[a-z0-9-\u00A1-\uFFFF]*[a-z0-9\u00A1-\uFFFF])?$/i; + + return parts.every(part => { + // 长度校验 + if (part.length > 63) return false; + // 格式校验 + if (!domainRegex.test(part)) return false; + // 禁止开头/结尾连字符 + return !(part.startsWith('-') || part.endsWith('-')); + }); +} \ No newline at end of file diff --git a/uni_modules/lime-shared/kebabCase/index.ts b/uni_modules/lime-shared/kebabCase/index.ts new file mode 100644 index 0000000..bed6b1f --- /dev/null +++ b/uni_modules/lime-shared/kebabCase/index.ts @@ -0,0 +1,24 @@ +// @ts-nocheck +// export function toLowercaseSeparator(key: string) { +// return key.replace(/([A-Z])/g, '-$1').toLowerCase(); +// } + +/** + * 将字符串转换为指定连接符的命名约定 + * @param str 要转换的字符串 + * @param separator 指定的连接符,默认为 "-" + * @returns 转换后的字符串 + */ +export function kebabCase(str : string, separator : string = "-") : string { + return str + + // #ifdef APP-ANDROID + .replace(/[A-Z]/g, (match : string, _ : number, _ : string) : string => `${separator}${match.toLowerCase()}`) // 将大写字母替换为连接符加小写字母 + // #endif + // #ifndef APP-ANDROID + .replace(/[A-Z]/g, (match : string) : string => `${separator}${match.toLowerCase()}`) // 将大写字母替换为连接符加小写字母 + // #endif + .replace(/[\s_-]+/g, separator) // 将空格、下划线和短横线替换为指定连接符 + .replace(new RegExp(`^${separator}|${separator}$`, "g"), "") // 删除开头和结尾的连接符 + .toLowerCase(); // 将结果转换为全小写 +} \ No newline at end of file diff --git a/uni_modules/lime-shared/merge/index.ts b/uni_modules/lime-shared/merge/index.ts new file mode 100644 index 0000000..b4dcf14 --- /dev/null +++ b/uni_modules/lime-shared/merge/index.ts @@ -0,0 +1,33 @@ +// @ts-nocheck +/** + * 深度合并两个对象,用默认值填充目标对象中未定义的属性 + * + * @template T - 合并对象的泛型类型 + * @param {T} obj - 目标对象(将被修改) + * @param {T} defaults - 包含默认值的对象 + * @returns {T} 合并后的对象(即修改后的obj参数) + */ + +export function merge(obj : T, defaults : T) : T { + // #ifdef APP-ANDROID + try { + if(obj instanceof UTSJSONObject && defaults instanceof UTSJSONObject) { + return UTSJSONObject.assign(obj, defaults)!// as T + } + const obj1 = { ...toRaw(obj) } + const obj2 = { ...toRaw(defaults) } + return UTSJSONObject.assign(obj1, obj2)! + } catch (error) { + return defaults + } + // #endif + + // #ifndef APP-ANDROID + for (const key in defaults) { + if (obj[key] === undefined || obj[key] === null) { + obj[key] = defaults[key]; + } + } + return obj; + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/obj2url/index.ts b/uni_modules/lime-shared/obj2url/index.ts new file mode 100644 index 0000000..d0125cf --- /dev/null +++ b/uni_modules/lime-shared/obj2url/index.ts @@ -0,0 +1,61 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif + +/** + * 将对象转换为URL查询字符串 + * @param data - 需要转换的键值对对象 + * @param isPrefix - 是否添加问号前缀,默认为false + * @returns 格式化后的URL查询参数字符串 + * + * @example + * // 基础用法 + * obj2url({ name: '张三', age: 25 }); + * // => "name=%E5%BC%A0%E4%B8%89&age=25" + * + * @example + * // 数组参数处理 + * obj2url({ tags: ['js', 'ts'] }); + * // => "tags[]=js&tags[]=ts" + * + * @example + * // 包含空值的过滤 + * obj2url({ name: '', age: null, city: undefined }); + * // => "" + * + * @description + * 1. 自动过滤空值(空字符串、null、undefined) + * 2. 支持数组参数转换(自动添加[]后缀) + * 3. 自动进行URI编码 + * 4. 支持自定义是否添加问号前缀 + */ +export function obj2url(data : UTSJSONObject, isPrefix : boolean = false) : string { + const prefix = isPrefix ? '?' : ''; + + const _result:string[] = []; + const empty:(any|null)[] = ['', null] + + // #ifndef APP-ANDROID + empty.push(undefined) + // #endif + + for (const key in data) { + const value = data[key]; + + // 去掉为空的参数 + if (empty.includes(value)) { + continue; + } + if (Array.isArray(value)) { + (value as any[]).forEach((_value) => { + _result.push( + encodeURIComponent(key) + '[]=' + encodeURIComponent(`${_value}`), + ); + }); + } else { + _result.push(encodeURIComponent(key) + '=' + encodeURIComponent(`${value}`)); + } + } + return _result.length > 0 ? prefix + _result.join('&') : ''; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/objToCss/index.ts b/uni_modules/lime-shared/objToCss/index.ts new file mode 100644 index 0000000..2175269 --- /dev/null +++ b/uni_modules/lime-shared/objToCss/index.ts @@ -0,0 +1,49 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +interface UTSJSONObject { + [key : string] : string | number | null +} +// #endif + +/** + * 将字符串转换为带有连字符分隔的小写形式 + * @param key - 要转换的字符串 + * @returns 转换后的字符串 + */ +export function toLowercaseSeparator(key : string):string { + return key.replace(/([A-Z])/g, '-$1').toLowerCase(); +} + +/** + * 获取样式对象对应的样式字符串 + * @param style - CSS样式对象 + * @returns 由非空有效样式属性键值对组成的字符串 + */ +export function objToCss(style : UTSJSONObject) : string { + + // #ifdef APP-ANDROID + let styleStr = ''; + style.toMap().forEach((value, key) => { + if(value != null && value != '') { + styleStr += `${toLowercaseSeparator(key as string)}: ${value};` + } + }) + return styleStr + // #endif + // #ifndef APP-ANDROID + return Object.keys(style) + .filter( + (key) => + style[key] !== undefined && + style[key] !== null && + style[key] !== '') + .map((key : string) => `${toLowercaseSeparator(key)}: ${style[key]};`) + .join(' '); + // #endif +} + +// 示例 +// const style = { color: 'red', fontSize: '16px', backgroundColor: '', border: null }; +// const styleStr = objToCss(style); +// console.log(styleStr); +// 输出: "color: red; font-size: 16px;" \ No newline at end of file diff --git a/uni_modules/lime-shared/package.json b/uni_modules/lime-shared/package.json new file mode 100644 index 0000000..fae6c22 --- /dev/null +++ b/uni_modules/lime-shared/package.json @@ -0,0 +1,111 @@ +{ + "id": "lime-shared", + "displayName": "lime-shared", + "version": "2.0.4", + "description": "本人插件的几个公共函数,获取当前页,图片的base64转临时路径,图片的exif信息等", + "keywords": [ + "lime-shared", + "exif" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0", + "uni-app": "^4.55", + "uni-app-x": "^4.55" + }, + "dcloudext": { + "type": "sdk-js", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "√" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + }, + "App": { + "app-harmony": "u", + "app-nvue": "u", + "app-uvue": "y", + "app-vue": "u" + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-shared/parseStyle/index.ts b/uni_modules/lime-shared/parseStyle/index.ts new file mode 100644 index 0000000..e7a9583 --- /dev/null +++ b/uni_modules/lime-shared/parseStyle/index.ts @@ -0,0 +1,50 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif + + +/** + * 将 CSS 字符串转换为样式对象 + * @param css CSS 字符串,例如 "color: red; font-size: 16px;" + * @returns CSSProperties 对象 + */ +export function parseStyle(css : string | UTSJSONObject | null) : UTSJSONObject { + // #ifdef APP-ANDROID + if(css == null) return {} + // #endif + // #ifndef APP-ANDROID + if(!css) return {} + // #endif + if(typeof css == 'object') return css as UTSJSONObject + + + const style : UTSJSONObject = {}; + + (css as string).split(';').forEach(decl => { + // #ifdef APP-ANDROID + const res = decl.split(':').map(s => s.trim()); + if(res.length > 1) { + const [prop, val] = res; + if (prop != '' && val != '') { + const camelProp = prop!.replace(/-([a-z])/g, (_a: string|null, b: string, _c: number, _d: string):string => { + return b.toUpperCase() + }); + style[camelProp] = val!; + } + } + // #endif + + // #ifndef APP-ANDROID + const [prop, val] = decl.split(':').map(s => s.trim()); + if (prop && val) { + const camelProp = prop.replace(/-([a-z])/g, (_, c) => { + return c.toUpperCase() + }); + style[camelProp] = val; + } + // #endif + }); + + return style; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/pathToBase64/index.ts b/uni_modules/lime-shared/pathToBase64/index.ts new file mode 100644 index 0000000..e0d02c6 --- /dev/null +++ b/uni_modules/lime-shared/pathToBase64/index.ts @@ -0,0 +1,9 @@ +// @ts-nocheck +// #ifndef UNI-APP-X && APP +export { pathToBase64 } from './vue' +// #endif + + +// #ifdef UNI-APP-X && APP +export { pathToBase64 } from './uvue' +// #endif diff --git a/uni_modules/lime-shared/pathToBase64/uvue.ts b/uni_modules/lime-shared/pathToBase64/uvue.ts new file mode 100644 index 0000000..d5bbdb1 --- /dev/null +++ b/uni_modules/lime-shared/pathToBase64/uvue.ts @@ -0,0 +1,17 @@ +// @ts-nocheck +// import { processFile, ProcessFileOptions } from '@/uni_modules/lime-file-utils' +export function pathToBase64(path : string) : Promise { + console.error('pathToBase64: 当前环境不支持,请使用 【lime-file-utils】') + // return new Promise((resolve, reject) => { + // processFile({ + // type: 'toDataURL', + // path, + // success(res : string) { + // resolve(res) + // }, + // fail(err: any){ + // reject(err) + // } + // } as ProcessFileOptions) + // }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/pathToBase64/uvue.uts b/uni_modules/lime-shared/pathToBase64/uvue.uts new file mode 100644 index 0000000..d5bbdb1 --- /dev/null +++ b/uni_modules/lime-shared/pathToBase64/uvue.uts @@ -0,0 +1,17 @@ +// @ts-nocheck +// import { processFile, ProcessFileOptions } from '@/uni_modules/lime-file-utils' +export function pathToBase64(path : string) : Promise { + console.error('pathToBase64: 当前环境不支持,请使用 【lime-file-utils】') + // return new Promise((resolve, reject) => { + // processFile({ + // type: 'toDataURL', + // path, + // success(res : string) { + // resolve(res) + // }, + // fail(err: any){ + // reject(err) + // } + // } as ProcessFileOptions) + // }) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/pathToBase64/vue.ts b/uni_modules/lime-shared/pathToBase64/vue.ts new file mode 100644 index 0000000..5b7d561 --- /dev/null +++ b/uni_modules/lime-shared/pathToBase64/vue.ts @@ -0,0 +1,142 @@ +// @ts-nocheck + +// #ifdef APP-PLUS +import { getLocalFilePath } from '../getLocalFilePath' +// #endif +function isImage(extension : string) { + const imageExtensions = ["jpg", "jpeg", "png", "gif", "bmp", "svg"]; + return imageExtensions.includes(extension.toLowerCase()); +} +function isVideo(extension : string) { + const videoExtensions = ["mp4", "webm", "mov", "avi", "mkv", "flv", "wmv", "3gp", "ogg", "m4v"]; + return videoExtensions.includes(extension.toLowerCase()); +} +// #ifdef H5 +function getSVGFromURL(url: string) { + return new Promise((resolve, reject) => { + const xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'text'; + + xhr.onload = function () { + if (xhr.status === 200) { + const svg = xhr.responseText; + resolve(svg); + } else { + reject(new Error(xhr.statusText)); + } + }; + + xhr.onerror = function () { + reject(new Error('Network error')); + }; + + xhr.send(); + }); +} +// #endif +/** + * 路径转base64 + * @param {Object} string + */ +export function pathToBase64(path : string) : Promise { + if (/^data:/.test(path)) return path + let extension = path.substring(path.lastIndexOf('.') + 1); + const isImageFile = isImage(extension) + const isVideoFile = isVideo(extension) + let prefix = '' + if (isImageFile) { + prefix = 'image/'; + if(extension == 'svg') { + extension += '+xml' + } + } else if (isVideoFile) { + prefix = 'video/'; + } else if (extension === 'pdf') { + prefix = 'application/pdf'; + } else if (extension === 'txt') { + prefix = 'text/plain'; + } else { + prefix = 'application/octet-stream'; + } + return new Promise((resolve, reject) => { + // #ifdef H5 + if (isImageFile) { + if(extension == 'svg') { + getSVGFromURL(path).then(svg => { + const base64 = btoa(svg); + resolve(`data:image/svg+xml;base64,${base64}`); + }) + } else { + let image = new Image(); + image.setAttribute("crossOrigin", 'Anonymous'); + image.onload = function () { + let canvas = document.createElement('canvas'); + canvas.width = this.naturalWidth; + canvas.height = this.naturalHeight; + canvas.getContext('2d').drawImage(image, 0, 0); + let result = canvas.toDataURL(`${prefix}${extension}`) + resolve(result); + canvas.height = canvas.width = 0 + } + image.src = path + '?v=' + Math.random() + image.onerror = (error) => { + reject(error); + }; + } + } else { + // 通用文件处理:使用 fetch + blob + FileReader + fetch(path) + .then(response => { + if (!response.ok) { + throw new Error('HTTP error ' + response.status); + } + return response.blob(); + }) + .then(blob => { + return new Promise((resolve2, reject2) => { + const reader = new FileReader(); + reader.onload = () => resolve2(reader.result); + reader.onerror = reject2; + reader.readAsDataURL(blob); + }); + }) + .then(resolve) + .catch(reject); + } + + // #endif + + // #ifdef MP + if (uni.canIUse('getFileSystemManager')) { + uni.getFileSystemManager().readFile({ + filePath: path, + encoding: 'base64', + success: (res) => { + resolve(`data:${prefix}${extension};base64,${res.data}`) + }, + fail: (error) => { + console.error({ error, path }) + reject(error) + } + }) + } + // #endif + + // #ifdef APP-PLUS + plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), (entry) => { + entry.file((file : any) => { + const fileReader = new plus.io.FileReader() + fileReader.onload = (data) => { + resolve(data.target.result) + } + fileReader.onerror = (error) => { + console.error({ error, path }) + reject(error) + } + fileReader.readAsDataURL(file) + }, reject) + }, reject) + // #endif + }) +} diff --git a/uni_modules/lime-shared/platform/index.ts b/uni_modules/lime-shared/platform/index.ts new file mode 100644 index 0000000..55fd412 --- /dev/null +++ b/uni_modules/lime-shared/platform/index.ts @@ -0,0 +1,34 @@ +// @ts-nocheck +export function getPlatform():Uni { + // #ifdef MP-WEIXIN + return wx + // #endif + // #ifdef MP-BAIDU + return swan + // #endif + // #ifdef MP-ALIPAY + return my + // #endif + // #ifdef MP-JD + return jd + // #endif + // #ifdef MP-QQ + return qq + // #endif + // #ifdef MP-360 + return qh + // #endif + // #ifdef MP-KUAISHOU + return ks + // #endif + // #ifdef MP-LARK||MP-TOUTIAO + return tt + // #endif + // #ifdef MP-DINGTALK + return dd + // #endif + // #ifdef QUICKAPP-WEBVIEW || QUICKAPP-WEBVIEW-UNION || QUICKAPP-WEBVIEW-HUAWEI + return qa + // #endif + return uni +} \ No newline at end of file diff --git a/uni_modules/lime-shared/raf/index.ts b/uni_modules/lime-shared/raf/index.ts new file mode 100644 index 0000000..876efd4 --- /dev/null +++ b/uni_modules/lime-shared/raf/index.ts @@ -0,0 +1,12 @@ +// @ts-nocheck + +// #ifdef UNI-APP-X && APP +// export * from './uvue' +export { raf, doubleRaf, cancelRaf } from './uvue' +// #endif + + +// #ifndef UNI-APP-X && APP +// export * from './vue' +export { raf, doubleRaf, cancelRaf } from './vue' +// #endif diff --git a/uni_modules/lime-shared/raf/uvue.ts b/uni_modules/lime-shared/raf/uvue.ts new file mode 100644 index 0000000..6d5b4bb --- /dev/null +++ b/uni_modules/lime-shared/raf/uvue.ts @@ -0,0 +1,26 @@ +// @ts-nocheck +// 是否支持被动事件监听 +export const supportsPassive = true; + +// 请求动画帧 +export function raf(fn: UniAnimationFrameCallback): number +export function raf(fn: UniAnimationFrameCallbackWithNoArgument): number +export function raf(fn: any): number { + if(typeof fn == 'UniAnimationFrameCallback') { + return requestAnimationFrame(fn as UniAnimationFrameCallback); + } else { + return requestAnimationFrame(fn as UniAnimationFrameCallbackWithNoArgument); + } +} + +// 取消动画帧 +export function cancelRaf(id: number) { + cancelAnimationFrame(id); +} + +// 双倍动画帧 +export function doubleRaf(fn: UniAnimationFrameCallback): void +export function doubleRaf(fn: UniAnimationFrameCallbackWithNoArgument): void +export function doubleRaf(fn: any): void { + raf(():number => raf(fn)); // 在下一帧回调中再次请求动画帧,实现双倍动画帧效果 +} diff --git a/uni_modules/lime-shared/raf/uvue.uts b/uni_modules/lime-shared/raf/uvue.uts new file mode 100644 index 0000000..1b0d9f2 --- /dev/null +++ b/uni_modules/lime-shared/raf/uvue.uts @@ -0,0 +1,48 @@ +// @ts-nocheck +// 是否支持被动事件监听 +export const supportsPassive = true; + +// #ifdef uniVersion < 4.25 +// 请求动画帧 +export function raf(fn: TimerCallback): number { + return setTimeout(fn, 1000 / 60); +} + +// 取消动画帧 +export function cancelRaf(id: number) { + clearTimeout(id); +} + + +// 双倍动画帧 +export function doubleRaf(fn: TimerCallback): void { + raf(():number => raf(fn)); // 在下一帧回调中再次请求动画帧,实现双倍动画帧效果 +} +// #endif + + +// #ifdef uniVersion >= 4.25 +// 请求动画帧 +export function raf(fn: UniAnimationFrameCallback): number +export function raf(fn: UniAnimationFrameCallbackWithNoArgument): number +export function raf(fn: any): number { + if(typeof fn == 'UniAnimationFrameCallback') { + return requestAnimationFrame(fn as UniAnimationFrameCallback); + } else { + return requestAnimationFrame(fn as UniAnimationFrameCallbackWithNoArgument); + } +} + +// 取消动画帧 +export function cancelRaf(id: number) { + cancelAnimationFrame(id); +} + +// 双倍动画帧 +export function doubleRaf(fn: UniAnimationFrameCallback): void +export function doubleRaf(fn: UniAnimationFrameCallbackWithNoArgument): void +export function doubleRaf(fn: any): void { + raf(():number => raf(fn)); // 在下一帧回调中再次请求动画帧,实现双倍动画帧效果 +} +// #endif + diff --git a/uni_modules/lime-shared/raf/vue.ts b/uni_modules/lime-shared/raf/vue.ts new file mode 100644 index 0000000..98a364e --- /dev/null +++ b/uni_modules/lime-shared/raf/vue.ts @@ -0,0 +1,32 @@ +// @ts-nocheck +type Callback = () => void//Function +// 是否支持被动事件监听 +export const supportsPassive = true; + +// 请求动画帧 +export function raf(fn : Callback) : number { + // #ifndef WEB + return setTimeout(fn, 1000 / 60); // 请求动画帧 + // #endif + // #ifdef WEB + return requestAnimationFrame(fn); // 请求动画帧 + // #endif +} + +// 取消动画帧 +export function cancelRaf(id : number) { + // 如果是在浏览器环境下,使用 cancelAnimationFrame 方法 + // #ifdef WEB + cancelAnimationFrame(id); // 取消动画帧 + // #endif + // #ifndef WEB + clearTimeout(id); // 取消动画帧 + // #endif +} + +// 双倍动画帧 +export function doubleRaf(fn : Callback) : void { + raf(() => { + raf(fn) + }); // 在下一帧回调中再次请求动画帧,实现双倍动画帧效果 +} \ No newline at end of file diff --git a/uni_modules/lime-shared/random/index.ts b/uni_modules/lime-shared/random/index.ts new file mode 100644 index 0000000..49a21ed --- /dev/null +++ b/uni_modules/lime-shared/random/index.ts @@ -0,0 +1,24 @@ +// @ts-nocheck +/** + * 生成一个指定范围内的随机数 + * @param min 随机数的最小值 + * @param max 随机数的最大值 + * @param fixed 随机数的小数位数,默认为 0 + * @returns 生成的随机数 + */ + +export function random(min: number, max: number, fixed: number = 0):number { + // 将 min 和 max 转换为数字类型 + // min = +min || 0; + // max = +max || 0; + // 计算随机数范围内的一个随机数 + const num = Math.random() * (max - min) + min; + // 如果 fixed 参数为 0,则返回四舍五入的整数随机数;否则保留固定小数位数 + // Number + return fixed == 0 ? Math.round(num) : parseFloat(num.toFixed(fixed)); +} + +// 示例 +// console.log(random(0, 10)); // 输出:在 0 和 10 之间的一个整数随机数 +// console.log(random(0, 1, 2)); // 输出:在 0 和 1 之间的一个保留两位小数的随机数 +// console.log(random(1, 100, 3)); // 输出:在 1 和 100 之间的一个保留三位小数的随机数 \ No newline at end of file diff --git a/uni_modules/lime-shared/range/index.ts b/uni_modules/lime-shared/range/index.ts new file mode 100644 index 0000000..483b7d1 --- /dev/null +++ b/uni_modules/lime-shared/range/index.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +/** + * 生成一个数字范围的数组 + * @param start 范围的起始值 + * @param end 范围的结束值 + * @param step 步长,默认为 1 + * @param fromRight 是否从右侧开始生成,默认为 false + * @returns 生成的数字范围数组 + */ +export function range(start : number, end : number, step : number = 1, fromRight : boolean = false) : number[] { + let index = -1; + // 计算范围的长度 + let length = Math.max(Math.ceil((end - start) / step), 0); + // 创建一个长度为 length 的数组 + // #ifdef APP-ANDROID + const result = Array.fromNative(new IntArray(length.toInt())); + // #endif + // #ifndef APP-ANDROID + const result = new Array(length); + // #endif + + // 使用循环生成数字范围数组 + let _start = start + while (length-- > 0) { + // 根据 fromRight 参数决定从左侧还是右侧开始填充数组 + result[fromRight ? length : ++index] = _start; + _start += step; + } + return result; +} + + +// 示例 +// console.log(range(0, 5)); // 输出: [0, 1, 2, 3, 4] +// console.log(range(1, 10, 2, true)); // 输出: [9, 7, 5, 3, 1] +// console.log(range(5, 0, -1)); // 输出: [5, 4, 3, 2, 1] \ No newline at end of file diff --git a/uni_modules/lime-shared/readme.md b/uni_modules/lime-shared/readme.md new file mode 100644 index 0000000..a5a0f0c --- /dev/null +++ b/uni_modules/lime-shared/readme.md @@ -0,0 +1,353 @@ +--- +name: lime-shared 常用函数库 +description: 专为 uni-app / uni-app x 组件开发设计的轻量级工具集,提供验证器、单位转换、DOM 查询、动画过渡、BEM 命名等辅助能力。 +tags: + - shared + - 工具 + - BEM + - 工具函数 +plugin: lime-shared +category: SDK 工具库 +dependencies: [] +--- + +# lime-shared 常用函数库 + +专为 uni-app / uni-app x 组件开发设计的轻量级工具集,提供验证器、单位转换、图片处理、Canvas、DOM 查询、动画过渡、BEM 命名等高效便捷的辅助能力,全面兼容蒸汽模式(uvue/uts)跨平台编译。 + +> 插件依赖:无 + +## 安装方法 + +1. 在 uni-app 插件市场中搜索并导入 `lime-shared` +2. 导入后可能需要重新编译项目 +3. 在代码中按需引入所需函数即可使用 + +::: tip 注意🔔 +本插件为函数库,不提供组件标签,仅通过 `import` 方式按需引入工具函数。 +::: + +## 代码演示 + +### 基础使用 + +按需引入工具函数即可使用,无需全局注册。 + +```js +// 引入单个函数 +import { addUnit } from '@/uni_modules/lime-shared/addUnit' +import { classNames } from '@/uni_modules/lime-shared/classNames' +import { stringifyStyle } from '@/uni_modules/lime-shared/stringifyStyle' + +// 在组件中使用 +const style = stringifyStyle({ color: 'red', fontSize: '14px' }) +const className = classNames('btn', { 'btn--disabled': true }) +const size = addUnit(100) // '100px' +``` + +### 验证器使用 + +提供一系列类型与格式验证函数,统一返回布尔值。 + +```js +import { isNumber } from '@/uni_modules/lime-shared/isNumber' +import { isEmail } from '@/uni_modules/lime-shared/isEmail' +import { isURL } from '@/uni_modules/lime-shared/isURL' +import { isIP } from '@/uni_modules/lime-shared/isIP' + +isNumber(42) // true +isNumber('42') // false +isEmail('a@b.com') // true +isURL('https://a.com') // true +isIP('192.168.1.1') // true +isIP('::1', { version: 6 }) // true +``` + +### BEM 命名与样式工具 + +配合 `lime-style` 提供扁平化 BEM 类名生成与样式字符串拼接。 + +```js +import { createBem } from '@/uni_modules/lime-shared/bem' +import { classNames } from '@/uni_modules/lime-shared/classNames' +import { stringifyStyle } from '@/uni_modules/lime-shared/stringifyStyle' + +const bem = createBem('avatar') + +// 生成 BEM 类名 +bem.b() // 'l-avatar' +bem.e('icon') // 'l-avatar__icon' +bem.m('small') // 'l-avatar--small' +bem.em('icon', 'round') // 'l-avatar__icon--round' +bem.m('small', true) // 'l-avatar--small' +bem.ev('icon', ['active', 'border']) // 'l-avatar__icon--active-border' + +// 合并类名(自动过滤空值) +const cls = classNames(bem.b(), bem.m('disabled', isDisabled), props.lClass) + +// 拼接样式字符串(自动过滤 null/undefined) +const style = stringifyStyle({ color: 'red' }, props.lStyle) +``` + +### DOM 查询与节点信息 + +跨平台获取节点位置尺寸、查询组件实例。 + +```js +import { getRect, getAllRect } from '@/uni_modules/lime-shared/getRect' +import { getCurrentInstance } from 'vue' + +const instance = getCurrentInstance() +// 获取单个节点 +getRect('.item', instance).then((rect) => { + console.log(rect.width, rect.height) +}) +// 获取多个节点 +getAllRect('.item', instance).then((rects) => { + console.log(rects.length) +}) +``` + +### Canvas 异步上下文 + +统一封装不同平台 Canvas 创建逻辑,返回一致的接口。 + +```js +import { createCanvasContextAsync } from '@/uni_modules/lime-shared/createCanvasContextAsync' + +const canvas = await createCanvasContextAsync('myCanvas', instance.proxy) +const ctx = canvas.renderContext +ctx.fillStyle = '#ff0000' +ctx.fillRect(0, 0, 100, 100) +canvas.flush() +const dataURL = await canvas.toDataURL('image/png', 1.0) +``` + +### 动画与过渡 + +提供 `raf` 动画帧、`sleep` 延时、`Timeline`/`Animation` 时间轴及 `useTransition` 过渡能力。 + +```js +import { raf, cancelRaf, doubleRaf } from '@/uni_modules/lime-shared/raf' +import { sleep } from '@/uni_modules/lime-shared/sleep' +import { Timeline, Animation } from '@/uni_modules/lime-shared/animation' + +// 动画帧 +const id = raf(() => console.log('frame')) +cancelRaf(id) + +// 延时 +await sleep(300) + +// 时间轴 +const timeline = new Timeline() +timeline.add(new Animation(0, 100, 300, 0), 0) +timeline.start() +``` + +## API 文档 + +> 以下按功能分类列出全部可用函数。除特别说明外,所有函数均支持 uni-app / uni-app x 跨平台。 + +### 验证器 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `isBase64(str)` | `isBase64` | 判断字符串是否为 Base64 编码 | +| `isDataURI(str)` | `isBase64` | 判断字符串是否为 Base64 编码的 data URI | +| `isBoolean(value)` | `isBoolean` | 严格判断值是否为布尔值 | +| `isByteLength(str, options)` | `isByteLength` | 验证字符串字节长度是否在范围内 | +| `isDate(input, options)` | `isDate` | 验证字符串或 Date 是否为有效日期 | +| `isDef(value)` | `isDef` | 检查值是否已定义(非 undefined/null) | +| `isEmail(email)` | `isEmail` | 验证电子邮件地址格式 | +| `isEmpty(value)` | `isEmpty` | 判断值是否为空(null/空串/空数组/空对象) | +| `isFunction(val)` | `isFunction` | 检查值是否为函数类型 | +| `isIP(ip, options)` | `isIP` | 验证 IP 地址(支持 IPv4/IPv6) | +| `isNumber(value)` | `isNumber` | 检查值是否为数字类型 | +| `isNumeric(value)` | `isNumeric` | 检查值是否为数字或可解析为数字的字符串 | +| `isObject(val)` | `isObject` | 检查值是否为对象类型 | +| `isPromise(val)` | `isPromise` | 检查值是否为 Promise | +| `isRegExp(obj)` | `isRegExp` | 检测值是否为正则表达式对象 | +| `isString(str)` | `isString` | 检查值是否为字符串类型 | +| `isURL(url, options)` | `isURL` | 综合验证 URL(支持协议白名单、TLD、端口等) | +| `isValidDomain(str, options)` | `isValidDomain` | 验证字符串是否为合法域名 | + +### 单位转换 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `addUnit(value, unit='px')` | `addUnit` | 给值添加单位,已含单位则原样返回 | +| `unitConvert(value, base=0)` | `unitConvert` | 将 rpx/px/% 字符串转换为像素数字 | +| `parseUnit(value, base=0)` | `unitConvert` | 包装 `unitConvert`,NaN 返回 null | +| `toNumber(val)` | `toNumber` | 将字符串转换为数字,无法转换返回原值或 null | + +### 图片处理 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `arrayBufferToFile(buffer, name, format)` | `arrayBufferToFile` | 将 ArrayBuffer 转为临时文件路径 | +| `base64ToArrayBuffer(base64)` | `base64ToArrayBuffer` | 从 data URI 解析 base64 并转为 ArrayBuffer | +| `base64ToPath(base64, filename)` | `base64ToPath` | 将 base64 数据转为临时文件路径 | +| `pathToBase64(path)` | `pathToBase64` | 将文件路径转为 base64 data URI | +| `exif` | `exif` | 图片 EXIF 信息读取对象(不支持 uni-app x App) | +| `createImage(canvas)` | `createImage` | 创建用于 canvas 的 Image 对象 | + +### Canvas + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `canIUseCanvas2d()` | `canIUseCanvas2d` | 判断当前环境是否支持 canvas 2d | +| `createCanvas(canvasId, component)` | `createCanvas` | 创建 canvas 上下文 | +| `createCanvasContextAsync(canvasId, component)` | `createCanvasContextAsync` | 异步创建 canvas 上下文,返回统一接口 | + +### 页面与 DOM + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `getCurrentPage()` | `getCurrentPage` | 返回当前页面实例 | +| `getRect(selector, context, node)` | `getRect` | 获取单个节点位置尺寸信息 | +| `getAllRect(selector, context, node)` | `getRect` | 获取所有匹配节点位置尺寸信息 | +| `getViewportScrollInfo()` | `getRect` | 获取视口滚动条位置信息 | +| `getScrollIntoViewValue(...)` | `getRect` | 计算元素滚动到可视区域的目标位置 | +| `getDeviceInfo()` | `getDeviceInfo` | 获取设备信息 | +| `getWindowInfo()` | `getWindowInfo` | 获取窗口信息 | +| `selectComponent(selector)` | `selectComponent` | 链式查询器,查找组件实例 | +| `selectAllComponent(selector, options)` | `selectAllComponent` | 批量选择组件 | +| `selectElement(selector)` | `selectElement` | 链式 DOM 查询器(uni-app x 专用) | +| `findClosestElementWithStyle(el, prop)` | `dom` | 向上查找具有指定 style 的祖先元素 | + +### 动画与延时 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `sleep(delay=300)` | `sleep` | 延时指定毫秒后 resolve 的 Promise | +| `raf(fn)` | `raf` | 请求动画帧 | +| `cancelRaf(id)` | `raf` | 取消动画帧 | +| `doubleRaf(fn)` | `raf` | 双倍动画帧 | +| `createAnimation(options)` | `createAnimation` | 创建动画对象(NVUE 链式调用) | +| `Timeline` | `animation` | 动画时间轴类 | +| `Animation` | `animation` | 单个动画对象类 | +| `useTransition(source, options)` | `animation/useTransition` | 数值过渡动画 composable | + +### 数学与数字 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `clamp(val, min, max)` | `clamp` | 将值限制在范围内 | +| `closest(arr, target)` | `closest` | 在数组中找到最接近目标数字的元素 | +| `floatAdd(num1, num2)` | `floatAdd` | 浮点数加法(精度修复) | +| `floatDiv(num1, num2)` | `floatDiv` | 浮点数除法(精度修复) | +| `floatMul(num1, num2)` | `floatMul` | 浮点数乘法(精度修复) | +| `floatSub(num1, num2)` | `floatSub` | 浮点数减法(精度修复) | +| `random(min, max, fixed=0)` | `random` | 生成指定范围内的随机数 | +| `range(start, end, step=1, fromRight=false)` | `range` | 生成数字范围数组 | + +### 字符串与数组 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `addSeparator(num, separator=',', digit=3)` | `addSeparator` | 每隔 n 位数字添加分隔符 | +| `arrayEqual(arr1, arr2)` | `arrayEqual` | 浅比较两个数组是否相等 | +| `assignAtIndex(arr, index, value)` | `assignAtIndex` | 安全在数组指定索引赋值 | +| `camelCase(str, isPascalCase=false)` | `camelCase` | 转换为 camelCase 或 PascalCase | +| `characterLimit(type, char, max)` | `characterLimit` | 按字符/字节计算长度并截断 | +| `fillArray(length, value)` | `fillArray` | 生成指定长度并用指定值填充的数组 | +| `fillZero(number, length=2)` | `fillZero` | 在数字前补零至指定长度 | +| `findLastIndex(array, predicate)` | `findLastIndex` | 兼容版 findLastIndex polyfill | +| `kebabCase(str, separator='-')` | `kebabCase` | 转换为指定连接符命名 | +| `shuffle(arr)` | `shuffle` | Fisher-Yates 算法随机打乱数组 | +| `toArray(item)` | `toArray` | 将单个元素包装为数组 | +| `toBoolean(value)` | `toBoolean` | 将值转为布尔 | + +### 对象工具 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `cloneDeep(obj)` | `cloneDeep` | 深度克隆对象/数组 | +| `coalesce(...values)` | `coalesce` | 返回第一个非空值(保留 0/false) | +| `hasOwn(obj, key)` | `hasOwn` | 检查对象是否具有指定属性 | +| `merge(obj, defaults)` | `merge` | 深度合并,用 defaults 填充 obj 的空值 | + +### BEM 命名与样式 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `createBem` | `bem` | 默认配置 BEM 工厂函数(namespace=`l`) | +| `createBemStruct(config)` | `bem` | 自定义配置 BEM 工厂函数 | +| `Bem` | `bem` | BEM 类生成器类 | +| `classNames(...args)` | `classNames` | 拼接类名字符串,自动过滤空值 | +| `parseStyle(css)` | `parseStyle` | 将 CSS 字符串转为样式对象 | +| `stringifyStyle(...args)` | `stringifyStyle` | 拼接样式字符串,自动过滤空值 | +| `toCssVars(obj, prefix='--l-')` | `stringifyStyle` | 将对象转换为 CSS 自定义属性字符串 | + +### 平台与杂项 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `getLocalFilePath(path)` | `getLocalFilePath` | 将路径转换为本地绝对路径 | +| `getPlatform()` | `platform` | 返回当前平台的根对象(wx/my/uni 等) | +| `obj2url(data, isPrefix=false)` | `obj2url` | 将对象转换为 URL 查询字符串 | +| `guid(len=32)` | `guid` | 生成指定长度的伪随机字符串 | +| `uniqid(prefix='lime')` | `uniqid` | 生成带前缀的唯一 ID | +| `isBrowser` | `isBrowser` | 是否为 Web 环境常量 | +| `vue` | `vue` | Vue API 重导出(VUE3/VUE2 兼容) | + +### 省市区数据 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `areaList` | `areaData` | 中国省市区原始数据(province/city/county) | +| `useCascaderAreaData()` | `areaData` | 转换为级联选择器树形结构 | + +### 节流防抖 + +| 函数名 | 路径 | 说明 | +| --- | --- | --- | +| `debounce(fn, wait=300)` | `debounce` | 防抖函数 | +| `throttle(func, wait, options)` | `throttle` | 节流函数(支持 leading/trailing) | + +## Vue2 使用说明 + +插件在 Vue2 项目中通过 `@vue/composition-api` 提供 `computed`、`ref`、`watch` 等组合式 API 能力,需按以下方式配置。 + +关键配置代码(在 main.js 中添加): + +```js +// vue2 +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +``` + +## 快速预览 + +本插件为函数库,不提供可视化演示组件。可直接在任意 uni-app 项目中按需引入函数进行使用。 + +## 插件标签说明 + +| 标签类型 | 示例 | 说明 | +|---------|------|------| +| 函数库 | `import { ... } from '@/uni_modules/lime-shared/...'` | 仅通过 import 方式按需引入,无组件标签 | + +## 文档链接 + +📚 函数库详细文档请访问以下站点: +- [常用函数库文档 - 站点1](https://limex.qcoon.cn/uts/shared.html) +- [常用函数库文档 - 站点2](https://limeui.netlify.app/uts/shared.html) +- [常用函数库文档 - 站点3](https://limeui.familyzone.top/uts/shared.html) + +## 注意事项 + +1. 本插件为函数库,所有函数均按需引入,无需全局注册 +2. `exif` 图片信息读取不支持 uni-app x App 环境 +3. `createAnimation` 在 uni-app x(uvue)环境下请使用 `lime-animateIt` 插件 +4. `getLocalFilePath` 在 uni-app x(uvue)环境下重新导出为 `getResourcePath`(来自 `lime-file-utils`) +5. 部分函数在不同平台有不同实现,但导出名称与签名保持一致,无需关心平台差异 + +## 支持与赞赏 + +如果你觉得本插件解决了你的问题,可以考虑支持作者: + +| 支付宝赞助 | 微信赞助 | +|------------|------------| +| ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/alipay.png) | ![](https://testingcf.jsdelivr.net/gh/liangei/image@1.9/wpay.png) | diff --git a/uni_modules/lime-shared/selectAllComponent/index.ts b/uni_modules/lime-shared/selectAllComponent/index.ts new file mode 100644 index 0000000..f95036a --- /dev/null +++ b/uni_modules/lime-shared/selectAllComponent/index.ts @@ -0,0 +1,8 @@ +// @ts-nocheck +// #ifdef UNI-APP-X +export { selectAllComponent } from './uvue' +// #endif + +// #ifndef UNI-APP-X +export { selectAllComponent } from './vue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/selectAllComponent/uvue.ts b/uni_modules/lime-shared/selectAllComponent/uvue.ts new file mode 100644 index 0000000..9701614 --- /dev/null +++ b/uni_modules/lime-shared/selectAllComponent/uvue.ts @@ -0,0 +1,39 @@ +// @ts-nocheck +import { type ComponentPublicInstance } from 'vue'; + +type SelectOptions = { + context : ComponentPublicInstance, + needAll : boolean | null, + +} + +export function selectAllComponent(selector : string, options : UTSJSONObject) : ComponentPublicInstance[]|null { + const context = options['context']! as ComponentPublicInstance; + let needAll = options['needAll'] as boolean; + let result:ComponentPublicInstance[] = [] + + if(needAll == null) { needAll = true }; + + if(context.$children.length > 0) { + const queue:ComponentPublicInstance[] = [...context.$children]; + while(queue.length > 0) { + const child = queue.shift(); + const name = child?.$options?.name; + if(name == selector) { + result.push(child as ComponentPublicInstance) + } else { + const children = child?.$children + if(children !== null) { + queue.push(...children) + } + } + if(result.length > 0 && !needAll) { + break; + } + } + } + if(result.length > 0) { + return result + } + return null +} \ No newline at end of file diff --git a/uni_modules/lime-shared/selectAllComponent/uvue.uts b/uni_modules/lime-shared/selectAllComponent/uvue.uts new file mode 100644 index 0000000..07c9fcd --- /dev/null +++ b/uni_modules/lime-shared/selectAllComponent/uvue.uts @@ -0,0 +1,39 @@ +// @ts-nocheck +import { type ComponentPublicInstance } from 'vue'; + +type SelectOptions = { + context : ComponentPublicInstance, + needAll : boolean | null, + +} + +export function selectAllComponent(selector : string, options : UTSJSONObject) : ComponentPublicInstance[]|null { + const context = options.get('context')! as ComponentPublicInstance; + let needAll = options.get('needAll') as boolean; + let result:ComponentPublicInstance[] = [] + + if(needAll == null) { needAll = true }; + + if(context.$children.length > 0) { + const queue:ComponentPublicInstance[] = [...context.$children]; + while(queue.length > 0) { + const child = queue.shift(); + const name = child?.$options?.name; + if(name == selector) { + result.push(child as ComponentPublicInstance) + } else { + const children = child?.$children + if(children !== null) { + queue.push(...children) + } + } + if(result.length > 0 && !needAll) { + break; + } + } + } + if(result.length > 0) { + return result + } + return null +} \ No newline at end of file diff --git a/uni_modules/lime-shared/selectAllComponent/vue.ts b/uni_modules/lime-shared/selectAllComponent/vue.ts new file mode 100644 index 0000000..380bd7a --- /dev/null +++ b/uni_modules/lime-shared/selectAllComponent/vue.ts @@ -0,0 +1,151 @@ +// @ts-nocheck +interface SelectOptions { + context?: any + needAll?: boolean + node?: boolean +} +// #ifdef MP +function selectMPComponent(key: string, name: string, context: any, needAll: boolean) { + const {proxy, $vm} = context + context = $vm || proxy + if(!['ref','component'].includes(key)) { + const queue = [context] + let result = null + const selector = (key == 'id' ? '#': '.') + name; + while(queue.length > 0) { + const child = queue.shift(); + const flag = child?.selectComponent(selector) + if(flag) { + if(!needAll) {return result = flag.$vm} + return result = child.selectAllComponents(selector).map(item => item.$vm) + } else { + child.$children && (queue.push(...child.$children)); + } + } + return result + } else { + const {$templateRefs} = context.$ + const nameMap = {} + for (var i = 0; i < $templateRefs.length; i++) { + const item = $templateRefs[i] + nameMap[item.i] = item.r + } + let result = [] + if(context.$children.length) { + const queue = [...context.$children] + while(queue.length > 0) { + const child = queue.shift(); + if(key == 'component' && (child.type?.name === name || child.$?.type?.name === name)) { + result.push(child) + } else if(child.$refs && child.$refs[name]) { + result = child.$refs[name] + } else if(nameMap[child.id] === name){ + result.push(child) + } else { + child.$children && (queue.push(...child.$children)); + } + if(result.length && !needAll) { + return; + } + } + } + return needAll ? result : result[0] + } +} +// #endif +// #ifdef H5 +function selectH5Component(key: string, name: string, context: any, needAll: boolean) { + const {_, component } = context + const child = {component: _ || component || context, children: null , subTree: null, props: null} + let result = [] + let queue = [child] + while(queue.length > 0 ) { + const child = queue.shift() + const {component, children , props, subTree} = child + if(key === 'component' && component?.type?.name == name) { + result.push(component) + } else if(key === 'ref' && component && (props?.ref == name || component[key][name])) { + if(props?.ref == name) { + //exposed + result.push(component) + } else if(component[key][name]) { + result.push(component[key][name]) + } + } else if(key !== 'ref' && component?.exposed && new RegExp(`\\b${name}\\b`).test(component.attrs[key])) { + // exposed + result.push(component) + } else if(children && Array.isArray(children)) { + queue.push(...children) + } else if(!component && subTree) { + queue.push(subTree) + } else if(component?.subTree) { + queue.push(component.subTree) + } + if(result.length && !needAll) { + break + } + } + return needAll ? result : result[0] +} +// #endif +// #ifdef APP +function selectAPPComponent(key: string, name: string, context: any, needAll: boolean, node: boolean) { + let result = [] + // const {_, component} = context + // const child = {component: _ || component || context, children: null, props: null, subTree: null} + const queue = [context] + while(queue.length > 0) { + const child = queue.shift() + const {component, children, props, subTree} = child + const isComp = component && props && component.exposed && !node + if(key == 'component' && child.type && child.type.name === name) { + result.push(component) + } else if(props?.[key] === name && node) { + result.push(child) + } else if(key === 'ref' && isComp && (props.ref === name || props.ref_key === name)) { + // exposed + result.push(component) + } else if(key !== 'ref' && isComp && new RegExp(`\\b${name}\\b`).test(props[key])) { + // exposed + result.push(component) + } + // else if(component && component.subTree && Array.isArray(component.subTree.children)){ + // queue.push(...component.subTree.children) + // } + else if(subTree) { + queue.push(subTree) + } else if(component && component.subTree){ + queue.push(component.subTree) + } + else if(children && Array.isArray(children)) { + queue.push(...children) + } + if(result.length && !needAll) { + break; + } + } + return needAll ? result : result[0] +} +// #endif +export function selectAllComponent(selector: string, options: SelectOptions = {}) { + // . class + // # id + // $ ref + // @ component name + const reg = /^(\.|#|@|\$)([a-zA-Z_0-9\-]+)$/; + if(!reg.test(selector)) return null + let { context, needAll = true, node} = options + const [,prefix, name] = selector.match(reg) + const symbolMappings = {'.': 'class', '#': 'id', '$':'ref', '@':'component'} + + const key = symbolMappings [prefix] //prefix === '.' ? 'class' : prefix === '#' ? 'id' : 'ref'; + // #ifdef MP + return selectMPComponent(key, name, context, needAll) + // #endif + // #ifdef H5 + return selectH5Component(key, name, context, needAll) + // #endif + // #ifdef APP + return selectAPPComponent(key, name, context, needAll, node) + // #endif +} \ No newline at end of file diff --git a/uni_modules/lime-shared/selectComponent/index.ts b/uni_modules/lime-shared/selectComponent/index.ts new file mode 100644 index 0000000..1e571c5 --- /dev/null +++ b/uni_modules/lime-shared/selectComponent/index.ts @@ -0,0 +1,7 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +export { selectComponent } from './vue' +// #endif +// #ifdef UNI-APP-X +export { selectComponent } from './uvue' +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/selectComponent/uvue.ts b/uni_modules/lime-shared/selectComponent/uvue.ts new file mode 100644 index 0000000..c2aa2bc --- /dev/null +++ b/uni_modules/lime-shared/selectComponent/uvue.ts @@ -0,0 +1,75 @@ +// @ts-nocheck +import { type ComponentPublicInstance } from 'vue'; +// #ifdef APP +function findChildren(selector: string, context: ComponentPublicInstance, needAll: boolean): ComponentPublicInstance [] | null{ + let result:ComponentPublicInstance[] = [] + + if(context !== null && context.$children.length > 0) { + const queue:ComponentPublicInstance[] = [...context.$children]; + while(queue.length > 0) { + const child = queue.shift(); + const name = child?.$options?.name; + if(name == selector) { + result.push(child as ComponentPublicInstance) + } else { + const children = child?.$children + if(children !== null) { + queue.push(...children) + } + } + if(result.length > 0 && !needAll) { + break; + } + } + } + if(result.length > 0) { + return result + } + return null +} + +class Query { + context : ComponentPublicInstance | null = null + selector : string = '' + // components : ComponentPublicInstance[] = [] + constructor(selector : string, context : ComponentPublicInstance | null) { + this.selector = selector + this.context = context + } + in(context : ComponentPublicInstance) : Query { + return new Query(this.selector, context) + } + find(): ComponentPublicInstance | null { + const selector = this.selector + if(selector == '') return null + const component = findChildren(selector, this.context!, false) + return component != null ? component[0]: null + } + findAll():ComponentPublicInstance[] | null { + const selector = this.selector + if(selector == '') return null + return findChildren(selector, this.context!, true) + } + closest(): ComponentPublicInstance | null { + const selector = this.selector + if(selector == '') return null + let parent = this.context!.$parent + let name = parent?.$options?.name; + while (parent != null && (name == null || selector != name)) { + parent = parent.$parent + if (parent != null) { + name = parent.$options.name + } + } + return parent + } +} + +export function selectComponent(selector: string): Query{ + return new Query(selector, null) +} +// #endif + +// selectComponent('selector').in(this).find() +// selectComponent('selector').in(this).findAll() +// selectComponent('selector').in(this).closest() diff --git a/uni_modules/lime-shared/selectComponent/uvue.uts b/uni_modules/lime-shared/selectComponent/uvue.uts new file mode 100644 index 0000000..c2aa2bc --- /dev/null +++ b/uni_modules/lime-shared/selectComponent/uvue.uts @@ -0,0 +1,75 @@ +// @ts-nocheck +import { type ComponentPublicInstance } from 'vue'; +// #ifdef APP +function findChildren(selector: string, context: ComponentPublicInstance, needAll: boolean): ComponentPublicInstance [] | null{ + let result:ComponentPublicInstance[] = [] + + if(context !== null && context.$children.length > 0) { + const queue:ComponentPublicInstance[] = [...context.$children]; + while(queue.length > 0) { + const child = queue.shift(); + const name = child?.$options?.name; + if(name == selector) { + result.push(child as ComponentPublicInstance) + } else { + const children = child?.$children + if(children !== null) { + queue.push(...children) + } + } + if(result.length > 0 && !needAll) { + break; + } + } + } + if(result.length > 0) { + return result + } + return null +} + +class Query { + context : ComponentPublicInstance | null = null + selector : string = '' + // components : ComponentPublicInstance[] = [] + constructor(selector : string, context : ComponentPublicInstance | null) { + this.selector = selector + this.context = context + } + in(context : ComponentPublicInstance) : Query { + return new Query(this.selector, context) + } + find(): ComponentPublicInstance | null { + const selector = this.selector + if(selector == '') return null + const component = findChildren(selector, this.context!, false) + return component != null ? component[0]: null + } + findAll():ComponentPublicInstance[] | null { + const selector = this.selector + if(selector == '') return null + return findChildren(selector, this.context!, true) + } + closest(): ComponentPublicInstance | null { + const selector = this.selector + if(selector == '') return null + let parent = this.context!.$parent + let name = parent?.$options?.name; + while (parent != null && (name == null || selector != name)) { + parent = parent.$parent + if (parent != null) { + name = parent.$options.name + } + } + return parent + } +} + +export function selectComponent(selector: string): Query{ + return new Query(selector, null) +} +// #endif + +// selectComponent('selector').in(this).find() +// selectComponent('selector').in(this).findAll() +// selectComponent('selector').in(this).closest() diff --git a/uni_modules/lime-shared/selectComponent/vue.ts b/uni_modules/lime-shared/selectComponent/vue.ts new file mode 100644 index 0000000..9fca0cd --- /dev/null +++ b/uni_modules/lime-shared/selectComponent/vue.ts @@ -0,0 +1,149 @@ +// @ts-nocheck +// #ifdef MP +function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean) { + const { proxy, $vm } = context + context = $vm || proxy + if ((selector.startsWith('.') || selector.startsWith('#'))) { + const queue = [context] + let result = null + while (queue.length > 0) { + const child = queue.shift(); + const flag = child?.selectComponent(selector) + if (flag) { + if (!needAll) { return result = flag.$vm } + return result = child.selectAllComponents(selector).map(item => item.$vm) + } else { + child.$children && (queue.push(...child.$children)); + } + } + return result + } else { + const { $templateRefs } = context.$ + const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector + const nameMap = {} + for (var i = 0; i < $templateRefs.length; i++) { + const item = $templateRefs[i] + nameMap[item.i] = item.r + } + let result = [] + if (context.$children.length) { + const queue = [...context.$children] + while (queue.length > 0) { + const child = queue.shift(); + if (child.type?.name === selectorValue || child.$?.type?.name === selectorValue) { + result.push(child) + } else if (child.$refs && child.$refs[selectorValue]) { + result = child.$refs[selectorValue] + } else if (nameMap[child.id] === selectorValue) { + result.push(child) + } else { + child.$children && (queue.push(...child.$children)); + } + if (result.length && !needAll) { + return; + } + } + } + return needAll ? result : result[0] + } +} +// #endif + +// #ifdef H5 +function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean){ + const {_, component } = context + const child = {component: _ || component || context, children: null , subTree: null, props: null} + let result = [] + let queue = [child] + const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector + while(queue.length > 0 ) { + const child = queue.shift() + const {component, children , props, subTree} = child + if(component?.type?.name == selectorValue) { + result.push(component) + } else if(selector.startsWith('$') && component && (props?.ref == selectorValue || component[key][selectorValue])) { + if(props?.ref == selectorValue) { + //exposed + result.push(component) + } else if(component[key][selectorValue]) { + result.push(component[key][selectorValue]) + } + } else if(!selector.startsWith('$') && component?.exposed && new RegExp(`\\b${selectorValue}\\b`).test(component.attrs[key])) { + // exposed + result.push(component) + } else if(children && Array.isArray(children)) { + queue.push(...children) + } else if(!component && subTree) { + queue.push(subTree) + } else if(component?.subTree) { + queue.push(component.subTree) + } + if(result.length && !needAll) { + break + } + } + return needAll ? result : result[0] +} +// #endif + +// #ifdef APP +function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean){ + let result = [] + const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector + const queue = [context] + while(queue.length > 0) { + const child = queue.shift() + const {component, children, props, subTree} = child + const isComp = component && props && component.exposed && !node + if(child.type && child.type.name === selectorValue) { + result.push(component) + } else if(props?.[key] === selectorValue && node) { + result.push(child) + } else if(selector.startsWith('$') && isComp && (props.ref === selectorValue || props.ref_key === selectorValue)) { + // exposed + result.push(component) + } else if(!selector.startsWith('$') && isComp && new RegExp(`\\b${selectorValue}\\b`).test(props[key])) { + // exposed + result.push(component) + } + else if(subTree) { + queue.push(subTree) + } else if(component && component.subTree){ + queue.push(component.subTree) + } + else if(children && Array.isArray(children)) { + queue.push(...children) + } + if(result.length && !needAll) { + break; + } + } + return needAll ? result : result[0] +} +// #endif + +class Query { + context : ComponentPublicInstance | null = null + selector : string = '' + // components : ComponentPublicInstance[] = [] + constructor(selector : string, context : ComponentPublicInstance | null) { + this.selector = selector + this.context = context + } + in(context : ComponentPublicInstance) : Query { + return new Query(this.selector, context) + } + find() : ComponentPublicInstance | null { + return findChildren(this.selector, this.context, false) + } + findAll() : ComponentPublicInstance[] | null { + return findChildren(this.selector, this.context, true) + } + closest() : ComponentPublicInstance | null { + return null + } +} + +export function selectComponent(selector: string) { + return new Query(selector) +} \ No newline at end of file diff --git a/uni_modules/lime-shared/selectElement/index.ts b/uni_modules/lime-shared/selectElement/index.ts new file mode 100644 index 0000000..fbe5fb4 --- /dev/null +++ b/uni_modules/lime-shared/selectElement/index.ts @@ -0,0 +1,277 @@ +// @ts-nocheck +import {isDef} from '../isDef' +// #ifdef UNI-APP-X +import {type ComponentPublicInstance} from '../vue' +// #endif + +type HasSelectorFunc = (selector : string, element : UniElement) => boolean + +const hasSelectorClassName : HasSelectorFunc = (selector : string, element : UniElement) : boolean => { + return element.classList.includes(selector) +} +const hasSelectorId : HasSelectorFunc = (selector : string, element : UniElement) : boolean => { + return element.getAttribute("id") == selector +} +const hasSelectorTagName : HasSelectorFunc = (selector : string, element : UniElement) : boolean => { + return element.tagName!.toLowerCase() == selector.toLowerCase() +} + +type ProcessSelectorResult = { + selectorValue : string + hasSelector : HasSelectorFunc +} +const processSelector = (selector : string) : ProcessSelectorResult => { + + const selectorValue = /#|\./.test(selector) ? selector.substring(1) : selector + let hasSelector : HasSelectorFunc + + if (selector.startsWith('.')) { + hasSelector = hasSelectorClassName + } else if (selector.startsWith('#')) { + hasSelector = hasSelectorId + } else { + hasSelector = hasSelectorTagName + } + + return { + selectorValue, + hasSelector + } as ProcessSelectorResult +} + + +function isNotEmptyString(str:string): boolean { + return str.length > 0; +} + +function isElement(element:UniElement|null):boolean { + return isDef(element) && element?.tagName != 'COMMENT'; +} + +type ElementArray = Array +class Query { + context : ComponentPublicInstance | null = null + selector : string = '' + elements : ElementArray = [] + constructor(selector : string | null, context : ComponentPublicInstance | null) { + this.context = context + if(selector != null){ + this.selector = selector + } + this.find(this.selector) + } + in(context : ComponentPublicInstance) : Query { + return new Query(this.selector, context) + } + findAll(selector : string): Query { + if (isDef(this.context)) { + const root = this.context?.$el //as Element | null; + if (isDef(root)) { + this.elements = [root!] //as ElementArray + } + const { selectorValue, hasSelector } = processSelector(selector) + const foundElements : ElementArray = []; + + function findChildren(element : UniElement) { + element.children.forEach((child : UniElement) => { + if (hasSelector(selectorValue, child)) { + foundElements.push(child) + } + }) + } + this.elements.forEach(el => { + findChildren(el!); + }); + this.elements = foundElements + } else if (selector.startsWith('#')) { + const element = uni.getElementById(selector) + if (isElement(element!)) { + this.elements = [element] + } + } + return this; + } + /** + * 在当前元素集合中查找匹配的元素 + */ + find(selector : string) : Query { + if (isDef(this.context)) { + const root = this.context?.$el //as Element | null; + if (isElement(root)) { + this.elements = [root] //as ElementArray + } + if(isNotEmptyString(selector) && this.elements.length > 0){ + const { selectorValue, hasSelector } = processSelector(selector) + const foundElements : ElementArray = []; + function findChildren(element : UniElement) { + element.children.forEach((child : UniElement) => { + if (hasSelector(selectorValue, child) && foundElements.length < 1) { + foundElements.push(child) + } + if (foundElements.length < 1) { + findChildren(child); + } + }) + } + this.elements.forEach(el => { + findChildren(el!); + }); + this.elements = foundElements + } + + } else if (selector.startsWith('#')) { + const element = uni.getElementById(selector) + if (isElement(element!)) { + this.elements = [element] + } + } + return this; + } + /** + * 获取当前元素集合的直接子元素 + */ + children() : Query { + // if (this.elements.length > 0) { + // const children = this.elements.reduce((acc, el) => [...acc, ...Array.from(el.children)], []); + // this.elements = children; + // } + return this; + } + /** + * 获取当前元素集合的父元素 + */ + parent() : Query { + // if (this.elements.length > 0) { + // const parents = this.elements.map(el => el.parentElement).filter(parent => parent !== null) as ElementArray; + // this.elements = parents + // // this.elements = Array.from(new Set(parents)); + // } + return this; + } + /** + * 获取当前元素集合的兄弟元素 + */ + siblings() : Query { + // if (this.elements.length > 0) { + // const siblings = this.elements.reduce((acc, el) => [...acc, ...Array.from(el.parentElement?.children || [])], []); + // this.elements = siblings.filter(sibling => sibling !== null && !this.elements?.includes(sibling)); + // } + return this; + } + /** + * 获取当前元素集合的下一个兄弟元素 + */ + next() : Query { + // if (this.elements.length > 0) { + // const nextElements = this.elements.map(el => el.nextElementSibling).filter(next => next !== null) as ElementArray; + // this.elements = nextElements; + // } + return this; + } + /** + * 获取当前元素集合的上一个兄弟元素 + */ + prev() : Query { + // if (this.elements.length > 0) { + // const prevElements = this.elements.map(el => el.previousElementSibling).filter(prev => prev !== null) as ElementArray; + // this.elements = prevElements; + // } + return this; + } + /** + * 从当前元素开始向上查找匹配的元素 + */ + closest(selector : string) : Query { + if (isDef(this.context)) { + // && this.context.$parent != null && this.context.$parent.$el !== null + if(this.elements.length == 0 && isDef(this.context?.$parent) && isElement(this.context!.$parent?.$el)){ + this.elements = [this.context!.$parent?.$el!] + } + + const selectorsArray = selector.split(',') + // const { selectorValue, hasSelector } = processSelector(selector) + const processedSelectors = selectorsArray.map((selector: string):ProcessSelectorResult => processSelector(selector)) + const closestElements = this.elements.map((el) : UniElement | null => { + let closestElement : UniElement | null = el + while (closestElement !== null) { + // if (hasSelector(selectorValue, closestElement)) { + // break; + // } + const isMatchingSelector = processedSelectors.some(({selectorValue, hasSelector}):boolean => { + return hasSelector(selectorValue, closestElement!) + }) + if(isMatchingSelector){ + break; + } + closestElement = closestElement.parentElement; + } + return closestElement + }) + this.elements = closestElements.filter((closest : UniElement | null) : boolean => isDef(closest))// as ElementArray + + } + return this; + } + + /** + * 从当前元素集合中过滤出匹配的元素 + */ + filter() : Query { + + return this; + } + /** + * 从当前元素集合中排除匹配的元素 + */ + not() { } + /** + * 从当前元素集合中查找包含匹配元素的元素 + */ + has() { } + /** + * 获取当前元素集合的第一个 + */ + first() : Query { + if (this.elements.length > 0) { + // this.elements = [this.elements[0]]; + } + return this; + } + /** + * 最后一个元素 + */ + last() : Query { + if (this.elements.length > 0) { + // this.elements = [this.elements[this.elements.length - 1]]; + } + return this; + } + /** + * 获取当前元素在其兄弟元素中的索引 + */ + index() : number | null { + // if (this.elements.length > 0 && this.elements.length > 0 && this.elements[0].parentElement !== null) { + // return Array.from(this.elements[0].parentElement.children).indexOf(this.elements[0]); + // } + return null; + } + get(index : number) : UniElement | null { + if (this.elements.length > index) { + return this.elements[index] //as Element + } + return null + } +} + +export function selectElement(selector : string | null = null) : Query { + // if(typeof selector == 'string' || selector == null){ + // return new Query(selector as string | null, null) + // } + // else if(selector instanceof ComponentPublicInstance){ + // return new Query(null, selector) + // } + return new Query(selector, null) +} + +// $('xxx').in(this).find('xxx') +// $('xxx').in(this).get() \ No newline at end of file diff --git a/uni_modules/lime-shared/shuffle/index.ts b/uni_modules/lime-shared/shuffle/index.ts new file mode 100644 index 0000000..5b3ab51 --- /dev/null +++ b/uni_modules/lime-shared/shuffle/index.ts @@ -0,0 +1,16 @@ +// @ts-nocheck +/** + * 随机化数组中元素的顺序,使用 Fisher-Yates 算法 + * @description 函数接受一个数组作为参数,返回一个新的数组,其中包含原数组随机化顺序后的元素。 + * @param arr 要随机化的数组 + * @returns 一个新的数组,其中包含原数组随机化顺序后的元素。 + */ +export function shuffle(arr : T[]) : T[] { + for (let i = arr.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)) + const temp = arr[i] + arr[i] = arr[j] + arr[j] = temp + } + return arr +} \ No newline at end of file diff --git a/uni_modules/lime-shared/sleep/index.ts b/uni_modules/lime-shared/sleep/index.ts new file mode 100644 index 0000000..e93cc1b --- /dev/null +++ b/uni_modules/lime-shared/sleep/index.ts @@ -0,0 +1,44 @@ +// @ts-nocheck +/** + * 延迟指定时间后解析的 Promise + * @param delay 延迟的时间(以毫秒为单位),默认为 300 毫秒 + * @returns 一个 Promise,在延迟结束后解析 + */ + + +// #ifdef UNI-APP-X && APP +function sleep(delay: number = 300):Promise { + return new Promise((resolve):void => {setTimeout(() => {resolve()}, delay)}); +} +export { + sleep +} + +// #endif + +// #ifndef UNI-APP-X && APP +export const sleep = (delay: number = 300) => + new Promise(resolve => setTimeout(resolve, delay)); + +// #endif + +// 示例 +// async function example() { +// console.log("Start"); + +// // 延迟 1 秒后执行 +// await sleep(1000); +// console.log("1 second later"); + +// // 延迟 500 毫秒后执行 +// await sleep(500); +// console.log("500 milliseconds later"); + +// // 延迟 2 秒后执行 +// await sleep(2000); +// console.log("2 seconds later"); + +// console.log("End"); +// } + +// example(); \ No newline at end of file diff --git a/uni_modules/lime-shared/stringifyStyle/index.ts b/uni_modules/lime-shared/stringifyStyle/index.ts new file mode 100644 index 0000000..1836ca9 --- /dev/null +++ b/uni_modules/lime-shared/stringifyStyle/index.ts @@ -0,0 +1,158 @@ +// @ts-nocheck +/** + * 驼峰命名转短横线命名 + * @param str - 需要转换的字符串 + * @returns 转换后的短横线命名字符串 + */ +function toKebabCase(str : string) : string { + return str + // 1. 字母+数字+连续大写视为整体:"e2XL" → "e-2XL" + .replace(/([a-z])(\d+[A-Z]{2,})/g, '$1-$2') + // 2. 字母+连续大写视为整体:"eSM" → "e-SM", "sXS" → "s-XS" + .replace(/([a-z])([A-Z]{2,})/g, '$1-$2') + // 3. 小写+大写常规边界:"tS" → "t-S", "eB" → "e-B" + .replace(/([a-z])([A-Z])/g, '$1-$2') + // 4. 字母+数字边界:"y50" → "y-50" + .replace(/([a-zA-Z])(\d+)/g, '$1-$2') + .toLowerCase() +} + +// #ifndef UNI-APP-X +type UTSJSONObject = Record +// #endif + +export type StyleProp = + | string + | UTSJSONObject + | null + | undefined + | false + | StyleProp[] + +/** + * 把样式对象拼接成字符串,解决小程序不支持 styleObject 的问题 + * @description 支持多种参数类型的样式拼接,包括字符串、对象和数组 + * @param args 样式参数,可以是字符串、对象、null、undefined、false 或数组 + * @returns 拼接后的样式字符串 + * @example + * stringifyStyle('color: red') // 'color: red;' + * stringifyStyle({ color: 'red', fontSize: '14px' }) // 'color: red;font-size: 14px;' + * stringifyStyle(['color: red', 'background: blue']) // 'color: red;background: blue;' + * stringifyStyle('color: red', null, 'background: blue') // 'color: red;background: blue;' + * stringifyStyle({ color: 'red', display: false, opacity: 0 }) // 'color: red;opacity: 0;' + */ +export function stringifyStyle(...args : StyleProp[]) : string { + return stringifyStyleArray(args) +} + +function isValidStyleValue(value : StyleProp) : boolean { + if (value == null) return false; // 排除 null/undefined + if (typeof value == 'boolean') return false // 排除所有布尔值 + if (value == 0) return true + if (value == '') return false; // 排除空字符串 + if (typeof value == 'number') { + return isFinite(value as number); // 允许有效数字,排除 NaN/Infinity + } + + return true; // 字符串和其他情况 +} + + +/** + * 处理数组的样式 + * @description 用于内部递归处理数组类型的样式 + * @param args 样式数组 + * @returns 拼接后的样式字符串 + */ +function stringifyStyleArray(args : StyleProp[]) : string { + const result : string[] = [] + for (let i = 0; i < args.length; i++) { + const arg = args[i] + if (!isValidStyleValue(arg)) continue + if (typeof arg == 'string') { + result.push(arg as string) + } else if (Array.isArray(arg)) { + if ((arg as StyleProp[]).length > 0) { + const style = stringifyStyleArray(arg) + if (style != '') { + result.push(style) + } + } + } else if (typeof arg == 'object') { + // #ifndef APP-ANDROID + for (const key in arg) { + const value = arg[key] + if (isValidStyleValue(value)) { + result.push(`${toKebabCase(key)}:${value}`) + } + } + // #endif + // #ifdef APP-ANDROID + // #ifdef VUE3-VAPOR + for (const key in arg) { + const value = arg[key] + if (isValidStyleValue(value)) { + result.push(`${toKebabCase(key)}:${value}`) + } + } + // #endif + // #ifndef VUE3-VAPOR + (arg as UTSJSONObject).toMap().forEach((value, key) => { + if (isValidStyleValue(value)) { + result.push(`${toKebabCase(key)}:${value}`) + } + }) + // #endif + // #endif + } + } + + return result.join(';') +} + +/** + * 将对象转换为 CSS 自定义属性字符串 + * @param obj - 包含主题变量的对象 + * @param prefix - CSS 变量的前缀,默认为 '--l-' + * @returns CSS 变量字符串,例如 '--l-image-color: red; --l-bg: blue;' + */ +export function toCssVars(obj : UTSJSONObject, prefix = '--l-') : string { + const cssVars : string[] = []; + + if (typeof obj == 'object') { + // #ifndef APP-ANDROID + for (const key in obj) { + const value = obj[key] + if (isValidStyleValue(value)) { + const cssVarName = prefix + toKebabCase(key); + cssVars.push(`${cssVarName}:${value}`) + } + + } + // #endif + // #ifdef APP-ANDROID + // #ifdef VUE3-VAPOR + for (const key in obj) { + const value = obj[key] + if (isValidStyleValue(value)) { + const cssVarName = prefix + toKebabCase(key); + cssVars.push(`${cssVarName}:${value}`) + } + + } + // #endif + // #ifndef VUE3-VAPOR + (obj as UTSJSONObject).toMap().forEach((value, key) => { + if (isValidStyleValue(value)) { + const cssVarName = prefix + toKebabCase(key); + cssVars.push(`${cssVarName}:${value}`) + } + }) + // #endif + // #endif + + } + + + return cssVars.join(';') + ';'; // 加上最后的分号以符合 CSS 规范 +} \ No newline at end of file diff --git a/uni_modules/lime-shared/throttle/index.ts b/uni_modules/lime-shared/throttle/index.ts new file mode 100644 index 0000000..65604cb --- /dev/null +++ b/uni_modules/lime-shared/throttle/index.ts @@ -0,0 +1,89 @@ +// @ts-nocheck +/** + * 节流函数,用于限制函数的调用频率 + * @param fn 要进行节流的函数 + * @param interval 两次调用之间的最小间隔时间 + * @returns 节流后的函数 + */ +export type ThrottleOptions = { + /** + * 是否在节流开始时立即执行 + * @default true + */ + leading ?: boolean; + + /** + * 是否在节流结束后执行最后一次调用 + * @default true + */ + trailing ?: boolean; +} + + + +/** + * 节流函数,限制函数在一定时间内只能执行一次 + * @param func 需要节流的函数 + * @param wait 节流间隔时间(毫秒) + * @param options 配置选项 + * @param options.leading 是否在节流开始时立即执行(默认 true) + * @param options.trailing 是否在节流结束时执行最后一次调用(默认 true) + * @returns 返回节流后的函数 + */ +// #ifndef APP-ANDROID +export function throttle any>( + func : T, + wait : number, + options : ThrottleOptions = {} +) : (...args : Parameters) => void { + let lastCallTime = 0; + let timerId : ReturnType | null = null; + const { leading = true, trailing = true } = options; + return function (...args : Parameters) { + const now = Date.now(); + const timeSinceLastCall = now - lastCallTime; + // 1. 如果 leading=true 且距离上次调用超过 wait,立即执行 + if (leading && timeSinceLastCall >= wait) { + lastCallTime = now; + func.apply(this, args); + } + // 2. 如果 trailing=true,设置定时器在 wait 时间后执行最后一次调用 + else if (trailing && !timerId) { + timerId = setTimeout(() => { + lastCallTime = Date.now(); + func.apply(this, args); + timerId = null; + }, wait - timeSinceLastCall); + } + }; +} +// #endif + +// #ifdef APP-ANDROID +export function throttle( + func: (args : T) => void, + wait : number, + options : ThrottleOptions = {} +) : (args : T) => void { + let lastCallTime = 0; + let timerId = -1; + const { leading = true, trailing = true } = options; + return function (args : T) { + const now = Date.now(); + const timeSinceLastCall = now - lastCallTime; + // 1. 如果 leading=true 且距离上次调用超过 wait,立即执行 + if (leading && timeSinceLastCall >= wait) { + lastCallTime = now; + func(args); + } + // 2. 如果 trailing=true,设置定时器在 wait 时间后执行最后一次调用 + else if (trailing && timerId > -1) { + timerId = setTimeout(() => { + lastCallTime = Date.now(); + func(args); + timerId = -1; + }, wait - timeSinceLastCall); + } + }; +} +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/throttle/index_old.ts b/uni_modules/lime-shared/throttle/index_old.ts new file mode 100644 index 0000000..914be49 --- /dev/null +++ b/uni_modules/lime-shared/throttle/index_old.ts @@ -0,0 +1,112 @@ +// @ts-nocheck +/** + * 节流函数,用于限制函数的调用频率 + * @param fn 要进行节流的函数 + * @param delay 两次调用之间的最小间隔时间 + * @returns 节流后的函数 + */ + +// #ifndef UNI-APP-X && APP +// export function throttle(fn: (...args: any[]) => void, delay: number, options) { +// let flag = true; // 标记是否可以执行函数 + +// return (...args: any[]) => { +// if (flag) { +// flag = false; // 设置为不可执行状态 +// fn(...args); // 执行传入的函数 + +// setTimeout(() => { +// flag = true; // 经过指定时间后,设置为可执行状态 +// }, delay); +// } +// }; +// } + +export function throttle void>( + fn: T, + delay: number, + { leading = true, trailing = true }: { leading?: boolean; trailing?: boolean } = {} +): (...args: Parameters) => void { + let isCoolingDown = false; + let lastArgs: Parameters | null = null; + let timerId: ReturnType | null = null; + + const executeTrailing = () => { + if (trailing && lastArgs) { + fn(...lastArgs); + lastArgs = null; + } + isCoolingDown = false; + timerId = null; + }; + + return function (...args: Parameters) { + // 1. 如果不在冷却期,且 leading=true,立即执行 + if (!isCoolingDown && leading) { + fn(...args); + isCoolingDown = true; + timerId = setTimeout(executeTrailing, delay); + } + // 2. 如果在冷却期,记录最后一次调用的参数(用于 trailing) + else if (trailing) { + lastArgs = args; + } + }; +} +// #endif + + +// #ifdef UNI-APP-X && APP +// type Rfun = (...args: any[]) => void +// type Rfun = (...args: any[]) => void + +export function throttle( + fn: (args : T) => void, + delay: number):(args : T) => void { + let flag = true; // 标记是否可以执行函数 + + return (args : T) =>{ + if(flag){ + flag = false; + fn(args); + + setTimeout(()=>{ + flag = true; + }, delay) + } + } + // return (...args: any[]) => { + // // if (flag) { + // // flag = false; // 设置为不可执行状态 + // // fn(...args); // 执行传入的函数 + + // // setTimeout(() => { + // // flag = true; // 经过指定时间后,设置为可执行状态 + // // }, delay); + // // } + // }; +} + +// #endif + +// // 示例 +// // 定义一个被节流的函数 +// function handleScroll() { +// console.log("Scroll event handled!"); +// } + +// // 使用节流函数对 handleScroll 进行节流,间隔时间为 500 毫秒 +// const throttledScroll = throttle(handleScroll, 500); + +// // 模拟多次调用 handleScroll +// throttledScroll(); // 输出 "Scroll event handled!" +// throttledScroll(); // 不会输出 +// throttledScroll(); // 不会输出 + +// // 经过 500 毫秒后,再次调用 handleScroll +// setTimeout(() => { +// throttledScroll(); // 输出 "Scroll event handled!" +// }, 500); + + + diff --git a/uni_modules/lime-shared/toArray/index.ts b/uni_modules/lime-shared/toArray/index.ts new file mode 100644 index 0000000..e0840d2 --- /dev/null +++ b/uni_modules/lime-shared/toArray/index.ts @@ -0,0 +1,21 @@ +// @ts-nocheck +/** + * 将一个或多个元素转换为数组 + * @param item 要转换为数组的元素 + * @returns 转换后的数组 + */ +// #ifndef UNI-APP-X && APP +export const toArray = (item: T | T[]): T[] => Array.isArray(item) ? item : [item]; +// #endif + + +// #ifdef UNI-APP-X && APP +export function toArray(item: any): T[] { + return Array.isArray(item) ? item as T[] : [item as T]// as T[] +}; +// #endif +// 示例 +// console.log(toArray(5)); // 输出: [5] +// console.log(toArray("hello")); // 输出: ["hello"] +// console.log(toArray([1, 2, 3])); // 输出: [1, 2, 3] +// console.log(toArray(["apple", "banana"])); // 输出: ["apple", "banana"] \ No newline at end of file diff --git a/uni_modules/lime-shared/toBoolean/index.ts b/uni_modules/lime-shared/toBoolean/index.ts new file mode 100644 index 0000000..1af7395 --- /dev/null +++ b/uni_modules/lime-shared/toBoolean/index.ts @@ -0,0 +1,36 @@ +// @ts-nocheck +import { isNumber } from '../isNumber' +import { isString } from '../isString' +// 函数重载,定义多个函数签名 +// function toBoolean(value : any) : boolean; +// function toBoolean(value : string) : boolean; +// function toBoolean(value : number) : boolean; +// function toBoolean(value : boolean) : boolean; + +// #ifdef UNI-APP-X && APP +export function toBoolean(value : any | null) : boolean { + // 根据输入值的类型,返回相应的布尔值 + // if (isNumber(value)) { + // return (value as number) != 0; + // } + // if (isString(value)) { + // return `${value}`.length > 0; + // } + // if (typeof value == 'boolean') { + // return value as boolean; + // } + // #ifdef APP-IOS || APP-HARMONY + return value != null && value != undefined + // #endif + // #ifdef APP-ANDROID + return value != null + // #endif +} +// #endif + + +// #ifndef UNI-APP-X && APP +export function toBoolean(value : any | null) : value is NonNullable { + return !!value//value !== null && value !== undefined; +} +// #endif diff --git a/uni_modules/lime-shared/toNumber/index.ts b/uni_modules/lime-shared/toNumber/index.ts new file mode 100644 index 0000000..a8e1b1d --- /dev/null +++ b/uni_modules/lime-shared/toNumber/index.ts @@ -0,0 +1,28 @@ +// @ts-nocheck +/** + * 将字符串转换为数字 + * @param val 要转换的字符串 + * @returns 转换后的数字或原始字符串 + */ + +// #ifdef UNI-APP-X && APP +// function toNumber(val: string): number +// function toNumber(val: string): string +function toNumber(val: string): number|null { + const n = parseFloat(val); // 使用 parseFloat 函数将字符串转换为浮点数 + return isNaN(n) ? null : n; // 使用 isNaN 函数判断是否为非数字,返回转换后的数字或原始字符串 +} +export {toNumber} +// #endif + +// #ifndef UNI-APP-X && APP +export function toNumber(val: string): number | string { + const n = parseFloat(val); // 使用 parseFloat 函数将字符串转换为浮点数 + return isNaN(n) ? val : n; // 使用 isNaN 函数判断是否为非数字,返回转换后的数字或原始字符串 +} +// #endif + +// 示例 +// console.log(toNumber("123")); // 输出: 123 +// console.log(toNumber("3.14")); // 输出: 3.14 +// console.log(toNumber("hello")); // 输出: "hello" \ No newline at end of file diff --git a/uni_modules/lime-shared/uniqid/index.ts b/uni_modules/lime-shared/uniqid/index.ts new file mode 100644 index 0000000..b9ac5f8 --- /dev/null +++ b/uni_modules/lime-shared/uniqid/index.ts @@ -0,0 +1,17 @@ +// @ts-nocheck +let counter = 0; +export function uniqid(prefix : string = 'lime') { + // #ifdef WEB + if (typeof crypto !== 'undefined' && crypto.randomUUID) { + const uuid = crypto.randomUUID().replace(/-/g, '_'); + return `${prefix}_${uuid}`; + } + // #endif + + // fallback:时间戳 + 随机 + 计数器 + const time = Date.now().toString(36); // 时间戳(毫秒),确保跨刷新唯一 + const random = Math.random().toString(36).substring(2, 10).padEnd(8, '0'); // 随机部分,取前8位足够 + const count = (++counter).toString(36).padStart(4, '0'); // 计数器补零,避免太短 + + return `${prefix}_${time}_${random}_${count}`; +} \ No newline at end of file diff --git a/uni_modules/lime-shared/unitConvert/index.ts b/uni_modules/lime-shared/unitConvert/index.ts new file mode 100644 index 0000000..7a049a3 --- /dev/null +++ b/uni_modules/lime-shared/unitConvert/index.ts @@ -0,0 +1,94 @@ +// @ts-nocheck +import { isString } from '../isString' +import { isNumeric } from '../isNumeric' + +/** + * 单位转换函数,将字符串数字或带有单位的字符串转换为数字 + * @param value 要转换的值,可以是字符串数字或带有单位的字符串 + * @returns 转换后的数字,如果无法转换则返回0 + */ +// #ifndef UNI-APP-X && APP +export function unitConvert(value : string | number | null | undefined, base : number = 0) : number { + if (value == null) return NaN + // 如果是字符串数字 + if (isNumeric(value)) { + return Number(value); + } + // 如果有单位 + if (isString(value)) { + const reg = /^-?([0-9]+)?([.]{1}[0-9]+){0,1}(em|rpx|px|%)$/g; + const results = reg.exec(value); + if (!value || !results) { + return NaN; + } + const unit = results[3]; + const _value = parseFloat(value); + if (unit === 'rpx') { + return uni.upx2px(_value); + } + if (unit === 'px') { + return _value * 1; + } + if (unit == '%') { + return _value / 100 * base + } + // 如果是其他单位,可以继续添加对应的转换逻辑 + } + return NaN; +} +// #endif + + +// #ifdef UNI-APP-X && APP +import { isNumber } from '../isNumber' +export function unitConvert(value : any | null, base : number = 0) : number { + if (value == null) return NaN + if (isNumber(value)) { + return value as number + } + // 如果是字符串数字 + if (isNumeric(value)) { + return parseFloat(value as string); + } + // 如果有单位 + if (isString(value)) { + const reg = /^-?([0-9]+)?([.]{1}[0-9]+){0,1}(em|rpx|px|%)$/g; + const results = reg.exec(value as string); + if (results == null) { + return NaN; + } + const unit = results[3]; + const _value = parseFloat(value); + if (unit == 'rpx') { + return uni.rpx2px(_value) + } + if (unit == 'px') { + return _value; + } + if (unit == '%') { + return _value / 100 * base + } + // 如果是其他单位,可以继续添加对应的转换逻辑 + } + return NaN; +} +// #endif + +export function parseUnit( + // #ifndef UNI-APP-X && APP + value : string | number | null | undefined, + // #endif + // #ifdef UNI-APP-X && APP + value : string | number | null, + // #endif + base : number = 0 +) : number | null { + const result = unitConvert(value, base); + return isNaN(result) ? null : result; +} + +// 示例 +// console.log(unitConvert("123")); // 输出: 123 (字符串数字转换为数字) +// console.log(unitConvert("3.14em")); // 输出: 0 (无法识别的单位) +// console.log(unitConvert("20rpx")); // 输出: 根据具体情况而定 (根据单位进行转换) +// console.log(unitConvert(10)); // 输出: 10 (数字不需要转换) \ No newline at end of file diff --git a/uni_modules/lime-shared/useVModel/index.ts b/uni_modules/lime-shared/useVModel/index.ts new file mode 100644 index 0000000..270bca9 --- /dev/null +++ b/uni_modules/lime-shared/useVModel/index.ts @@ -0,0 +1,38 @@ +// @ts-nocheck +import {ref, watch, type Ref, ComputedRef } from '../vue' +type UseVModelOptions = { + value: ComputedRef | (() => T) + // 默认值 + defaultValue: T + // 变化回调 + onChange?: (value: T) => void + // 格式化函数(用于get时格式化返回值) + onFormat?: (value: T) => T + // 是否深度监听 + deep?: boolean + // 是否立即触发监听 + immediate?: boolean + // 事件名称 + eventName?: string + // 属性名称 + propName?: string +} + +export function useVModel(options: UseVModelOptions):Ref { + const { value, defaultValue, onChange, onFormat } = options + const innerValue = ref(value.value || defaultValue); + + watch(value, (newVal:T) => { + innerValue.value = onFormat?.(newVal) ?? newVal + }, + { immediate: true } + ) + watch( + innerValue, + (newVal: T) => { + onChange?.(newVal) + } + ) + + return innerValue +} \ No newline at end of file diff --git a/uni_modules/lime-shared/vue/index.ts b/uni_modules/lime-shared/vue/index.ts new file mode 100644 index 0000000..6428fca --- /dev/null +++ b/uni_modules/lime-shared/vue/index.ts @@ -0,0 +1,105 @@ +// @ts-nocheck + +// #ifdef VUE3 +export * from 'vue'; +// #endif + +// #ifndef VUE3 +// #ifndef VUE2 && APP +export * from '@vue/composition-api'; +// #endif + +// #ifdef VUE2 +export * from '@vue/composition-api'; +import * as _vue from '@vue/composition-api'; + +export function toValue(source) { + // 处理函数 + if (typeof source === 'function') { + return source(); + } + + // 处理 ref + if (_vue.isRef(source)) { + return source.value; + } + + // reactive 对象直接返回 + return source; +} + +// #endif + +// #ifdef VUE2 && APP +/** + * 在 Vue 2 中模拟 onScopeDispose + * 原理:利用组件的 beforeDestroy 钩子来执行清理函数 + */ +// export function onScopeDispose(fn) { +// if(_vue.onScopeDispose) { +// _vue.onScopeDispose(fn) +// } +// } + +// vue2 app computed无法响应 +export function computed(getterOrOptions) { + const isGetter = typeof getterOrOptions === 'function'; + const getter = isGetter ? getterOrOptions : getterOrOptions.get; + const setter = !isGetter ? getterOrOptions.set : undefined; + + if (typeof getter !== 'function') { + throw new Error('computed 的 getter 必须是一个函数'); + } + + if (!isGetter) { + if (!getterOrOptions || typeof getterOrOptions !== 'object') { + throw new Error('computed 参数必须是函数或包含 get 方法的对象'); + } + if (!getterOrOptions.get) { + throw new Error('computed 对象必须包含 get 方法'); + } + if (setter !== undefined && typeof setter !== 'function') { + throw new Error('computed 的 setter 必须是函数'); + } + } + + const internalValue = _vue.ref(getter()); + const result = _vue.customRef((track, trigger) => { + return { + get() { + track(); + return internalValue.value; + }, + set(newValue) { + internalValue.value = newValue + if (setter) { + setter(newValue) + } + trigger() + } + }; + }); + + const stop = _vue.watchEffect(() => { + const newValue = getter(); + internalValue.value = newValue + }) + + if(_vue.getCurrentScope()){ + _vue.onScopeDispose(() => { + stop(); + }); + } + + return result; +} +// #endif + + +// #ifdef APP-NVUE +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +// #endif + +// #endif \ No newline at end of file diff --git a/uni_modules/lime-shared/while/index.ts b/uni_modules/lime-shared/while/index.ts new file mode 100644 index 0000000..1b8a96b --- /dev/null +++ b/uni_modules/lime-shared/while/index.ts @@ -0,0 +1,55 @@ +// @ts-nocheck + +// 来自kux大佬的神之一手 +// 原地址 https://ext.dcloud.net.cn/plugin?id=23291 +export type ControlCommand = 'continue' | 'break' | null; + +export type ControllableWhileReturn = { + start: () => void; + abort: () => void; + execContinue: () => 'continue'; + execBreak: () => 'break'; +}; + +export type Controller = { + abort: () => void; +}; + +export function controllableWhile( + condition : () => boolean, + body: (controller: Controller) => ControlCommand +): ControllableWhileReturn { + let isActive = true; + + const controller: Controller = { + abort: () => { + isActive = false; + } + }; + + const execContinue = () => 'continue'; + const execBreak = () => 'break'; + + return { + start: () => { + // #ifdef APP-ANDROID + UTSAndroid.getDispatcher('io').async((_) => { + // #endif + while (isActive && condition()) { + const result = body(controller); + if (result == 'break') { + controller.abort(); + break; + } else if (result == 'continue') { + continue; + } + } + // #ifdef APP-ANDROID + }, null); + // #endif + }, + abort: controller.abort, + execContinue: execContinue, + execBreak: execBreak + } as ControllableWhileReturn; +} \ No newline at end of file diff --git a/uni_modules/lime-style/changelog.md b/uni_modules/lime-style/changelog.md new file mode 100644 index 0000000..1404b4f --- /dev/null +++ b/uni_modules/lime-style/changelog.md @@ -0,0 +1,50 @@ +## 0.2.5(2025-12-15) +- chore: 更新函数 +## 0.2.4(2025-11-14) +- feat: 优化create-var +## 0.2.3(2025-10-19) +- fix: 修复非uts环境使用set的问题 +## 0.2.2(2025-10-15) +- fix: 去掉版本判断 +## 0.2.1(2025-10-15) +- fix: 修复条件判断问题 +## 0.2.0(2025-10-01) +- fix: 修复uniapp主题变化报错问题 +## 0.1.9(2025-09-26) +- feat: 更新宫格暗黑hover颜色 +## 0.1.8(2025-09-08) +- feat: 去掉vue2的判断 +## 0.1.7(2025-08-15) +更新变量 +## 0.1.6(2025-06-20) +- feat: 放弃使用rpx +## 0.1.5(2025-06-20) +- fix: 修复 vue2 rpx转成px的问题 +## 0.1.4(2025-06-12) +- feat: 增加一些函数 +## 0.1.3(2025-05-07) +- feat: 增加`hairline`函数 +## 0.1.2(2025-04-24) +- feat: 根据官方建议,字体使用px +## 0.1.1(2025-03-25) +- feat: 更换rbgToHsv算法 +## 0.1.0(2025-03-13) +- feat: hbx4.56 Vue2 scss 预编译器默认已由 node-sass 更换为 dart-sass +## 0.0.9(2025-01-16) +- feat: 更新 +## 0.0.8(2024-12-15) +- fix: 修复vue2 不支持rgba(0,0,0,1%) +## 0.0.7(2024-12-11) +- feat: 增加除法 +## 0.0.6(2024-12-04) +- fix: 除法问题 +## 0.0.5(2024-11-20) +- feat: 增加flex +## 0.0.4(2024-11-20) +- feat: 增加flex +## 0.0.3(2024-09-30) +- fix: 由于 vue2 h5 css变量不支持rpx,故转成px +## 0.0.2(2024-09-23) +- fix: 修复 vue2 math.div 问题 +## 0.0.1(2024-09-02) +- init diff --git a/uni_modules/lime-style/color/colorPalette.scss b/uni_modules/lime-style/color/colorPalette.scss new file mode 100644 index 0000000..6408e72 --- /dev/null +++ b/uni_modules/lime-style/color/colorPalette.scss @@ -0,0 +1,236 @@ +/* #ifdef VUE3 */ +@use "sass:math"; +/* #endif */ + + + +$hueStep: 2; +$saturationStep1: 0.16; +$saturationStep2: 0.05; +$brightnessStep1: 0.05; +$brightnessStep2: 0.15; +$lightColorCount: 5; +$darkColorCount: 4; + +$darkColorMap: ( + (index: 7, opacity: 0.15), + (index: 6, opacity: 0.25), + (index: 5, opacity: 0.3), + (index: 5, opacity: 0.45), + (index: 5, opacity: 0.65), + (index: 5, opacity: 0.85), + (index: 4, opacity: 0.9), + (index: 3, opacity: 0.95), + (index: 2, opacity: 0.97), + (index: 1, opacity: 0.98) +); + +@function div($dividend, $divisor) { + /* #ifdef VUE3 */ + @return math.div($dividend, $divisor); + /* #endif + /* #ifndef VUE3 */ + @return $dividend / $divisor; + /* #endif */ +} + +// 求一个数的n次幂 +@function pow($number, $n) { + $ret: 1; + @if $n >= 0 { + @for $i from 1 through $n { + $ret: $ret * $number; + } + } @else { + @for $i from $n to 0 { + $ret: $ret / $number; + } + } + @return $ret; +} + +// 浮点数保留小数位 +@function toFixed($float, $digits: 2) { + $pow: pow(10, $digits); + @return div(round($float * $pow) , $pow); +} + + +// 根据颜色获取对应的hsv,在tinycolor中首先进行了归一化处理,这里没有 +// 返回的结果h是0~360,代表的是色相的角度, sv的范围0-1 +@function rbgToHsv($limeColor) { + $r: red($limeColor); + $g: green($limeColor); + $b: blue($limeColor); + $max: max($r, $g, $b); + $min: min($r, $g, $b); + $diff: $max - $min; + $h: 0; + + @if $max == $min { + $h: 0 + } @else if $max == $r { + $h: div(60 * ($g - $b) , $diff) + if($g >= $b, 0, 360); + } @else if $max == $g { + $h: 60 * div($b - $r , $diff) + 120 //($b - $r) / $diff + 120; + } @else if $max == $b{ + $h: div(60 * ($r - $g) , $diff) + 240; + } + + $s: if($max == 0, 0, div($diff , $max)); + $v: div($max , 255); + + @return $h, $s, $v; +} +// hsv转化成rgb,借鉴了tinycolor的做法,避免通过$th的值判断来获取对应的rgb的取值 +// $t1~4的计算目前不清楚为什么这样做 +@function hsvTorgb($h, $s, $v) { + // $th: floor(div($h , 60)); + // $t1: div($h , 60) - $th; + // $t2: $v * (1 - $s); + // $t3: $v * (1 - $t1 * $s); + // $t4: $v * (1 - (1 - $t1) * $s); + // $i: $th + 1; + // $r: nth(($v, $t3, $t2, $t2, $t4, $v), $i); + // $g: nth(($t4, $v, $v, $t3, $t2, $t2), $i); + // $b: nth(($t2, $t2, $t4, $v, $v, $t3), $i); + + // @return rgb($r * 255, $g * 255, $b * 255); + $h: $h % 360; + + // 2. 计算色相区域 (0~5),对应6个60度区间 + $th: floor(div($h, 60)) % 6; // 强制th在0~5之间 + + // 3. 计算中间变量 + $t1: div($h, 60) - $th; + $t2: $v * (1 - $s); + $t3: $v * (1 - $t1 * $s); + $t4: $v * (1 - (1 - $t1) * $s); + + // 4. 根据色相区域选择RGB分量 + $i: $th + 1; // 索引范围锁定为1~6 + + // 定义各区域对应的RGB系数 + $r-values: ($v, $t3, $t2, $t2, $t4, $v); + $g-values: ($t4, $v, $v, $t3, $t2, $t2); + $b-values: ($t2, $t2, $t4, $v, $v, $t3); + + // 5. 获取RGB分量并转换为0~255整数 + $r: nth($r-values, $i) * 255; + $g: nth($g-values, $i) * 255; + $b: nth($b-values, $i) * 255; + + // 6. 返回RGB颜色值 + @return rgb(round($r), round($g), round($b)); +} + +//转换色相 +@function getHue($h, $i, $isLight) { + $hue: null; + @if $h >= 60 and $h <= 240 { + $hue: if($isLight, $h - $hueStep * $i, $h + $hueStep * $i); + } @else { + $hue: if($isLight, $h + $hueStep * $i, $h - $hueStep * $i); + } + + $hue: ($hue + 360) % 360; + + @return round($hue); +} + +// 转换饱和度 +@function getSaturation($s, $i, $isLight) { + $saturation: null; + @if $isLight { + $saturation: $s - $saturationStep1 * $i; + } @else if $i == $darkColorCount { + $saturation: $s + $saturationStep1; + } @else { + $saturation: $s + $saturationStep2 * $i; + } + $saturation: min($saturation, 1); + + @if $isLight and $i == $lightColorCount and $saturation > 0.1 { + $saturation: 0.1; + } + + $saturation: max($saturation, 0.06); + + @return toFixed($saturation, 2); +} + +// 转换明度 +@function getValue($v, $i, $isLight) { + $value: min( + if( + $isLight, + $v + $brightnessStep1 * $i, + $v - $brightnessStep2 * $i + ), + 1); + + @return toFixed($value, 2); +} + + +@function mix($rgb1, $rgb2, $amount){ + $p: $amount; + $r: (red($rgb2) - red($rgb1)) * $p + red($rgb1); + $g: (green($rgb2) - green($rgb1)) * $p + green($rgb1); + $b: (blue($rgb2) - blue($rgb1)) * $p + blue($rgb1); + + @return rgb($r, $g, $b) +} + +// 根据颜色和对应的色板位置,计算出对应的色板颜色 +@function genColor($color, $index, $theme: 'default' , $bgColor: #242424) { + $isLight: if($index <= 6, true, false); + $hsv: rbgToHsv($color); + //这里将i转换成以主色为中心,两侧的i值逐渐增大 + $i: if($isLight, $lightColorCount + 1 - $index, $index - $lightColorCount - 1); + + @if $theme == 'dark' { + $item: nth($darkColorMap, $index); + $index2: map-get($item, index); + $opacity: map-get($item, opacity); + + $rgb: genColor($color, $index2 + 1); + + // @return $rgb; + @return mix( + $bgColor, + $rgb, + $opacity + ) + } + + @return hsvTorgb( + getHue(nth($hsv, 1), $i, $isLight), + getSaturation(nth($hsv, 2), $i, $isLight), + getValue(nth($hsv, 3), $i, $isLight) + ); +} + +@function getSolidColor($base-color, $brightness) { + // 验证输入参数 + @if type-of($base-color) != 'color' { + @error "Expected color for $base-color, but got #{type-of($base-color)}: #{$base-color}"; + } + + @if type-of($brightness) != 'number' { + @error "Expected number for $brightness, but got #{type-of($brightness)}: #{$brightness}"; + } + + // 获取基础颜色的HSL值 + $hue: hue($base-color); + $saturation: saturation($base-color); + $lightness: lightness($base-color); + + // 计算新的亮度值 (限制在0-100%范围内) + $new-lightness: clamp(0%, $lightness + $brightness, 100%); + + // 使用HSL函数创建新颜色 + $new-color: hsl($hue, $saturation, $new-lightness); + + @return $new-color; +} \ No newline at end of file diff --git a/uni_modules/lime-style/color/colors.scss b/uni_modules/lime-style/color/colors.scss new file mode 100644 index 0000000..2f1a1d5 --- /dev/null +++ b/uni_modules/lime-style/color/colors.scss @@ -0,0 +1,18 @@ +// 品牌色-主色 +$primary-color: #3283ff!default; +// 错误色 +$error-color: #FF4D4F!default; +// 警告色 +$warning-color: #ffb400!default;// #FF7D00!default; +// 信息色 +$info-color: $primary-color!default; +// 成功色 +$success-color: #34c471!default; + +$blue: #3283ff!default; +$red: #FF4D4F!default; +$orange: #ffb400!default; +$yellow: #fcd53f!default; +$green: #34c471 !default; +$white: #fff; +$black: #000; diff --git a/uni_modules/lime-style/functions.scss b/uni_modules/lime-style/functions.scss new file mode 100644 index 0000000..8332c1a --- /dev/null +++ b/uni_modules/lime-style/functions.scss @@ -0,0 +1,11 @@ +/* #ifdef VUE3 */ +@use "sass:math"; +// #endif +@function divide($dividend, $divisor) { + /* #ifdef VUE3 */ + @return math.div($dividend, $divisor); + /* #endif + /* #ifndef VUE3 */ + @return $dividend / $divisor; + /* #endif +} diff --git a/uni_modules/lime-style/hairline.uts b/uni_modules/lime-style/hairline.uts new file mode 100644 index 0000000..8dc0d89 --- /dev/null +++ b/uni_modules/lime-style/hairline.uts @@ -0,0 +1,153 @@ +import { unitConvert } from '@/uni_modules/lime-shared/unitConvert'; + +export type DrawBorderOptions = { + direction : 'top' | 'bottom' | 'left' | 'right'; + color ?: string; + colorKey ?: string; // 在dom中获取颜色 + startOffsetKey?: string; // 在dom哪个属性获取 + startOffset ?: number | string; // 支持数字或 CSS 字符串(如 '10px') + endOffset ?: number | string; + lineWidth ?: number; + watchSize ?: boolean; // 是否监听尺寸变化自动重绘 + immediate ?: boolean; // 是否立即绘制 + bordered?: boolean; + +} + +export type UseDrawBorderReturn = { + color: Ref, + renderBorder: () => void, + clearBorder: () => void; + dispose: () => void, +} +/** + * 在元素上绘制边框,并支持动态监听尺寸变化 + * @param elementRef 目标元素的 Ref + * @param options 边框配置 + * @returns 清理函数(用于卸载时取消监听) + */ +export function useDrawBorder( + elementRef : Ref, + options : DrawBorderOptions +):UseDrawBorderReturn { + let resizeObserver : UniResizeObserver | null = null; + const { watchSize = true, immediate = true } = options; + const defalutColor = '#e7e7e7' + const color = ref(options.color ?? defalutColor) + const bordered = ref(options.bordered ?? true) + let computedStartOffset = 0 + let computedEndOffset = 0 + + // 绘制边框 + const renderBorder = () => { + if (elementRef.value == null) return; + const ctx = elementRef.value!.getDrawableContext(); + if (ctx == null) return; + + const rect = elementRef.value!.getBoundingClientRect(); + ctx.reset(); + + const { + direction, + startOffset = 0, + endOffset = 0, + lineWidth = 0.5, + colorKey, + startOffsetKey, + } = options; + + + // 转换单位(如果是字符串,如 '10px') + if(computedStartOffset == 0) { + computedStartOffset = unitConvert((startOffsetKey != null ? elementRef.value?.style.getPropertyValue(startOffsetKey!) ?? startOffset : startOffset)) + } + if(computedEndOffset == 0) { + computedEndOffset = unitConvert(endOffset) + } + + if(color.value == defalutColor && colorKey != null) { + color.value = elementRef.value?.style.getPropertyValue(colorKey!) ?? defalutColor + // if(color.value.length == 0) { + // color.value = defalutColor + // } + } + ctx.strokeStyle = color.value; + ctx.lineWidth = lineWidth; + + // 根据方向计算坐标 + switch (direction) { + case 'top': + ctx.moveTo(computedStartOffset, 0); + ctx.lineTo(rect.width - computedEndOffset, 0); + break; + case 'bottom': + ctx.moveTo(computedStartOffset, rect.height - 0.25); + ctx.lineTo(rect.width - computedEndOffset, rect.height - 0.25); + break; + case 'left': + ctx.moveTo(0, computedStartOffset); + ctx.lineTo(0, rect.height - computedEndOffset); + break; + case 'right': + ctx.moveTo(rect.width, computedStartOffset); + ctx.lineTo(rect.width, rect.height - computedEndOffset); + break; + } + + ctx.stroke(); + ctx.update(); + }; + + const setupResizeObserver = () => { + // 监听尺寸变化(如果启用) + if (watchSize) { + if (resizeObserver == null) { + resizeObserver = new UniResizeObserver((entries : Array) => { + if(!bordered.value) return + renderBorder(); + }) + } + watchEffect(()=>{ + if (elementRef.value != null) { + resizeObserver!.observe(elementRef.value!); + } + }) + } + } + + + // 清理函数(卸载时取消监听) + const dispose = () => { + if (resizeObserver != null && elementRef.value != null) { + // resizeObserver.unobserve(elementRef.value!); + resizeObserver!.disconnect(); + resizeObserver = null; + } + }; + + const clearBorder = ()=> { + if (elementRef.value == null) return; + const ctx = elementRef.value!.getDrawableContext(); + if (ctx == null) return; + bordered.value = false + ctx.reset() + ctx.update() + } + + setupResizeObserver() + // 初始绘制 + if(immediate) { + renderBorder(); + } + + + + + return { + renderBorder, // 手动触发绘制 + dispose, // 清理监听 + clearBorder, + color + } as UseDrawBorderReturn + +} \ No newline at end of file diff --git a/uni_modules/lime-style/index.scss b/uni_modules/lime-style/index.scss new file mode 100644 index 0000000..b9711c7 --- /dev/null +++ b/uni_modules/lime-style/index.scss @@ -0,0 +1,7 @@ +@import './theme/default'; +@import './var'; +@import './mixins/ellipsis'; +@import './mixins/hairline'; +@import './mixins/create'; +@import './mixins/directionalProperty'; +// @import './mixins/useTheme'; \ No newline at end of file diff --git a/uni_modules/lime-style/index.uts b/uni_modules/lime-style/index.uts new file mode 100644 index 0000000..208438f --- /dev/null +++ b/uni_modules/lime-style/index.uts @@ -0,0 +1,3 @@ +export * from './token/useThemeMode' +export * from './token/useThemeVars' +export * from './token/interface' \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/bem.scss b/uni_modules/lime-style/mixins/bem.scss new file mode 100644 index 0000000..e69de29 diff --git a/uni_modules/lime-style/mixins/create.scss b/uni_modules/lime-style/mixins/create.scss new file mode 100644 index 0000000..ea313a9 --- /dev/null +++ b/uni_modules/lime-style/mixins/create.scss @@ -0,0 +1,235 @@ +/* #ifdef VUE3 */ +@use "sass:math"; +/* #endif */ + +/* #ifndef UNI-APP-X && APP || APP-NVUE */ +$use-css-var: true !default; +/* #endif */ +/* #ifdef UNI-APP-X && APP || APP-NVUE */ +$use-css-var: false !default; +/* #endif */ + + +@function div($dividend, $divisor) { + /* #ifdef VUE3 */ + @return math.div($dividend, $divisor); + /* #endif */ + /* #ifndef VUE3 */ + @return $dividend / $divisor; + /* #endif */ +} + +@function rpx-to-px($value) { + // 递归处理列表 + @if type-of($value) == list { + $new-list: (); + @each $item in $value { + $new-list: append($new-list, rpx-to-px($item)); + } + @return $new-list; + } + + // 处理数字类型 - 带 rpx 单位 + @if type-of($value) == number and unit($value) == 'rpx' { + // 安全处理单位转换 + @return calc-strip-unit($value) * 0.5 * 1px; + } + + // 处理字符串类型 + @if type-of($value) == string { + $string: $value; + $rpx-index: str-index($string, 'rpx'); + + // 如果字符串以数字开头并以 rpx 结尾,转换为数值 + @if $rpx-index == (str-length($string) - 2) { + $num-str: str-slice($string, 1, $rpx-index - 1); + $number: to-number($num-str); + @if type-of($number) == number { + @return $number * 0.5 * 1px; + } + } + + // 字符串中可能包含多个 rpx 值 + @if $rpx-index { + $result: ''; + @while $rpx-index { + // 找到数字部分起点 + $num-end: $rpx-index - 1; + $num-start: $num-end; + @while $num-start > 0 and is-numeric-char(str-slice($string, $num-start, $num-start)) { + $num-start: $num-start - 1; + } + + // 提取数字部分 + $num-str: str-slice($string, $num-start + 1, $num-end); + $number: to-number($num-str); + + // 转换为 px 数值 + $px-value: $number * 0.5 * 1px; + + // 构建结果字符串 + $result: $result + str-slice($string, 1, $num_start) + '#{$px_value}'; + + // 更新剩余字符串 + $string: str-slice($string, $rpx-index + 3); + $rpx-index: str-index($string, 'rpx'); + } + @return #{$result + $string}; + } + } + + // 其他类型直接返回 + @return $value; +} + +// 辅助函数:安全去除单位并返回数值 +@function calc-strip-unit($number) { + @if type-of($number) == number { + $unit: unit($number); + $units: ("px": 1px, "rpx": 1rpx, "em": 1em, "rem": 1rem, "%": 1%); + + @if map-has-key($units, $unit) { + @return div($number , map-get($units, $unit)); + } + + @if unitless($number) { + @return $number; + } + } + + @return $number; +} + +// 辅助函数:检查字符是否为数字 +@function is-numeric-char($char) { + $chars: "-.0123456789"; + @return str-index($chars, $char) != null; +} + +// 辅助函数:将字符串安全转换为数字 +@function to-number($string) { + // 如果输入已经是数字,直接返回 + @if type-of($string) == number { + @return $string; + } + + // 处理带符号的数字 + $is-negative: false; + $numeric: ""; + $found-number: false; + + // 提取所有数字字符 + @for $i from 1 through str-length($string) { + $char: str-slice($string, $i, $i); + + @if $char == "-" and $numeric == "" { + $is-negative: true; + } + @else if $char == "." and str-index($numeric, ".") == null { + $numeric: $numeric + $char; + } + @else if $char >= "0" and $char <= "9" { + $numeric: $numeric + $char; + $found-number: true; + } + } + + // 如果有实际数字内容,转换为数值 + @if $found-number { + $result: 0; + $decimal-index: str-index($numeric, "."); + + @if $decimal-index { + // 处理带小数的数字 + $integer-part: str-slice($numeric, 1, $decimal-index - 1); + $decimal-part: str-slice($numeric, $decimal-index + 1); + + @if $integer-part == "" { $integer-part: "0"; } + + $result: to-integer($integer-part); + + $divisor: 1; + @for $i from 1 through str-length($decimal-part) { + $divisor: $divisor * 10; + $digit: to-integer(str-slice($decimal-part, $i, $i)); + $result: $result + ($digit / $divisor); + } + } @else { + // 处理整数 + $result: to-integer($numeric); + } + + @return if($is-negative, -$result, $result); + } + + // 无法转换则返回原字符串 + @return $string; +} + +// 辅助函数:将整数字符串转换为数字 +@function to-integer($string) { + $result: 0; + + @for $i from 1 through str-length($string) { + $char: str-slice($string, $i, $i); + $result: $result * 10 + (str-index("0123456789", $char) - 1); + } + + @return $result; +} + +@function create-var($name, $values...) { + // 将不定数量的参数转换为列表 + $value-list: $values; + $css-value: null; + + @if length($value-list) == 0 { + // @warn "The list must have at least 1 values."; + @return ''; + } @else { + // 初始化CSS变量的值为列表中的第一个值 + /* #ifndef VUE2 */ + $css-value: nth($value-list, 1); + /* #endif */ + /* #ifdef VUE2 */ + $css-value: rpx-to-px(nth($value-list, 1)); + /* #endif */ + } + // 检查列表长度是否大于等于2 + @if length($value-list) >= 2 { + // 使用@for循环遍历剩余的值,并构建CSS变量的完整值 + @for $i from 2 through length($value-list) { + /* #ifndef VUE2 */ + $css-value: $css-value + ", " + nth($value-list, $i); + /* #endif */ + /* #ifdef VUE2 */ + $css-value: $css-value + ", " + rpx-to-px(nth($value-list, $i)); + /* #endif */ + } + } + + // /* #ifndef UNI-APP-X */ + // @return var(--l-#{$name}, #{$css-value}); + // /* #endif */ + + // /* #ifdef UNI-APP-X && APP */ + // @if $use-css-var { + // @return var(--l-#{$name}, #{$css-value}); + // } @else { + // @return $css-value; + // } + // /* #endif */ + + + // /* #ifdef APP-NVUE */ + // @return $css-value; + // /* #endif */ + + // @return var(--l-#{$name}, #{$css-value}); + + @if $use-css-var { + @return var(--l-#{$name}, #{$css-value}); + } @else { + @return $css-value; + } +} diff --git a/uni_modules/lime-style/mixins/directionalProperty.scss b/uni_modules/lime-style/mixins/directionalProperty.scss new file mode 100644 index 0000000..6d23d1a --- /dev/null +++ b/uni_modules/lime-style/mixins/directionalProperty.scss @@ -0,0 +1,401 @@ +// ======================================================================= +// 方向属性核心生成器 (支持所有方向相关属性) +// ======================================================================= +@mixin directional-property( + $property, + $values, + $exclude: () +) { + // 属性类型分组 + $group-standard: padding, margin; // 标准方向属性 + $group-radius: border-radius; // 圆角属性 + $group-border: border, border-top, border-right, border-bottom, border-left; // 边框属性 + $group-outline: outline, outline-top, outline-right, outline-bottom, outline-left; // 轮廓属性 + $group-position: inset, inset-block, inset-inline, top, right, bottom, left; // 定位属性 + $group-size: block-size, inline-size; // 块/行尺寸属性 + + // 定义每个方向的值 + $top: null; + $right: null; + $bottom: null; + $left: null; + + // 确定处理模式 + $is-standard: index($group-standard, $property); + $is-radius: index($group-radius, $property); + $is-border: index($group-border, $property); + $is-outline: index($group-outline, $property); + $is-position: index($group-position, $property); + $is-size: index($group-size, $property); + + // ===================================================================== + // 解析输入值 - 根据属性类型处理 + // ===================================================================== + @if type-of($values) == 'list' { + $length: length($values); + + // 单个值 - 所有方向相同值 + @if $length == 1 { + $top: nth($values, 1); + $right: nth($values, 1); + $bottom: nth($values, 1); + $left: nth($values, 1); + } + + // 两个值 + @else if $length == 2 { + // 特殊处理:border-radius + @if $is-radius { + $top: nth($values, 1); + $right: nth($values, 2); + $bottom: nth($values, 1); + $left: nth($values, 2); + } + // 标准处理:上下 | 左右 + @else if $is-standard or $is-border or $is-outline or $is-position { + $top: nth($values, 1); + $bottom: nth($values, 1); + $right: nth($values, 2); + $left: nth($values, 2); + } + // 块/行尺寸处理 + @else if $is-size { + $top: nth($values, 1); + $right: nth($values, 2); + } + } + + // 三个值 + @else if $length == 3 { + // border-radius特殊处理 + @if $is-radius { + $top: nth($values, 1); + $right: nth($values, 2); + $bottom: nth($values, 3); + $left: nth($values, 2); + } + // 标准处理 + @else if $is-standard or $is-border or $is-outline or $is-position { + $top: nth($values, 1); + $right: nth($values, 2); + $left: nth($values, 2); + $bottom: nth($values, 3); + } + } + + // 四个值 + @else if $length == 4 { + $top: nth($values, 1); + $right: nth($values, 2); + $bottom: nth($values, 3); + $left: nth($values, 4); + } + } + @else { + // 单个值传递 + $top: $values; + $right: $values; + $bottom: $values; + $left: $values; + } + + // ===================================================================== + // 生成CSS属性(排除指定方向) + // ===================================================================== + + // 1. 圆角处理 + @if $is-radius { + @if not index($exclude, top-left) and $top != null { + border-top-left-radius: $top; + } + @if not index($exclude, top-right) and $right != null { + border-top-right-radius: $right; + } + @if not index($exclude, bottom-right) and $bottom != null { + border-bottom-right-radius: $bottom; + } + @if not index($exclude, bottom-left) and $left != null { + border-bottom-left-radius: $left; + } + } + + // 2. 标准方向处理 (padding, margin) + @else if $is-standard { + @if not index($exclude, top) and $top != null { + #{$property}-top: $top; + } + @if not index($exclude, right) and $right != null { + #{$property}-right: $right; + } + @if not index($exclude, bottom) and $bottom != null { + #{$property}-bottom: $bottom; + } + @if not index($exclude, left) and $left != null { + #{$property}-left: $left; + } + } + + // 3. 边框处理 + @else if $is-border { + // 完整边框设置 + @if $property == 'border' { + @if not index($exclude, top) and $top != null { + border-top-width: nth($values, 1); + border-top-style: nth($values, 2); + border-top-color: nth($values, 3); + } + @if not index($exclude, right) and $right != null { + border-right-width: nth($values, 1); + border-right-style: nth($values, 2); + border-right-color: nth($values, 3); + } + @if not index($exclude, bottom) and $bottom != null { + // border-bottom: $bottom; + border-bottom-width: nth($values, 1); + border-bottom-style: nth($values, 2); + border-bottom-color: nth($values, 3); + } + @if not index($exclude, left) and $left != null { + // border-left: $left; + border-left-width: nth($values, 1); + border-left-style: nth($values, 2); + border-left-color: nth($values, 3); + } + } + // 单边边框 + @else { + $direction: str-slice($property, 8); // 提取方向 + @if not index($exclude, $direction) { + // #{$property}: $top; + #{$property}-width: nth($values, 1); + #{$property}-style: nth($values, 2); + #{$property}-color: nth($values, 3); + } + } + } + + // 4. 轮廓处理 + @else if $is-outline { + // 完整轮廓设置 + @if $property == 'outline' { + @if not index($exclude, top) and $top != null { + outline-top: $top; + } + @if not index($exclude, right) and $right != null { + outline-right: $right; + } + @if not index($exclude, bottom) and $bottom != null { + outline-bottom: $bottom; + } + @if not index($exclude, left) and $left != null { + outline-left: $left; + } + } + // 单边轮廓 + @else { + $direction: str-slice($property, 8); // 提取方向 + @if not index($exclude, $direction) { + #{$property}: $top; + } + } + } + + // 5. 定位处理 + @else if $is-position { + // inset简写处理 + @if $property == 'inset' { + @if not index($exclude, top) and $top != null { + top: $top; + } + @if not index($exclude, right) and $right != null { + right: $right; + } + @if not index($exclude, bottom) and $bottom != null { + bottom: $bottom; + } + @if not index($exclude, left) and $left != null { + left: $left; + } + } + // inset-block 和 inset-inline + @else if $property == 'inset-block' { + @if not index($exclude, top) and $top != null { + top: $top; + } + @if not index($exclude, bottom) and $bottom != null { + bottom: $bottom; + } + } + @else if $property == 'inset-inline' { + @if not index($exclude, left) and $left != null { + left: $left; + } + @if not index($exclude, right) and $right != null { + right: $right; + } + } + // 单一定位 + @else { + @if not index($exclude, $property) { + #{$property}: $top; + } + } + } + + // 6. 尺寸处理 + @else if $is-size { + @if $property == 'block-size' { + @if not index($exclude, top) and $top != null { + height: $top; + } + } + @else if $property == 'inline-size' { + @if not index($exclude, left) and $left != null { + width: $left; + } + } + } +} + +// ======================================================================= +// 快捷混合宏:标准属性 +// ======================================================================= +@mixin padding($values, $exclude: ()) { + @include directional-property(padding, $values, $exclude); +} + +@mixin margin($values, $exclude: ()) { + @include directional-property(margin, $values, $exclude); +} + +@mixin border-radius($values, $exclude: ()) { + @include directional-property(border-radius, $values, $exclude); +} + +// ======================================================================= +// 快捷混合宏:边框属性 +// ======================================================================= +@mixin border($value, $exclude: ()) { + @include directional-property(border, $value, $exclude); +} + +@mixin border-top($value, $exclude: ()) { + @include directional-property(border-top, $value, $exclude); +} + +@mixin border-right($value, $exclude: ()) { + @include directional-property(border-right, $value, $exclude); +} + +@mixin border-bottom($value, $exclude: ()) { + @include directional-property(border-bottom, $value, $exclude); +} + +@mixin border-left($value, $exclude: ()) { + @include directional-property(border-left, $value, $exclude); +} + +// ======================================================================= +// 快捷混合宏:轮廓属性 +// ======================================================================= +@mixin outline($value, $exclude: ()) { + @include directional-property(outline, $value, $exclude); +} + +@mixin outline-top($value, $exclude: ()) { + @include directional-property(outline-top, $value, $exclude); +} + +@mixin outline-right($value, $exclude: ()) { + @include directional-property(outline-right, $value, $exclude); +} + +@mixin outline-bottom($value, $exclude: ()) { + @include directional-property(outline-bottom, $value, $exclude); +} + +@mixin outline-left($value, $exclude: ()) { + @include directional-property(outline-left, $value, $exclude); +} + +// ======================================================================= +// 快捷混合宏:定位属性 +// ======================================================================= +@mixin inset($values, $exclude: ()) { + @include directional-property(inset, $values, $exclude); +} + +@mixin inset-block($values, $exclude: ()) { + @include directional-property(inset-block, $values, $exclude); +} + +@mixin inset-inline($values, $exclude: ()) { + @include directional-property(inset-inline, $values, $exclude); +} + +@mixin top($value, $exclude: ()) { + @include directional-property(top, $value, $exclude); +} + +@mixin right($value, $exclude: ()) { + @include directional-property(right, $value, $exclude); +} + +@mixin bottom($value, $exclude: ()) { + @include directional-property(bottom, $value, $exclude); +} + +@mixin left($value, $exclude: ()) { + @include directional-property(left, $value, $exclude); +} + +// ======================================================================= +// 快捷混合宏:尺寸属性 +// ======================================================================= +@mixin block-size($value, $exclude: ()) { + @include directional-property(block-size, $value, $exclude); +} + +@mixin inline-size($value, $exclude: ()) { + @include directional-property(inline-size, $value, $exclude); +} + +// ======================================================================= +// 组合混合宏 +// ======================================================================= +// 带圆角的边框 +@mixin bordered($border-value, $radius-value) { + @include border($border-value); + @include border-radius($radius-value); +} + +// 绝对定位容器 +@mixin absolute-container($inset: 0) { + position: absolute; + @include inset($inset); +} + +// 固定定位容器 +@mixin fixed-container($inset: 0) { + position: fixed; + @include inset($inset); +} + +// ======================================================================= +// 圆角辅助混合宏 +// ======================================================================= +@mixin border-top-radius($value) { + @include border-radius($value 0 0, (bottom-right, bottom-left)); +} + +@mixin border-right-radius($value) { + @include border-radius(0 $value 0 0, (top-left, bottom-left)); +} + +@mixin border-bottom-radius($value) { + @include border-radius(0 0 $value, (top-right, top-left)); +} + +@mixin border-left-radius($value) { + @include border-radius(0 0 0 $value, (top-right, bottom-right)); +} \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/ellipsis.scss b/uni_modules/lime-style/mixins/ellipsis.scss new file mode 100644 index 0000000..97e762a --- /dev/null +++ b/uni_modules/lime-style/mixins/ellipsis.scss @@ -0,0 +1,22 @@ +@mixin ellipsis { + // overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + word-wrap: normal; + /* #endif */ +} + + +@mixin ellipsisLn($line) { + // overflow: hidden; + text-overflow: ellipsis; + /* #ifdef UNI-APP-X && APP || APP-NVUE */ + lines: $line; + /* #endif */ + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + -webkit-line-clamp: $line; + display: -webkit-box; + -webkit-box-orient: vertical; + /* #endif */ +} \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/flex.scss b/uni_modules/lime-style/mixins/flex.scss new file mode 100644 index 0000000..0c3dd84 --- /dev/null +++ b/uni_modules/lime-style/mixins/flex.scss @@ -0,0 +1,20 @@ +@mixin flex { + /* #ifndef UNI-APP-X */ + display: flex; + /* #endif */ +} +@mixin flex-column { + /* #ifndef UNI-APP-X */ + flex-direction: column; + /* #endif */ +} +@mixin flex-row { + flex-direction: row; +} + +@mixin universal { + position: relative; + box-sizing: border-box; + display: flex; + flex-direction: column; +} diff --git a/uni_modules/lime-style/mixins/hairline.scss b/uni_modules/lime-style/mixins/hairline.scss new file mode 100644 index 0000000..5044518 --- /dev/null +++ b/uni_modules/lime-style/mixins/hairline.scss @@ -0,0 +1,66 @@ +// @import '../theme/default.scss'; + +@mixin hairline-base { + position: absolute; + box-sizing: border-box; + content: ' '; + pointer-events: none; + transform-origin: center; /* cover wechat button:after default transforn-origin */ +} + +@mixin hairline($color: $border-color-2) { + @include hairline-base; + top: -50%; + right: -50%; + bottom: -50%; + left: -50%; + border: 1px solid $color; + transform: scale(.5); +} + +@mixin hairline-top($color: $border-color-1, $left: 0, $right: 0) { + @include hairline-base; + top: 0; + right: $right; + left: $left; + border-top: 1px solid $color; + transform: scaleY(0.5); +} + +@mixin hairline-bottom($color: $border-color-1, $left: 0, $right: 0) { + @include hairline-base; + right: $right; + bottom: 0; + left: $left; + border-bottom: 1px solid $color; + transform: scaleY(0.5); +} + +@mixin hairline-left($color: $border-bolor-1) { + @include hairline-base; + top: 0; + bottom: 0; + left: 0; + border-left: 1px solid $color; + transform: scaleX(.5); +} + +@mixin hairline-right($color: $border-bolor-1) { + @include hairline-base; + top: 0; + bottom: 0; + right: 0; + border-right: 1px solid $color; + transform: scaleX(.5); +} + +// @mixin border { +// /* #ifndef UNI-APP-X && APP */ +// &:after { +// @content; +// } +// /* #endif */ +// /* #ifdef UNI-APP-X && APP */ +// @content; +// /* #endif */ +// } \ No newline at end of file diff --git a/uni_modules/lime-style/mixins/platform.scss b/uni_modules/lime-style/mixins/platform.scss new file mode 100644 index 0000000..ebd3c8f --- /dev/null +++ b/uni_modules/lime-style/mixins/platform.scss @@ -0,0 +1,17 @@ +/* #ifdef APP-NVUE || UNI-APP-X && APP */ +$is-app: true; +/* #endif */ +/* #ifndef APP-NVUE || UNI-APP-X && APP */ +$is-app: false; +/* #endif */ + +@mixin is-app { + @if $is-app { + @content; + } +} +@mixin not-app { + @if not($is-app) { + @content; + } +} diff --git a/uni_modules/lime-style/mixins/useTheme.scss b/uni_modules/lime-style/mixins/useTheme.scss new file mode 100644 index 0000000..83df7ca --- /dev/null +++ b/uni_modules/lime-style/mixins/useTheme.scss @@ -0,0 +1,60 @@ +$limeThemes: light, dark; +$theme: light; + +@mixin use-theme($mode: null) { + @if $mode != null { + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + @media (prefers-color-scheme: $mode) { + @content; + } + /* #endif */ + /* #ifdef UNI-APP-X && APP || APP-NVUE */ + &.#{$mode} { + @content; + } + /* #endif */ + } @else { + @each $mode in $limeThemes { + $theme: $mode !global; + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + @media (prefers-color-scheme: $mode) { + @content; + } + /* #endif */ + + /* #ifdef UNI-APP-X && APP || APP-NVUE */ + &.#{$mode} { + @content; + } + /* #endif */ + } + } + +} + +@mixin theme-dark { + /* #ifndef UNI-APP-X && APP || APP-NVUE */ + @media (prefers-color-scheme: dark) { + page { + @content; + } + } + /* #endif */ + /* #ifdef UNI-APP-X && APP || APP-NVUE */ + .dark { + @content; + } + /* #endif */ + /* #ifdef WEB */ + :root[data-lime-theme='dark'] page { + @content; + } + /* #endif */ +} + + +@function get-var($themes, $key) { + @return map-get($themes, $key) +} + + diff --git a/uni_modules/lime-style/mixins/utilities.scss b/uni_modules/lime-style/mixins/utilities.scss new file mode 100644 index 0000000..3a4ea4a --- /dev/null +++ b/uni_modules/lime-style/mixins/utilities.scss @@ -0,0 +1,7 @@ +@import './flex'; + +@mixin resize-none { + /* #ifndef UNI-APP-X && APP */ + resize: none; + /* #endif */ +} diff --git a/uni_modules/lime-style/package.json b/uni_modules/lime-style/package.json new file mode 100644 index 0000000..c378f80 --- /dev/null +++ b/uni_modules/lime-style/package.json @@ -0,0 +1,103 @@ +{ + "id": "lime-style", + "displayName": "lime-style", + "version": "0.2.5", + "description": "lime-style", + "keywords": [ + "lime-style" +], + "repository": "", + "engines": { + "HBuilderX": "^3.1.0", + "uni-app": "^4.44", + "uni-app-x": "^4.61" + }, + "dcloudext": { + "type": "sdk-js", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": "无" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "√" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": { + "extVersion": "", + "minVersion": "22" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "√", + "jd": "√", + "harmony": "-", + "qq": "-", + "lark": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "22" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/lime-style/readme.md b/uni_modules/lime-style/readme.md new file mode 100644 index 0000000..0f53a25 --- /dev/null +++ b/uni_modules/lime-style/readme.md @@ -0,0 +1,16 @@ +# lime-style + +## 更换色系 +在uni.scss中增加 +```css +// 品牌色-主色 +$primary-color: #3283ff; +// 错误色 +$error-color: #FF4D4F; +// 警告色 +$warning-color: #ffb400; +// 成功色 +$success-color: #34c471; + +$blue: #3283ff; +``` \ No newline at end of file diff --git a/uni_modules/lime-style/theme/dark.scss b/uni_modules/lime-style/theme/dark.scss new file mode 100644 index 0000000..49be837 --- /dev/null +++ b/uni_modules/lime-style/theme/dark.scss @@ -0,0 +1,638 @@ +@import '../mixins/create.scss'; +@import '../color/colorPalette.scss'; +@import '../color/colors.scss'; +@import '../mixins/useTheme'; + +$blue-1: #{genColor($blue, 1, dark)}; +$blue-2: #{genColor($blue, 2, dark)}; +$blue-3: #{genColor($blue, 3, dark)}; +$blue-4: #{genColor($blue, 4, dark)}; +$blue-5: #{genColor($blue, 5, dark)}; +$blue-6: #{genColor($blue, 6, dark)}; +$blue-7: #{genColor($blue, 7, dark)}; +$blue-8: #{genColor($blue, 8, dark)}; +$blue-9: #{genColor($blue, 9, dark)}; +$blue-10: #{genColor($blue, 10, dark)}; + +$info-color-1: #{genColor($info-color, 1, dark)}; +$info-color-2: #{genColor($info-color, 2, dark)}; +$info-color-3: #{genColor($info-color, 3, dark)}; +$info-color-4: #{genColor($info-color, 4, dark)}; +$info-color-5: #{genColor($info-color, 5, dark)}; +$info-color-6: #{genColor($info-color, 6, dark)}; +$info-color-7: #{genColor($info-color, 7, dark)}; +$info-color-8: #{genColor($info-color, 8, dark)}; +$info-color-9: #{genColor($info-color, 9, dark)}; +$info-color-10: #{genColor($info-color, 10, dark)}; + +$primary-color-1: #{genColor($primary-color, 1, dark)}; // 浅色/白底悬浮 +$primary-color-2: #{genColor($primary-color, 2, dark)}; // 文字禁用 +$primary-color-3: #{genColor($primary-color, 3, dark)}; // 一般禁用 +$primary-color-4: #{genColor($primary-color, 4, dark)}; // 特殊场景 禁用 +$primary-color-5: #{genColor($primary-color, 5, dark)}; // 悬浮 +$primary-color-6: #{genColor($primary-color, 6, dark)}; // 常规 +$primary-color-7: #{genColor($primary-color, 7, dark)}; // 点击 +$primary-color-8: #{genColor($primary-color, 8, dark)}; // +$primary-color-9: #{genColor($primary-color, 9, dark)}; +$primary-color-10: #{genColor($primary-color, 10, dark)}; + +$error-color-1: #{genColor($error-color, 1, dark)}; +$error-color-2: #{genColor($error-color, 2, dark)}; +$error-color-3: #{genColor($error-color, 3, dark)}; +$error-color-4: #{genColor($error-color, 4, dark)}; +$error-color-5: #{genColor($error-color, 5, dark)}; +$error-color-6: #{genColor($error-color, 6, dark)}; +$error-color-7: #{genColor($error-color, 7, dark)}; +$error-color-8: #{genColor($error-color, 8, dark)}; +$error-color-9: #{genColor($error-color, 9, dark)}; +$error-color-10: #{genColor($error-color, 10, dark)}; + +$warning-color-1: #{genColor($warning-color, 1, dark)}; +$warning-color-2: #{genColor($warning-color, 2, dark)}; +$warning-color-3: #{genColor($warning-color, 3, dark)}; +$warning-color-4: #{genColor($warning-color, 4, dark)}; +$warning-color-5: #{genColor($warning-color, 5, dark)}; +$warning-color-6: #{genColor($warning-color, 6, dark)}; +$warning-color-7: #{genColor($warning-color, 7, dark)}; +$warning-color-8: #{genColor($warning-color, 8, dark)}; +$warning-color-9: #{genColor($warning-color, 9, dark)}; +$warning-color-10: #{genColor($warning-color, 10, dark)}; + +$success-color-1: #{genColor($success-color, 1, dark)}; // 浅色/白底悬浮 +$success-color-2: #{genColor($success-color, 2, dark)}; // 文字禁用 +$success-color-3: #{genColor($success-color, 3, dark)}; // 一般禁用 +$success-color-4: #{genColor($success-color, 4, dark)}; // 特殊场景 +$success-color-5: #{genColor($success-color, 5, dark)}; // 悬浮 +$success-color-6: #{genColor($success-color, 6, dark)}; // 常规 +$success-color-7: #{genColor($success-color, 7, dark)}; // 点击 +$success-color-8: #{genColor($success-color, 8, dark)}; +$success-color-9: #{genColor($success-color, 9, dark)}; +$success-color-10: #{genColor($success-color, 10, dark)}; + +// $gray-1: #f3f3f3; +// $gray-2: #eeeeee; +// $gray-3: #e7e7e7; +// $gray-4: #dcdcdc; +// $gray-5: #c5c5c5; +// $gray-6: #a6a6a6; +// $gray-7: #8b8b8b; +// $gray-8: #777777; +// $gray-9: #5e5e5e; +// $gray-10: #4b4b4b; +// $gray-11: #383838; +// $gray-12: #2c2c2c; +// $gray-13: #242424; +// $gray-14: #181818; + +// 暗色模式的灰度 +$gray-1: #181818; // 最深 +$gray-2: #242424; +$gray-3: #2c2c2c; +$gray-4: #383838; +$gray-5: #4b4b4b; +$gray-6: #5e5e5e; +$gray-7: #777777; +$gray-8: #8b8b8b; +$gray-9: #a6a6a6; +$gray-10: #c5c5c5; +$gray-11: #dcdcdc; +$gray-12: #e7e7e7; +$gray-13: #eeeeee; +$gray-14: #f3f3f3; // 最浅 + +$text-color-1: rgba(255,255,255,0.85); //primary +$text-color-2: rgba(255,255,255,0.65); //secondary +$text-color-3: rgba(255,255,255,0.45); //placeholder +$text-color-4: rgba(255,255,255,0.25); //disabled + +// 容器 +$bg-color-page: $gray-1;//#000000; // 整体背景色 布局 +$bg-color-container: $gray-2;//#1d1d1d; // 一级容器背景 组件 +$bg-color-elevated: $gray-2;//#1f1f1f; // 二级容器背景 浮层 +$bg-color-spotlight: $gray-5; // 引起注意的如 Tooltip +$bg-color-mask: rgba(0, 0, 0, 0.65); // 蒙层 + +// 填充 +$fill-1: rgba(255,255,255,0.18); +$fill-2: rgba(255,255,255,0.12); +$fill-3: rgba(255,255,255,0.08); +$fill-4: rgba(255,255,255,0.04); + +// 描边 +$border-color-1: $gray-3;//#{getSolidColor(#000, 26%)}; //#424242; // 浅色 +$border-color-2: $gray-4;//#{getSolidColor(#000, 19%)}; //#303030; // 一般 +$border-color-3: $gray-5;//#{getSolidColor(#000, 15%)}; //$gray-4; // 深/悬浮 +$border-color-4: $gray-6;//#{getSolidColor(#000, 12%)}; //$gray-6; // 重/按钮描边 + + +@mixin theme-dark { + // 蓝色系 + --l-blue-1: #{$blue-1}; + --l-blue-2: #{$blue-2}; + --l-blue-3: #{$blue-3}; + --l-blue-4: #{$blue-4}; + --l-blue-5: #{$blue-5}; + --l-blue-6: #{$blue-6}; + --l-blue-7: #{$blue-7}; + --l-blue-8: #{$blue-8}; + --l-blue-9: #{$blue-9}; + --l-blue-10: #{$blue-10}; + + --l-info-color-1: #{$info-color-1}; + --l-info-color-2: #{$info-color-2}; + --l-info-color-3: #{$info-color-3}; + --l-info-color-4: #{$info-color-4}; + --l-info-color-5: #{$info-color-5}; + --l-info-color-6: #{$info-color-6}; + --l-info-color-7: #{$info-color-7}; + --l-info-color-8: #{$info-color-8}; + --l-info-color-9: #{$info-color-9}; + --l-info-color-10: #{$info-color-10}; + + // 主色系 + --l-primary-color-1: #{$primary-color-1}; + --l-primary-color-2: #{$primary-color-2}; + --l-primary-color-3: #{$primary-color-3}; + --l-primary-color-4: #{$primary-color-4}; + --l-primary-color-5: #{$primary-color-5}; + --l-primary-color-6: #{$primary-color-6}; + --l-primary-color-7: #{$primary-color-7}; + --l-primary-color-8: #{$primary-color-8}; + --l-primary-color-9: #{$primary-color-9}; + --l-primary-color-10: #{$primary-color-10}; + + // 错误色系 + --l-error-color-1: #{$error-color-1}; + --l-error-color-2: #{$error-color-2}; + --l-error-color-3: #{$error-color-3}; + --l-error-color-4: #{$error-color-4}; + --l-error-color-5: #{$error-color-5}; + --l-error-color-6: #{$error-color-6}; + --l-error-color-7: #{$error-color-7}; + --l-error-color-8: #{$error-color-8}; + --l-error-color-9: #{$error-color-9}; + --l-error-color-10: #{$error-color-10}; + + // 警告色系 + --l-warning-color-1: #{$warning-color-1}; + --l-warning-color-2: #{$warning-color-2}; + --l-warning-color-3: #{$warning-color-3}; + --l-warning-color-4: #{$warning-color-4}; + --l-warning-color-5: #{$warning-color-5}; + --l-warning-color-6: #{$warning-color-6}; + --l-warning-color-7: #{$warning-color-7}; + --l-warning-color-8: #{$warning-color-8}; + --l-warning-color-9: #{$warning-color-9}; + --l-warning-color-10: #{$warning-color-10}; + + // 成功色系 + --l-success-color-1: #{$success-color-1}; + --l-success-color-2: #{$success-color-2}; + --l-success-color-3: #{$success-color-3}; + --l-success-color-4: #{$success-color-4}; + --l-success-color-5: #{$success-color-5}; + --l-success-color-6: #{$success-color-6}; + --l-success-color-7: #{$success-color-7}; + --l-success-color-8: #{$success-color-8}; + --l-success-color-9: #{$success-color-9}; + --l-success-color-10: #{$success-color-10}; + + // 灰色系 + --l-gray-1: #{$gray-1}; + --l-gray-2: #{$gray-2}; + --l-gray-3: #{$gray-3}; + --l-gray-4: #{$gray-4}; + --l-gray-5: #{$gray-5}; + --l-gray-6: #{$gray-6}; + --l-gray-7: #{$gray-7}; + --l-gray-8: #{$gray-8}; + --l-gray-9: #{$gray-9}; + --l-gray-10: #{$gray-10}; + --l-gray-11: #{$gray-11}; + --l-gray-12: #{$gray-12}; + --l-gray-13: #{$gray-13}; + --l-gray-14: #{$gray-14}; + + // 文字颜色 + --l-text-color-1: #{$text-color-1}; + --l-text-color-2: #{$text-color-2}; + --l-text-color-3: #{$text-color-3}; + --l-text-color-4: #{$text-color-4}; + + // 容器背景色 + --l-bg-color-page: #{$bg-color-page}; + --l-bg-color-container: #{$bg-color-container}; + --l-bg-color-elevated: #{$bg-color-elevated}; + --l-bg-color-spotlight: #{$bg-color-spotlight}; + --l-bg-color-mask: #{$bg-color-mask}; + + // 填充色 + --l-fill-1: #{$fill-1}; + --l-fill-2: #{$fill-2}; + --l-fill-3: #{$fill-3}; + --l-fill-4: #{$fill-4}; + + // 描边色 + --l-border-color-1: #{$border-color-1}; + --l-border-color-2: #{$border-color-2}; + --l-border-color-3: #{$border-color-3}; + --l-border-color-4: #{$border-color-4}; + + // loading + --l-loading-text-color: #{$text-color-3}; + + // load-more + --l-load-more-text-color: #{$text-color-3}; + --l-load-more-color: #{$text-color-4}; + + // 按钮 + --l-button-default-solid-text-color: #000; + --l-button-default-border-color: #{$gray-5}; + --l-button-default-color: #{$gray-14}; + --l-button-default-light-color: #{$gray-4}; + --l-button-default-light-hover-color: #{$gray-5}; + --l-button-primary-light-color: #{$primary-color-2}; + --l-button-primary-light-hover-color: #{$primary-color-3}; + --l-button-danger-light-color: #{$error-color-2}; + --l-button-danger-light-hover-color: #{$error-color-3}; + --l-button-warning-light-color: #{$warning-color-2}; + --l-button-warning-light-hover-color: #{$warning-color-3}; + --l-button-success-light-color: #{$success-color-2}; + --l-button-success-light-hover-color: #{$success-color-3}; + --l-button-info-light-color: #{$info-color-1}; + --l-button-info-light-hover-color: #{$info-color-2}; + --l-button-primary-color: #{$primary-color-6}; + --l-button-danger-color: #{$error-color-6}; + --l-button-warning-color: #{$warning-color-6}; + --l-button-info-color: #{$info-color-6}; + + // 遮罩 + // --l-overlay-bg-color: #{$bg-color-mask}; + // 弹窗 + --l-popup-bg-color: #{$bg-color-elevated}; + --l-popup-close-icon-color: #{$text-color-2}; + + // 单元格 + --l-cell-group-title-color: #{$text-color-3}; + --l-cell-group-border-color: #{$border-color-3}; + --l-cell-bg-color: #{$bg-color-container}; + --l-cell-hover-color: #{$gray-3}; + --l-cell-border-color: #{$border-color-2}; + --l-cell-note-color: #{$text-color-3}; + --l-cell-description-color: #{$text-color-2}; + --l-cell-title-color: #{$text-color-1}; + --l-cell-right-icon-color: #{$text-color-3}; + + // 步进器 + --l-stepper-button-bg-color: #{$gray-4}; + --l-stepper-input-disabled-bg: #{$gray-3}; + --l-stepper-input-color: #{$text-color-1}; + --l-stepper-input-disabled-color: #{$text-color-4}; + --l-stepper-border-color: #{$gray-4}; + + // tabbar + --l-tabbar-bg-color: #{$bg-color-container}; + --l-tabbar-border-color: #{$border-color-1}; + --l-tabbar-color: #{$text-color-1}; + --l-tabbar-active-color: #{$primary-color-6}; + --l-tabbar-active-bg-color: #{$primary-color-1}; + + // link + --l-link-default-color: #{$text-color-1}; + + // image + --l-image-loading-bg-color: #{$fill-3}; + --l-image-color: #{$text-color-3}; + + // divider 分割线 + --l-divider-color: #{$border-color-2}; + --l-divider-text-color: #{$text-color-2}; + + // card 卡片 + --l-card-bg-color: #{$bg-color-container}; + --l-card-title-color: #{$text-color-1}; + --l-card-extra-color: #{$text-color-3}; + --l-card-note-color: #{$text-color-3}; + --l-card-border-color: #{$border-color-2}; + + // grid 宫格 + --l-grid-item-bg-color: #{$bg-color-container}; + --l-grid-item-image-bg-color: #{$fill-4}; + --l-grid-item-text-color: #{$text-color-1}; + --l-grid-item-hover-bg-color: #{$fill-3}; + --l-grid-item-description-color: #{$text-color-3}; + --l-grid-item-border-color: #{$border-color-2}; + --l-grid-item-icon-color: #{$text-color-1}; + + // cascader 级联 + --l-cascader-title-color: #{$text-color-1}; + --l-cascader-bg-color: #{$bg-color-container}; + --l-cascader-cell-title-color: #{$text-color-1}; + --l-cascader-disabled-color: #{$text-color-3}; + --l-cascader-options-title-color: #{$text-color-3}; + --l-cascader-close-icon-color: #{$text-color-2}; + + // tabs 标签页 + --l-tab-nav-bg-color: #{$bg-color-container}; + --l-tab-content-bg-color: #{$bg-color-container}; + --l-tab-split-color: #{$border-color-1}; + --l-tab-item-color: #{$text-color-2}; + --l-tab-item-disabled-color: #{$text-color-4}; + + // checkbox 复选框 + --l-checkbox-border-icon-color: #{$gray-8}; + --l-checkbox-icon-bg-color: #{$bg-color-container}; + --l-checkbox-text-color: #{$text-color-1}; + --l-checkbox-icon-disabled-bg-color: #{$gray-3}; + --l-checkbox-icon-disabled-color: #{$gray-6}; + + // radio 单选框 + --l-radio-border-icon-color: #{$gray-8}; + --l-radio-icon-bg-color: #{$bg-color-container}; + --l-radio-text-color: #{$text-color-1}; + --l-radio-icon-disabled-bg-color: #{$gray-3}; + --l-radio-icon-disabled-color: #{$gray-6}; + + // search 搜索 + --l-search-bg-color: #{$fill-3}; + --l-search-icon-color: #{$text-color-4}; + --l-search-clear-icon-color: #{$text-color-4}; + --l-search-text-color: #{$text-color-1}; + --l-search-label-color: #{$text-color-1}; + --l-search-placeholder-color: #{$text-color-3}; + + // switch + --l-switch-checked-disabled-color: #{$primary-color-3}; + --l-switch-unchecked-color: #{$gray-5}; + --l-switch-unchecked-disabled-color: #{$gray-4}; + + // input 输入框 + --l-input-text-color: #{$text-color-1}; + --l-input-tips-color: #{$text-color-3}; + --l-input-bg-color: #{$bg-color-container}; + --l-input-border-color: #{$border-color-2}; + --l-input-placeholder-text-color: #{$text-color-3}; + --l-input-prefix-icon-color: #{$text-color-1}; + --l-input-suffix-icon-color: #{$text-color-3}; + --l-input-label-text-color: #{$text-color-1}; + --l-input-suffix-text-color: #{$text-color-1}; + --l-input-disabled-text-color: #{$text-color-4}; + --l-input-disabled-bg-color: #{$fill-3}; + --l-input-border-color: #{$border-color-2}; + + // textarea + --l-textarea-bg-color: #{$bg-color-container}; + --l-textarea-placeholder-color: #{$text-color-3}; + --l-textarea-text-color: #{$text-color-1}; + --l-textarea-label-color: #{$text-color-1}; + --l-textarea-indicator-text-color: #{$text-color-3}; + --l-textarea-border-color: #{$border-color-2}; + --l-textarea-disabled-text-color: #{$text-color-4}; + + // upload + --l-upload-bg-color: #{$gray-4}; + --l-upload-add-bg-color: #{$gray-4}; + --l-upload-add-color: #{$text-color-3}; + + // picker + --l-picker-bg-color: #{$bg-color-container}; + --l-picker-cancel-color: #{$text-color-2}; + --l-picker-title-color: #{$text-color-1}; + --l-picker-item-active-color: #{$text-color-1}; + --l-picker-mask-top-color: #{$gray-2}; + --l-picker-loading-mask-color: rgba(0,0,0,.6); + --l-picker-item-color: #{$text-color-1}; + --l-picker-indicator-bg-color: #{$fill-3}; + + // empty + --l-empty-opacity: 0.6; + + // segmented + --l-segmented-bg-color: #{$gray-4}; + --l-segmented-text-color: #{$text-color-2}; + --l-segmented-active-bg-color: #{$gray-5}; + + // keyboard + --l-keyboard-bg-color: #{$bg-color-elevated}; + --l-keyboard-color: #{$text-color-1}; + --l-keyboard-key-bg-color: #{$gray-5}; + --l-keyboard-key-hover-bg-color: #{$gray-4}; + --l-keyboard-icon-bg-color: #{$gray-5}; + --l-keyboard-icon-color: #{$text-color-3}; + + // code-input + --l-code-input-bg-color: #{$gray-4}; + --l-code-input-active-bg-color: #{$gray-5}; + --l-code-input-info-color: #{$text-color-3}; + --l-code-input-dot-color: #{$text-color-1}; + --l-code-input-text-color: #{$text-color-1}; + --l-code-input-cursor-color: #{$text-color-1}; + --l-code-input-active-border-color: #{$gray-6}; + + // steps + --l-step-description-color: #{$text-color-3}; + --l-step-wait-circle-bg-color: #{$gray-4}; + --l-step-wait-circle-color: #{$text-color-3}; + --l-step-wait-title-color: #{$text-color-3}; + --l-step-wait-icon-color: #{$text-color-3}; + --l-step-wait-dot-border-color: #{$gray-5}; + --l-step-line-color: #{$gray-5}; + --l-step-finish-title-color: #{$text-color-1}; + --l-step-finish-circle-bg-color: #{$primary-color-2}; + --l-step-error-circle-bg-color: #{$error-color-2}; + + // date-strip + --l-date-strip-bg-color: #{$bg-color-container}; + --l-date-strip-color: #{$text-color-1}; + --l-date-strip-prefix-color: #{$text-color-3}; + --l-date-strip-color: #{$text-color-2}; + + // slider + --l-slider-rail-color: #{$gray-5}; + --l-slider-thumb-border-color: #{$gray-11}; + + // form + --l-form-item-border-color: #{$border-color-2}; + --l-form-bg-color: #{$bg-color-container}; + --l-form-item-label-color: #{$text-color-1}; + + // color-picker + --l-color-picker-color: #{$text-color-1}; + --l-color-picker-label-color: #{$text-color-2}; + --l-color-picker-field-bg-color: #{$fill-2}; + --l-color-picker-divider-color: #{$border-color-2}; + + // calendar + --l-calendar-bg-color: #{$bg-color-container}; + --l-calendar-title-color: #{$text-color-1}; + --l-calendar-days-color: #{$text-color-2}; + --l-calendar-item-color: #{$text-color-1}; + --l-calendar-item-disabled-color: #{$text-color-4}; + --l-calendar-item-centre-color: #{$primary-color-2}; + --l-calendar-month-mark-color: #{$fill-3}; + --l-calendar-switch-mode-icon-color: #{$text-color-2}; + --l-calendar-switch-mode-icon-disabled-color: #{$text-color-4}; + --l-calendar-header-border-color: #{$border-color-2}; + + // loading + --l-loading-text-color: #{$text-color-3}; + + // dialog + --l-dialog-title-color: #{$text-color-1}; + --l-dialog-content-color: #{$text-color-2}; + --l-dialog-close-color: #{$text-color-3}; + // --l-dialog-bg-color: #{$bg-color-container}; + --l-dialog-bg-color: #{$gray-3}; + --l-dialog-split-color: #{$border-color-2}; + + // action-sheet + --l-action-sheet-item-disabled-color: #{$text-color-4}; + --l-action-sheet-hover-color: #{$gray-3}; + --l-action-sheet-border-color: #{$border-color-1}; + --l-action-sheet-gap-color: #{$bg-color-page}; + --l-action-sheet-color: #{$text-color-1}; + --l-action-sheet-description-color: #{$text-color-3}; + --l-action-sheet-cancel-color: #{$text-color-1}; + --l-action-sheet-cancel-bg-color: #{$bg-color-container}; + --l-action-sheet-image-bg-color: #{$fill-3}; + --l-action-sheet-title-color: #{$text-color-1}; + --l-action-sheet-close-btn-color: #{$text-color-1}; + + // sorter + --l-sorter-color: #{$text-color-1}; + + // floating-panel + --l-floating-panel-bg-color: #{$bg-color-elevated}; + --l-floating-panel-bar-color: #{$fill-1}; + + // dropdown-menu + --l-dropdown-menu-color: #{$text-color-1}; + --l-dropdown-menu-bg-color: #{$bg-color-container}; + --l-dropdown-menu-border-color: #{$border-color-1}; + --l-dropdown-menu-disabled-color: #{$border-color-3}; + --l-dropdown-menu-arrow-color: #{$gray-6}; + --l-dropdown-menu-arrow-active-color: #{$gray-4}; + --l-dropdown-item-cell-title-color: #{$text-color-1}; + + // pull-refresh + --l-pull-refresh-refresher-color: #{$text-color-2}; + + // circle + --l-circle-trail-color: #{$gray-5}; + + // collapse + --l-collapse-panel-bg-color: #{$bg-color-container}; + --l-collapse-content-text-color: #{$text-color-1}; + --l-collapse-right-icon-color: #{$text-color-4}; + --l-collapse-border-color: #{$border-color-2}; + + // count-down + --l-count-down-text-color: #{$text-color-1}; + + // empty + --l-empty-description-color: #{$text-color-3}; + // progress + --l-progress-trail-color: #{$gray-5}; + --l-progress-text-color: #{$text-color-2}; + + // tag + // --l-tag-default-solid-text-color: #000; + --l-tag-text-color: #{$gray-14}; + --l-tag-default-color: #{$gray-6}; + --l-tag-default-light-color: #{$gray-4}; + --l-tag-default-border-color: #{$gray-5}; + --l-tag-primary-light-color: #{$primary-color-2}; + --l-tag-danger-light-color: #{$error-color-2}; + --l-tag-warning-light-color: #{$warning-color-2}; + --l-tag-success-light-color: #{$success-color-2}; + + // amount + --l-amount-color: #{$text-color-1}; + + // avatar + --l-avatar-bg-color: #{$primary-color-1}; + --l-avatar-border-color: #{$gray-2}; + + // highlight + --l-highlight-normal-color: #{$text-color-1}; + + // text-ellipsis + --l-text-ellipsis-color: #{$text-color-1}; + + // read-more + --l-read-more-handle-color: #{$text-color-2}; + --l-read-more-read-start: rgba(36, 36, 36, 0.9); + --l-read-more-read-end: rgba(36, 36, 36, 0.3); + --l-read-more-mask-bg-color: linear-gradient( + to top, + rgba(0,0,0,0), + rgba(0,0,0,1), + ); + // notice-bar + --l-notice-bar-info-bg-color: #{$info-color-1}; + --l-notice-bar-success-bg-color: #{$success-color-1}; + --l-notice-bar-warning-bg-color: #{$warning-color-1}; + --l-notice-bar-danger-bg-color: #{$error-color-1}; + + // scrollx + --l-scrollx-track-color: #{$gray-4}; + + // dateformat + --l-dateformat-color: #{$text-color-1}; + + // footer + --l-footer-text-color: #{$text-color-3}; + --l-footer-link-dividing-line-color: #{$text-color-3}; + --l-footer-logo-title-color: #{$text-color-1}; + + // tree + --l-tree-node-text-color: #{$text-color-1}; + --l-tree-arrow-color: #{$gray-6}; + + // table + --l-table-bg-color: #{$bg-color-container}; + --l-table-border-color: #{$border-color-2}; + --l-table-td-fixed-bg-color: #{$bg-color-container}; + --l-table-tr-fixed-bg-color: #{$bg-color-container}; + + // sidebar + --l-sidebar-bg-color: #{$gray-3}; + --l-sidebar-selected-bg-color: #{$bg-color-container}; + --l-sidebar-text-color: #{$text-color-2}; + --l-sidebar-disabled-text-color: #{$text-color-4}; + + // back-top + --l-back-top-bg-color: #{$bg-color-elevated}; + --l-back-top-border-color: #{$border-color-2}; + --l-back-top-text-color: #{$text-color-2}; + + // navbar + --l-navbar-bg-color: #{$bg-color-container}; + --l-navbar-color: #{$text-color-1}; + --l-navbar-capsule-border-color: #{$border-color-2}; + + // pagination + --l-pagination-bg-color: #{$gray-4}; + --l-pagination-disabled-bg-color: #{$gray-3}; + --l-pagination-hover-bg-color: #{$gray-5}; + --l-pagination-text-color: #{$text-color-2}; + --l-pagination-disabled-color: #{$text-color-4}; + --l-pagination-simple-text-color: #{$text-color-1}; + + // indexes + --l-indexes-sidebar-color: #{$text-color-1}; + --l-indexes-anchor-color: #{$text-color-1}; + --l-indexes-anchor-bg-color: #{$gray-4}; + --l-indexes-anchor-active-bg-color: #{$gray-4}; + --l-indexes-sidebar-tips-bg-color: #{$primary-color-1}; + + // typing + --l-typing-bg-color: #{$bg-color-container}; + --l-typing-text-color: #{$text-color-1}; + + // fit-swiper + --l-fit-swiper-indicator-color: #{$gray-5}; + + // skeleton + --l-skeleton-bg-color: #{$fill-2} +} diff --git a/uni_modules/lime-style/theme/default.scss b/uni_modules/lime-style/theme/default.scss new file mode 100644 index 0000000..90aaba7 --- /dev/null +++ b/uni_modules/lime-style/theme/default.scss @@ -0,0 +1,181 @@ +@import '../mixins/create.scss'; +@import '../color/colorPalette.scss'; +@import '../color/colors.scss'; + +$blue-1: genColor($blue, 1); +$blue-2: genColor($blue, 2); +$blue-3: genColor($blue, 3); +$blue-4: genColor($blue, 4); +$blue-5: genColor($blue, 5); +$blue-6: $blue; +$blue-7: genColor($blue, 7); +$blue-8: genColor($blue, 8); +$blue-9: genColor($blue, 9); +$blue-10: genColor($blue, 10); + +$info-color-1: genColor($info-color, 1); +$info-color-2: genColor($info-color, 2); +$info-color-3: genColor($info-color, 3); +$info-color-4: genColor($info-color, 4); +$info-color-5: genColor($info-color, 5); +$info-color-6: $info-color; +$info-color-7: genColor($info-color, 7); +$info-color-8: genColor($info-color, 8); +$info-color-9: genColor($info-color, 9); +$info-color-10: genColor($info-color, 10); + +$primary-color-1: create-var('primary-color-1', genColor($primary-color, 1)); // 浅色/白底悬浮 +$primary-color-2: create-var('primary-color-2', genColor($primary-color, 2)); // 文字禁用 +$primary-color-3: create-var('primary-color-3', genColor($primary-color, 3)); // 一般禁用 +$primary-color-4: create-var('primary-color-4', genColor($primary-color, 4)); // 特殊场景 禁用 +$primary-color-5: create-var('primary-color-5', genColor($primary-color, 5)); // 悬浮 +$primary-color-6: create-var('primary-color-6', $primary-color); // 常规 +$primary-color-7: create-var('primary-color-7', genColor($primary-color, 7)); // 点击 +$primary-color-8: create-var('primary-color-8', genColor($primary-color, 8)); // +$primary-color-9: create-var('primary-color-9', genColor($primary-color, 9)); +$primary-color-10: create-var('primary-color-10', genColor($primary-color, 10)); + +$error-color-1: create-var('error-color-1', genColor($error-color, 1)); +$error-color-2: create-var('error-color-2', genColor($error-color, 2)); +$error-color-3: create-var('error-color-3', genColor($error-color, 3)); +$error-color-4: create-var('error-color-4', genColor($error-color, 4)); +$error-color-5: create-var('error-color-5', genColor($error-color, 5)); +$error-color-6: create-var('error-color-6', $error-color); +$error-color-7: create-var('error-color-7', genColor($error-color, 7)); +$error-color-8: create-var('error-color-8', genColor($error-color, 8)); +$error-color-9: create-var('error-color-9', genColor($error-color, 9)); +$error-color-10: create-var('error-color-10', genColor($error-color, 10)); + +$warning-color-1: create-var('warning-color-1', genColor($warning-color, 1)); +$warning-color-2: create-var('warning-color-2', genColor($warning-color, 2)); +$warning-color-3: create-var('warning-color-3', genColor($warning-color, 3)); +$warning-color-4: create-var('warning-color-4', genColor($warning-color, 4)); +$warning-color-5: create-var('warning-color-5', genColor($warning-color, 5)); +$warning-color-6: create-var('warning-color-6', $warning-color); +$warning-color-7: create-var('warning-color-7', genColor($warning-color, 7)); +$warning-color-8: create-var('warning-color-8', genColor($warning-color, 8)); +$warning-color-9: create-var('warning-color-9', genColor($warning-color, 9)); +$warning-color-10: create-var('warning-color-10', genColor($warning-color, 10)); + +$success-color-1: create-var('success-color-1', genColor($success-color, 1)); // 浅色/白底悬浮 +$success-color-2: create-var('success-color-2', genColor($success-color, 2)); // 文字禁用 +$success-color-3: create-var('success-color-3', genColor($success-color, 3)); // 一般禁用 +$success-color-4: create-var('success-color-4', genColor($success-color, 4)); // 特殊场景 +$success-color-5: create-var('success-color-5', genColor($success-color, 5)); // 悬浮 +$success-color-6: create-var('success-color-6', $success-color); // 常规 +$success-color-7: create-var('success-color-7', genColor($success-color, 7)); // 点击 +$success-color-8: create-var('success-color-8', genColor($success-color, 8)); +$success-color-9: create-var('success-color-9', genColor($success-color, 9)); +$success-color-10: create-var('success-color-10', genColor($success-color, 10)); + +$white: create-var('white', #fff); +$gray-1: create-var('gray-1', #f3f3f3); +$gray-2: create-var('gray-2', #eeeeee); +$gray-3: create-var('gray-3', #e7e7e7); +$gray-4: create-var('gray-4', #dcdcdc); +$gray-5: create-var('gray-5', #c5c5c5); +$gray-6: create-var('gray-6', #a6a6a6); +$gray-7: create-var('gray-7', #8b8b8b); +$gray-8: create-var('gray-8', #777777); +$gray-9: create-var('gray-9', #5e5e5e); +$gray-10: create-var('gray-10', #4b4b4b); +$gray-11: create-var('gray-11', #383838); +$gray-12: create-var('gray-12', #2c2c2c); +$gray-13: create-var('gray-13', #242424); +$gray-14: create-var('gray-14', #181818); +$black: create-var('black', #000); + +// $text-color-1: create-var('text-color-1', rgba(0,0,0,0.88)); //primary +// $text-color-2: create-var('text-color-2', rgba(0,0,0,0.65)); //secondary +// $text-color-3: create-var('text-color-3', rgba(0,0,0,0.45)); //placeholder +// $text-color-4: create-var('text-color-4', rgba(0,0,0,0.25)); //disabled +$text-color-1: create-var('text-color-1', #000000E0); // primary (rgba(0,0,0,0.88)) +$text-color-2: create-var('text-color-2', #000000A6); // secondary (rgba(0,0,0,0.65)) +$text-color-3: create-var('text-color-3', #00000073); // placeholder (rgba(0,0,0,0.45)) +$text-color-4: create-var('text-color-4', #00000040); // disabled (rgba(0,0,0,0.25)) + +// 容器 +$bg-color-page: create-var('bg-color-page', $gray-1); // 整体背景色 布局 +$bg-color-container: create-var('bg-color-container', #fff); // 一级容器背景 组件 +$bg-color-elevated: create-var('bg-color-elevated', #fff); // 二级容器背景 浮层 +$bg-color-spotlight: create-var('bg-color-spotlight', rgba(0, 0, 0, 0.85)); // 引起注意的如 Tooltip +$bg-color-mask: create-var('bg-color-mask', rgba(0, 0, 0, 0.45)); // 蒙层 + +// 填充 +// $fill-1: create-var('fill-1', rgba(0, 0, 0, 0.15)); +// $fill-2: create-var('fill-2', rgba(0, 0, 0, 0.06)); +// $fill-3: create-var('fill-3', rgba(0, 0, 0, 0.04)); +// $fill-4: create-var('fill-4', rgba(0, 0, 0, 0.02)); +$fill-1: create-var('fill-1', #00000026); // rgba(0,0,0,0.15) +$fill-2: create-var('fill-2', #0000000F); // rgba(0,0,0,0.06) +$fill-3: create-var('fill-3', #0000000A); // rgba(0,0,0,0.04) +$fill-4: create-var('fill-4', #00000005); // rgba(0,0,0,0.02) + + +// 描边 +$border-color-1: create-var('border-color-1', $gray-2); // 浅色 +$border-color-2: create-var('border-color-2', $gray-3); // 一般 +$border-color-3: create-var('border-color-3', $gray-4); // 深/悬浮 +$border-color-4: create-var('border-color-4', $gray-6); // 重/按钮描边 + + +$alpha-disabled: create-var('alpha-disabled', 0.5); +$alpha-pressed: create-var('alpha-pressed', 0.07); + +// 投影 +/* #ifndef UNI-APP-X && APP */ +$shadow-1: create-var( + shadow-1, + 0 1px 10px rgba(0, 0, 0, 0.05), + 0 4px 5px rgba(0, 0, 0, 0.08), + 0 2px 4px -1px rgba(0, 0, 0, 0.12) +); + +$shadow-2: create-var( + 'shadow-2', + 0 1px 10px rgba(0, 0, 0, 0.05), + 0 4px 5px rgba(0, 0, 0, 0.08), + 0 2px 4px -1px rgba(0, 0, 0, 0.12) +); +$shadow-3: create-var( + shadow-3, + 0 6px 30px 5px rgba(0, 0, 0, 0.05), + 0 16px 24px 2px rgba(0, 0, 0, 0.04), + 0 8px 10px -5px rgba(0, 0, 0, 0.08) +); + +/* #endif */ +/* #ifdef UNI-APP-X && APP */ +$shadow-1: create-var( + shadow-1, + 0 1px 10px rgba(0, 0, 0, 0.05) +); +$shadow-2: create-var( + 'shadow-2', + 0 1px 10px rgba(0, 0, 0, 0.05) +); +$shadow-3: create-var( + shadow-3, + /* #ifdef APP-HARMONY + 0 6px 30px 5px $gray-3 + /* #endif */ + /* #ifndef APP-HARMONY + 0 6px 30px 5px rgba(0, 0, 0, 0.05) + /* #endif */ + +); +/* #endif */ +$shadow-4: create-var(shadow-4, 0 2px 8px 0 rgba(0, 0, 0, .06)); + +// 基础颜色的扩展 用于 聚焦 / 禁用 / 点击 等状态 +$primary-color-focus: create-var('primary-color-focus', $primary-color-1);// focus态,包括鼠标和键盘 +$primary-color-active: create-var('primary-color-active', $primary-color-8);// 点击态 +$primary-color-disabled: create-var('primary-color-disabled', $primary-color-3); +$primary-color-light: create-var('primary-color-light', $primary-color-1); // 浅色的选中态 +$primary-color-light-active: create-var('primary-color-light-active', $primary-color-2); // 浅色的选中态 + +$primary-color: create-var(primary-color, $primary-color); +$error-color: create-var(error-color, $error-color); +$warning-color: create-var(warning-color, $warning-color); +$success-color: create-var(success-color, $success-color); +$info-color: create-var(info-color, $info-color); \ No newline at end of file diff --git a/uni_modules/lime-style/token/dark.uts b/uni_modules/lime-style/token/dark.uts new file mode 100644 index 0000000..bb373af --- /dev/null +++ b/uni_modules/lime-style/token/dark.uts @@ -0,0 +1,67 @@ +import { TinyColor, generate, LGenerateOptions } from '@/uni_modules/lime-color'; +import { getAlphaColor, getSolidColor, generateColorPalettes } from './shared' +import { SeedToken } from './interface' +// #ifndef UNI-APP-X +export type UTSJSONObject = Record +const UTSJSONObject = Object +// #endif + +export function generateNeutralColorPalettes( + bgBaseColor : string | null, + textBaseColor : string | null) : UTSJSONObject { + const colorBgBase = bgBaseColor ?? '#000'; + const colorTextBase = textBaseColor ?? '#fff'; + + return { + 'bgColorBase': colorBgBase, + 'textColorBase': colorTextBase, + + 'textColor1': getAlphaColor(colorTextBase, 0.85), + 'textColor2': getAlphaColor(colorTextBase, 0.65), + 'textColor3': getAlphaColor(colorTextBase, 0.45), + 'textColor4': getAlphaColor(colorTextBase, 0.25), + + 'fill1': getAlphaColor(colorTextBase, 0.18), + 'fill2': getAlphaColor(colorTextBase, 0.12), + 'fill3': getAlphaColor(colorTextBase, 0.08), + 'fill4': getAlphaColor(colorTextBase, 0.04), + + 'bgColorElevated': getSolidColor(colorBgBase, 12), + 'bgColorContainer': getSolidColor(colorBgBase, 8), + 'bgColorPage': getSolidColor(colorBgBase, 0), + 'bgColorSpotlight': getSolidColor(colorBgBase, 26), + // 'bgColor5': getAlphaColor(colorTextBase, 0.04), + 'bgColorMask': getAlphaColor(colorBgBase, 0.45), + 'bgColorBlur': getAlphaColor(colorTextBase, 0.04), + + 'borderColor1': getSolidColor(colorBgBase, 26), + 'borderColor2': getSolidColor(colorBgBase, 19) + } +} + + +export function genColorMapToken(token : SeedToken) : UTSJSONObject { + const colorPrimaryBase = token.primaryColor + const colorSuccessBase = token.successColor + const colorWarningBase = token.warningColor + const colorErrorBase = token.errorColor + const colorInfoBase = token.infoColor + const colorBgBase = token.bgColorBase + const colorTextBase = token.textColorBase + + const primaryColors = generateColorPalettes(colorPrimaryBase, 'primaryColor', 'dark'); + const successColors = generateColorPalettes(colorSuccessBase, 'successColor', 'dark'); + const warningColors = generateColorPalettes(colorWarningBase, 'warningColor', 'dark'); + const errorColors = generateColorPalettes(colorErrorBase, 'errorColor', 'dark'); + const infoColors = generateColorPalettes(colorInfoBase, 'infoColor', 'dark'); + const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase); + + return UTSJSONObject.assign( + {}, + primaryColors, + successColors, + warningColors, + errorColors, + infoColors, + neutralColors) +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/genFontMapToken.uts b/uni_modules/lime-style/token/genFontMapToken.uts new file mode 100644 index 0000000..ccd7256 --- /dev/null +++ b/uni_modules/lime-style/token/genFontMapToken.uts @@ -0,0 +1,49 @@ +// import type { FontMapToken } from '../../interface'; +import { getFontSizes } from './genFontSizes'; + +export const genFontMapToken = (fontSize : number | null) : UTSJSONObject => { + if (fontSize == null) return {} + const fontSizePairs = getFontSizes(fontSize); + const fontSizes = fontSizePairs.map((pair) : number => pair.size); + const lineHeights = fontSizePairs.map((pair) : number => pair.lineHeight); + + const fontSizeXS = fontSizes[0]; + const fontSizeSM = fontSizes[1]; + const fontSizeMD = fontSizes[3]; + const fontSizeLG = fontSizes[4]; + + const lineHeight = lineHeights[2]; + const lineHeightSM = lineHeights[1]; + const lineHeightMD = lineHeights[3]; + const lineHeightLG = lineHeights[4]; + + return { + fontSize, + fontSizeXS, + fontSizeSM, + fontSizeMD, + fontSizeLG, + fontSizeXL: fontSizes[5], + + fontSizeHeading1: fontSizes[7], + fontSizeHeading2: fontSizes[6], + fontSizeHeading3: fontSizes[5], + fontSizeHeading4: fontSizes[4], + fontSizeHeading5: fontSizes[3], + + lineHeight, + lineHeightLG, + lineHeightMD, + lineHeightSM, + + fontHeight: Math.round(lineHeight * fontSizeMD), + fontHeightLG: Math.round(lineHeightLG * fontSizeLG), + fontHeightSM: Math.round(lineHeightSM * fontSizeSM), + + lineHeightHeading1: lineHeights[7], + lineHeightHeading2: lineHeights[6], + lineHeightHeading3: lineHeights[5], + lineHeightHeading4: lineHeights[4], + lineHeightHeading5: lineHeights[3], + }; +}; \ No newline at end of file diff --git a/uni_modules/lime-style/token/genFontSizes.uts b/uni_modules/lime-style/token/genFontSizes.uts new file mode 100644 index 0000000..c294b54 --- /dev/null +++ b/uni_modules/lime-style/token/genFontSizes.uts @@ -0,0 +1,30 @@ +import { FontSize } from './interface'; + +export function getLineHeight(fontSize : number) : number { + return (fontSize + 8) / fontSize; +} + +// https://zhuanlan.zhihu.com/p/32746810 +export function getFontSizes(base : number) : FontSize[] { + const length = 11 // 10 + const offset = 2 // 1 + // #ifdef APP-ANDROID + const arr = Array.fromNative(new IntArray(length.toInt())); + // #endif + // #ifndef APP-ANDROID + const arr = Array.from({ length }); + // #endif + const fontSizes = arr.map((_, index) : number => { + const i = index - offset; + const baseSize = base * Math.pow(Math.E, i / 5); + const intSize = index > 1 ? Math.floor(baseSize) : Math.ceil(baseSize); + + // Convert to even + return Math.floor(intSize / 2) * 2; + }); + fontSizes[offset] = base; + return fontSizes.map((size) : FontSize => ({ + size, + lineHeight: getLineHeight(size), + } as FontSize)); +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/genRadius.uts b/uni_modules/lime-style/token/genRadius.uts new file mode 100644 index 0000000..f4378d1 --- /dev/null +++ b/uni_modules/lime-style/token/genRadius.uts @@ -0,0 +1,63 @@ +export function genRadius(radiusBase : number):Map { + let radiusXL = radiusBase; + let radiusLG = radiusBase; + let radiusMD = radiusBase; + let radiusSM = radiusBase; + let radiusXS = radiusBase; + let radiusOuter = radiusBase; + + + // radiusSM = radiusBase - 3 + // radiusXS = radiusSM - 1 + // radiusLG = radiusBase + 3 + // radiusXL = radiusLG + 3 + + + // radiusXL + if (radiusBase < 6 && radiusBase >= 5) { + radiusXL = radiusBase + 3; + } else if (radiusBase < 16 && radiusBase >= 6) { + radiusXL = radiusBase + 6; + } else if (radiusBase >= 16) { + radiusXL = 16; + } + + // radiusLG + if (radiusBase < 6 && radiusBase >= 5) { + radiusLG = radiusBase + 1; + } else if (radiusBase < 16 && radiusBase >= 6) { + radiusLG = radiusBase + 3; + } else if (radiusBase >= 16) { + radiusLG = 16; + } + + // radiusSM + if (radiusBase < 7 && radiusBase >= 5) { + radiusSM = 3; + } else if (radiusBase < 8 && radiusBase >= 7) { + radiusSM = 4; + } else if (radiusBase < 14 && radiusBase >= 8) { + radiusSM = 5; + } else if (radiusBase < 16 && radiusBase >= 14) { + radiusSM = 6; + } else if (radiusBase >= 16) { + radiusSM = 8; + } + + // radiusXS + if (radiusBase < 6 && radiusBase >= 2) { + radiusXS = 1; + } else if (radiusBase >= 6) { + radiusXS = 2; + } + + + return new Map([ + ['borderRadius', radiusBase], + ['borderRadiusXS', radiusXS], + ['borderRadiusSM', radiusSM], + ['borderRadiusMD', radiusMD], + ['borderRadiusLG', radiusLG], + ['borderRadiusXL', radiusXL], + ]) +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/genSizeMapToken.uts b/uni_modules/lime-style/token/genSizeMapToken.uts new file mode 100644 index 0000000..f7832ab --- /dev/null +++ b/uni_modules/lime-style/token/genSizeMapToken.uts @@ -0,0 +1,20 @@ +// import {SizeMapToken} from './interface' + +/** + * sizeUnit 尺寸变化单位 + * sizeStep 尺寸步长 + */ +export function genSizeMapToken(sizeUnit : number | null = 4, sizeStep : number | null = 4) : UTSJSONObject { + if (sizeUnit == null || sizeStep == null) return {} + return { + spacerHG: sizeUnit * (sizeStep + 16), // 80 + spacerXL: sizeUnit * (sizeStep + 8), // 48 + spacerLG: sizeUnit * (sizeStep + 4), // 32 + spacerMD: sizeUnit * (sizeStep + 2), // 24 + spacerMS: sizeUnit * sizeStep, // 16 + spacer: sizeUnit * sizeStep, // 16 + spacerSM: sizeUnit * (sizeStep - 1), // 12 + spacerXS: sizeUnit * (sizeStep - 2), // 8 + spacerTN: sizeUnit * (sizeStep - 3), // 4 + }; +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/interface.uts b/uni_modules/lime-style/token/interface.uts new file mode 100644 index 0000000..9f93daf --- /dev/null +++ b/uni_modules/lime-style/token/interface.uts @@ -0,0 +1,184 @@ + +export type SeedToken = { + // ---------- Color ---------- // + /** + * @nameZH 是否生成深色色板 + * @nameEN GenerateDarkPalette + * @desc 是否生成一套完整的深色阶梯色板,以支持深色模式的应用 + * @descEN Whether to generate a complete set of dark color palettes to support dark mode applications + */ + useDark ?: boolean; + + /** + * @nameZH 品牌主色 + * @nameEN Brand Color + * @desc 品牌色是体现产品特性和传播理念最直观的视觉元素之一。在你完成品牌主色的选取之后,我们会自动帮你生成一套完整的色板,并赋予它们有效的设计语义 + * @descEN Brand color is one of the most direct visual elements to reflect the characteristics and communication of the product. After you have selected the brand color, we will automatically generate a complete color palette and assign it effective design semantics. + */ + primaryColor ?: string; + /** + * @nameZH 成功色 + * @nameEN Success Color + * @desc 用于表示操作成功的 Token 序列,如 Result、Progress 等组件会使用该组梯度变量。 + * @descEN Used to represent the token sequence of operation success, such as Result, Progress and other components will use these map tokens. + */ + successColor ?: string; + + /** + * @nameZH 警戒色 + * @nameEN Warning Color + * @desc 用于表示操作警告的 Token 序列,如 Notification、 Alert等警告类组件或 Input 输入类等组件会使用该组梯度变量。 + * @descEN Used to represent the warning map token, such as Notification, Alert, etc. Alert or Control component(like Input) will use these map tokens. + */ + warningColor ?: string; + /** + * @nameZH 错误色 + * @nameEN Error Color + * @desc 用于表示操作失败的 Token 序列,如失败按钮、错误状态提示(Result)组件等。 + * @descEN Used to represent the visual elements of the operation failure, such as the error Button, error Result component, etc. + */ + errorColor ?: string; + /** + * @nameZH 信息色 + * @nameEN Info Color + * @desc 用于表示操作信息的 Token 序列,如 Alert 、Tag、 Progress 等组件都有用到该组梯度变量。 + * @descEN Used to represent the operation information of the Token sequence, such as Alert, Tag, Progress, and other components use these map tokens. + */ + infoColor ?: string; + /** + * @nameZH 基础文本色 + * @nameEN Seed Text Color + * @desc 用于派生文本色梯度的基础变量,v5 中我们添加了一层文本色的派生算法可以产出梯度明确的文本色的梯度变量。但请不要在代码中直接使用该 Seed Token ! + * @descEN Used to derive the base variable of the text color gradient. In v5, we added a layer of text color derivation algorithm to produce gradient variables of text color gradient. But please do not use this Seed Token directly in the code! + */ + textColorBase ?: string; + + /** + * @nameZH 基础背景色 + * @nameEN Seed Background Color + * @desc 用于派生背景色梯度的基础变量,v5 中我们添加了一层背景色的派生算法可以产出梯度明确的背景色的梯度变量。但请不要在代码中直接使用该 Seed Token ! + * @descEN Used to derive the base variable of the background color gradient. In v5, we added a layer of background color derivation algorithm to produce map token of background color. But PLEASE DO NOT USE this Seed Token directly in the code! + */ + bgColorBase ?: string; + + /** + * @nameZH 超链接颜色 + * @nameEN Hyperlink color + * @desc 控制超链接的颜色。 + * @descEN Control the color of hyperlink. + */ + linkColor ?: string; + + // ---------- Font ---------- // + + /** + * @nameZH 字体 + * @nameEN Font family for default text + * @desc Lime Ui 的字体家族中优先使用系统默认的界面字体,同时提供了一套利于屏显的备用字体库,来维护在不同平台以及浏览器的显示下,字体始终保持良好的易读性和可读性,体现了友好、稳定和专业的特性。 + * @descEN The font family of Lime Ui prioritizes the default interface font of the system, and provides a set of alternative font libraries that are suitable for screen display to maintain the readability and readability of the font under different platforms and browsers, reflecting the friendly, stable and professional characteristics. + */ + fontFamily ?: string; + + /** + * @nameZH 代码字体 + * @nameEN Font family for code text + * @desc 代码字体,用于 Typography 内的 code、pre 和 kbd 类型的元素 + * @descEN Code font, used for code, pre and kbd elements in Typography + */ + fontFamilyCode ?: string; + + /** + * @nameZH 默认字号 + * @nameEN Default Font Size + * @desc 设计系统中使用最广泛的字体大小,文本梯度也将基于该字号进行派生。 + * @descEN The most widely used font size in the design system, from which the text gradient will be derived. + * @default 14 + */ + fontSize ?: number; + + + // ---------- BorderRadius ---------- // + + /** + * @nameZH 基础圆角 + * @nameEN Base Border Radius + * @descEN Border radius of base components + * @desc 基础组件的圆角大小,例如按钮、输入框、卡片等 + */ + borderRadius ?: number; + + // ---------- Size ---------- // + + /** + * @nameZH 尺寸变化单位 + * @nameEN Size Change Unit + * @desc 用于控制组件尺寸的变化单位,在 Lime Ui 中我们的基础单位为 4 ,便于更加细致地控制尺寸梯度 + * @descEN The unit of size change, in Lime Ui, our base unit is 4, which is more fine-grained control of the size step + * @default 4 + */ + sizeUnit ?: number; + + /** + * @nameZH 尺寸步长 + * @nameEN Size Base Step + * @desc 用于控制组件尺寸的基础步长,尺寸步长结合尺寸变化单位,就可以派生各种尺寸梯度。通过调整步长即可得到不同的布局模式,例如 V5 紧凑模式下的尺寸步长为 2 + * @descEN The base step of size change, the size step combined with the size change unit, can derive various size steps. By adjusting the step, you can get different layout modes, such as the size step of the compact mode of V5 is 2 + * @default 4 + */ + sizeStep ?: number; +} +export type FontSize = { + size : number + lineHeight : number +} +export type SizeMapToken = { + /** + * @nameZH Huge + * @default 80 + */ + sizeHG : number; + /** + * @nameZH XL + * @default 48 + */ + sizeXL : number; + /** + * @nameZH LG + * @default 32 + */ + sizeLG : number; + /** + * @nameZH MD + * @default 24 + */ + sizeMD : number; + /** Same as size by default, but could be larger in compact mode */ + sizeMS : number; + /** + * @nameZH 默认 + * @desc 默认尺寸 + * @default 16 + */ + size : number; + /** + * @nameZH SM + * @default 12 + */ + sizeSM : number; + /** + * @nameZH XS + * @default 8 + */ + sizeXS : number; + /** + * @nameZH Tiny + * @default 4 + */ + sizeTN : number; +} + + +// #ifndef UNI-APP-X +export type VueApp = any +export type UTSJSONObject = Record +// #endif diff --git a/uni_modules/lime-style/token/light.uts b/uni_modules/lime-style/token/light.uts new file mode 100644 index 0000000..8e3155a --- /dev/null +++ b/uni_modules/lime-style/token/light.uts @@ -0,0 +1,66 @@ +import { TinyColor, generate } from '@/uni_modules/lime-color'; +import { getAlphaColor, getSolidColor, generateColorPalettes } from './shared' +import { SeedToken } from './interface' +// #ifndef UNI-APP-X +export type UTSJSONObject = Record +const UTSJSONObject = Object +// #endif + +export function generateNeutralColorPalettes( + bgBaseColor : string | null, + textBaseColor : string | null +) : UTSJSONObject { + const colorBgBase = bgBaseColor ?? '#fff'; + const colorTextBase = textBaseColor ?? '#000'; + + return { + 'bgColorBase': bgBaseColor, + 'textColorBase': textBaseColor, + + 'textColor1': getAlphaColor(colorTextBase, 0.88), + 'textColor2': getAlphaColor(colorTextBase, 0.65), + 'textColor3': getAlphaColor(colorTextBase, 0.45), + 'textColor4': getAlphaColor(colorTextBase, 0.25), + + 'fill1': getAlphaColor(colorTextBase, 0.15), + 'fill2': getAlphaColor(colorTextBase, 0.06), + 'fill3': getAlphaColor(colorTextBase, 0.04), + 'fill4': getAlphaColor(colorTextBase, 0.02), + + 'bgColorPage': getSolidColor(colorBgBase, 4), + 'bgColorContainer': getSolidColor(colorBgBase, 0), + 'bgColorElevated': getSolidColor(colorBgBase, 0), + 'bgColorMask': getAlphaColor(colorTextBase, 0.45), + 'bgColorSpotlight': getAlphaColor(colorTextBase, 0.85), + 'bgColorBlur': 'transparent', + + 'borderColor1': getSolidColor(colorBgBase, 15), + 'borderColor2': getSolidColor(colorBgBase, 6) + } +}; + +export function genColorMapToken(token : SeedToken) : UTSJSONObject { + const colorPrimaryBase = token.primaryColor + const colorSuccessBase = token.successColor + const colorWarningBase = token.warningColor + const colorErrorBase = token.errorColor + const colorInfoBase = token.infoColor + const colorBgBase = token.bgColorBase + const colorTextBase = token.textColorBase + + const primaryColors = generateColorPalettes(colorPrimaryBase, 'primaryColor'); + const successColors = generateColorPalettes(colorSuccessBase, 'successColor'); + const warningColors = generateColorPalettes(colorWarningBase, 'warningColor'); + const errorColors = generateColorPalettes(colorErrorBase, 'errorColor'); + const infoColors = generateColorPalettes(colorInfoBase, 'infoColor'); + const neutralColors = generateNeutralColorPalettes(colorBgBase, colorTextBase); + + return UTSJSONObject.assign( + {}, + primaryColors, + successColors, + warningColors, + errorColors, + infoColors, + neutralColors) +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/shared.uts b/uni_modules/lime-style/token/shared.uts new file mode 100644 index 0000000..45ed035 --- /dev/null +++ b/uni_modules/lime-style/token/shared.uts @@ -0,0 +1,24 @@ +import { TinyColor, generate } from '@/uni_modules/lime-color'; +import { LGenerateOptions } from '@/uni_modules/lime-color/utssdk/interface'; + +export const getAlphaColor = (baseColor : string, alpha : number) : string => + new TinyColor(baseColor).setAlpha(alpha).toRgbString(); + +export const getSolidColor = (baseColor : string, brightness : number) : string => { + const instance = new TinyColor(baseColor); + return instance.lighten(brightness).toHexString(); +}; + +export function generateColorPalettes(baseColor : string | null, name : string, theme: string = 'default') : UTSJSONObject { + if (baseColor == null) return {} + const colors = generate(baseColor, { theme } as LGenerateOptions); + const colorPalettes = colors.reduce((prev:UTSJSONObject, color:string, index:number) : UTSJSONObject => { + prev[`${name}${index + 1}`] = color; + return prev + }, {}) + + // 默认为中间色 + colorPalettes[name] = colorPalettes[`${name}${6}`] + return colorPalettes +} + diff --git a/uni_modules/lime-style/token/useThemeMode.uts b/uni_modules/lime-style/token/useThemeMode.uts new file mode 100644 index 0000000..ffd9de4 --- /dev/null +++ b/uni_modules/lime-style/token/useThemeMode.uts @@ -0,0 +1,126 @@ +// @ts-nocheck +// #ifndef UNI-APP-X +import { type ComputedRef, ref, watch, getCurrentScope, onScopeDispose, computed, reactive } from './vue'; +// #endif + +type ThemeMode = 'light' | 'dark' | 'auto' +const THEME_LOCAL_STORAGE_KEY = 'app-theme-preference' + +let limeThemeId = -1 +const limeThemeMode = ref('auto') +const limeTheme = ref(getTheme()) + + +function setWeb (theme: ThemeMode) { + // #ifdef WEB + const pageHead = document.querySelector(".uni-page-head"); + if(!pageHead) return + if (theme == 'dark') { + pageHead.style.backgroundColor = '#181818' + pageHead.style.color = '' + } else { + pageHead.style.backgroundColor = 'rgb(245, 245, 245)' + pageHead.style.color = 'rgb(0, 0, 0)' + } + // #endif +} + + +export function getTheme(): 'dark' | 'light' { + // #ifndef UNI-APP-X && APP + let mode = uni.getStorageSync(THEME_LOCAL_STORAGE_KEY) + limeThemeMode.value = (mode || 'auto') + const hostTheme = uni.getAppBaseInfo().hostTheme; + return limeThemeMode.value === 'auto' ? (hostTheme || 'light') : limeThemeMode.value + // #endif + + // #ifdef UNI-APP-X && APP + let { osTheme, appTheme } = uni.getSystemInfoSync(); + return appTheme == "auto" ? osTheme! : appTheme! + // #endif + + +} + +// #ifndef UNI-APP-X +let limeThemeCallBack = (result) => { + limeTheme.value = result.theme +}; +// #endif + +export function stop() { + // #ifndef UNI-APP-X + uni.offThemeChange(limeThemeCallBack) + // #endif + // #ifdef UNI-APP-X + // #ifndef UNI-APP-X && APP + uni.offHostThemeChange(limeThemeId) + + // #endif + // #ifdef UNI-APP-X && APP + uni.offAppThemeChange(limeThemeId) + // #endif + // #endif +} + + +// 检查系统主题 +export const checkSystemTheme = () => { + stop() + limeTheme.value = getTheme() + // #ifndef UNI-APP-X + uni.onThemeChange(limeThemeCallBack); + // #endif + // #ifdef UNI-APP-X + // #ifndef UNI-APP-X && APP + limeThemeId = uni.onHostThemeChange((result) => { + limeTheme.value = result.hostTheme + }); + // #endif + // #ifdef UNI-APP-X && APP + limeThemeId = uni.onAppThemeChange((res : AppThemeChangeResult) => { + limeTheme.value = res.appTheme.trim() + }) + // #endif + // #endif +} + + +export const isDarkMode = computed(() => { + return limeTheme.value == "dark"; +}); + +export function setThemeMode(theme: 'dark' | 'light' | 'auto') { + // #ifdef UNI-APP-X && APP + if (limeTheme.value == theme) return; + uni.setAppTheme({ + theme, + success: function (result: SetAppThemeSuccessResult) { + console.log("设置appTheme为"+ result.theme +"成功") + limeTheme.value = result.theme + }, + fail: function (e : IAppThemeFail) { + console.log("设置appTheme为 auto 失败,原因:", e.errMsg) + } + }) + // #endif + // #ifndef UNI-APP-X && APP + limeThemeMode.value = theme + uni.setStorageSync(THEME_LOCAL_STORAGE_KEY, theme) + limeTheme.value = getTheme() + // #endif + // #ifdef WEB + setWeb(limeTheme.value ) + // #endif +} + + +export function toggleTheme() { + setThemeMode(isDarkMode.value ? 'light' : 'dark') +} + +// #ifdef WEB +watch(isDarkMode, ()=>{ + setWeb(limeTheme.value) +}) +// #endif \ No newline at end of file diff --git a/uni_modules/lime-style/token/useThemeVars.uts b/uni_modules/lime-style/token/useThemeVars.uts new file mode 100644 index 0000000..d5ceb23 --- /dev/null +++ b/uni_modules/lime-style/token/useThemeVars.uts @@ -0,0 +1,123 @@ +// @ts-nocheck +import { isDarkMode } from './useThemeMode' +import type { SeedToken } from './interface'; +import { genFontMapToken } from './genFontMapToken'; +import { genSizeMapToken } from './genSizeMapToken'; +import { genColorMapToken as genLightColorMapToken } from './light'; +import { genColorMapToken as genDarkColorMapToken } from './dark'; +import { computed, reactive } from 'vue'; // 或相应的响应式系统 + + + +// #ifndef UNI-APP-X +export type VueApp = any +export type UTSJSONObject = Record +const UTSJSONObject = Object +// #endif + + +// 内部存储的 tokens +type LimeTokens = { + light : UTSJSONObject + dark : UTSJSONObject +} + +// 默认的基础 token +const DEFAULT_SEED_TOKEN : SeedToken = { + primaryColor: '#3283ff' +}; + +export const themeTokenMaps = reactive({ + light: {}, + dark: {}, +}) + + +// 初始化默认 tokens +function initDefaultTokens() { + // Light 主题颜色 + const lightColors = { + white: '#fff', + gray1: '#f3f3f3', + gray2: '#eeeeee', + gray3: '#e7e7e7', + gray4: '#dcdcdc', + gray5: '#c5c5c5', + gray6: '#a6a6a6', + gray7: '#8b8b8b', + gray8: '#777777', + gray9: '#5e5e5e', + gray10: '#4b4b4b', + gray11: '#383838', + gray12: '#2c2c2c', + gray13: '#242424', + gray14: '#181818', + black: '#000', + ...genLightColorMapToken(DEFAULT_SEED_TOKEN) + }; + // Dark 主题颜色 + const darkColors = { + white: '#000', // 在暗黑模式下反转 + gray1: '#181818', + gray2: '#242424', + gray3: '#2c2c2c', + gray4: '#383838', + gray5: '#4b4b4b', + gray6: '#5e5e5e', + gray7: '#777777', + gray8: '#8b8b8b', + gray9: '#a6a6a6', + gray10: '#c5c5c5', + gray11: '#dcdcdc', + gray12: '#e7e7e7', + gray13: '#eeeeee', + gray14: '#f3f3f3', + black: '#fff', // 在暗黑模式下反转 + ...genDarkColorMapToken(DEFAULT_SEED_TOKEN) + }; + + themeTokenMaps.light = UTSJSONObject.assign({}, lightColors, lightColors) + themeTokenMaps.dark = UTSJSONObject.assign({}, darkColors, darkColors) +} + +initDefaultTokens(); + +// 导出的 themeTokens 是计算属性,自动返回当前主题的 tokens +export const themeTokens = computed(():UTSJSONObject => { + return isDarkMode.value ? themeTokenMaps.dark : themeTokenMaps.light; +}); + + + +export function useThemeToken(token : SeedToken | null = null) { + if (token != null) { + const lightColors = genLightColorMapToken(token!); + const darkColors = genDarkColorMapToken(token!); + + // 只有在提供了相关属性时才重新生成 fonts 和 sizes + const fonts = genFontMapToken(token!.fontSize) + const sizes = genSizeMapToken(token!.sizeUnit, token.sizeStep) + + themeTokenMaps.light = UTSJSONObject.assign({}, themeTokenMaps.light, lightColors, fonts, sizes) + themeTokenMaps.dark = UTSJSONObject.assign({}, themeTokenMaps.dark, darkColors, fonts, sizes) + } +} + +export function useThemeVars(options : UTSJSONObject | null = null) { + if (options != null) { + const currentTheme = isDarkMode.value ? themeTokenMaps.dark : themeTokenMaps.light; + + // #ifdef UNI-APP-X && APP + options.toMap().forEach((value, key) => { + currentTheme.set(key, value); + }); + // #endif + + // #ifndef UNI-APP-X && APP + Object.entries(options).forEach(([key, value]) => { + // currentTheme.set(key, value); + currentTheme[key] = value + }); + // #endif + } +} \ No newline at end of file diff --git a/uni_modules/lime-style/token/vue.ts b/uni_modules/lime-style/token/vue.ts new file mode 100644 index 0000000..d8ded83 --- /dev/null +++ b/uni_modules/lime-style/token/vue.ts @@ -0,0 +1,13 @@ +// @ts-nocheck +// #ifndef VUE3 +import Vue from 'vue' +import VueCompositionAPI from '@vue/composition-api' +Vue.use(VueCompositionAPI) +export * from '@vue/composition-api' +// #endif +// #ifdef VUE3 +export * from 'vue'; +// #endif +// #ifdef APP-IOS || APP-ANDROID +export type ComputedRef = ComputedRefImpl +// #endif \ No newline at end of file diff --git a/uni_modules/lime-style/var.scss b/uni_modules/lime-style/var.scss new file mode 100644 index 0000000..3b107f8 --- /dev/null +++ b/uni_modules/lime-style/var.scss @@ -0,0 +1,64 @@ +@import './mixins/create.scss'; +// 公共前缀 +$prefix: l !default; + +// Spacer +$spacer: create-var('spacer', 16px) !default; // base +$spacer-tn: create-var('spacer-tn', 4px) !default; // Tiny +$spacer-xs: create-var('spacer-xs', 8px) !default; // Extra Small +$spacer-sm: create-var('spacer-sm', 12px) !default; // Small +$spacer-md: create-var('spacer-md', 24px) !default; // Medium +$spacer-lg: create-var('spacer-lg', 32px) !default; // Large +$spacer-xl: create-var('spacer-xl', 48px) !default; // Extra Large +$spacer-hg: create-var('spacer-hg', 80px) !default; // Huge //Ultra Big + +// Font 官方建议字体不跟随页面变化 +$font-size: create-var('font-size', 14px) !default; +$font-size-xs: create-var('font-size-xs', 10px) !default; +$font-size-sm: create-var('font-size-sm', 12px) !default; +$font-size-md: create-var('font-size-md', 16px) !default; +$font-size-lg: create-var('font-size-lg',20px) !default; +$font-size-xl: create-var('font-size-xl', 36px) !default; + +$font-size-heading-1: create-var('font-size-heading-1', 38px) !default; +$font-size-heading-2: create-var('font-size-heading-2', 30px) !default; +$font-size-heading-3: create-var('font-size-heading-3', 24px) !default; +$font-size-heading-4: create-var('font-size-heading-4', 20px) !default; +$font-size-heading-5: create-var('font-size-heading-5', 16px) !default; + + +$font-family: create-var('font-family', PingFang SC, Microsoft YaHei, Arial Regular) !default; // 字体-磅数-常规 +$font-family-md: create-var('font-family-md', PingFang SC, Microsoft YaHei, Arial Medium) !default; // 字体-磅数-粗体 + + +// 行高 +$line-height: create-var('line-height', 1.5714285714285714) !default; +$line-height-sm: create-var('line-height-sm', 1.6666666666666667) !default; +$line-height-md: create-var('line-height-lg', 1.5) !default; +$line-height-lg: create-var('line-height-lg', 1.4) !default; + +$line-height-heading-1: create-var('line-height-heading-1', 1.2105263157894737) !default; +$line-height-heading-2: create-var('line-height-heading-2', 1.2666666666666666) !default; +$line-height-heading-3: create-var('line-height-heading-3', 1.3333333333333333) !default; +$line-height-heading-4: create-var('line-height-heading-4', 1.4) !default; +$line-height-heading-5: create-var('line-height-heading-5', 1.5) !default; + + +// 圆角 +$border-radius: create-var('border-radius', 6px) !default; +$border-radius-xs: create-var('border-radius-xs', 2px) !default; +$border-radius-sm: create-var('border-radius-sm', 3px) !default; +$border-radius-md: create-var('border-radius-md', 6px) !default; +$border-radius-lg: create-var('border-radius-lg', 9px) !default; +$border-radius-xl: create-var('border-radius-xl', 12px) !default; +$border-radius-hg: create-var('border-radius-hg', 999px) !default; +// $border-radius-circle: var(--l-border-radius-circle, 50%); + + +// 动画 +$anim-time-fn-easing: create-var('anim-time-fn-easing', cubic-bezier(0.38, 0, 0.24, 1)) !default; +$anim-time-fn-ease-out: create-var('anim-time-fn-ease-out', cubic-bezier(0, 0, 0.15, 1)) !default; +$anim-time-fn-ease-in: create-var('anim-time-fn-ease-in', cubic-bezier(0.82, 0, 1, 0.9)) !default; +$anim-duration-base: create-var('anim-duration-base', 0.2s) !default; +$anim-duration-moderate: create-var('anim-duration-moderate', 0.24s) !default; +$anim-duration-slow: create-var('anim-duration-slow', 0.28s) !default; \ No newline at end of file diff --git a/uni_modules/uni-icons/changelog.md b/uni_modules/uni-icons/changelog.md new file mode 100644 index 0000000..a287acc --- /dev/null +++ b/uni_modules/uni-icons/changelog.md @@ -0,0 +1,46 @@ +## 2.0.13(2026-07-22) +- 优化 选项式改成组合式写法 +## 2.0.12(2025-08-26) +- 优化 uni-app x 下 size 类型问题 +## 2.0.11(2025-08-18) +- 修复 图标点击事件返回 +## 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/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue new file mode 100644 index 0000000..de6d019 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.uvue @@ -0,0 +1,88 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uni-icons.vue b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue new file mode 100644 index 0000000..2bd7cd3 --- /dev/null +++ b/uni_modules/uni-icons/components/uni-icons/uni-icons.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/uni_modules/uni-icons/components/uni-icons/uniicons.css b/uni_modules/uni-icons/components/uni-icons/uniicons.css new file mode 100644 index 0000000..0a6b6fe --- /dev/null +++ b/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/uni_modules/uni-icons/components/uni-icons/uniicons.ttf b/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/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts b/uni_modules/uni-icons/components/uni-icons/uniicons_file.ts new file mode 100644 index 0000000..98e93aa --- /dev/null +++ b/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/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js b/uni_modules/uni-icons/components/uni-icons/uniicons_file_vue.js new file mode 100644 index 0000000..1cd11e1 --- /dev/null +++ b/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/uni_modules/uni-icons/package.json b/uni_modules/uni-icons/package.json new file mode 100644 index 0000000..a59acb4 --- /dev/null +++ b/uni_modules/uni-icons/package.json @@ -0,0 +1,112 @@ +{ + "id": "uni-icons", + "displayName": "uni-icons 图标", + "version": "2.0.13", + "description": "图标组件,用于展示移动端常见的图标,可自定义颜色、大小。", + "keywords": [ + "uni-ui", + "uniui", + "icon", + "图标" +], + "repository": "https://github.com/dcloudio/uni-ui", + "engines": { + "HBuilderX": "^3.2.14", + "uni-app": "^4.08", + "uni-app-x": "^4.61" + }, + "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", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "dependencies": [ + "uni-scss" + ], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": "√", + "vue3": "√" + }, + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "vue": "√", + "nvue": "-", + "android": { + "extVersion": "", + "minVersion": "29" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "√", + "toutiao": "√", + "baidu": "√", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "√", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "√", + "union": "√" + } + }, + "uni-app-x": { + "web": { + "safari": "√", + "chrome": "√" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "29" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-icons/readme.md b/uni_modules/uni-icons/readme.md new file mode 100644 index 0000000..86234ba --- /dev/null +++ b/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/uni_modules/uni-scss/changelog.md b/uni_modules/uni-scss/changelog.md new file mode 100644 index 0000000..b863bb0 --- /dev/null +++ b/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/uni_modules/uni-scss/index.scss b/uni_modules/uni-scss/index.scss new file mode 100644 index 0000000..1744a5f --- /dev/null +++ b/uni_modules/uni-scss/index.scss @@ -0,0 +1 @@ +@import './styles/index.scss'; diff --git a/uni_modules/uni-scss/package.json b/uni_modules/uni-scss/package.json new file mode 100644 index 0000000..7cc0ccb --- /dev/null +++ b/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/uni_modules/uni-scss/readme.md b/uni_modules/uni-scss/readme.md new file mode 100644 index 0000000..b7d1c25 --- /dev/null +++ b/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/uni_modules/uni-scss/styles/index.scss b/uni_modules/uni-scss/styles/index.scss new file mode 100644 index 0000000..ffac4fe --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_border.scss b/uni_modules/uni-scss/styles/setting/_border.scss new file mode 100644 index 0000000..12a11c3 --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_color.scss b/uni_modules/uni-scss/styles/setting/_color.scss new file mode 100644 index 0000000..1ededd9 --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_radius.scss b/uni_modules/uni-scss/styles/setting/_radius.scss new file mode 100644 index 0000000..9a0428b --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_space.scss b/uni_modules/uni-scss/styles/setting/_space.scss new file mode 100644 index 0000000..3c89528 --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_styles.scss b/uni_modules/uni-scss/styles/setting/_styles.scss new file mode 100644 index 0000000..689afec --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_text.scss b/uni_modules/uni-scss/styles/setting/_text.scss new file mode 100644 index 0000000..a34d08f --- /dev/null +++ b/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/uni_modules/uni-scss/styles/setting/_variables.scss b/uni_modules/uni-scss/styles/setting/_variables.scss new file mode 100644 index 0000000..557d3d7 --- /dev/null +++ b/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/uni_modules/uni-scss/styles/tools/functions.scss b/uni_modules/uni-scss/styles/tools/functions.scss new file mode 100644 index 0000000..ac6f63e --- /dev/null +++ b/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/uni_modules/uni-scss/theme.scss b/uni_modules/uni-scss/theme.scss new file mode 100644 index 0000000..80ee62f --- /dev/null +++ b/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/uni_modules/uni-scss/variables.scss b/uni_modules/uni-scss/variables.scss new file mode 100644 index 0000000..1c062d4 --- /dev/null +++ b/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/uni_modules/uni-wifi/changelog.md b/uni_modules/uni-wifi/changelog.md new file mode 100644 index 0000000..8bdfcde --- /dev/null +++ b/uni_modules/uni-wifi/changelog.md @@ -0,0 +1,14 @@ +## 1.1.0(2026-04-03) +修复iOS端iOS14及以上系统getConnectedWifi函数部分字段错误的bug +## 1.0.10(2026-03-30) +iOS 平台适配iOS 26及以上系统,修复getConnectedWifi 报错的bug +## 1.0.9(2025-10-30) +iOS平台统一参数类型 +## 1.0.8(2025-09-29) ++ 修复Android平台 getConnectedWifi 方法partialInfo参数不生效的问题 +## 1.0.6(2023-11-13) ++ 统一错误码格式 ++ 修复部分真机未链接wifi可能卡死的bug +## 1.0.0(2022-12-05) +实现Android/iOS平台Wi-Fi功能模块 +注:iOS平台仅支持获取已连接的 Wi-Fi 信息 diff --git a/uni_modules/uni-wifi/package.json b/uni_modules/uni-wifi/package.json new file mode 100644 index 0000000..e8581a6 --- /dev/null +++ b/uni_modules/uni-wifi/package.json @@ -0,0 +1,147 @@ +{ + "id": "uni-wifi", + "displayName": "uni-wifi", + "version": "1.1.0", + "description": "wifi管理", + "keywords": [ + "wifi" +], + "repository": "", + "engines": { + "HBuilderX": "^3.96", + "uni-app": "^4.75", + "uni-app-x": "^4.75" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "0.00" + }, + "sourcecode": { + "price": "0.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "插件不采集任何数据", + "permissions": "Android平台:\n\n\n\n\niOS平台:\niOS13及以上平台获取Wifi信息需要定位权限" + }, + "npmurl": "", + "darkmode": "x", + "i18n": "x", + "widescreen": "x" + }, + "uni_modules": { + "uni-ext-api": { + "uni": { + "startWifi": { + "web": false + }, + "stopWifi": { + "web": false + }, + "connectWifi": { + "web": false + }, + "getConnectedWifi": { + "web": false + }, + "getWifiList": { + "web": false + }, + "onGetWifiList": { + "web": false + }, + "offGetWifiList": { + "web": false + }, + "onWifiConnected": { + "web": false + }, + "offWifiConnected": { + "web": false + }, + "onWifiConnectedWithPartialInfo": { + "web": false + }, + "offWifiConnectedWithPartialInfo": { + "web": false + } + } + }, + "dependencies": [], + "encrypt": [], + "platforms": { + "cloud": { + "tcb": "√", + "aliyun": "√", + "alipay": "x" + }, + "client": { + "uni-app": { + "vue": { + "vue2": { + "extVersion": "1.0.7", + "minVersion": "" + }, + "vue3": { + "extVersion": "1.0.7", + "minVersion": "" + } + }, + "web": { + "safari": "x", + "chrome": "x" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": { + "extVersion": "1.0.7", + "minVersion": "19" + }, + "ios": { + "extVersion": "1.0.7", + "minVersion": "12" + }, + "harmony": "x" + }, + "mp": { + "weixin": "x", + "alipay": "x", + "toutiao": "x", + "baidu": "x", + "kuaishou": "x", + "jd": "x", + "harmony": "x", + "qq": "x", + "lark": "x", + "xhs": "-" + }, + "quickapp": { + "huawei": "x", + "union": "x" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": "-", + "ios": "-", + "harmony": "-" + }, + "mp": { + "weixin": "-" + } + } + } + } + } +} \ No newline at end of file diff --git a/uni_modules/uni-wifi/readme.md b/uni_modules/uni-wifi/readme.md new file mode 100644 index 0000000..047a8f2 --- /dev/null +++ b/uni_modules/uni-wifi/readme.md @@ -0,0 +1,145 @@ +## 使用说明 + +Wi-Fi功能模块 + + +### App-iOS平台注意事项 +- iOS平台App获取Wi-Fi信息需要开启“Access WiFi information”能力 + 登录苹果开发者网站,在“Certificates, Identifiers & Profiles”页面选择“Identifiers”中选择对应的App ID,确保开启“Access WiFi information”,保存后重新生成profile文件 +- iOS13及以上系统,获取当前连接的Wi-Fi信息需要先获取系统定位权限,因此在iOS13及以上系统使用此接口时,会触发定位权限申请的弹窗 + +### App-Android平台注意事项 +- 如果是自定义基座,需要具备下面的权限 + +``` + + + + +``` + + +###uni.startWifi(OBJECT) + +初始化Wi-Fi模块。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi](https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi) + + +### uni.stopWifi(OBJECT) + +关闭 Wi-Fi 模块。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi](https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi) + + +### uni.getConnectedWifi(OBJECT) + +获取已连接的 Wi-Fi 信息 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#getconnectedwifi](https://uniapp.dcloud.net.cn/api/system/wifi.html#getconnectedwifi) + + +### uni.getWifiList(OBJECT) + +请求获取 Wi-Fi 列表。wifiList 数据会在 onGetWifiList 注册的回调中返回。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList](https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.onGetWifiList(CALLBACK) + +监听获取到 Wi-Fi 列表数据事件。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList](https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.offGetWifiList(CALLBACK) + +移除获取到 Wi-Fi 列表数据事件的监听函数。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList](https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.connectWifi(OBJECT) + +连接 Wi-Fi。若已知 Wi-Fi 信息,可以直接利用该接口连接。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi](https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.onWifiConnected(CALLBACK) + +监听连接上 Wi-Fi 的事件。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected](https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.offWifiConnected(CALLBACK) + +移除连接上 Wi-Fi 的事件的监听函数。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected](https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.onWifiConnectedWithPartialInfo(CALLBACK) + +监听连接上 Wi-Fi 的事件。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo](https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + + +### uni.offWifiConnectedWithPartialInfo(CALLBACK) + +移除连接上 Wi-Fi 的事件的监听函数。 + +> 使用文档:[https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo](https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo) + +**平台差异说明** + +|App-Android|App-iOS| +|:-:|:-:| +|√|x| + diff --git a/uni_modules/uni-wifi/utssdk/app-android/config.json b/uni_modules/uni-wifi/utssdk/app-android/config.json new file mode 100644 index 0000000..7ed4299 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-android/config.json @@ -0,0 +1,3 @@ +{ + "minSdkVersion": "19" +} \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-android/index.uts b/uni_modules/uni-wifi/utssdk/app-android/index.uts new file mode 100644 index 0000000..e0ff318 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-android/index.uts @@ -0,0 +1,803 @@ +import Context from "android.content.Context"; +import WifiManager from "android.net.wifi.WifiManager"; +import WifiInfo from "android.net.wifi.WifiInfo"; +import Manifest from "android.Manifest"; +import PackageManager from "android.content.pm.PackageManager"; +import ScanResult from "android.net.wifi.ScanResult"; +import BroadcastReceiver from "android.content.BroadcastReceiver"; +import ActivityCompat from "androidx.core.app.ActivityCompat"; +import IntentFilter from "android.content.IntentFilter"; +import Intent from "android.content.Intent"; + +import WifiConfiguration from 'android.net.wifi.WifiConfiguration'; +import AuthAlgorithm from 'android.net.wifi.WifiConfiguration.AuthAlgorithm'; +import KeyMgmt from 'android.net.wifi.WifiConfiguration.KeyMgmt'; +import TextUtils from 'android.text.TextUtils'; +import Build from 'android.os.Build'; + +import { UniWifiResult, UniWifiInfoWithPartialInfo,GetConnectedWifiOptions, WifiConnectOption, GetWifiListOptions, +StartWifiOptions, StopWifiOptions,UniWifiInfo,UniWifiCallback ,UniWifiResultCallback,UniWifiResultCallbackWithPartialInfo,UniGetWifiListCallback} from "../interface.uts" +import { WifiFailImpl, getErrcode,UniErrorSubject } from '../unierror'; + + +/** + * 全局数据储存 + */ +class Global { + static mReceiver : CustomBroadcastReceiver | null = null; + static WIFI_AUTH_OPEN : string = ""; + static WIFI_AUTH_ROAM : String = "[ESS]"; + // 扫描wifi结果 + static scanList : AndroidUniWifiInfo[] = [] + // 获取wifi列表监听 + static onGetWifiListCallback : UniGetWifiListCallback|null = null + static supendGetWifiSuccess : UniWifiResultCallback|null = null + static supendGetWifiComplete :UniWifiResultCallback|null = null + // wifi链接监听 + static onWifiConnectCallbackList : UniWifiResultCallback[] = [] + static onWifiConnectWithPartialInfoCallbackList : UniWifiResultCallbackWithPartialInfo[] = [] +} + + +/** + * 是否是标准的16进制字符 + */ +function isHex(key : string) : boolean { + for (var i = key.length - 1; i >= 0; i--) { + let c = key.charAt(i); + if (!(c >= '0' && c <= '9' || c >= 'A' && c <= 'F' || c >= 'a' + && c <= 'f')) { + return false; + } + } + + return true; +} + +/** + * 判断是否是wep格式的key + */ +function isHexWepKey(wepKey : string) : boolean { + let len = wepKey.length; + + // WEP-40, WEP-104, and some vendors using 256-bit WEP (WEP-232?) + if (len != 10 && len != 26 && len != 58) { + return false; + } + + return isHex(wepKey); +} +/** + * android 平台特有的Wifi信息对象,主要是加了加密信息这个字段 + */ +export type AndroidUniWifiInfo = { + SSID : string; + BSSID ?: string; + secure : boolean; + signalStrength : number; + frequency : number; + securityType : string; +} + +function wrapUniWifiInfoFromAndroid(androidInfo : AndroidUniWifiInfo) : UniWifiInfo { + let ret : UniWifiInfo = { + SSID: androidInfo.SSID, + BSSID: androidInfo.BSSID, + secure: androidInfo.secure, + signalStrength: androidInfo.signalStrength, + frequency: androidInfo.frequency, + } + return ret +} +/** + * 从扫描结果中提取统一的wifi数据结构 + */ +function wrapUniWifiInfoFromScan(scanResult : ScanResult) : AndroidUniWifiInfo { + + let ret : AndroidUniWifiInfo = { + SSID: "", + secure: false, + signalStrength: 0, + frequency: 0, + securityType: "NONE" + } + if (scanResult != null) { + // 如果是通过扫描列表得到的数据,进行封装 + ret.BSSID = scanResult.BSSID; + ret.SSID = scanResult.SSID; + + ret.signalStrength = scanResult.level; + ret.frequency = scanResult.frequency; + + // 是否安全,微信的标准是是否需要密码。 来源:https://developers.weixin.qq.com/community/develop/doc/00064cf1790458db19cddf9925ac00?highLine=WifiInfo + ret.secure = false; + let capabilities = scanResult.capabilities.trim(); + if ((capabilities.equals(Global.WIFI_AUTH_OPEN) || capabilities.equals(Global.WIFI_AUTH_ROAM))) { + ret.secure = false; + } else { + ret.secure = true; + } + + /*扩展字段*/ + ret.securityType = getSecurityType(scanResult); + } + + return ret +} +/** + * 从链接信息中提取统一的wifi数据结构 + */ +function wrapUniWifiInfoFromConnectInfo(connectInfo : WifiInfo) : UniWifiInfo { + let ret : UniWifiInfo = { + SSID: "", + secure: false, + signalStrength: 0, + frequency: 0, + } + + + if (connectInfo.getSSID() != null) { + let s = connectInfo.getSSID(); + // 微信不带,这里需要去掉引号 + if (s.length > 2 && s.charAt(0) == '"' && s.charAt(s.length - 1) == '"') { + s = s.substring(1, s.length - 1); + } + ret.SSID = s; + } + + ret.BSSID = connectInfo.getBSSID(); + //Android返回的值是-100~0,而微信API规范是0~100,值越大信号越好,需要+100拉齐 + ret.signalStrength = connectInfo.getRssi() + 100; + ret.frequency = connectInfo.getFrequency(); + + + return ret +} + + +/** + * 连接wifi时使用,根据用户输入内容包装为系统需要的wifi配置对象 + **/ +@Suppress("DEPRECATION") +function wrapWifiConfiguration(SSID : string, password ?: string, passwordType : string) : WifiConfiguration { + + let config = new WifiConfiguration(); + config.status = WifiConfiguration.Status.ENABLED; + config.allowedAuthAlgorithms.clear(); + config.allowedGroupCiphers.clear(); + config.allowedKeyManagement.clear(); + config.allowedPairwiseCiphers.clear(); + config.allowedProtocols.clear(); + config.SSID = "\"".concat(SSID).concat("\""); + + + // nopass + if ("NONE".equals(passwordType) || password == null) { + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); + } + // wep + else if ("WEP".equals(passwordType)) { + if (password != null && !TextUtils.isEmpty(password)) { + if (isHexWepKey(password)) { + config.wepKeys[0] = password; + } else { + config.wepKeys[0] = "\"".concat(password).concat("\""); + } + } + config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN); + config.allowedAuthAlgorithms.set(AuthAlgorithm.SHARED); + config.allowedKeyManagement.set(KeyMgmt.NONE); + config.wepTxKeyIndex = 0; + } + // wpa + else if ("WPA".equals(passwordType)) { + config.allowedProtocols.set(WifiConfiguration.Protocol.RSN); + config.allowedProtocols.set(WifiConfiguration.Protocol.WPA); + config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); + config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); + config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); + config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); + config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); + config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); + config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); + config.preSharedKey = "\"".concat(password).concat("\""); + } + + return config; +} + + +/** + * 判断当前wifi的加密类型 + */ +function getSecurityType(result : ScanResult) : string { + if (result.capabilities.contains("WEP")) { + return "WEP"; + } else if (result.capabilities.contains("PSK")) { + return "WPA"; + } else if (result.capabilities.contains("EAP")) { + return "EAP"; + } + return "NONE"; +} + + +function zeroCountNum(source ?: string) : number { + if (source == null) { + return 0 + } + var splitted = source.split(":") + var countNum = 0; + for (perItem in splitted) { + if (perItem == "00") { + countNum += 1 + } + } + return countNum +} + + +/** + * 自定义wifi变化广播监听器 + */ +@Suppress("UNUSED_PARAMETER", "DEPRECATION") +class CustomBroadcastReceiver extends BroadcastReceiver { + + mWifiManager : WifiManager | null = null; + + constructor(wifiManager : WifiManager) { + super(); + this.mWifiManager = wifiManager; + } + + override onReceive(_context : Context, intent : Intent) : void { + + + if (intent.action == WifiManager.WIFI_STATE_CHANGED_ACTION) { + + let state = + intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN) + + if (state == WifiManager.WIFI_STATE_ENABLED) { + // 获取当前的connectInfo 并且进行数据封装 + let uniWifiInfo = new UniWifiInfo("","",false,0,0) + //做一些异步操作 + setTimeout(function () { + // BroadcastReceiver 中不能执行耗时任务,需要使用setTimeout + // @ts-ignore + let winfo = this.mWifiManager!.getConnectionInfo(); + + if(winfo != null && winfo.bssid != null && zeroCountNum(winfo.bssid) < 3){ + // 当前设备链接到了某个具体的wifi.封装成数据对象 + uniWifiInfo = wrapUniWifiInfoFromConnectInfo(winfo) + let res = new UniWifiResult(0,UniErrorSubject,'onWifiConnected:ok',uniWifiInfo) + + // wifi状态可用了,分发当前的链接状态给已注册的监听集合 + for (let perCallback in Global.onWifiConnectCallbackList) { + perCallback(res); + } + // 封装仅SSID 数据对象 + let connectedWithPartialInfo = new UniWifiInfoWithPartialInfo(uniWifiInfo.SSID) + + for (let perCallback in Global.onWifiConnectWithPartialInfoCallbackList) { + perCallback(connectedWithPartialInfo); + } + } else { + // 开启了wifi 开关,但是尚未链接到某个具体的wifi + } + + }, 100); + } + + } + + + if (intent.action == WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) { + startWifiScaning = false; + // wifi 扫描结果回调 + let results = this.mWifiManager!.scanResults; + + if (results != null) { + Global.scanList = [] + for (let scanResult in results) { + if (scanResult.SSID == null) { + continue; + } + Global.scanList.push(wrapUniWifiInfoFromScan(scanResult)); + } + + // 挨个通知,所有的监听器 + if(Global.onGetWifiListCallback != null){ + const data = new UTSJSONObject(); + data["wifiList"] = Global.scanList + Global.onGetWifiListCallback?.(data); + /** + * 确保onGetWifiList 只会被执行一次 + */ + Global.onGetWifiListCallback = null + } + + } + + let ret = new UniWifiResult(0,UniErrorSubject,"getWifiList:ok",null) + if(Global.supendGetWifiSuccess != null){ + Global.supendGetWifiSuccess?.(ret) + Global.supendGetWifiSuccess = null + } + if(Global.supendGetWifiComplete != null){ + Global.supendGetWifiComplete?.(ret) + Global.supendGetWifiComplete = null + } + } + } + +} + + + +/************************* 下面是对外提供的函数 *************************/ +/** + * start wifi是否正在扫描 + */ +var startWifiScaning = false + +/** + * 开启wifi + */ +@Suppress("DEPRECATION") +export function startWifiImpl(option : StartWifiOptions) { + + + // 具备了权限,继续前进 + let wifiManager : WifiManager = + UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager + // 用户没有开启wifi 总开关 + if (!wifiManager.isWifiEnabled()) { + // wifi 没开启 + let failResult = new WifiFailImpl(getErrcode(12005)); + option.fail?.(failResult); + option.complete?.(failResult); + return; + } + // 初始化wifi 状态广播监听,后续所有的api,均基于此 + if(Global.mReceiver != null){ + // 说明已经注册过了 + let result = UniWifiResult(0,UniErrorSubject,"startWifi:ok",null) + + option.success?.(result) + option.complete?.(result) + return + } + + + Global.mReceiver = new CustomBroadcastReceiver(wifiManager) + + let filter = new IntentFilter() + filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION) + // @ts-ignore + filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION) + // @ts-ignore + filter.addAction(WifiManager.SUPPLICANT_STATE_CHANGED_ACTION); + + UTSAndroid.getUniActivity()!.registerReceiver(Global.mReceiver, filter) + + /** + * activity 被销毁时,取消注册 + */ + UTSAndroid.onAppActivityDestroy(function () { + + if (Global.mReceiver != null) { + UTSAndroid.getUniActivity()!.unregisterReceiver(Global.mReceiver) + Global.mReceiver = null + + Global.scanList = [] + Global.onGetWifiListCallback = null + Global.onWifiConnectCallbackList = [] + Global.onWifiConnectWithPartialInfoCallbackList = [] + } + + }); + startWifiScaning = true + // 开始扫描 + wifiManager.startScan() + + let result = UniWifiResult(0,UniErrorSubject,"startWifi:ok",null) + option.success?.(result) + option.complete?.(result) + +} + +@Suppress("DEPRECATION") +export function startWifi(option : StartWifiOptions) { + + /** + * 准备权限 + */ + let permissionNeed = ["android.permission.ACCESS_FINE_LOCATION"]; + UTSAndroid.requestSystemPermission(UTSAndroid.getUniActivity()!, permissionNeed, function (allRight:boolean,_grantedList:string[]) { + if (allRight) { + // 交给目前的location 引擎,真实执行 + startWifiImpl(option) + } + }, function (_doNotAskAgain:boolean,_grantedList:string[]) { + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) + }) + +} + +/** + * 获取wifi列表 + */ +@Suppress("DEPRECATION") +export function getWifiList(option : GetWifiListOptions) { + + + if (Global.mReceiver == null) { + // 还没调用startWifi 提示报错 + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + + return + } + + let wifiManager : WifiManager = + UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager + + if(option.success != null){ + Global.supendGetWifiSuccess = option.success + } + if(option.complete != null){ + Global.supendGetWifiComplete = option.complete + } + + wifiManager.startScan() + +} + + + +/** + * wifi 链接成功的回调注册 + */ +export function onWifiConnected(callback : UniWifiResultCallback) { + Global.onWifiConnectCallbackList.push(callback) +} + + +export function onWifiConnectedWithPartialInfo(callback : UniWifiResultCallbackWithPartialInfo) { + Global.onWifiConnectWithPartialInfoCallbackList.push(callback) +} + + +/** + * wifi 链接成功的回调取消注册 + */ +export function offWifiConnected(callback? : UniWifiResultCallback) { + + if(callback == null){ + Global.onWifiConnectCallbackList = [] + return + } + + let callbackIndex = Global.onWifiConnectCallbackList.indexOf(callback) + if (callbackIndex >= 0) { + Global.onWifiConnectCallbackList.splice(callbackIndex, 1); + } +} + +/** + * 不具备详细信息的wifi 反注册 + */ +export function offWifiConnectedWithPartialInfo(callback? : UniWifiResultCallbackWithPartialInfo) { + + if(callback == null){ + Global.onWifiConnectWithPartialInfoCallbackList = [] + return + } + + let callbackIndex = Global.onWifiConnectWithPartialInfoCallbackList.indexOf(callback) + if (callbackIndex >= 0) { + Global.onWifiConnectWithPartialInfoCallbackList.splice(callbackIndex, 1); + } +} + +/** + * 注册Wifi列表的监听事件 + */ +export function onGetWifiList(callback : UniGetWifiListCallback) { + Global.onGetWifiListCallback = callback +} + +/** + * 取消注册Wifi列表的监听事件 + */ +export function offGetWifiList(callback? : UniWifiCallback) { + Global.onGetWifiListCallback = null + Global.supendGetWifiComplete = null + Global.supendGetWifiSuccess = null +} + + +/** + * 真正执行wifi链接逻辑 + */ +function realWifiConnect(option : WifiConnectOption){ + + if (Global.mReceiver == null || Global.scanList.length < 1) { + + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + + return + } + + // 执行后续的逻辑 + let scanWifiInfo : AndroidUniWifiInfo | null = null + for (let scanResult in Global.scanList) { + if (scanResult.SSID.equals(option.SSID)) { + scanWifiInfo = scanResult + } + } + + if (scanWifiInfo == null) { + // 不在扫描列表中返回错误 + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + return + } + + let wifiConfigration = wrapWifiConfiguration(scanWifiInfo.SSID, option.password, scanWifiInfo.securityType); + wifiConfigration.BSSID = scanWifiInfo.BSSID + let wifiManager : WifiManager = + UTSAndroid.getAppContext()!.getSystemService(Context.WIFI_SERVICE) as WifiManager + + // 如果已经存在了指定wifi 配置,移除之 + let targetExistConfig : WifiConfiguration | null = null + let existingConfigs = wifiManager.getConfiguredNetworks(); + for (let existingConfig in existingConfigs) { + if (existingConfig.SSID.equals("\"" + option.SSID + "\"")) { + targetExistConfig = existingConfig + } + } + // 如果wifi已经保存了当前ssid的配置,可能是别的应用添加的。android系统要求,需要删除掉重新添加 + if (targetExistConfig != null) { + let removeRet = wifiManager.removeNetwork(targetExistConfig.networkId); + + if (!removeRet) { + + // add since 2023-03-28,如果当前系统大于等于android10, 则明确当前系统不支持 + if(Build.VERSION.SDK_INT > 28){ + // 系统大于android 9 + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) + }else{ + // 移除之前的配置失败了,返回错误,需要用户手动取消保存一下 + let err = new WifiFailImpl(getErrcode(12013)); + option.fail?.(err) + option.complete?.(err) + } + + + return + } + + } + + let currentConnect = wifiManager.getConnectionInfo() + if (currentConnect.networkId >= 0) { + wifiManager.disableNetwork(currentConnect.networkId) + } else { + wifiManager.removeNetwork(currentConnect.networkId) + } + wifiManager.disconnect() + + let connected = false; + try { + + let netID = wifiManager.addNetwork(wifiConfigration); + // 如果-1 说明没添加上,报错即可 + if (netID < 0) { + let err = new WifiFailImpl(getErrcode(12002)); + option.fail?.(err) + option.complete?.(err) + + return + } + + + let enabled = wifiManager.enableNetwork(netID, true); + if (!enabled) { + let err = new WifiFailImpl(getErrcode(12007)); + option.fail?.(err) + option.complete?.(err) + + return + } + connected = wifiManager.reconnect(); + + } catch (e) { + connected = false; + console.log(e); + } + + if (!connected) { + // 出错了,返回错误 + // 兜底的报错 + let err = new WifiFailImpl(getErrcode(12010)); + option.fail?.(err) + option.complete?.(err) + return + } + + let result = new UniWifiResult(0,UniErrorSubject,"getWifiList:ok",null) + + wifiManager.saveConfiguration() + //scanWifiInfo 根据 partialInfo 填充给返回字段 + if (option.partialInfo != null && option.partialInfo == true) { + let wifiPartialInfo : UniWifiInfo = { + SSID: scanWifiInfo.SSID + } + result.wifi = wifiPartialInfo + } else { + result.wifi = wrapUniWifiInfoFromAndroid(scanWifiInfo) + } + + + option.success?.(result) + option.complete?.(result) +} + +/** + * 链接指定wifi + */ +@Suppress("UNUSED_PARAMETER", "DEPRECATION") +export function connectWifi(option : WifiConnectOption) { + + if (option.maunal == true) { + // 指定了手动模式 + let manunalIntent = new Intent(android.provider.Settings.ACTION_WIFI_SETTINGS); + UTSAndroid.getUniActivity()!.startActivity(manunalIntent); + + + let result = new UniWifiResult(0,UniErrorSubject,"connectWifi:ok",null) + + option.success?.(result) + option.complete?.(result) + return + } + + + + // add since 2022-03-28 ,增加逻辑,如果正在扫描中,则可以等待5s + if(startWifiScaning){ + let taskCount = 0 + let taskId:number = 0 + taskId = setInterval(function(){ + + taskCount += 1; + if(taskCount >= 5 || startWifiScaning == false){ + // 超过10s了。或者扫描过程结束了 + clearInterval(taskId) + realWifiConnect(option) + } + },2000) + + UTSAndroid.onAppActivityDestroy(function () { + clearInterval(taskId) + }); + }else{ + realWifiConnect(option) + } + + + +} + + +/** + * 关闭wifi + */ +export function stopWifi(option : StopWifiOptions) { + // 需要先开启wifi,才能使用后续的功能 + if (Global.mReceiver == null) { + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + + return + } + try { + UTSAndroid.getUniActivity()!.unregisterReceiver(Global.mReceiver) + } catch (e) { + // 多次调用 + //TODO handle the exception + } + + Global.onGetWifiListCallback = null + Global.onWifiConnectWithPartialInfoCallbackList = [] + Global.onWifiConnectCallbackList = [] + Global.mReceiver = null + + let ret = new UniWifiResult(0,UniErrorSubject,"stopWifi:ok",null) + option.success?.(ret) + option.complete?.(ret) + +} + +/** + * 获取当前连接中的wifi信息 + */ +@Suppress("DEPRECATION") +export function getConnectedWifi(option : GetConnectedWifiOptions) { + + let wifiInfo : UniWifiInfo = { + SSID: "" + } + + + if (Global.mReceiver == null) { + // 还没调用startWifi 提示报错 + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + + return + } + + // 需要先校验权限,没有位置权限无法获取wifi + if (ActivityCompat.checkSelfPermission(UTSAndroid.getUniActivity()!, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { + // 尚不具备权限,返回错误 + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) + return; + } + + + + const context = UTSAndroid.getAppContext(); + if (context != null) { + const wm = context.getSystemService( + Context.WIFI_SERVICE + ) as WifiManager; + // 测试android 12上可以使用 + //@ts-ignore + const winfo = wm.getConnectionInfo(); + + wifiInfo = wrapUniWifiInfoFromConnectInfo(winfo); + + let res = new UniWifiResult(0,UniErrorSubject,"getConnectedWifi:ok",null) + + // 判断一下是否wifi 关闭了 + if (option.partialInfo!= null && option.partialInfo == true) { + let ret : UniWifiInfo = { + SSID: wifiInfo.SSID + } + res.wifi = ret; + } else { + if (wifiInfo.BSSID == null || zeroCountNum(wifiInfo.BSSID) > 3) { + let err = new WifiFailImpl(getErrcode(12005)); + option.fail?.(err) + option.complete?.(err) + return + } + res.wifi = wifiInfo; + } + + + option.success?.(res) + option.complete?.(res) + return + } + + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + } + diff --git a/uni_modules/uni-wifi/utssdk/app-ios/Info.plist b/uni_modules/uni-wifi/utssdk/app-ios/Info.plist new file mode 100644 index 0000000..f8fc457 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-ios/Info.plist @@ -0,0 +1,8 @@ + + + + + NSLocationWhenInUseUsageDescription + 需要访问定位权限以获取当前连接的 Wi‑Fi 信息。 + + \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-ios/UTS.entitlements b/uni_modules/uni-wifi/utssdk/app-ios/UTS.entitlements new file mode 100644 index 0000000..240b91f --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-ios/UTS.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.developer.networking.wifi-info + + + \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-ios/config.json b/uni_modules/uni-wifi/utssdk/app-ios/config.json new file mode 100644 index 0000000..2058545 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-ios/config.json @@ -0,0 +1,7 @@ +{ + "frameworks": [ + "CoreLocation.framework", + "SystemConfiguration.framework" + ], + "deploymentTarget": "12" +} \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/app-ios/index.uts b/uni_modules/uni-wifi/utssdk/app-ios/index.uts new file mode 100644 index 0000000..dbb5497 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/app-ios/index.uts @@ -0,0 +1,322 @@ +import { CLLocationManager, CLAuthorizationStatus, CLLocationManagerDelegate } from 'CoreLocation' +import { CaptiveNetwork, kCNNetworkInfoKeySSID, kCNNetworkInfoKeyBSSID } from 'SystemConfiguration.CaptiveNetwork'; +import { NSArray, NSDictionary } from 'Foundation'; +import { CFString } from 'CoreFoundation'; +import { UIDevice } from 'UIKit'; +import { NEHotspotNetwork } from 'NetworkExtension'; +import { UniWifiResultCallbackWithPartialInfo, UniGetWifiListCallback, UniWifiResultCallback, WifiConnectOption, GetConnectedWifiOptions, UniWifiInfo, UniWifiResult, UniWifiCallback, StartWifi, StopWifi, GetWifiList, OnGetWifiList, OffGetWifiList, GetConnectedWifi, ConnectWifi, OnWifiConnected, OnWifiConnectedWithPartialInfo, OffWifiConnected, OffWifiConnectedWithPartialInfo, SetWifiList, + StartWifiOptions, StopWifiOptions, GetWifiListOptions, SetWifiListOptions} from "../interface.uts" +import { WifiFailImpl, getErrcode } from '../unierror'; + +/* + * 系统定位权限获取类 + */ +class LocationPromiseService implements CLLocationManagerDelegate { + static promiseCompletionHandler: ((res: boolean)=>void)[] = [] + + manager?: CLLocationManager + + constructor(manager?: CLLocationManager) { + this.manager = manager + } + + initlizeManager(): boolean { + if (this.manager == null) { + this.manager = new CLLocationManager() + this.manager!.delegate = this + } + return true + } + @UTSiOS.available("iOS 14.0, *") + locationManagerDidChangeAuthorization(manager: CLLocationManager) { + if (UTSiOS.available("iOS 14.0, *")) { + let status = manager.authorizationStatus; + if (status == CLAuthorizationStatus.authorizedAlways || status == CLAuthorizationStatus.authorizedWhenInUse) { + LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { + handler(true) + }) + } else if (status == CLAuthorizationStatus.notDetermined) { + manager.requestWhenInUseAuthorization() + } else if (status == CLAuthorizationStatus.denied) { + LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { + handler(false) + }) + } + } + } + + locationManager(manager: CLLocationManager, @argumentLabel("didChangeAuthorization") status: CLAuthorizationStatus) { + if (UIDevice.current.systemVersion < "14.0") + if (status == CLAuthorizationStatus.authorizedAlways || status == CLAuthorizationStatus.authorizedWhenInUse) { + LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { + handler(true) + }) + } else if (status == CLAuthorizationStatus.notDetermined) { + manager.requestWhenInUseAuthorization() + } else if (status == CLAuthorizationStatus.denied) { + LocationPromiseService.promiseCompletionHandler.forEach((handler): void => { + handler(false) + }) + } + } + requestPromise(@escaping completion: (res: boolean)=>void) { + let status: CLAuthorizationStatus = CLLocationManager.authorizationStatus() + if (status == CLAuthorizationStatus.notDetermined) { + if (this.initlizeManager() == true) { + this.manager!.requestWhenInUseAuthorization() + LocationPromiseService.promiseCompletionHandler.push(completion) + } + } else if (status == CLAuthorizationStatus.authorizedAlways || status == CLAuthorizationStatus.authorizedWhenInUse) { + completion(true) + } else if (status == CLAuthorizationStatus.denied) { + if (CLLocationManager.locationServicesEnabled() == false && this.initlizeManager() == true) { + this.manager!.requestWhenInUseAuthorization() + LocationPromiseService.promiseCompletionHandler.push(completion) + } + } + } +} + +const locationPromiseService: LocationPromiseService = new LocationPromiseService(null) + +/* + * 获取系统定位权限 + */ +function requestLocationPromise(@escaping completion: (res: boolean)=>void) { + locationPromiseService.requestPromise(completion) +} + +/* + * 获取当前连接的wifi信息(通过定位权限) + */ +function fetchConnectedWifiWithLocationPromise(option: GetConnectedWifiOptions) { + + if (UTSiOS.available("iOS 14.0, *")) { + NEHotspotNetwork.fetchCurrent(completionHandler = (network): void => { + if (network != null) { + let wifiInfo: UniWifiInfo = { + BSSID: network!.bssid, + SSID: network!.ssid, + secure: network!.isSecure, + signalStrength: network!.signalStrength, + frequency: 0 + } + if (wifiInfo.BSSID!.length > 0 && wifiInfo.SSID.length > 0) { + let res: UniWifiResult = { + errSubject: "uni-getConnectedWifi", + errCode: 0, + errMsg: "getConnectedWifi:ok", + wifi: wifiInfo, + } + option.success?.(res) + option.complete?.(res) + }else { + let err = new WifiFailImpl(getErrcode(12010)); + option.fail?.(err) + option.complete?.(err) + } + }else { + let err = new WifiFailImpl(getErrcode(12010)); + option.fail?.(err) + option.complete?.(err) + } + }) + }else { + let arr = CNCopySupportedInterfaces() + let wifiInfo: UniWifiInfo = { + BSSID: "", + SSID: "", + secure: false, + signalStrength: 0, + frequency: 0 + } + + if (arr != null) { + let list = arr! as NSArray + let index: Int = 0 + while (index < list.count) { + let item = list[index] + let interfaceName = item as string + let dic = CNCopyCurrentNetworkInfo(interfaceName as CFString) + if (dic != null) { + let dict = dic! as NSDictionary + let SSID = dict[kCNNetworkInfoKeySSID as string] + let BSSID = dict[kCNNetworkInfoKeyBSSID as string] + + if (SSID != null && BSSID != null) { + let ssid = SSID! as string + let bssid = BSSID! as string + wifiInfo.SSID = ssid + wifiInfo.BSSID = bssid + wifiInfo.secure = false + wifiInfo.signalStrength = 0 + wifiInfo.frequency = 0 + break; + } + } + index++ + } + + if (wifiInfo.BSSID!.length > 0 && wifiInfo.SSID.length > 0) { + let res: UniWifiResult = { + errSubject: "uni-getConnectedWifi", + errCode: 0, + errMsg: "getConnectedWifi:ok", + wifi: wifiInfo, + } + option.success?.(res) + option.complete?.(res) + }else { + let err = new WifiFailImpl(getErrcode(12010)); + option.fail?.(err) + option.complete?.(err) + } + }else { + let err = new WifiFailImpl(getErrcode(12010)); + option.fail?.(err) + option.complete?.(err) + } + } + +} + + + +/* + * 保存全局数据信息 + */ +class UniWiFiModuleGloabInfo { + static alreadyStartWifi: boolean = false +} + +/* =================================== 对外暴露的接口 ==============================================*/ + + + +/* + * 初始化wifi模块 + */ +export const startWifi: StartWifi = function (option: StartWifiOptions) { + UniWiFiModuleGloabInfo.alreadyStartWifi = true + let res: UniWifiResult = { + errSubject: "uni-startWifi", + errCode: 0, + errMsg: "startWifi:ok", + wifi: null + } + option.success?.(res) + option.complete?.(res) +} + +/* + * 停止wifi模块 + */ +export const stopWifi: StopWifi = function (option: StopWifiOptions) { + UniWiFiModuleGloabInfo.alreadyStartWifi = false + LocationPromiseService.promiseCompletionHandler = [] + let res: UniWifiResult = { + errSubject: "uni-stopWifi", + errCode: 0, + errMsg: "stopWifi:ok", + wifi: null + } + option.success?.(res) + option.complete?.(res) +} + +/* + * 获取wifi列表, 在调用之前需要引导用户跳转到系统设置-WIFI设置页面,系统搜索周边wifi后app才能接收到回调 + */ +export const getWifiList: GetWifiList = function (option: GetWifiListOptions) { + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) +} + +/* 获取wifi列表的回调 + * note: 请在getWifiList方法的回调里调用该方法 + */ +export const onGetWifiList: OnGetWifiList = function (callback: UniGetWifiListCallback) { + +} + +/* + * 注销获取wifi列表的回调 + */ +export const offGetWifiList: OffGetWifiList = function (callback: UniWifiCallback) { + +} + + +/* + * 获取当前连接的wifi信息 + */ +export const getConnectedWifi: GetConnectedWifi = function (option: GetConnectedWifiOptions) { + if (UniWiFiModuleGloabInfo.alreadyStartWifi == false) { + let err = new WifiFailImpl(getErrcode(12000)); + option.fail?.(err) + option.complete?.(err) + } else{ + if (UIDevice.current.systemVersion >= "13.0") { + requestLocationPromise((success) => { + if (success == true) { + fetchConnectedWifiWithLocationPromise(option) + }else { + let err = new WifiFailImpl(getErrcode(12007)); + option.fail?.(err) + option.complete?.(err) + } + }) + } else{ + fetchConnectedWifiWithLocationPromise(option) + } + } +} + +/* + * 连接wifi + */ +export const connectWifi: ConnectWifi = function (option: WifiConnectOption) { + + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) +} + + +/* + * 连上wifi事件的监听函数 + */ +export const onWifiConnected: OnWifiConnected = function (callback: UniWifiResultCallback) { + +} + +/* + * 连上wifi事件的监听函数, wifiInfo仅包含ssid + */ +export const onWifiConnectedWithPartialInfo: OnWifiConnectedWithPartialInfo = function (callback: UniWifiResultCallbackWithPartialInfo) { + +} + +/* + * 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。 + */ +export const offWifiConnected: OffWifiConnected = function (callback: UniWifiCallback | null) { + +} + +/* + * 移除连接上wifi的事件的监听函数,不传此参数则移除所有监听函数。 + */ +export const offWifiConnectedWithPartialInfo: OffWifiConnectedWithPartialInfo = function (callback: UniWifiResultCallbackWithPartialInfo | null) { + +} + +/* + * 设置 wifiList 中 AP 的相关信息。在 onGetWifiList 回调后调用,iOS特有接口。 + */ +export const setWifiList: SetWifiList = function (option: SetWifiListOptions) { + let err = new WifiFailImpl(getErrcode(12001)); + option.fail?.(err) + option.complete?.(err) +} diff --git a/uni_modules/uni-wifi/utssdk/index.d.ts b/uni_modules/uni-wifi/utssdk/index.d.ts new file mode 100644 index 0000000..64f0829 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/index.d.ts @@ -0,0 +1,388 @@ +declare namespace UniNamespace { + + type UniWifiComplete = any + type WifiSuccessCallback = (res : UniWifiResult) => void + type WifiFailCallback = (err : UniWifiFail) => void + type WifiCompleteCallback = (res : UniWifiComplete) => void + type UniWifiCallback = () => void + + + type WifiErrorCode = 1300002 + + interface UniWifiInfo { + SSID : string; + BSSID ?: string; + secure ?: boolean; + signalStrength ?: number; + frequency ?: number; + } + + interface UniWifiResult { + errCode : number, + errSubject : string, + errMsg : string, + wifi : UniWifiInfo | null + } + + interface UniWifiFail { + errCode : WifiErrorCode + } + + interface WifiConnectOption { + SSID : string | null; + BSSID : string | null; + password : string | null; + maunal : boolean | null; + partialInfo : boolean | null; //ios不生效 + success : WifiSuccessCallback | null; + fail : WifiFailCallback | null; + complete : WifiCompleteCallback | null; + } + + interface GetConnectedWifiOptions { + partialInfo : boolean | null; + success : WifiSuccessCallback | null; + fail : WifiFailCallback | null; + complete ?: WifiCompleteCallback | null; + } + + + interface WifiOption { + success : WifiSuccessCallback | null, + fail : WifiFailCallback | null, + complete : InstallApkCompleteCallback | null + } + + interface UniWifiInfoWithPartialInfo { + SSID : string; + } + + type UniGetWifiListCallback = (wifiInfo:UTSJSONObject) => void + + type UniWifiResultCallback = (wifiInfo:UniWifiResult) => void + + type UniWifiResultCallbackWithPartialInfo = (wifiInfo:UniWifiInfoWithPartialInfo) => void + +} + +declare interface Uni { + + /** + * 初始化Wi-Fi模块 + * + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { after: 'stopWifi' } + */ + startWifi(option : UniNamespace.WifiOption): void, + + /** + * 关闭 Wi-Fi 模块 + * + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi' } + */ + stopWifi(option : UniNamespace.WifiOption) : void, + /** + * @param {WifiConnectOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": ">=4.4 && <10.0", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { + generated: false, + pollution: false, + cases:[ + { + before: 'startWifi', + after: 'stopWifi', + input: [{ + maunal:false, + SSID:"Xiaomi_20D0", + password:"streamApp!2016", + }], + output:{ + callbackType: 'success', + value: { errCode: 12013 ,errMsg: "connectWifi:wifi config may be expired",errSubject: "uni-connectWifi"} + } + } + ] + } + */ + connectWifi(option : UniNamespace.WifiConnectOption) : void, + /** + * 请求获取 Wi-Fi 列表。wifiList 数据会在 onGetWifiList 注册的回调中返回。 + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi', after: 'stopWifi' } + */ + getWifiList(option : UniNamespace.WifiOption) : void, + /** + * 监听获取到 Wi-Fi 列表数据事件。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + * @autotest { + generated: false, + pollution: false, + expectCallback: true, + before: 'startWifi', + after: 'onGetWifiListAfter', + cases: [ + { + output: { + value: 0, + returnKey: '.wifiList.length', + jestExpectSyntax: 'toBeGreaterThan' + }, + } + ] + } + */ + onGetWifiList(callback : UniNamespace.UniGetWifiListCallback) : void, + /** + * 移除获取到 Wi-Fi 列表数据事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offGetWifiList(callback : UniNamespace.UniWifiCallback) : void, + /** + * 获取已连接的 Wi-Fi 信息 + * + * @param {GetConnectedWifiOptions} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#getConnectedWifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi', after: 'stopWifi' } + */ + getConnectedWifi(option : UniNamespace.GetConnectedWifiOptions) : void, + /** + * 监听连接上 Wi-Fi 的事件 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + onWifiConnected(callback : UniNamespace.UniWifiResultCallback) : void, + /** + * 监听连接上 Wi-Fi 的事件。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + onWifiConnectedWithPartialInfo(callback : UniNamespace.UniWifiResultCallbackWithPartialInfo) : void, + /** + * 移除连接上 Wi-Fi 的事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offWifiConnected(callback ?: UniNamespace.UniWifiCallback) : void, + + /** + * 移除连接上 Wi-Fi 的事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offWifiConnectedWithPartialInfo(callback ?: UniNamespace.UniWifiResultCallbackWithPartialInfo) : void, + /** + * SetWifiList 暂未实现 + * + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + */ + setWifiList(option : UniNamespace.WifiOption) : void, + + +} diff --git a/uni_modules/uni-wifi/utssdk/interface.uts b/uni_modules/uni-wifi/utssdk/interface.uts new file mode 100644 index 0000000..206b214 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/interface.uts @@ -0,0 +1,444 @@ +/** + * Wifi 函数通用入参封装 + */ +export type StartWifiOptions = { + success ?: (res : UniWifiResult) => void; + fail ?: (res : UniError) => void; + complete ?: (res : any) => void; +}; + +export type StopWifiOptions = { + success ?: (res : UniWifiResult) => void; + fail ?: (res : UniError) => void; + complete ?: (res : any) => void; +}; + + +export type GetWifiListOptions = { + success ?: (res : UniWifiResult) => void; + fail ?: (res : UniError) => void; + complete ?: (res : any) => void; +}; + +export type SetWifiListOptions = { + success ?: (res : UniWifiResult) => void; + fail ?: (res : UniError) => void; + complete ?: (res : any) => void; +}; + + +/** + * Wifi 链接参数封装 + */ +export type WifiConnectOption = { + SSID ?: string; + BSSID ?: string; + password ?: string; + maunal ?: boolean; + partialInfo ?: boolean; //ios不生效 + success ?: (res : UniWifiResult) => void; + fail ?: (res : UniError) => void; + complete ?: (res : any) => void; +} + +/** + * 获取当前链接的wifi信息 + */ +export type GetConnectedWifiOptions = { + partialInfo ?: boolean + success ?: (res : UniWifiResult) => void + fail ?: (res : UniError) => void + complete ?: (res : any) => void +} + +/* + * 对外暴露的wifi信息 + */ +export type UniWifiInfo = { + SSID : string; + BSSID ?: string; + secure ?: boolean; + signalStrength ?: number; + frequency ?: number; +} + +export type UniWifiInfoWithPartialInfo = { + SSID : string; +} + + +export type UniWifiResult = { + errCode : number, + errSubject : string, + errMsg : string, + wifi : UniWifiInfo | null +} + +export type UniWifiCallback = () => void + +export type UniGetWifiListCallback = (wifiInfo:UTSJSONObject) => void + +export type UniWifiResultCallback = (wifiInfo:UniWifiResult) => void + +export type UniWifiResultCallbackWithPartialInfo = (wifiInfo:UniWifiInfoWithPartialInfo) => void + + +export type StartWifi = (option : StartWifiOptions) => void + +export type StopWifi = (option : StopWifiOptions) => void + +export type GetWifiList = (option : GetWifiListOptions) => void + +export type OnGetWifiList = (callback : UniGetWifiListCallback) => void + +export type OffGetWifiList = (callback : UniWifiCallback) => void + +export type GetConnectedWifi = (option : GetConnectedWifiOptions) => void + +export type ConnectWifi = (option : WifiConnectOption) => void + +export type OnWifiConnected = (callback : UniWifiResultCallback) => void + +export type OnWifiConnectedWithPartialInfo = (callback : UniWifiResultCallbackWithPartialInfo) => void + +export type OffWifiConnected = (callback : UniWifiCallback | null) => void + +export type OffWifiConnectedWithPartialInfo = (callback : UniWifiResultCallbackWithPartialInfo | null) => void + +export type SetWifiList = (option : SetWifiListOptions) => void + + +/** + * 错误码 + * - 12000 尚未初始化 + * - 12001 当前系统不支持相关能力 + * - 12002 密码错误 + * - 12005 Android 特有,未打开 Wi-Fi 开关 + * - 12007 用户拒绝授权链接 Wi-Fi + * - 12010 系统其他错误 + * - 12013 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 + */ +export type WifiErrorCode = 12000 |12001 | 12002 | 12005 | 12007 | 12010 | 12013; + +export interface WifiFail extends IUniError{ + errCode: WifiErrorCode +}; + + + +interface Uni { + /** + * 初始化Wi-Fi模块 + * + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#startwifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { after: 'stopWifi' } + */ + startWifi(option : StartWifiOptions): void, + /** + * 关闭 Wi-Fi 模块 + * + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#stopwifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi' } + */ + stopWifi(option : StopWifiOptions) : void, + /** + * @param {WifiConnectOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#connectWifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": ">=4.4 && <10.0", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { + generated: false, + pollution: false, + cases:[ + { + before: 'startWifi', + after: 'stopWifi', + input: [{ + maunal:false, + SSID:"Xiaomi_20D0", + password:"streamApp!2016", + }], + output:{ + callbackType: 'success', + value: { errCode: 12013 ,errMsg: "connectWifi:wifi config may be expired",errSubject: "uni-connectWifi"} + } + } + ] + } + */ + connectWifi(option : WifiConnectOption) : void, + /** + * 请求获取 Wi-Fi 列表。wifiList 数据会在 onGetWifiList 注册的回调中返回。 + * @param {WifiOption} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#getWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi', after: 'stopWifi' } + */ + getWifiList(option : GetWifiListOptions) : void, + /** + * 监听获取到 Wi-Fi 列表数据事件。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onGetWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + * @autotest { + generated: false, + pollution: false, + expectCallback: true, + before: 'startWifi', + after: 'onGetWifiListAfter', + cases: [ + { + output: { + value: 0, + returnKey: '.wifiList.length', + jestExpectSyntax: 'toBeGreaterThan' + }, + } + ] + } + */ + onGetWifiList(callback : UniGetWifiListCallback) : void, + /** + * 移除获取到 Wi-Fi 列表数据事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offGetWifiList + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offGetWifiList(callback : UniWifiCallback) : void, + /** + * 获取已连接的 Wi-Fi 信息 + * + * @param {GetConnectedWifiOptions} option + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#getConnectedWifi + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { before: 'startWifi', after: 'stopWifi' } + */ + getConnectedWifi(option : GetConnectedWifiOptions) : void, + /** + * 监听连接上 Wi-Fi 的事件 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnected + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + onWifiConnected(callback : UniWifiResultCallback) : void, + /** + * 监听连接上 Wi-Fi 的事件。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#onWifiConnectedWithPartialInfo + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + onWifiConnectedWithPartialInfo(callback : UniWifiResultCallbackWithPartialInfo) : void, + /** + * 移除连接上 Wi-Fi 的事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnected + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "4.4.4", + * "uniVer": "3.7.0", + * "unixVer": "3.9.0" + * }, + * "ios": { + * "osVer": "9.0", + * "uniVer": "3.7.7", + * "unixVer": "3.9.0" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offWifiConnected(callback : UniWifiCallback | null) : void, + /** + * 移除连接上 Wi-Fi 的事件的监听函数。 + * + * @param {UniWifiCallback} callback + * @tutorial https://uniapp.dcloud.net.cn/api/system/wifi.html#offWifiConnectedWithPartialInfo + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + * @uniVersion 3.7.7 + * @uniVueVersion 2,3 //支持的vue版本 + * @autotest { expectCallback: true } + */ + offWifiConnectedWithPartialInfo(callback : UniWifiResultCallbackWithPartialInfo | null) : void, + /** + * SetWifiList 暂未实现 + * + * @uniPlatform { + * "app": { + * "android": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * }, + * "ios": { + * "osVer": "x", + * "uniVer": "x", + * "unixVer": "x" + * } + * } + * } + */ + setWifiList(option : SetWifiListOptions) : void, +} diff --git a/uni_modules/uni-wifi/utssdk/uni.autotest.js b/uni_modules/uni-wifi/utssdk/uni.autotest.js new file mode 100644 index 0000000..7f0ac09 --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/uni.autotest.js @@ -0,0 +1,35 @@ +export function startWifi() { + return new Promise((resolve, reject) => { + uni.startWifi({ + success: () => { + console.log('startWifi success'); + resolve() + }, + complete: () => { + console.log('startWifi fail'); + resolve() + } + }) + }) +} + +export function stopWifi() { + return new Promise((resolve, reject) => { + uni.stopWifi({ + complete: resolve + }) + }) +} + +export function onGetWifiListAfter() { + return new Promise((resolve, reject) => { + uni.getWifiList({ + success() { + setTimeout(resolve, 500) + }, + complete() { + stopWifi().finally(resolve) + } + }) + }) +} \ No newline at end of file diff --git a/uni_modules/uni-wifi/utssdk/unierror.uts b/uni_modules/uni-wifi/utssdk/unierror.uts new file mode 100644 index 0000000..023c2de --- /dev/null +++ b/uni_modules/uni-wifi/utssdk/unierror.uts @@ -0,0 +1,59 @@ +import { WifiErrorCode, WifiFail} from "./interface.uts" + +/** + * 错误主题 + */ +export const UniErrorSubject = 'uni-wifi'; +/** + * 错误码 + * @UniError + */ +export const WifiUniErrors : Map = new Map([ + + /** + * 未先调用 startWifi 接口 + */ + [12000, 'not init.'], + /** + * 当前系统不支持相关能力 + */ + [12001, 'system not support'], + /** + * 密码错误 + */ + [12002, 'password error Wi-Fi'], + /** + * Android 特有,未打开 Wi-Fi 开关 + */ + [12005, 'wifi not turned on'], + /** + * 用户拒绝授权链接 Wi-Fi + */ + [12007, 'user denied'], + /** + * 系统其他错误,需要在 errmsg 打印具体的错误原因 + */ + [12010, 'unknown error'], + /** + * 系统保存的 Wi-Fi 配置过期,建议忘记 Wi-Fi 后重试,仅 Android 支持 + */ + [12013, 'wifi config may be expired'], + +]); + + +export function getErrcode(errCode : number) : WifiErrorCode { + const res = WifiUniErrors[errCode]; + return res == null ? 12000 : errCode; +} + + +export class WifiFailImpl extends UniError implements WifiFail { + constructor(errCode : WifiErrorCode) { + super(); + this.errSubject = UniErrorSubject; + this.errCode = errCode; + this.errMsg = WifiUniErrors[errCode] ?? ""; + } +} +

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 literal 0 HcmV?d00001 diff --git a/static/tabbar/myDefault.png b/static/tabbar/myDefault.png new file mode 100644 index 0000000000000000000000000000000000000000..6e82cffb8ab30338d9282de5c95d19af4cb31cee GIT binary patch literal 34636 zcmV*HKxn^-P)eh4bY)!^&fNe2AOJ~3K~#90jJ@fW z9LJG0cr7xs7665v*g-;~q)#n%_cuN7{|Ym6&WyUH7IzXPL97K-p|;Enn;-6GcFiJ+ z>^vkYGt%AM)@$zO9+9G>DntPVR0N_52>R#t7Xl#uv`ch7E&|rw-a`OU=^Zk?+BaY8 zeUz?Ad=!5pP-yF3=qOAcW~{%p_f;-L8<*K>ihrR^u*`PiwY7DfCOS4)Q*hE*=b654 zcChY+Nrkv96F#JB#3ARBPbHvR?6(s>0S^u5VpF}GqlxWIzto4Um-VF7pY$y{j>?9aFlJHG-)pCujgqvJUTl09WG1+rsid3| zB-Mb{jwH;aiy;$V%`KW@&1#yBp+RHfgg{bol^ID+HYVw_TIP}$JC_a1I{cquP7he- zmw;m0Zx%M_Pj@~kHbZTy%~31RnT{r7h95bQQ2=s(;cK(wM}WBc*e0qJSOI?RW4F7G zV{?tm1jS`&I#tGm&P)?w9sG(7X3@4fQyC`(S*3T`>sRPq7GIaKI}5h6<5BM!gyi^{ z=;OC!E+i**W!)Fr;dBOs()qZ|pwmp@3|$6HKn}{@zKs^NJa~xStZwIgC=DNgRDtDE z`4MeJ$59!mYx0;N({BVz;xkRHGGwr#QhJ-aepygT5vsIrpNr-=Gj%#9=Ny{Dpa|8LRR|t#qE07_`8Uu54DCp}<7qriGZQ1btS9NOwAk zL}6oPlHzni8RDqRGAJ2EyXWLJRnTIwwU5cjEG6)~r(&Xcp9+yY%-$?QK=L{RfRga6 z1J&rxYL)U??P_9{Ud9_;HnR%b$Guy)Yw+DkOX|$p5MoX{m`j*TG-$ePnsjUSGoFO> zJ8@}^H|A5Gk&D8#C|HQ5*<(-*9f)>jv?nxIwz}gaiYkuMs%@U`DAvDY!5RvLK&s}5 zGR@+BK=TuI&(MV44*fO`2eN-Jgk&a&I%FuEECoweq?u7&C-A;)fk_chIv`4EAQkB{ zSsx;7I_*{!Aj>TgxIC3eaUh*W=TE5}W@OOLZ?k_xEC~g=y`*>QSGvzo&_g1KRYP~y z#MLTpn}Sym2|b4o6R6lw+5@cUA?bt1?m|o^YyLecw=>{tkhC~RoqLstgUtfL90cOd z=3dsv$Q2FA&djgQpm6Rr&Gp5UBLVXZ%q)s0z#hCS@f2_kj?la~B>ANf>P9vlq;}O{ zb930l7_s8|$U)!O6bCV%^YeIhen)oIo}Oc!5w6~viz7NgyrDpljDONtQ?rphi*GpX z;&9>kMTY8M{+8wIU zlfHAiCO$78Z`O}y+NYpK=!t`V@|v*=uPf*HNZ04&t)Hu|Xgs!MvUTq}2+{PlfZAvA z>miRcR8?+Ac1S{y@hFhAFM?o-RQ+n9ot&pzv}GX@%pFRyLA_|e$fL<&1jrzi zBE}*mryvpOi{*%xXfDys$;O8$U{F9SBC0zurCGp?qvuUc4PBY_>WsoW^rbtaY(ZYu zuDfjrpZchiY6Q}nE&2PzIiW;6O|cq((|M!OlXQU;(tSZC<89jDaw4&Cgs7+cq%_iz z4bpa7Nr*x_Y+IqVd=z+Uo@`>$u+#Z$cSxO*48Vw}nUr5Epdbf+=(y;>#>=r~8U}@( z>p(m4*cr!knj`gn-<4-QG23LnslwPVn2sP#u@Smwx#IN30ALI~N@~=HxMbteHK8Fd z^G9I8@tu5u71>)1=!C;q#cCo{xeK!dIx^^FbQg-|)E>0ZoOsSOLcHz}{+EMFkWgwu z&i$mpM}UoZfSY7qZU$g;wN`D5OybogmuCpgS+&W=COlCMWHV=GhfLhF6^ozgjJ#Y( zYh7sh&4fvZp%>y&;Dp2-#rnCH5?w#c(a~49y=MB!2VE|4k9M>c4Oi;ZntbXZ6Kg)4 z`EuPjzpYxTJ##Ric+&0dY`QnNB~5XX4Ve^Z#0ivc_ zH7>QejKj)Fo3u0!w2pl1CwwID_0OZg3dmiaz?d^3mG#e^*8bCg*$ z0}4-w983vx1n}vsm|t|dqB=V8G4B>t_Q5~95%RenZ>rpG`r@i&D$CY>hU|TAI@!T5 z!BdY3w66q~S}l#b(t7!pz$JK0*Nl;w@i4uXGQlM}VE*T(KCT-gGgsA`yiA`Z5GHc* zbq+q(SLe+DqHf;KvZHixw2aSHTD#7As)r3Tk5arm^KS9!JfrAz+9lhpe9Q6<{520A z!6^PYU@#Cf0pN_&qz1(F6(HQN;0xn^o$P{ z!P%Fo9*lz-XJ)meTx(fiHt-l4d2Dh5cS56@z1BYaR81vi%D7$?VZ_M+iX#}<7#*>+ zP+y9cGgt|h=~KIc=)|C~fn@G|vA_8R&y0HWAsL$;Ri(>Io-=D1R=Lrcv2?mXMl;lP zg+~O%?z#ODV~wgv#2@{y47)~>QJWA)YwAfaO}c5r<|F3P`CxXuD**~!hVR-|)vz;@ zv(8PgEBdJku4Z_N43Jvd1xcSL(=d#ft~V(7QY44NB z-?A6?)vgYm*uY;rjiupjiQyR}#j?=b>;Q+A)nF>Xk>_Lzun#>I@A){HD?wHAeOeq3lyi}8%5XzV5P6_i-VNBJ^aV8{(M@;9z|2-%_^c)+fpTzFbh{+3 zIVh?QEpRIj;6=L9UrI;H-*xJ|=;QuY9_HXsPm#h+eHl}TS) zhxO#(Y;yp++R3@R5A)|NYumJ)AUJ0qyVB&Z>oSX+Bs%fHWBQax+6Xbrw>Mf@bh*s0 zXbUTAh#b!V!Lv?xfCv!D{cQfnen+PQvXhh3)>l*{lsJ&ki1uRu1_VmsROr>RFc6Dn z?U1C@Sh_dFf}RLVI=B$ptI*>c7a%z%LI#6cFO5EKsLCwPUTI?%0u_w9a|&JbyUK-i zY~&4lNe-n&a~aYKb#L3!fL*j%;yaZ~zBY zLo`P=gUp^if^;}cYgUkfhIDL6%vU7oV;Mb=p0u?0<1&OS6IdhGvwDybpj}n^Hgsn+ zIoLb}1kx+9S5Q9Px8wYizDy1)bI--Ph%bU$|7ax1d&RT7v8ql~lLL7L&Om@97g66K z4>?#J1!P4VRV8-n~ZcJM2Cl?dDt1lAb104|JDTXqF%^} zV?haXM8kJG9RpsSMT3yRkE_r!VsHs2NUrhMu4``ULz&~6@CC7$9|v5%?lM!uE_D_~ zvus93=snS__L#mhN+#P0eb2ySb@R%G2WX9c&F%W7(Y~cX;SEO*qWYJd*+4@;Sqnw| z6JY3axP61Z`ycC4vW}d;IbSP^PRUUUvd=h@iO(50vPz8Jc#Kn0*-2z7bXRh|Ijjj` zV;aEt8Me;+U|zu&*|`$Il59!=$Xj1O2+E_Y}(?;0OZdk?EQ) zZEVT(eAA7uPr)a6FS^OcE_mKwPl;*S6stoRlQE`Ww*!@&JsEf$WySTuvlj-Dq{Ggu zH#6JNDGED4NU8`2Hr)_V2!EzIP4aPbTFL;nH^#f)t}~Q9A`N{wO>RJXN%y`R;hur4 zXtPWjFM@i-rx@So`$U%mmvtbn>FgBANTgV1LP$_aTFmhhQ_FTW6dY0E>mH4u_6ZOL z=$sz-J1$h%D+MMYu+42n6sqkQx2j^h9dUU04oAlyv0h)`Vts+rlM_G&--8ecmdhm$ zt{q@+Zx=VNU&rp=9+rz`0xNS|iht+RgIuKZkZtCEK|v#gc6Q5b-daUasQXApgW62) z(yTh`Hi(jNsgNl>SdQg(8tfF}*GLMNBfa{79JKz_6dJ1Ug9t1lqbg*=n)eWGcgXf# zxS(cbvoxW1m3ttWIlGY_=N+1Xr$J#hqJs@c8j#?5tMg z2tBYIByD{{hYv{&;C7B0U2jOfPe@$#HnkCN4+zoo5;&iRm;@bW`2g#r^Be^aLTfMC z=IW-eK?ueDR&rl!anOnn*KU|H!&GN1StHF)-3cV?NPv7MW_tg#`(*#%^g(i7VvK1J zhtMWClED@2MjSGRLzYrgx&h0Dw(;_VD_AG|GXBR=vE6QPc5#6hFMh@^zx;x;vs0{g zcClCtwD9E{gpkG-X><%|n7?rxv0iU*aBzSpkDuVy&6`*)S6D0-4qV2sR-j725jsdl zWIOZAgNkfvfKv1p?V@DLpqVpyn6Ubi*}2I+X5!R8&n}t(a|eK@8HiQW^#KD2{gtC8 zK3Zt1?u;gcW~Zxy&eCOdFamdS)fg^}xpQ&Q)RBdp(leKvld+;z%A5dX!e|!s^z01p z-+#cHH?Q&P^=pU#i^T$wXS?EM07fMT6=uJUN2#>x)Ao!u;}*L+JGl4BJ>0&18`lr6 zW3gQL5f?k~DK(lA$Nf_>{! zR|In41BgeDRvFk(#8XC~OB6Bp8Pre8duFWk;fs?h9cPmM*@rHMpPbDpwEe9iD54*T zzcdA)zT0uc%a_04^_w^N@ZmkS;}(lyF>7>>2jvTxynLGG&MD47y_aRX9kIK&hdZ}! zWrT2SUyzY zwfZ;n(lf~1S))sYGK63)aTK~^M$I7!`)k2e1F1{tNLK}5Svq4mYt#sd%ra-tq##=y zI{n5=mc1QWdGqEie)#b@PR~xUUax5y6>#Y{Xt`1|FhJ3sG2`>-_;<47uYgwN3m`H; z#}Rvbd$@D^4xT)IjMZuPfc%|N@Pl8}ZV0AT6~i$2 zRLj;PzV`EYng)^r*x%d3U;pJV*xTC&KL;SDBIVftR;U1SCMf_3P++@qi*plbx{vhF z%H#D5lZP>o*TzCS8z+D;2-_W~*}sIwwWr5Wg>A--;Bx9Xt-~eI71u^x+(oDIeaS8f zzKj<2jVKqWj^s?Hyl}8wd7!lfIj=iZGGezbWhDQqYlx>6$*^RAu40^>pW&Zh{1fjE z-(j^}0RTpu?;8(^x2XX{1f!J}yOCJ-RvHE%L&&KOngXcWxPxuvcv-i-JwH3g|Nggs z$F1A9F$@BD$us1EjIccoHfw}kzU7(ApcXWdiL9(j@)opCm_%`9B5{$Xx~A)3CQvi@ zbr7du$UqGDg-bym79ew}Ev1qaF}Q3c=Cny*cQm?CAK??mno(x|?4>$2hvtBFkeKSg zhGmqXFQ?NvQg!if?bnWvj_~*Y{yWak&oL|(X;eO%;SYuAH2nNm-xHC-kQp|@(5ipk z>Cv5U09tK@?4U^W;sN7=?RJYt4<6yur%$o7v*QX5`&3AFD&aupa5Est8O;^NcA1 z)&Z4i4aZNiurm{D0J75;emL``wh6-W%R^mh!s7cxikGim;oI-N!+L#@KzJZygufNk zNCFGrwYop$x6jcANSWO z6gUZ26u4cDh)d{e_=k7Z8CI(tD6%n26qqeIUgDc?zs0CqFSBy_meCZjOd`1rdK-z7 z?{+(;^@iUDD!{N9Fbsg-*=-G?+SmA9LKAN&2y*+@ZT#W)pJTaN&6mlO?nCWK zZ^&67IX4-=Y_0?bwaQbIfW2{zmB3&hY1e5=JtvD@B44gD2D8)tGLB<9ch-~;h}o22 zn=aYVthuHPTO?tk@L51{q4FJh#*7eh%*o^z72Z2-6tX@#|IU3vmOgc1Jx~;ls(AJ4 z6~6uUTdX%541-{#qa!?hnuMhNv1!O4*sM1gb;OmcS8;Id8m?bEz~25Ic6WB6+IH11 zE-r9>ae)stCG+2UT0> zlD=n?pk>Pp4hfJbY49SNZ5HEqFL0Z*&dsO9MJD z!T9qGLYy$d&*kqr^~KDqIv3bzdB6mrlqphDpmQ&Ens(Vq0H|e<`epX7`LtA1DT?ze zTD64WXreHV#-xbK13A729-Zc7-YUY(AX~~#MWFx<0pQ}|0{`#d{y&_aox+aHI5d4hMr{AvIp~I(7KgGedYm}W5ilrZC)l!zLrmKjXSD!}AB z0B#S~qw!V(BpfuVMUh#!V~mdc((?5Tfc#cDc+SUbFxKJRI3^gKweo8v&8Kx%C&tIO zx0@}#{Q670eEE`&ivV_Nv>C_fv0wm3U}tv+*REc}<42Ei{rW-TyvdgVfwLN`C&Z$? z3;-WbKH|lT7kK;jEzZu*A;U~1sdzZ6dKeb?;~)NrJGXD=u>ymVP3$`p+W=?wXi3FE z)49D*eiG-*CQD7}57S83E*XY z=U*FVo^a;Zy4Is5)!=huCH*Pz!;jDL?RVc`F)T`;MSCyniU6Z29k_mQ9S`o`$KAW1 zlyWWwf*>8{ONh*}R27mVjXL7+@I8Kc`3qjYe2L|15zJX*Q-ozUlJVf+0Dt)Wb6nZK zf;bd8pSe;JVbwFx%%Q!;g<5Hvdrbh)OWdZTxzpTsa$z22=C%PQimhM`K-6y}#2{?~tEyWNtr z*gemU`R3TR2$r@W9tJ$PcOMTQJjCAKUZ49H88yq6&PpU;XT1^GH4Tyu5~Z=2uJRmoZd@x z89I4*vkwPG_sv-lfS^n@qO)lKzsO_KtF)}}{D1*ZkH#aL?RRI}cwQm5rJ zKzAL+rA9%9AS^@oDIulPs!^gRVSKMznS3-p94&&P zwF!-;;SqZfO8l!k2U~+Tw%)vbgQJf}?xc1$Y#4@)o1N%aG-3*5dWKNJhz)ab$28Ifs+IoK{(W+QBR?sAONQ2XR5{HxEU})sd%jv8i+ zG9UtTH{riTjg4mBx zJ4I{EG%~{=cyRANo;-dMiP&UJ5J+PRfrP20e~1wz@$ULD`qINg@^@`PD|qfW>0KmtTJsvXRa+K(UcXffHoy&5Lc>KdOAvg>VdH@t9^=^YCD{ zn0FVECUa8bB$8tc={oWZ!i!onT(q|XTQG~X>ow{Gu%|$TKQJK8S1~K|7V`opXTCH&JlY7|R-OECCqxxAX4Mu&wn~l3>bzX(O51Qc>d#a*hBaH8Nw2#ZB4mYk(F413@%Ybg@p_I znvD}v1p1D2YnY>;zu+#t3dR1YV}EN#n z?GA=^{gXR)aOcjQPOBra>xaBS@|q!?2dfBbA8l$^G?Sf)h?oyD+6%D1zmJCxA7UKG zC^>_IKUjgtfTQChoSmJ)VmOK^tb6v%F}~-Q`Jw?tb^5;cVFlF9KQ*Nz_>jae#is;a z2U>E5_BQMg>oW9jc%2qLGbCk~$l@S#VU523wHaO)M1_Qrltx1r0r5VxAQ1jyn-@cQbf8 z(m?vc>m_ z0^9>m19RfhqhW(6pAxb;D7v>J)-2L6DZG=AW9~(Z4G;1XoQZXEO;7d$_8UjANO-WmSd! zCW|#lF!SHH~_{otA>329akjP4XKr>FMqM9R+A-;P~S);*t7X{mL!Ayxam|-A)A64F*xB&Ps*ng_Vk*Zw{$aM~0=tULQ(CsxjDYxSqQcQgs_MDhq4 zLkay;@JLZa_nNfkDo9v?kjL}&0vX#8mJR0R*Q~`kM+>>DT7Y+lhgfz8@?rRY2MooH z>(^WMfKZ#6v_NbztoSCO=5Nw({B_;%^nnA&ruAACM}0X`_V@R3_39PGt)%w7Qc4R(1Vs>={I6qCM0_jDWRIkYBPlvRM8Uo$94Q%QZGJ3T&BTXmbLQYtl z#64XYOvZ4&7)%S}P{f*mcKc!tMmv_Y;WJlWGktR$+LXkOswg;UJ5L>=?1*+eJ2teD ziVa?q4P|>>+~ff8_U#+2R;ymw33reCGTLi1Dn7aUi8B?B7#na&pA%q@-DI$Q=6lxB z0z-8=Q|-FoMQY;Hke6(@x4VZc`&V1L!R#0}#SMdN9_!5-=jRt0i8cQEPfO6Yxs8`! z#p4Z7X?CIzpQ`go3KJyslTR{7S>M1Vptfc^26n<|e^Y~m<8H8$7(1fPGsQRoGhP@0 zfr|~5oI;##AgDT57Vx%Mv;E~jgz~?SJGz3+xj2vmSm}@jIb*bFW1gR%yP`R+WS~87 zRfvwbd*`l6*2dDEpDohG|C;fQm=dF@-k(yQCi;dB?oS$*(~$$> z(~AWqXl1HnAG($+!J9}5oSmOXg$Kry2^fmo+ux6=7@@dCw+MP}g9y}F29fnxr?S>I z?T^{#z%U052Q2Edx4(~_)e8O;`R@GI$QH6PEU?~eu-R_lfMx@v;ErJNvut#FAx;0f z6Go*!4y^m1?psM-mB~8N=x`wk{MJgt?3=73*J0UV?~S=Gy9B~{G8@56`qG`WM=;H2 zJOItfH3mxkYcwmJ@6t@e<(-NC2&O3G3Ju^Jnl^q?zVyrOp$P)`g4JV)9xQEB$b)Ow zX0(JrA(zQ=j80^l?ER>d=snc07qusRNh)Ez`gF_g<8Gh#_V(HdUmKy=mLG7lxwyc% z-9lFZkz5Dx@z`l}LNa&~vx)f|fiU?L1El{Y;PQC3u?jd?hGNwx_u=3JvK}Xz5CLr_-cG~w&GqB_A?2IZ` zbqTM|ijLZ!D;2bS&EWe#W1d6$)l9=PLD4VJp0v1J zEISaeQWQFlMWUbd5C>}gTupbSIKYXPOy)y8!@3SA&+IRKiSf~Z!lRc$HFJq;y@Ki*ko zWu>{gMmtsX+f|3uvC)c!t1SpuJ3F*_$C@=%Q&&vfkfW3-Sz$?j>&xdjV4WoS7yz8x;lzN7#HEu1+7WUJqBd@z zKm@zJ(?VC%wV*)Cv{Gt99n-KW)gCvL1drUreO;9bn?jCSr&;ZMR&!jzX1m2WZV@R; z9gI9aNcUh`^{?|oOfg8hIg8r8mP9A`+9}OdStuf6up4~F)ev&hXAypqR-S8tt zhE8MX${Iu>P`WdDg{spX`jgv@T{tOEAyJ@E%f_M{W`$)ImC6DoB>r4@&gQ(5jI=b7kT zLTO6hvrML|7BIXn$rYveiDUJgWrYOGO!nPk7%)(Y+;k9p)sTsZQDRKvZ31v*MDN+i zoSytPdLL1SFk{=KDuH@)7NP@t8q$@_rs{75jU8*lxCn>U=2FoDL8yh5@IiCzBvc19Z(c zAR`7n3z>rizos)^xH^Kx|88SJ@JC44*feKn1w=Hh*K3U1kyt0As`iK68IZMXD#g}Q z#cHybW0pBxmB~oC5`u)Cy|WoX6jbalWdYU^vo|vqBo{?EfO&~X3EHm@jj^zvPnkeL z>4SD8GvQc2rVNHacVs?kDpAKa^zS?bVrPkk>2UxdKq4m_Tgxy{osy3i{0zgQEXa8e zBs4xO23)MqLr*A9uZHw)QO_z?by1PXI;I16j6hWf4{Iy=Zo}#bHnNAM58r#J;QZpk zA7njWYi{c2O|BoMrPcbLlD=~h;NrV7mp$tc=2)q^R{CE2|Z z1*lBU{+%PFeMPBS$4(P;wyFo8<(2Jr3mwPqI7)FQ-B#UNEq>PF9)?oX@}5RK%xQQ}TN8y!RE_x&LiW-h-6NS(E~ zqp$`!T!}GIx~1n8l!_?>H&e(j}8SwRiIY#V3fMX#wOaFp%NX z)9TLX#v&jzfb*#&X)Mpu>v2<(*8@%19Njs+F3=*`rwiQlk%gswj@zornX zK*k&PIE{YwIZ5tYf^77zDVwkR)QWk~(%&v?1mr|eGeGZ?7H}qqB_BzN%oTI{_HDl{ z)s!3QJ(Mvl2E2LqCI;?|Smn;c+hp%uU3GSi{E62wlmJ8Zm1i5;hgWh0``@y3`+IhF ziqn%*zah+ZRH{kPc7xU4?p`umBP}kMZv#k>NLf6vFkzDMC`Olkgpr+PWhI$D{h#8x z?wvbWZ!S8ip3j^Rf&m5IzyE-<(^JY0-ebaCv!jOi30R1i0w$IX zS@rBE&JqjbK`H5b5#aRn6i3HL9x#j|k#*Zn@?x>Tm8(~RmX8y1)PsUfi`pdzCpkla z;vY_725>{f7<=OL(=0K0PwY)fiBJa?V|C!gq>q`PiqKSpu3=@AFC;nn9OJ$am7o{L zC&YO-9+-_pO6PPFS2TUJ4bPy@dj-b+-tI2MHpj#lC4=H*@KRvTteK=h&8t?aR94g0bX}D)bPhO zYDqh03`1zD1+xH|8HP=A6;VyAgc*^UI1+AVs+&Th%+ zNl5yhQO0})hHUwq5l6Vdl-&>1Nnp2&PT*=^j`R*QaiGTG_#kWbq;JVz~u)$Q$S4`1=55g7WY^Dgv3zF(c%3V1B9| zj7^>ZGi%3FH_iW~?S&+u_FHaa4xM@Bi$X*zu*IlA)dvTy1%sd0QSKfelH()(Z%!mh zVUzS}h~^O_DMfoV2I9>vz^+`qiv9ilc3ooAEE%_#W5;pC+rvW~pL`52;{VO>%X%Q| zGW69h(RjrX!vTUmx*qss0&7tK93LOy)ytRd$&UaPUnI3NecZTy9ap*zVEQWR<-dt9 zV{6W?v`+PaW8WfF=eoA}D^-<4x1=EsWMSnHvpyptow1TFtFk=l_vg7`5}4m~L91VS z8x3Wre&i6Tvk9*8o{e0)x2q*pS~RDi>1bj4)?YWO09Y=U_~g!AY`0@lLM)MpGZCDf zo#NH2S8W5%Xxgz73vR!jb>SzRvki-LWj#g4ZbsA2hYM=7`+(bV#1~(F8S4TV4Gz6H zcXobuj;D{GHVrGW+#(%(_aVqFL-}+R0QAvE{FU8pKb;-)4vwj zvA;v#_eD5Y=VBajhyCWeZ`*Gx+Py9kr+7z$@Xp3Kj<|jMcHb~H9WhJVHK?KMPBR}@ z2|lR@Yzh~0%p5u;*&-v*U4{t@`c%CKo5h^@PKTd3!ek7A%)~lROu&mD1MiiT3?Dn^ zJc0~K39Lzbls<@7q)h^4iQ7;@(GhfcABvo! za7@w@iFPY=8KbIB@|Txo!MGp9)@}?;-RD%(m_9c9QBMY1uOrAb0QH#lgWrd+d$Vj}cQT5`x8IiNnKp z`0}f-aB_O;wRfA2IR904X3Y7VaST|%7$;#9cj694M@L8a_WSQ}c6QqC5R^oumvzZ$ zRIykr@c7{)p23pZ;vEMgowV#N=;U2?CI3HerV4vHdmK~_CMAP#sZz~}(Dkx_@gB**kAd(asRX{;*mcie5}n|S+Ph+_ zISCOG`9MJ+P7%{O7CXxoo;-enV8+LLDGijB9j21qXzs`!ICQLgqkozZ~AX>B7?Tat99Br^%=J>4G zPCPxKPJncjyef=P)<-YM=(_4su!81f$`Rm!o;p-#PAc_`rkKlGRz|*Y{W=~$dfc83 zm3|y2LNQgS(C+CzJUql#-+YDRPSOF6+lt3E3ROJ$2yWQf4=g;xaFaL>? zlaD@SiE(6NLj|Ct{ap0}ESK%)qaDy#Wr~>QhQgCh7ywnLd=^PC-B2MQ0cCmj3(3BT ztR7+I@L!XK`%+NJgfsFM0Yu06ope*Uvq}->_c(-yk)F~dBAu1t>@ar@DrvG;h#Um` zz+G(iP5b0)Uj2cl@}~2llHjq1&eqVAO*2I09%4s zm!dpo)cI7z%@qS7Tf4T|Z1I2nKmRv2n|0}K4-ODo5V~ps0O#iyxO?{we)sHm*xTE~ za#*xSnNC#<257i5jDQTDwat0QQL(W4Cr}B;U>O*lI+J$f!!8i*gO z?~0pK5<4q^4xQiNfmp&;a&9~Gy)`Pyz_Up`R>DE)(}6;-rv4g;X70puQO2l>SFc~;oA26w z2Qw)Q79;P02$O)0ip65U!L|?oDV(vALTYUU@f|Jt|tk-KC zA0OfP_#-}^o?@|(5GA2%4l2taUP@KP-Me@3hu{AJi^T%f#FJM+`;=Aa{cJGI(E@>j zL|?|>d1NpCKJ&_1huSNBp7Gr}PGWf+NA)NynPWN!EVRh^v?vH9JP+JbcqN31Au1^b zwQLLl`qRVH6p1s;|0I)5glq#Ejm>t8SFc~;+i$=1>QLh)Ea8XUI5=#2)Td+U8+FU& z3OlP67K?V9?{c}s&h9RDSGzbnJHz?;88+hZn52NvE6QZ>9(x-9E;o7$%(b! z!Ypl?^~v2&@Vn2RVRvT_>E{I4fr@%DbA6&qRyy^Y%r0t>n2nOr3ImMv>;qbjXwjz8 zt@!jDAbWQj&&N@IV(}b|)T|KP&3a&@^46!$Wn+<11fCh%X?Aj*BH&YnOioF94=UCR zDa;y8l$exdEcbKB5_&Zkqpof+nEH-^Gwc{|2<3aM>55})QEKQ^zM{fg< zBeOc}gB$w1yd%Q$XT3P)3dOcZ5mV<@VV@6d&cvosn= zWX`J!MVqGZ^||bmvYKk9-M^n!PHY@PB65z2i3!#Wr-h@vT-xj zv+|lW?P{-+<(VViMR}xLAgZ zko~3Dj{__luw3)D1qKt)hF{gGm;#VdX_0wJ%HcRlK2X7j+MS-A;>RC<#LHJNqtt7()E4YAqtm`);%$CIe@U?R#W3V& z1e;Ezw;NS)^~zN|diVej?>|cATcX-333P$(lcM4-KfBkVm{-@Y>?LW za{-2OX+kggV-B!O+u0?;w5Vb+XNo=zVR#2+0e)}BuET@@rOc(Oa_iJA^U@6~Gefw5 zw!@2)aF{LrMr?paq=oS&WHr(b@?^BCC}`2G;jpFhXZ@exD@Y_=Om-S!g;`Q?r&am9Z#k=7fH zzzFHbR(4k_-23D{9zA@7<#OR0m)dE_92)beOqZF-oW;=m(4L3;=It9CzJHI+dV`DgInFOG(8{kv zQm86D>e4p6v>kpNh5@VP607A3%jFW+53b?n&D*$n<7RtAk2}HTI;##mUJDPEJ1J z?BW8aCnq?+ILBtY#o5^zHk&neclU69c8|epv zt5>mHE~W(}0y73*+bD!&y{YM&c%Q_41rc_#>aVp~Y0JZ9T19`CjX4{rO-Od`Iz^mw z{0WXS3n@S}4lAvVkW&BvAOJ~3K~$y;ELrfBvQU7%k1%`WeWDYQ!nFfy}rO^v%z-U zV!PR3JC0Z`7T9dJ5D_dE3oI8)hzNFeR_(kN@oB`OT9&g{-7j*HQFL9FVEy8cfe1+s0{uxmnf}{IXouXtM9ZZOxk*tYHDdqtpoI%jA(ssqQFJ8uMjGnE0mkFBD|EF#F~xn3LMcm9h`Gsvg1S? zlA%afB=lrSHUp*U{j}80@Y=3f28;}0l{2ksOJh%wKS2Xj8gQm;R#<2<*@uvS7I7@- z%&#~=KqB@FwL&g)z6|&dO$|HA7suG%C)+Fo;aGub&p^mGm;2I+ca!x zlT&^;MMBsaVe9oqyTA_S`WL?=AWZ znh83xN~M(sr)=nsHp`IC{4H&G;pk4AbT$*o0BjL^Sq;9@W`Ta4t+=94jGK0^#;A(3 z(=(i%pJBb(00LaQdKIxw6YTG`pIKM?B45ooCzA*ltH0e>}!^JCeh;Bk`N< z7Mslm>-B~6xEKcP?eAk}wS%3VCHD8O^rIk2oX5*loMx6DH zs_Mx~o9UI{oePFZb(94w;#1aI+T~pS%K=s|x+~pMv*kcWSQ{XA(LJDy9y@I} z1U>5{O$8!Tk@}0Xdv(V?>%6{AJG_Z#D+*uzsN(G64Da86!13`hJ{%pjpH|lRZFM^` zVh?!`p#OYA+tXMKi}rX%g+G$Vrxx7^N~zI)uVmb|o3uoLq2Kn~d_F2!CQhse8}H-T zeyDVRe-GEL9pL7T8@P4zX0v1O7;22n=fFm~3V)kH5tPpiKAgb~))@J_ylVdz+UlKo zhrIZN_2KVqT#a83Gh!3qHrm?dgY?t9j>zWNGpNu<^J>&g1UE()?QO6jWhgfa2|mGp z4n{5OfSLu69Y3SiWmOc8N|FT@Q0i!YbaaFlzr4WVyLY%)w?~XF7E25w*p4IOz609D zR`lcLn)qwr0kj9}w<$_{oM~U}=t#U&8}JiL;xJ&?!t&`DRW{^M z=xx-%%F5?{KZwDxr@!h^{FfENLD5l51G%kJD8{0*D7{9ADTsJ5V@ztl+-(lEB({UF{=*Rj+I|w5(7MU3#20*EX3fx?Z*O%~TdS@w0X$1+ z5++e}2g`dP($3KNOqvL4dROwWMQXdT8X<-rzfOK7Mk;enLwHBg(2FRe%+27AYnKjDHP*Q zPV@TY-;*c}r9?Z0pN6bsFwg$C2Uya38K^5=lXFofn*v4B&8Uix$H(}1a)Nj7-s1hy z2W&QLKNwisdO&rmli1dgvZg6JJcdq6brRCo90I=kfTvoPY9jE+VGs_Rep1b7QUDr& z8C}jU>-8GT#R9kQ+`)|-H~VjeTuBv5R~=19f?PR$dVd2qbp`MEuu&uU@^1o7ZpR-u-*HvVVoyAY%o+%lsvH&}6HM z?3R^(EpzebN%5xk(fNLv_tKyJM<|0>cJOF&=E9?+830*mDWpWMBRM~@!0 z-%lT8TI^u+W#5}PUcrk%ZLtRB0e&;J>ok_@Ak;PMJhLx{4Wtw3=Ih!X<}{H+bxaD2 zd18Rv97C;b3ADmwE*DM%-4}k{3Ou%T@I^KU6Io_Xam~RMKRo{)Kfm}HKtoGIE&%Aq z#NhXYcXZVg-Pmv4-ow?9#+G`;djAlxWNzWfYE#+(!RXgG5Cw~2z#l&U1Mc3rllYlTx9w;;*|T6p35t+^ZZ^TOlkh@l zhLKcB5tL{dnv!o`7C7dke!~>5gSbVagh| zP8duN;t!_OF{Wx(^q4$ntFMESexVq*-SK<>L8xM8`~se-Twd4ukgyZz?P%TQfL_)q zckkTAA3pyaJ3G7Srxe&8p1BOLX51p#uee^y9`ts0eN%~+vGP%y?B){ycIRxpm9@+=4F2Ap0%=C^wGYJQ@HXYurg>aF)6k0m_xs(9SN8WO zG4WfUX^`3F*X4GN0z~z*xl_oq;QSkX-2QgUt!I`*DCMtU&;*&ld=1AgJZgJ-&kUPy z%5-S%Q?ekD3g;fj5ifpufuCRejEjqluBbryl%CyxtW2B-ZnGna;1X$%5Y_hUOjq{z zv9q(&p5VS*Vi*P(?hM0#k0&4dlM;EHP9rY56rmC!UAJ3r+dU!!hQ)y8Vu8gX#xlj6 zou6a9-au7xa`F-D^&0E-8pAMP(QmX$i*f}NV+1R$SsWltwVb*7_XpPw@a(hCaP8Uw zD0f9a|zS_#tqH2pei zvh(tKjRW0+dEB;#JFM4heE9GI@7^Ec-Me?#j$7XhjJ=Z)WBbJgck`h;@X)7lqqbf8 zmJlWJ^{;>VR~#H1z<0_84$sb_0={;oi&2s;ZXy$x$jvl=o@NR<)>Ofmq9VB-`%^r; zy5_h{tW*{Kx)YrZ9KJx`Q^a1H4rv^r?e*G2R9lnFWerl{E^N5(b zm|-M4b$rzfeD%sz?Cq>DECyUZxQSc0@3fzZCf?!(s-PW}wQ!@bnPwZh7_?KLzG#G8 zeN;9K!*Xi0i`xGaz-v?O%cG+Yc=5{%yng)}z6gZ|s&lqfIMVZzR>H^HhU3M>8h`oo zpK>CMQ97V=_dfA_%L1_2xXzfoTpZ1~u2MPq8e$@oUBr z18Fm(O}Wz)S?L)vTjRL#CGwxr#}J%@w;*rlx*4R)j3^vx{h7+*;Ftoy>~tF zLN^>96JJ#*Hk%FJzI}^dUcSWH`57)QE@EAS5GvijLX|ls=G!4k;Mu32;lcg;?RbvU z3EmiwjZa5%yKxKTOKBc#fBK37PIBC=n7MqZ+>s-@nJ#-+Yae)06&KP8*Ph?~Ck~H4NjL(FPIhELYgu-Nnrt zH?X(AkAv$sv9nqxKt^V#QK-ROhMpWBONvxCZk4~5^Vwev0qqMl0+Lryse+S+AkRRX zI=y}S7H{6X!H1&{SYNDDR`HF;KGwwS6wHfZfya*@UQzQ?PgKJ6doPHQo!uP_0B+yDgyE!LR7tz;_n)imtS@v5aBgrR;-D!(Q9%7VqC5;`Qs-c=PrR6ag$ggP^G6 zfEP0Ca=FC)d-w6==~FBhiyRbl&N~N;$m*W>5MOt_l+DAEebNye)k25@thdh@BxkV@ zJVVbkRk5&|`#R~+Z!(k{G0TyLm*Cz;rr*`x1LWm;Cg0XDdLa=!`lU)#T97nSBr;1!LY(l2KUq$*Zk1azmw?VywAc zm%Mlln`VugFvrJ7_~NTC@$utFN97n_VJAYItv>M&iC2zak;y?fM zZ#X(S!eY7TrwrH@ny0kdq_BOG^~DDN_V53WTQ_dzJthg>Qqar0?1`&THPE)(uvim^g!YX7T+P zYS;P)(1ae{o-<&T?cnX$Fj;LOXQ#d0jQHWl@A31C7k_(?G!ijF!-?XH58_m%3N?L zAsYvze{D`%&<@DKVF*mLMcS_QPe1>J!}o{%@ty53p&jmvvsi7T&de~#fQ1aWbNeQq zKKT^4ZryEXk2pANoGx<;0{+hAN(e2^V>6JnJ%eJ<$}E71hH$m0vlcq%H{_f7;nm2xozK54P=2KVp9!SQ z30<$~zz&h@-4yoIPe0<@@4szjMQA%PXt3yx5QwG#7K;J9s~z0Aa~F>uJ#G(rE__U; zlf?flI?u^zA6cK1OmT_4G!~eb{#|6CDUDQVoTQ6r>s=(v#EzMQmrSmzcz5^?-+uco zPEJn>04g8@(QEq&()$4e?%lnMXV0EtwOW=ziCrVbdeb653o!GV_#sF?bGE1*>EmGU zJdH8KK9ct6Eih-G+5dNam25H@yQBq1EmwxoO#Kxf-oM8;-+U86(Bq=fh#ll$vu$E6 zhXD`oKfsg6Pq17pVs77sHNzx6XO!u*BVjmx7!6jDF|X;XjPi!!d7v1_e!wMwrvZYN z?{c;?&;U|)vvx`qC}L-FH?#(CB7)nuZsSjX{3G`F_lqvro@PX|N4xs=@GagQz60N3 z;d-W3GO|3fW@!~ULcXGv(IMn z3BjxnM~GPAL8%kLSISI(I8Vs1Hh<2HT zyC&XDPkvyrcfEG)0RQ%{|Bn6Ly^i*6iW|GyLbQVM?Pi1L&ws$_`B}IEBZpdV6NgX; z$bFD?O5LNe*=pu&mUPVpmT1uE4OA?HkhOS_6bm)T5ZV-HqTOj0U@{FnpRbYwHDzdI z3~~g=pHcDM_upb1xBbMudJ7TsUGaFv)G!PX0nX1a@bJMSJbd`5P09LAIq80GlHWP9 zz_IK~a<$<*iW~375d~k9miFqqY^_S>X)hVvvZ5-jr8xR5V^UwnZg=_O6U2Bon+3P> zSFU&00Xi=R58ZaVs}=s`&ws(r?ruK`tp2PoSfK*ww?_m*oSvTImzTewZNE7>`rxh( z(^GQXu!lLL={ubXRI(8XB1)!Vhpv%E`i&!Jc94&_vFj@C4?Qku8beWJ&R_CZ{4pnU zzBLOJa=THCpTqZuI6OSWxNYTIyHih$*(kTTIEjTk_g5+>Qi1ZjlU>os1# ze$|exPv*Kjpn4>an=Kwbc#O|~_c;ir=DZ2$XwASf$FGTQ?X)y98VrhIJZf2DCUgKV ztI?*ACW<>1IRfj|DmY5wd%sy>3-B2o63TcJ2=3mwizknsU?D>=OWv%ub7)T6 ztCU}T{S_t}B4DAh$EhCly4#k;gogfHi$6>kL<#zNX|U$@HVA&rIFTC zU=Xi!1qZJ#YY1TSnKLMWqvIpIefKsp192Sj5`t_t8{B{J08gJj?Q_<=a8EoivJ=0R z_oztHjyNN49U&Qqbko0^xaAz;mnd{K%fzM>i0V^0&)A%13}FQ^brKt2vK?vAbjXpw zWHAhQaQ^{r-nz*hwKxDx2@v+-9^dYnM48GyB8Gr!1$j3aJZiK%>{7u7Y z{$62Itk4V6)Jcd~u`Vks22z$MmADN=*x8(7UvSnSveTw7UcA6|yLBd#FLmd)y@7GF z#oar1@afa1Z9&dj5OrA@N9qALmV_7Z(%ZP6Sy+$}$PgxXK3zN!6kO`iK7Oj`SXSV1 z%1ccK;>V{|p#lP++?!_so&?xIIp|1=;ILE&RlA%U3n z``j$3&A3Hh(MO1vkkt*Mydy60rTG-{=bDAn2A}4)#%JxPorwgT0xv3Lc_kdF+tNzm zwnSHA8>YYhd1q$_|L6by53Dz9*leo}FG(ME-;RzW&d)FK=FJ=DH3h5zLYhVuz_33F zz>!bobixvEGVa^JB1!eW2I0rjaCl01P(mQeF^*&@>vVEneIR>AcxqC%Fa8Vasw!T* z_@(cL2MI=8yE{z;SS%K}_sKn6zuwRNILwnA>>I9KL|aM`9>lJS;zYfl7UHv0)8veB zVa-TfnG(~H>o*MMzw1GP!l>^w#rp6~RoM>8*D8`)W=1$BgBNEPn{w~(?c?c_Pg{jb zq}?y#S|j^*!8Y41UcGtkvxDR(RcV!91IHpe6!1F;i@fo@=~>;ju50t>er<4LQB}xC zV;2F{5}q`^Eo{)^kBGta2<~x zJwiSk)a5e$6cj8PcZOm=Cd=i)nGnk!eMB$US9g$ta>==zZvI{nnbgNN?`M5?CRwHI zFmbCc*+R;An*UmscR*oz1(aPZD*-Y9j~_k4{@$MR%?s|Zf!&=r;_U1UA5Ts?f`{&T zL7;umseV()#C4n7`(iq`cRB=gK7Ca98m(oJqMzhEq!nHtDF2%_2WDP`N+?YoQ6^s4 z`n-Jg3&#F%1lyGb?0sv){672a8J5c>lH#-@f;oljJu6q)8<2IHKm&xJG>C|1A4>s2 z@>{IT*fs%7|7UUnw$oFg%wPlBm^5~CE(&NK*8ssBJb_0t&U90cz+F6u1*_Ex5AHv3 z0WC?e-Sjvobz z8gh{5D!0q`lTBW%xC$apvi8h?Q4Qs-dT`fZY|Uhzp*fl*wQv=kf7@Z)ydoSH!WeZb0&mwCCQo&A^* zXnNuI>kC3q>2iWEnYY#hl@`Cu2P~Kw zKx~>5(5@KVaZ}I(fgvn{$jsR|K}ZnUNqKBXR66=WIy2dP+{P$?_PZlDZ{6z0-K9Hi zM{-(w0qtIr4@XBhJ3Dh9Naj8^}ixf&p}D!ywsE zMRTAsDsxn7_Q=@Vu)c&yV%+pEguZWB+5f8ImzOWF7~1)s_ShVSP);4k_Mo@TxWR*m zkK00C5jFl!k$pYgd(wH2W6edj@(ROhk=u@TgvVI5EXQeXmrBRJxYwvKIWuic^=Qh- zXEd4pe2kj{$(><@-Dghf$$>zrC08=X&@W|mF?)6oyLsa#_ICH65R90t&;W^t?VX*U z;^geKA6b!f+{kEqcxHn-uT~9hQ(aCW)9e?vHh;(vz{>E){b__*pt?n&#@`gZ7I`YE z5|DqZ5r-=%!?(xxcxqh!DE= zo91k>Y%;KJ+^9A*$udrA~o4GG&%o^7_< z{u_Rw1s!R>L+gEoztrh-X=(DK)V-aa#v(J&=W3pyrDG=ze~e2*6Z zwFqFtSUX-b%+Ut|LA|3AKT`T=d2dWmc4s%3^Px$9A$@BLgc~=mQ*dX^N655CvmPBC z^}7{$&@5=8pB%irPcqqO%^b{@G7YqY&w)2n66%B$X-uwabYG7KW^-ClahbRSe5$L* zT-O3h@$vKoo9(8Lr%v7`M0P*Huvp;W-~h|zGC5QDb_l?`usj9I@)o6)%{-PfwPX;` z+`LU|beiS~NF{a1^uSI5^fgkE%UbEAS9)>P(DytTttI}l&B*wjcIYK9Tlrix@X6gz zVk*~v&DQ})0De0C#d?kN^K)MVwnvT@ow4!+;1(1Ifjv??qV%Ztp6YCH`O{(}S57GF zc~tt?nwb%ai_S1H5I)!2DBnxbcFs>uPJ3lZ|Np|Sw8@g=HUd4f+=F|VmPA>m?C>G` z|NkH>WQDB=A0lZTV7Nn*Ze7;nmAm_WJc3 zmWdJcLt&5r03ZNKL_t*jSJ*%WAg#qb0phiLAfz3F7wD?djXgn>pE~i+Fyo9^G(ARH7}Gk;vVe=9*THf-gW=kXD{vD+qdR?--EI8 z=m?l}^E*H6|Niht`UNVSts-RrI-Rc?b*wAs^-z#PG}TEoss)%XaS)-~-POS6ZPMyi z=xt_|iJ2mxq3ldhHlTu-LZZtk6pFBqA0O=T@iCdky&G%$G)tSlUW@$d)hqk_&715m zx5sl4O(wQ*coVd9MS1{281ONQ11=yn{DGl(E;x*;eL+#3;CQh&jOL_EzH*@!PSw0m z_}2}5pv9m~p|xyVhQP(fp^)0R^mBnHGIquuEXUsxgg^c1&vK<)DxJ3Mw}`K;LwEQ0 z>z;KgK%6@2n_NX5&#-NJ<;`biEJ3RPu7ajssXPPzGJkEY;)P}&7 zCPf59yIi2CYG(HR_kXb;KK@|xY7J`~XQbWT-`ktluWOw|^_POz1pER@bpza$+)1of zgV!%$B>b<*qG;A=qiA6LS`#6qx&?Z=lWa&Jg1`-Go>KuSR^z_6ir%W070scJffByG>kjRqfjC_~9V4%P_sm=dw$3YrE?KOiu z2qe}jq&f#Z)Hw@j>n4|HKP0Tov*$i(oQhQ%V)=;E9v&a~MDlWyf?5o>?(gpG^UvRI zbcvLe259MW9HY0+B^Cs?#F>0YTM?#Q7lBwMP$&b=O2Mqn^kdf#3L1KbfJgm;ujq`M ziH+E7wUv$(SuvEWeOyJv>raZl?53|uaC*E} zPw#<20IopkQH|iiH>Ye3d}Kdi%PwM%Ya<-|5GK+V}gcT`W7rLlG*9do!R)UU> zTjb5no^Ch${`((R3dWj@j2-YmGS3H0fBxo8W7DL|VW;LdePy~-gXmxe9M?%h%56ql z8+RHbm`npjk<818;&s=c)Hm@lXAE%Ru?xu{+j17K*p$FQylFg#Ff=o3lH|C5q|A~m zf;${Yf*CeU9;#zuVGmD_6R&yE+=Q(A*xDHabW=lpwsa!)7aHc=%?lyRa7&5#dKW*f zDN0c%kH$O}IPOJ1rP3`9OBgqg^&Y{GAAhjB24U-Yz8`=1NGAJ2a;@1Qz_*HP zuH%UCgKz8AOdVOYiJY;cgF9tg@aIs%kNjCsgBZiZ64(I|L=Z6&Yw>MnfoYEze|52T z;GPlY$5CXwdW|r?mG7%5pH{j4&2`6w2o?ezhe?h9TRd@}v5w%2`n->R&|#z62=n z*Ox#0(w=TlIh=~bmstBa#9sIJclPzSzh~#no#ik~ZrEGEr^UYuQME;sTpf=DgjAs` zgPcMI`~Q1D5GiF1q*0^}g)#LKF|OV>1{6!EwA<6o{_^KP%h?)gSvt$zaoF8)XD>f{ zX@;_5t4SL(RG~dAR~l24txJI@P6s6aDg#iQw6Z778Vr=qo6EvqOZ8rQchQOZZ5vkU zbyn4`=IQF}5CeXLAkXg#WVtmUj6*~%R5btVYON7FfejfY|JK0elT9k?-Fe;nLw^&1 z8m?G6^8&>c^rd&uCcja-DAbGUQjq7UH@KFN)Nd4Xq%CdXPBT6l=7^WEVxYmJ&5~K? z!BGV>Gi>#E`SN9sr>j$Ler)U%57Yzxjkd}!%dkLTjWa8H4Kds77vHhT+RjU}h_i1G zF=GmHu}1^GWQtA`o%S5=s0>A?#`mmBsuQWb8Hmf1)M;5FW#cvEdH3!e_s$izdO5e{ zdmwXux#-EjSV723UoFGIS5qg-_vPFy_CuO^ak{-JYqsX>Uz)HgARVj0%+yah1kQ4# zR-0Dv1^*#4@hwntE-dW0yCY!&!5l)(@8nrygU`vr`819?a#IbiZ^)nDnKs}*x~_1= zO9K;Rg8G^K26d(2R)As>D0N{2snPH9-QMB~)M_{;dIks>Hm`RRZxNLZYafBgGN2dM5=QZNE&B@u#^^4Q zAkH;W2ZGc}wo||`%lD0o;d9&obXDC9>3VqP{gb$a;Ej}?A{H8W0L^^7>e!% z9t~5xW+#{Xs?ctF|8S(XjKuF}JVa>JHl&!N*mBV6Yz%<>i3|t3N32XKrPej~T;ES9 z@lyv2Bq)}Gfih%p18@B^wg6M$)?!C8dMwrFPEFx?nNwY7QtJ&X6i98fsv%Lg<-Ug5e z*O0OKbl(@G--clvAW(o|#@1D=;e*R57k+o7N@tQayQ3~#{!S?xG!)tHd zqQ4Dfy}%JU!2MV+O1(Ss#XF0Lr$fmy`>HasIFJoOWJ;I?=cgAMYAw2E|rqSXjkYPy+LF`SB%fOoopghuL zL4r}8%A_aXiv@K&?^!7Wu9cQG7_CIBL^X;UE;Zr+ky(>r|SDCHTV7fUlqp9Gczi6|NuAVfpER{oKG(vf;`iDQENrb!QB?{Idl`OYGq!juFvYQ0f`BYPCi9k_NVd@x%Am& z(pXlm-K~ud4jNe7sgtWxtdy)w=_+k0>v@B>DCS`VhY_9n8);L{yv_MI?q;G|{i;(( zM^HshT3?ZQdY5JeS-+S%V84U!7;Q%Ubv;Ho0Q|oh1BiD;N3L%j&2~~&-5U(gQ83`p zCc!I8-^4m9ss~h97+$2Tw+$1Zxc-pqUd$m@*$zsmU65ud3N^q%8dJR!m`z7b?Za7) zv^5D@7unp*?v>M+QF(!0tuiCZSmz|_Gom=rRgIv%7{+ZqQ|ZNvdwY7irTvbgVMg_z z=V?ED{Aj=a^}pFyU;WZvy?kkRcXu3ivC^VZL6O4ZbRr|sB+Sh6A$7K#?X;^8+>CV+ z5v)9q&8{rNll-S2*9kB<-JY5De&hpy&kez@JvoBiY`KS@5#;I>$_&s7PLCSFQ}{4@4>YfzD<$AkrY*jYPYUbO<{l>;cv_z2ska!N(es=dvX85 z9v|2J=*QvfUFVw3+&HxO=G$-WkAM1;eR%(2-FNWfGdu2TCon>)t@;ubPrd>7_H;8l zR=eBNjeM=;mo9iAxGY|Y*XS|4yi!M>+&vA?+Nylh|J4CzjuwT24Ua7GLTQ7(c%@<) z<;s4z#bx$qYk%B49%dHjX%7z%_VMAPef;>*9v&a_o%Ap=Zmf#t539>n!F>7IX9X(B zi*6gCo?S*YqJL+GE5SVVfJQYmHD*?`x*Y&n$=vKdM2S^KTaC25Yt>&1pjEaVs6*+c z42Pi5s2*CrzrV9Luiw~r-+j0CJ`>*aHEj5^XDm((ZdbzIh6I~b*;H!p%m|f z_pbe(wB<^(bR>WR%K64YBISm>`rFfJeBhrN)56+%QWho-&;3-k9wv@$Lt1`aC0B9Q zSb_UjA3kimp9%Kjh_&X?gJT8FQ5UN7g4ev(+wj8WlG?Ezkr@P$NK|3Zb*_q_ zF#yJ@Ni760$>OcJx0t!Rw|DQ}+1KBEZDzUkeMXU2kgl&~fb+bWyV)&YbYIO^hexi| zuZ+CZ0Hyn393I}oU?my@i9r!&5l2HDcVCYwQumDDFbNOT#sj#|xDiB50_co6uv;~J z(UfsdTV?|t>eUdg0zf|zc{_n16%ZCh5f(c#Ac>p254!iKW42n%Yq^kp!G@Zi!pv@u zkM_&2zUqoMsJj5%g^nhg5Iuk;6b^i3RSf%)Ox0Te1jzLFJn1#W@)VpX<7V|F3+CY= zei|!+_cBlr5r`b-B`uh2?fiVrEaG*c1hARx3~dGq^TQV6CIhEMJ_54`{z{{%p);M~ z4A~K!*~eFZwbq{3t?j3DD&}NKv8V7D(5Z*r#mWpPo%GD1q^EtH(-uEg#)Lo7F20Nm z{e<+3VZ#ZH&0$vFQ&W$0#h0RLnTk)#Pvn>jl`H@_GF}2@&_DNZmb7T}~_BUW{hL10yC4=eztl@7P#@Kq{Re@W*+c8c?~ zUw-wKy|}wKKJ1#YDo#9fU58?C7RKP*25r+u zbP)*3-4FDkeBcy=>yC0(%85%G6yETRa)fL9MMDzt^7XVD?<^n^q3I5IudS$osW|-)9O<`#ahD!9d6*#P{90#*W4>l!L#~Fx*37*j*9ld5- z1RRDGe$*2KCj#ogF7kgig>6FRD?~rxw3k^U3i-7k4&i#Sqxn{5jT3z+54QBx#^Gr@ z&Uumug21!iym)p*Id8X{y?^`8{^=k7$=>B4$pRjf~R$vRIA!(U}VTZ4y|lf6)RPAq4RR!rutfyIQ{ZEH!U{}{v3RBx-0;_#{1x)H20a8QZ)#kk2?EU-q z_N!n0v%P-xc^O|FJDF6B)~phP-xf$|W0Q8gL99ice#S9IU7n5egcf^dEO6bO8>oSB zo=zQR*h`}z&^F8sP%dez-^oBk*th@pt$p+DH}=Or{Bga%@I3Jvpi96+?f#5YjGI|P zj8G4N0I5R%^@6C?_;$Nx`y+khpi`Jd*P-;KCC&BlJDfvh2#aY^XTA^V%)>r!tUJd-G}$~^DlpH z@7}%>{fJKwP;~a;qs?60ve+i)D02smpVP#-r#2Ej$mxXNfp`2d0lF=gcW zC>IUP&yYgEfCOsXyDawf^kh$uPj)+R_VoB@k55l_9Cy_L^;DBiE*1$BM?R=7VjyT> zEMFOVW&fyek$?jky$p0b6D;7t&$q!9_+@x|0_S zXhSjr=3Q*<)m{T6=TSVdvd&aR^__<1(o6X-tKs{uYgjHwnn`=_>TT6&-wQ-Vl4$ zc9K5)!^4`Z3@x3(@d(DX3!pO5kWKlF?l$Bl`Z3?^+~K7HaM#KmYiwIc!Iw-&BEsY6^KqcTv8vUZ4X;nZL`a=7+bw%4Ac0y8(eB zVtFR%7k>j`=F)AFb(fpsb>476s#MgTH(@ zZ*Vyz5J3*AK|7g=-o+VOFnBfh>QEXB(2s%>{HNK;D;w+1@FtQ&09B#}MLMv1>4Qx~ z08^d>-scu({0zw+97e%uBrp_>+HIA>Gtdu)#PxU_QPZOkR^|6?`L)v%RoBu+bOj8x zHNZ^5ZYb~86{6-mklP>fq!v6n|Ef1Zpgi7gMHX=t2t#<(zSqh6jub+dW;?>C4{@Hh zbY4EunWwxA#tUTFf?m$Y1(<8LNZHu!w1st`0^pjVtUb^N5$#=cQdNYcP^cJOqF#;~x0jO&~N5by$^mMjB&p=t_qM zPOWA~A%rgTaX}2xLEDQHsE0-h(}Bb{{TX)pUVWr59Z55IHh_?jQoiyxvk-1oRhi** zIgD_Q1&WyfY|a@y=uaO3kL+OQl|Ki+Jlg~;@Z)Q`6?p}vR{$NPR6!dS;TQb(45p>` z286DqXd86g>N(01RU^jLafxHlEl!1R%MbJ_vA?9$)y(r+C~ggrcze^X?NP6+lHrtJMUXAv zXcD5k%e4d|jak=JH5CBa%J2#dmwR}uUreZh4&us;qKjg)L@il(u3e7XzuXOu*b*=Iho@WpGJ z=L-Z~ZIcNl^{hNv?w*_d+Ln%HcoA?0`{q1dSxsjBt^TS&0%pB5qT8f&`&F&-* zGjs(!SD#M+{c{0+?f6A#13nSk>=_`s;`0Ke*vG}C*HJ(J?)^L)?9TX^$4W;!{)4 zW-<)QQ|(+{G(lMay}&)py+7HdkkLyXYa6+(DpFJ|!@QURk_atKa;mx9C;JjA!%E*@UJK zeSM>xzZBQ#x&90ZOuD>LYTyFe6G6alp=6<8@cIy4u0u|mZCEq(ya`S2l3*Kubs#~7 zab?vy&n^B};2}u4s&k^iZS^$v0mEkEzI8k-%ccypq8D%?FmaJJXg3pmt9~v5m47gB zWC3uLkU2C|c~IgeFyYzsa=lKJn98r9M-ZC#h^Vtesbf;NdqWpm$PPNvXs`iBebZQ6 z_a`zJ&rKk<rJ7u=bEdANR zR*ePGu5MadvIuXj<6+pzcmBQc{hZ%T;cyED{iH5xZ`*1^i7*b+w;;_c&Rhp+0DNc zM2_}b=yY(f3wooiIzD)8*U22}$~L2)YkQ4jn;->ZdiYa8szMc&q=Tjx{OH`L`JwNu zw@;$bbKp?dr*CFIc_((J74e*lifTD&G8Je7M+SlcbrpJ*5pF5({3D0Dn^bbDYZr3( z4LLCa0q=TV`|ZOtA*@?c5O_&bt6RZ~iXYeDFxXv8r8?m;wfep*wgsyIa!i}By}DQF zg31_Ek=vEkwnAr*&;dQPl8N=2f`TvE_;fC|kTZa0i|kAcqpVJ%pg8 zP~WArcDd@WoveQ0X*$*{+qku{=%Bx?0*!t;!fT$W`{A2xK+0TO8TMCytzeKSCJjbV zNzbOSGE@T>1qc;E#FL#QMMq?7!s-F41y%a*MzDS(u==XApnVhX6I+O8``K>{y8ONL zvn_l!`&jc=9rp89?`9Nhzo(2`2brBHbC*u-qHq;V`t^CTX%vTtLthz6K*}%LO?Uq> z-rM7H5ERcj(Q~X%`d5sk61aa%`hl`KLhgQx;F*(sR*Eicuw+ybE}}`=`6oJLmm|QR zTX@%VqJnE9p&J|<;Gy(f8nBt@WUgP03pe_(g;|(4CU(d2h+CNXCxzAvHqRJLgdE>! z4JIeLw%C~MCY@}fY>`zB)XBruXY@Zs`w?(upEEfv-YdedK>OJk6ZD%5&B^f8^{fd@ z<}ZWME_C%Q`j2g-07tpxk_R@ItG%~ZN8hr=>?ba+pRq9j9M?_VPq{(wxK^fb&c_Bi z16D315?vYjF|WuO`4s@K)6hWY@;Rq9D@T?2T{XIMQ#I`z| zPRcCmzWElrmSAt?+NkynZc!j*=!eS(bp@QZsD|65JwJ!Oj;ff}ZSBHe$hR=8gcViD z2)w2RqY!H|@_zju?t3Vya&f+t?7d-Y;i`AjdrTI)C0z5JFf)^P{Q=qFm^ch4Oot}$ zNBypV#YMRHV!;?ow3l$V2$yQ}|D1LALc&ztVm3B!DpM_=+EX$6O928x8iW&PmtffD z4p+c6vtwA>nXxiN&t4oAO`kLYrik*n$i|Yk%73aKH^XCppb>Nwbrt@+DjN-=K)l*8 z+#j1$T)>d|3k<^1*k?CzEAvIV?VK?(+BMj4&x7zdGTTgapOjB^m7U@N4Cd?QJ=5>3 zlWFur4zh3GldY*fu4s;rULR(CLOdL?O-wDpK^$?L2Mscta0&oXCNc0oe6Z|k)*s?ZMUeP6a*7FyI*^f^Fkf7rYplFJn;09y2qSIE-1-zGT4RAdwN}8 z0~u*d(3~cS(gCZhq8@gw=nQje*9kuTZqp8o&y|szM?%Hke{X9!0^jNiEki3{M?p&K zTX^bzn|;&QiWWe)xe+M1)mD>jh0!_)cV5O0*ZJ8HK%q*|Lile5)D6z7|1Nk91!qNv zNpOp<4!@hzX)EYN+YV=)@!yTV2q*|eHfncDl27fhBeB}%xk}!YUq#-_qvI2z3w2D@ zq0)yg)Mu22NxN$&x~8=WWKDNhng6+K+x&Xsvv<~U0sSf49-V;K)sPwC$e=oAf5LTEN$Xg?$XqyKdBQURtHZ@~st49BCoT;5p) zCk?aqG#67nuSe|k!p6AQUU`R2z=NFENjLjY)B+7@Kt7-**a~zs2qr=>UD*DaJeyhQ z+(cARum2jsp?ei$(P2JN5$*AX#Rw@Q^n%7j(&GZe&`iDB5 za>lJg@~!f(%od%9(u}nY1#iMtG^>Y?M~WR5zCVUmhbp}NLK!6=*7U7~rkO$dPJyuh Y2gEG7pRcXfg#Z8m07*qoM6N<$f=+3mumAu6 literal 0 HcmV?d00001 diff --git a/static/tabbar/orderActive.png b/static/tabbar/orderActive.png new file mode 100644 index 0000000000000000000000000000000000000000..9021628a9ba8b7b6277509fecceafbaa1406198d GIT binary patch literal 17518 zcmY&gRZtyGn7#PLFYfLdEO>Bt2=4Cg?(Ps=g9dkZ=i(Y95S-xdzWiIY5Bo6FRa4bH zJ@cLZ^mIolDM%tC;3EJ40Ay(?F_q62{NDwH{k&Ie*5rLQ@QzYiE&u?^(0><1Dgz3^ z=R-7CaZT6n4(6^NM$Tq{@Ag)XMlP;qdN|X60RU2fw3x7}XU>_QSB{yQ-@${&xzC-x znwy%&-G=GEsLcZ31S*DM%7E4e&Ie=5K{7#G z2_sSmVFx$;g!v(aDE!$?`se@aM$2>y(65*UGu_`K?>zav9g-0CZ(Xt+#}Oh)G^_L{ z-y@_kAN7sze>>EgkDqL^Tow5o<{#d3M7Yz7U&79Yq{mj2p3l|5yU{5LzWB#1(E1J* zSIDOs`CIPUp_a<KnN^YAd09wp zARFrCt&7i9`HUZyhhR5q$vssaF+6|;0Ht}72ni5^h77@DF*QW$ZwP}Zn8zKeR1|={ z=)8rj(%NVYbhw)j#15V$TRcX7z5MmC(`(>`94^Nfi39{-03wJTad$wFV&_GK-${c> zV?+z;w~eX{{)7uYqo(f+RZI4P3SeBIn4mK$aPbHRe+$0Czn`xOjW$B!Wo-FUUURtybk_G~n>S-*LL9rQlFzrK0c4<|~Z zxaWib19vgcYpIVF0g(_`{kM!L2dq#fDtLpXL;<(08oSRr7s1W$c^juCFrP1ndc4XN z9R28emdtZuQLTzL%u%I`&B;CA=0*xLF$9U;;_zf6Ni@3qp6A;SCA4ftq_MEPeBwnb z{NMq3>!GF%!K4JGmLCK*i99#5Xolqf>mdgCGc$C8jnwlF;MPi441QulYXUmcne9JWSGG14o6vS#b94}+es zM+exBu=>8U*TpmFdudK@)gDGa%@YTeulj_5Nq#s0GAI*UQ``yO3GTZ?WbP+3f_nEm z1XX%FTwMHqqK9vxog{yPXddDU?Z;V00)-6`jcCsG(})gOwcrJPj(OH!4pD3ce80+Q zO(by>{PzQcEj%vz{SpLYI?PPty*v$_3(@gt!qI?5qEIU>Rxle+;p|TTqIBlw^yv=I zYI*lH`QH~6e0L)R`yVbmq21PC$ED2Jt~z4!$Yp%gYjzCIJpr{o`&Wnh^Q^TOAI4#y z$VBJA-eX^B4!|r;iTXMg2;yuwHzpS;(jQ!kW4KyNHwd+pw8I?kv|OUMz>ELmiYst= zp`Wll$GYx0^ChtASd1~4zvxhwPNU+n6)wN;QWIG(m&o!76_rSv7t9D?-#z;KQrGDq zHAD*)3=?9A2jEH1CleVnEpsGF@BU{>*lGq9Ti^sPFhnvESH$tZ$;By}KNOvn1lxS2 zz8`0=b1=kIJYR=$;I!{26aJJX#KnZ*mWg}3$q>HD4G{OofHF*}RO9bH@oM4* zp9;ysp@ErpkMzE5jalRm_RU7#Xdbkql2TsV^O0~3pAP*jnB&b`X~)rO$1HSp!@%e} ztrcodDfrciks5-eA?Q1WkhpoHU`kH{&5%=RZM91mvKEJ?$LvoM}Y`W9sLXgzO4aKcv z13(PfuE&=tQK>s@us05j6dtIGBb%h;VPPkiu*!&ncEMwXEF%kyyzFayxg2V>zuJA+ z?nBtfRjfPZe;xr|CPh^--UhHxN-b1;N8;(fP(8;+32cZ8x8CIZGD9d!YYVjzv(?>Q^xnN&yu zjz8)Nai<72U}lg;?Lu|9{iN=&Pex@8Pmf9ZFMRJSANPEi`%etqc96_(hhbu{g){K( zB;vKZgDmnkWB7KPmj+;ZrlFGs1g^J>KdQnsyE(Kibs=^8kY@FP zWbl{S$6=3{Q)qYytnauiT5V~m!N=XPN=B>j<5aG@hZ4&4r{aW&u>n8rO@-%ukq&Iv zLQ#9pkhxz0Qf%D((Khz4bTwV~G`L%wiL77(WXxU7EfFPK+mhf%sVYGsdQx!}nz0w{ z05Ts1$ml{qmzcEW2J`c@5esFj6AnItZj2CkG~8+NkD2Gm)35DUc7q`668`PZUyw17 z!tNI*qY;8Pt)9jPMD28grm(i+{@YS1N}!74yU5Zwd~T7Z=XZ{MyrewVex#?t;=-IY zT5N?@r(}83diu6RM~s6GaD7K*=yLD1=j(N)VtCESRef%$GuDbNd$@WC(>@ebx_}owd+Q-q? zP~eSgvu_HOAJNndmkn$-ENv@J3<2QIG${Kue$X&zB2zZr%v_Nwd+S3Es{?69x$mjU zuYv&oL0Ci{EeY!xiolBkSBTOVqr<2>qOD|Z>KLm+Cz`kR6LNwg3gfI(QEEEb14@;v!$sheB0es#4wD`qxcEIo0CM=mEISv*P{S`24>y^ zQ(O#WYBVWz*^1u;ZTAM}eP;=$!C$HJohvMj!q9og|5D;W&B`CPMe9m#BTcBEt73Nl zCC0Kx`%>i_ABJMgt(-u?VKzFP1w%0JtHm>xpvBq5(6J@4cZ+mV#-+n@@*>fC=@HNQ zD`$635)=|Ph?OYHOcOxDZ9f>#SD%kjy9ia;@^JZ ztzI+y>*GDU?X4#wiJUTqRPoH0c(daPAbNZQYefIo=|gxs}-r~%P>yQl^_4h>qdFYaF=Lu{D3#bD3iwG7bSW~(#aQmy_mC$cUuOuG|EsU|#BW6ZYxG-TiO<;Xn;KpqYB zK;V?4B@l`X;Z z5V?UXToNPggF>|DzJQM;-=pY-qNt*Az5I}}(>x5VdT5nZ`I%;mS)y4iN>3nHPCIhC!KMiKX{a}Esy}`#RxVF z>}(zO%X9c;Sgk=!K+m1NYpo^&9Uu_a{@IjmyXxz7-CF^X=i7NVx9#tSOxtXpAWF17 zi-d1+`4=m38^3KJCP*632|@%uAmu zLFiU@#u(q4e32V^QU#lq^n@k{k}gZ9c>5K0h~F zsOGoKs}IauQ(Z%an$jfW=QIAPX!KUDTaR4Xp$#b3VQGh^6B0v+I=mZaetk+KYIXEZ z)VKcz7kN=xdKgUKue`1DTkVRle7a^3NdUuYRczU9;&8Gx-rrnyL}aVlrfoZ% zyf{R~0G`BU)12{g_~O-+VA{@mKDqkIK*}i6kNYhX%Su%u*>rhK9otA?a}rsO z_oUII2TmUQ?g0o*LEv60775i0VnUYTN-%PLQe18Mhwe~HZnwaefYX(_KF@uYq!71~ z?Zll&n=b6r`Xk_FVPe!sh5j2-*AcXa<6X836ez(Z=B+4;F{+@t?~e~VzeCTuriQdn<5X`UlP`%%r_SQ$wL zwv#dAZ$5!RLP;Q;zcI)7oJm0v>z0wJ_A)G=0yqBNc%66h?e<+@``ZantluXU6SylBiFsp#RcZGLL<$G5+-m(wxR!qou=bbKTnaIgl9Isq40EIdmtfp${#=>6 zF*2}a^*PjsYE5#xOBCT#e; z^i2L4iD^le{y&5hr=Ex9VS9VVhK<3L;0f3)Bz)8EEs7%pt z*BL@-g6egqkh35pxUVWaLr04g*ed0fEA??1&GQtn;d?UG%Wda!w{Rm{1lxNxz*(%{TqjvKN(%*cq8muyZ|JL z|G_Z#Zid^TkN+BUMpt4=ZB8t&IH#CKE(Xoi_zG^Z}NjM z7)KQ_1Z5;?{WYGgH2pu|@2DLwbHvEN-S|I&3B3TJp%4LUvNSjBinD$+Z}5%8?{acYD^2?h2s0OF`zp zIV^Zb+nd1=_d7ca2_rNCyDB-(r^=17gmZ)N$!p}hVLBT7woZGl2#Gl~f3?%PY*tkT zAP4PKN{)s-S64&a7<{faxO%Z`1y8WruCuwed|KCo{6dNj5B1`!RNZ%3G98gcax%=9_sCdwg^JX%uatRJ|5xiuAb z)`O9xs|@i1W?r;t+`kO-EmM@U|OwQleBI^muBxWb)xz4$MV z99wE4w(x+CB(%)=J39KLk|~+v#eR~y)8UwwB|C&r!S%07X5H=yL}6o0jt5gE6`=w3 zxjf>sC8HoYGYJgJW2th9RvNr06!_c`J9sNyIMWftnCD_JJKs7hy$Ay{3cu59r;`Tv zi6?27L?^~=A7Jsey9|l(gV5;r(G|R&%yX`&U;($;q{eKT&o9 zMMg-r?zBlK4F;kTnKA%XX6aOTwwOxHU|>hq%pV!(YHaklgeswXATjx@{&kxn zi>-JqsmQkd6mBQPQm8DxT|eSeqEc-_ie@T#6yX)?#Z!~*@!(JoYfuN*CDdd@+S9Oa3cp%rNRWRxe_&Eh@LVc9i<>S4R|`%B?`Nwwt$olsZRpGa{h5yWiE9zbiIiAdW)0nOF+ z$2}KrIU`IeJ@eBz3vv6Czpme);uUJZtC6i{r?C;NBm`bY^H)9Aj%DgSN@#ScBkKiAo0py*7{%O-x2b!e4Dn z@aCvRNZTqC5!plF5?A15-{$Hu&nV@OE|DI2ddT+8v)O)>%Gr) zWF~PmCxG&dgoyvEC3z-k-&j&C1J-Uw4GWhTlyThHJxSsY767>Oz;H`DV=w2 zN&oJyUX{B9+#yV=2`N*8-odw~oOfVpX@15JbAfslrwD%;Gm(>$kxB^1s%@?+9RrV2 zJTOGX5p{z+8JoZHLhFCh8vtKq_m}jCbT)7-gRDA`{51{A&q|W$m+d#>_faH3@`KSW zuwPtK%-B%oe-(Y;&{^4wluKHF0apij`HQ&a9=2fn1KR6YdQCs6TQpueWvUKmx|E{- z_vA`c4HAN3t1mh+jf$(B7rUJ3C5PG1LbAL`Eb(RAiXw%=$v|}NFA*>vF+@A^w8P*Q z9$52{`xoM2EQ1$f|2eK;m2zlv4cF>f?>LV8G5JKYkUxeb3V#=4HlOZVe>VPUAvJ-c zmP%im@s6aUgOUs8jZ_`HCB1iQ0~%1V(5;RiAhv9N;J%NlZ4Q6;iBQJ2NsYd&sj^s4 zorPd$;cY{$<*|nnc<-60v(|cmjMHzA_<`{H$Py&ZMmCU69PC*wk5Dn^87&g7i*=t4 zihsS`ki3kV2_W*jWBU}|Pq3kZ4m}67nS(qL-r?Yh!g_3iu0N~#7lRJN-GqsZ`q(w9 z2r*=Z=3ZZslPuz3P>@j<_ddEEQXi*Wp{llG)chpXy7$cBXxj)$Wa}4^R zbhnY7IaTYW`1U}Fyxsf!Z}Ecfot3QW$Ds{jN~MdTfM)6d5ff8j?aFMNV$TO#m41C6 zI4DuLYdAqTl5;Wg=7{#}0g0XY+JJBLkT4 zE5jxHr_WTVrYl=(W4zJAHxF&v}HP`fa3O8gZ15cOE>=A5VpWGB6|2< zAfH4in)1kaS4?B>D~%!?2x{2vu7oKpL}os4Ab+?=-F^^!Noad1$6--vrA=Kkj1_*j zB{}!?#qqy?WPb#A2H@Ff+)j_*yx&d3U2VR<>v;NOT2{6|1%BB(OB7`ZAuVww?8iOZ zjET{2$0G4x9*!c5KrCDI4>j6H=ocj;{YpkCJ%c&`cq&bfS8cd&N|E38ahhBZ^WSDz z-f9_jr}(0#d~_&QUX4u6P@rok`L}8NADqWdfbUWEO0&fWnc&Gw>qbbz`>>j4fw`_= zGWc~6Qw*bT4p{?+1eXB6&x?jA3bp%&yh;IyC-5h|l@BmL*Po44UIoY87cO`Y6bfMg zqxGI2+-KQOb85~I zlMlv#1h6WBDyU3k(26L+k-Ce64=cI6dxf zM2|6*HT~z^ehVFf?4J-L?#KE#fLpm5V38}=wY@>=8}MevzsRjG5XfmOfcv-;y~y|- z-{b;2{WpQUcdJakQwHwnGU+zO)uB{5Dfq9%ZKsO=%mSgkW-C6{;MRHsFBW&^iF8d5 zP^8%h@7?QV5Vu;C4yfD~%~|#}+t{gK0s>c_ zBu$5Y*VyZNyih!z)cT>mJm>D{S8`p3=$sGydOx>bT zCG6~g3V1ANHTi2i%R>&1MHBfYsq3GRIt#@9;>|$ghcKI^p-n=EUHJ+8x^uasa46AhY;8)BL+w25O0kg;oDTAg+7FFxyfDNJYP$h|*h29G;VC-2g$D~x z7(sj7;Kw);MgsiV5qBfic1CvYv&Z!9!HYJa4X-XxAgWEnaceb^+q#6@uelMiRiF*3 z^Vvovi)N)hsvSfJVyHBMdU4u-&%T^{=(19#h{&?vB}XPJ2IphRh5Z*27Yfm;5OUR$ z*J4j<-yrU*gtHqsalB8wY(lQ}!cjALG5m0DXEC(&TCMulm<#u+6QZT>y2j~4t(LZO*#!Q>T>?dyAn}d$$MG;@#(Cu5G z@1QR1$GveY(vdeFkd%W8Ed>$|ekIbX@A|G(B*2sD7}}`74@=_rK&82+CZS*3nVb(I zK>?NHt8RJgFRF7=u*~<8)UG$6=RZ|@m@F7o{<{$W2XPIq#c=F@esEAz&%t)2wVtd| z?Lj;Mrbx*Blddy1L7L|AV#vVL@I8B3;n5UrSGlULglMZnE8>;jibBxdv8)Op(f8O% z`ZRRR{&SA;xGUO;@J{X<9|cuvD5aG0)T6?SgbD*+rNq!>G!^U^(jCv~Mt8V2-642A zSIC+pG3nVVXfjb)Zs&sDJf}W^kTmf{e{rb-3JPwAS`us_)oz{W{}NrPFW5XN}*LRZ8)4+QpAIkgH)Bn|xjaQeRg z=!HN!hvC8(t})lJ{x08NA^CMg!s)ex>Txf?mq2|+W!yfxZ)xD)GzqyZZZM9Sou7=b z$Sv7t7}$iJ28B~0CQv5tXGJ}X&kA{v>(4LnZsXv(R4wsWt0h+WpC|(WRKU3s@g3!& zpXB4;zGkoY6*TcQG$Ucj!nMFVw`7_?vlg}3OS0;GGe#0VL^e^)F@qEyv*&MV09w!E zRQBa*AFzTbS3#Wv&(;s=lODj#e`of1*~zT+SZIF(J?xl8{p*X;rCSLkJb5G<6&KqN zuHo~?Ui9oqTzWe*UB@M9&Bnq{wF4*EFW>rsBx+(pYU6Y}^7ZjIS8f90G(S9pcPF-Y z*$t$AtuZWEO00!k-gG`;MjntX3i_23k>jF)y}2r-MTkg^hH;^)WW}((xZAQ7TEtbL zZev)rA(V!vN^hnrLuIO!jDDUIxIBy`wDc?mWwBi{;8p(E76^?d=0_+7y~Ki)wxSNN zCd{VC0G43Ue=U)HNS<05pw^*a{8PK;vvV);sET19fd{gNo70>cFjwmqsTKy z)2R9=Mj*EuTF*KQ`oG{@`xVk|gbp!~3PZ#9`zmvDP^3I8-=G^0GG*X5X}Xc2q4Yad zoLE)MM@JM#ka8a4Z$uT7Mv2#O%!13lCE*d%UToEKu?T(h)TXASk8CX%_>`>Wa6{nbm=zsEwA)&MG zGb~6?DuT8UKQi|;uXG26=YA(faF8($O|lltATFMxi;G77o{uqtXHELdT1@#*7J3M+ zdr@#OeE2BjqgccxCl-%4Yhnj3S(Vs6rpJ_Od0D;x7$|PHvl;kEB!Fg+g>N5Xpf+y%1&&_q*ns-=ku{qZWUg4Q_YkQm`B!cPqLyW4tsg zkF`JqH1;45<6yUDTgV@C+?w8~nf^3+1|umJvAX$rG9|xY^@_N5R4a#G-Qy4#wu@?S z=<-3tZuvHS zhlYER5fhke%TTj5H2E4aDHfL}I*o&+eF?hGU#BsW4G#@JZTk-!hGE!%j+G75S(e{< zM^BoqwaU?;_LraE2W67J$}8Ws^jy|FBh54GqSRMuCNegj2o?_XfSjR3h+}G&ur5yy z&xJn@Y2POfdV(tjZqQuaS_Y%sgiCX#)7)#A5N-4-f?rPc=jX`gSTQi_(VL8=%`;!V z6EMOLlYg<+S|!2Q21i}FQmsaLE>ajjAXx?3pc$3Xdj|&P&-^0e~@52-Ncck^VKNNqc`l*r0N!& zvbbX8m!Y z6P2TKn+qr5Sd!*CtU(Y7w(5>dto|@38H?dFX-*oa4h_$NTpQI!W}9%OS{W547NJ*_ z?hK8iR)JWlN(@6U(coPC2LJXZZl$)bR@u||j$9Bcfo-5n=8brtl@{>ji+`U3m1lQR zR0mr`;qp~%Tb%lO^|&m*btUdWdwQ%GPky9;dMt+D+Yh&?>%Egekj{M824{z)_NO(o zyt1|!c9H~e*fD*19}=_4vHj{lfQ+_Ob1Yu6r~g;`#6q|UrZo~kg^D5+q?<*gh(lKyj7`ZhNmr)EF_D;Y%o2)CRxJ=- zWW!^Njn`~?jVRN7cu0VMF+qc{(QH2T=H@S>fm6okH$2yOfC_aF;^)xosYBMI-Jk%k z##hiTg31^(kl}uSopI>X;V6J%Da6{ zo-{01iu)nRNw7_kr47;!ltU-Tru49tmVtYF&amFk0rV zid>HJAbx=h1%2c3c%i<@2foK|!OqiHgXB44#8(jgU@)-gxdSim0Uc0S*NIjyn6P#F z>V#eXOq}!HC(IL04oit_@MZSf_&c%iJL@*D${*RFpOIyy<855|_z@Y?uFQoD{T}ry zv9nXwE{LK+C4a(^8PvDjK3yxsXu%qj&D%nK!>8vWr6QfizEur?J3z4O)Nl3_flFi~;F(8VAFnCf*x3q6<> zaVGmz=w_3nf0HQ#H|rn*f`$=}YNOeULm>~VD0GoQ5%v=^*tsEUb8g>~DE3u{1L19> z8eyiuv#)=}4!VJc3I^g@a18z5r;WrvEhh|2{TCQ1g`w*ueAaeL7%H1;&8$UZ4xdKu zddy8%k>FYW^G6r{y?-9rYs>H>;ZD!#+Q0Yse`QRR$ww|KSatl^B}JEq2B>hs!wjpo z58I{>XH|-4p8Humzn0hNfQ$*9mR9hOpD4LJ`AtV|3UI^w%1)T5 znq6r!5Vcr+iUwESw%&;F+yJZwH#Cqw>r72!{I%*1g$r365L?-xX?eX|6+*}>*TReu z#oXw$xyl{DyZmJ_@4Ga^1NF^p;%})2oW|%yaw5iAO`70aZlLmEXhkoT=JX9{-YRd@ z$*BIOygfWPSeg4+k9;pyJ#VBR?%Gq0ve{X|Dh?Ld?;((d)el*?gLMPVU)1dPJ;>Zi zaoD^?8Bp;n+SYn@GaRm3^=t-cL^JLzQkf8_LPtZ-zG~eq_*g<-V;h)2sJYCWzYQ&rFHK<{3Csc{|413DTB5!LL=7)v|GTj zt`(^;lXBtf{{WL3p>JL-f~>L%poXR?fZM)T2m&l6 ze^v3K#OVfG))7IWmtC|QoQEJl7)yvw*ogS?CC4P8tt2OOnIXd0J5^0$O}Stsiu!Q# zG8jlG(@{o>g8^LNQ8PdQ*ufpbKg5YuI&Il9|rFwI{-UH zD{{d+rdl+h3u!hGry5Y=s|;*iPK_qnZgqG~b(HvBcC2ic5Jl>3&+^db^L0d!C0U!z zaE$Gfv|lrdcA~Mf{=J3BaRZf@8ohYL=RW&GofShso1nkxcZ0D!auvL+5)ZGYaMNR8 zmVb8YozrouK>ePFurkCNH!NQP@4N zXmc`7ic8N=@&e;lS7ptjZh3wV7!)BytggFIxh|rXrJt`l{EFXHz z80jVv{{et527=R88}hq$p>LeNim(#ZY?1Wfj|u8n;}2pRoVeYsP2ybSl#u!xePw~> z_6iH|b=1GH)3S3Gx%>Jf0mS$x8oKoGPI*pN4l;QiOCJhgxHt%CYHr<~h9eOaJDCkS z@Zn|HzLN|#=NYUfK6-diZi@60aOY0rR zbnaZOWXx}DrAiN7w0e*S<=DQF<)UW_oL5HdSxc_Xp!Jr@F-GK2)y5uJ^X_P*y? zG$=jCNYvZt>)ElT{%LMGU5EU1BQEm(?iJt6(1F5i=FUrsnm?__q}y$ntKgA4t*45l zc))}9UjQJc&Y%c^hAmot2yOiGiIRXsD4m4$Kqi~?pp&8+wy4FkIdb!kxx1c@-!4qw z3c0X#?@p|Mwo=ApO)R;2C$L*_C<3T_6_bZEF$l|JD_Cx;b%pr8^;}{%CGe8hVP+$m zAH-cJ$v356KNiA6)(5pkI2YB74B#?Bzdd9kya1os7~g(~2l#q9l{#E;TxTU4aUq@d z&<6u|G)`9x3ApF}(`ae}lN=QrAT>L!Sq*RJ7@O(H&lI!XA&j=lom&LyZzXf7Wbzu!e?|DyMWgPoAeYg%9@ZT1Qx~I$Lm8(gY zLlXR;DGCD0Vl0t<*KnykV~0C733{iY9d&3%aieFH(u%Q?Oirwt#3M zEI@N!d073(#|dzMhaP-1v(rD_8a1TkKtPF=o?9>SqeKNkT`nRWo~5`UjQuxYaznW6 za~lI`z!aHm^=_oP2m=Sr?4(VWh2!yq;0oTjT|9ql9iv^-;_7Z3Hb9zDOGM&R4?+tS zr^l4Hk|ty9klVPhr^8pz=Jctq`TTF6`SEzCxeG&B)UO#BHY}-mk!Hnefgau7I-LwG zXRew|wBKY=f3kT9bM)VhcPZhX1R5!)I;yU5)L&TfV#3lZhkw2KM5B7SDuFQ(XbmF~mlQRHi5L@gbf^ zZGBcT+t^dvGVDRr6FZm`-thf|6*>ZZi!cV_HcZG0cm;pO$v;83ry@Ak%!P6!OQ|MG znt#LZAX0cV7`iN1k-~A2^>||}^fNO`C&F~eE|`D02?l<8k=Yo)5iz2}f{``E+ zwN;RudNsytJ7qUao9g<$VM{KSc|`jUKWmf&+2N3|N5cN5bV~*yRl!x2-kJ(}j7%yG zPug&P2g!N|OEUSj5#N(<%@I6l)MA!0R`#Jf!@F{Gfa2W3Lj8lKs?HI*jZqc=7_>yv zCr`{t?kO%p00=Dd-O^DqA;XXlVLvKHvGArJ7qD?EFZM*I8P-E`A*7~C{^ zC0}IOvnu-3*E)botB>0vA1s6^VZM$4?5IK*W#NQB$ukVz9Y!}hu)tx2b=8LELz41> z08dx-e0li~>ep)_9O8AH1;Q!0-u!--15MVRk0cu9v*WAPcc(FRwo9u4JtDP~Mq7J0 z7trUQbXAr4^a#3g5QJhi&jl$kw9d4{YYlvEa^lSf?3QB1r^NhKPOW>kgg(qU8bSoj z3U4gFvudo|y$XD?55BW#wU0s41!!8>l`oIXu60AF%B(R8yv_bs#~JxdEG7u)S4x`q z32juR^dB7`4IlJA>+yH{Tm&(oPeT$~Hp-RZ$(bHzMSV47Tj#-THYV4#?Kn?VtD!Tj zQXft4b)j%a`I@uLPajq+z|S2bB~Uo+G{<40v9N3oQ_E{cK>23^k*+}Z7E z)OGsx-%SkL*TaeYC?5B4dV*r6d5K5uRs+=-yyx`Gf9j5}-}Q(@7pZ4i)DV!*4Ehbe zeT7AGHdD%Km+p+)x5`&J^AK7;5Q|Zu=s@*a)$u?fbG`i9g9(y#G;b<-WhqNss1d!R zNEL3!TfBI^^!0Wj#KqT#4)Y=BZ;+NlxZzZTybBI%klhz6(d@?3OR84==oZ z^*!oXt1EqgaBXfam`Y!UXF}xg?q?IRfwD=`VIcU<@C%SAzM!YH5_o>3?8l74a|5l> z4SnuQVCM^%&Y@G!uEPuBo|uL)?YP+qMx%6V+QCObdSG7axQIgwF7$`pt!c)-{L60k z`c9K1i`!~1r(RLYqC>(e@4o@6QW^=QvX7?9oYIcb4q;W9xY~2^QJM(4r~2EI@Z!$MxIw_qrP!)!t(G zua^-}ZJ-0e6D=qp7MMn-? zAIR@Gqs?&{NNPKeAD!(fCa77k(YrNiJ5^N+Dwb7D8k{cUkLK(p) z7y0mcp+xcj6BiCoFtqRzq{6nv%UP~(K=8f1Hpoi_o~?$PqCo=`{&c|fx?imx+BI%< zZ4ZFBQ=;R|oP==T$a4D6kZ{Xw8A#07;gie%;Vb_p6|WOqj?o{002*D7+~Hx)1$_+- zMoZ{(@T_-`aM)6~|MuGVF4*S;PX&2BqM#U=N78}SaU$J@4&VyVE{iMlSOmd%RW&na z^V0HH@n#*X>DL-QzTX*^2iHc~$?sGvlxB16H7na{YWHLHe)zjeLyKD{QU`lZME8ds z+qMj1l@^;;hJbg^9O1D{q55eR`vE2RNtW>I1RfP&f1Z#e|? zja;qrO5IfPkV@n5WtQB^LYe35|8|v@aH1Gb=Y$W0)Dr4==#E!PWIU9Fg1>zcVS~rE z!^aX)LnnTSD{x%zCVz2o3y+;fWXGon;r91KecyU>7)d(ONC;RK3-n~}wq*z8Z6&O0 zuiy1;6|8-pAOLmp-?;!q|JBz?9{77OKB@c=q^pl3P7s^h@W4MUd}78WS1;t)Xkfoz z#_8(v9yk&Y*@oW%s)CZ|a2ece9PrUrr1#eapO)j|WkBolK5ZBj#i^D#wAyuYa;tMTJfbE&&DG?9US zWV|th3e3^wa|J<)bwC1VGJx5HGFQHQXqa~; zGESE<9?9~&f%?EceBjda@YV~?LRV+|gviiBkSQQ2p%Z<_xc8wa@P)5jgF7F33Z*4I zpi)IPCg9mblkJrwY9EQ)$VKT^ixUu)7mCebM&iK8xFXkHG>e|Yib(7?n~oXoQmE3b z9E@!1ZH9CRTDLLDk07?yMYPJW(5 zZVL0Eg{6g4kPw^bUOEJ)vbi=Am9oK_-Y%THbqmfv>m;n70x=X?2r>yw7eRm`h2GOQ zglBfYfPsNQ)a!LIyQ;o%a6j_T^0d?=q0>ox zK>`+plntq9s~eSLiXVx5s^q&b#pgjmzwyr0$nmKNrh^TsuKJ5Tw=&UlVn*zJH_?1} z9nP-@kYy!Qsugs0bYShuUaaWpLMA%KbhlayK_-EjAV>?+2e+h)4?&VP^Ny1n#-G%J zMFNX;wbDco0Ae7V;`;MUcfOuD0Ms2uUJH6iJSjto34o#kZD8A_#!yRJj(kU_l^B1Zkl} z3sQk35oB84^u@=mTd)WrNdy@W6GZm5*h~xN0scQbcd_uV6!5kH00002Ut~uvgATl3L4EHC$(1@Gy*1=)(Efk?toR{#n_lX1=yWEG#Tp+1XH7 zWDkySc9M==uY3LeNeCF^yC3hbgo#mvNi3L9vv`P8`BIb-(Nd<5F&I(m_)7DF1BJ)XnklQ*!VGvfXDT(Ya1KV-&bL90CSj=03I0B5F$z?aSS=?PDw#vL`{P_ zKHRqND_LD#-4Ebh>^$~3ON3Iw+{ZZ&D=T}y5CVKSz!&X$fLbgDs~X15@C}hP1{T(# z&UyE;eP_@)=nwp4vjfs0UNK#=PQoTM18ZV$8#M*cW0?k$u*fZUEhVDFICwD5kuKNIDNKuQ#j7UxpCCU&4gktBomCI-?>lz!6F0<$~H8#3bJw4k?o{QvhXAwz!{H3`H zd@?#XZbc9U(4c2fOQSUsgb1ea`URLbxCdO@V;m!@7K)E-b$fFWC!inG2g}+ZSx&C4 zuMgC3wyWXd5_GeEL_r_SC&N2X%V0SDOpQZ85Q!Lo#YBu`X>4nYipHQQ(L$_<%ap8$ z?+d<-B-#QDfP_cr(FRMb3ChqyOF}=tkW}I$?v7kl4N;w4Kz~tNh3z%Q5O4~Bx(-yP z{Q^{`{4zWgjdA<;mIgO}SBn~8TuL%9%I_a01`y<2t*Yh9BKrAQRXZ6ow)$wFEXtHY z^9g`6PleAIQW*|;$MB~|XF|d!D7Mf~NKdOPzs_fX z?e$Xlobv6sJf)BE7!q#)Wo2c5dTMN}%*;$q0Re<#+Q_>MJHqhJ{vlVD3^r9Wjg6) zcKAIYYisLp5+_KXf%0?vjkP%7TcV%H_vfoTpH+|`{}R;xE#da+&CO$WjgIAtuTOmq za-~ZC;KITJO5u)Bbo+J?O6fc!;W5`V;x`2xd3K-aH46)iQY;DECW#-g+;Ey&aPpIz zR(h$zc1E=LZiMLag6>DCdF~umH1}O%d4f&Q*F?bCuxslhPJ}zlC>G=;tyY$}@{y_1 zRw-=A{uB*-!7aUA>rs`6##}|=irsUGaWxtuQXjsCrduw5n1k;KRS z2^P78Z=Ek&MO5|o{^oN&C~Q;&1kBaCsu$c~lJ#_0}riCKZU!7aI2_KD|k-jUW??Qq!}{JvonP=^$ez1J(R zrKP*0JGNg)ZpKTlTqazj(7b(1HSdcHZEz|2nB#T zm#T!V!i)qm_f|`LPVMkE+PgWa91{#YyI0;ix8WU38%vtc&BijfYP8X>raoar4UZrm zmvtSW6#!Z?-2*w1pkvCYrHy=lce*1;yx*r)Ss=#A2mN z@#bX?tf-S<=INEEkp(0gRSQH1!VxeUw|1gv5Of69We6{N*~>%ibX$#tP^LpHslbj-RCdin{fsh?Wd`JU_tg4$8>(*GbBIWj_foE z_FH-#%<_P>--6F(~;`#MDEj8i16UW$f z*@@C4g;afA1OI9_yM+r|_+sDN@i8hp*w|mh+89+pQI_s%*MtB+1f`NMnsC1Qy>#g#5>XfVx;>oPiK_0{lL?A`Y+gq1Ackfv2u?%6U9$R6VPfE&P&upc-?Mb(m@4`H(_vODE`>aut8EPRb$c78*D+*>ARmJ_ffcy73eQdY)L-@MR5G~^z;;4 zjLdKoW%6dbGo(!Sjr_idZ+iZ58hR*9^*3L^D2LLu(@pmoTLKZ~GkE@VNZB*pg%XUT z0^&FX@BR7ZAr*|%_eBJLnv$S{?u!dtttoPE6Z7=+G=Nb}izZ&qVtV>s4Y%9~KDF#5 zk|{!#=t}tvM;(x<=ztdoo^HMYbq0j96$_ARl>+mDB^6CE&;;z@5yHykZVFL*X1+8K z>XW?ylw|xzP1tv$e{XZalHXVT2bNtr#&aM+y0hIImn-08Zsw{Y9)9vKCKhVSoWXbZ zOj^kyCLMr{rVv#4R^Rm;F??hGjW-yxfg$JfK~Bgze|OOQuetr(l+KpUgiuU(q_MMp zYBSK=4>;Akb~axUr5_x;pXqMU`29z*PV?Ac%|MzSJyCEb}GhPjH`i3MUYF1n+sgxJ>W^S zjI(CHl#u@S{?D+_XAh4P=XjDyuA0njg}Vy>w9;L#Ws@&Txr47l8s)yfms(&wxp0;W zLRK}s>Cn3qh95OZ7&j;qUgu9`40laaoJg-x#FNo!gy}DW1bc&GW~zoLdFzs)niTGl zkPPwB4RUikp0>P;AMC8hGbQCpv95l1hG!dN6w@dyxqI?OKe3YjDrThY3c&_SdOS$? zu(CH$=luPKS?uN$r_sX9Eh#f2{q}QxGTN~&l&K|%nmMsI4z>zqR#rL|h44}3I*m<2 z!ePuo9H649vmjwKJ&6!=4MqHxSfEuU@JtrWOpD9DGD1N%`BH@B_(P+lmQGuvL(s>9z!`~GE|&Vuy&)N3hNOe*A{z>ku=PO{kea`t#Le!m$nxiQ;8a6vK-qTw-=}0N+CWkA z{fV?OD$2^=3FnQbY>Wh2<@uM6(`?gwPZWXik&%%nw~Arv{=GZDe-D2Ren#oCf}&3h z<$L&~7)Axy55R^_(FMVtC9eUJ-N)@+z7eBIcJ}ax(6ppQASn!s)L6oH5ay-~$Q*{( zcnnyOeBQswZ%dSJ!01}CR}vk9sKw4cORHRoht)K@LishhumyPf@no} znm_dj?;1IsK2ZyUJ@XLuxf#Of2zYkWZrEW(vJ4C)+kF37C7qn@fs~XKb>hO=Px5WM zKZ8Ywj{gn}iE2d)fsiaVKAF~FwU|5@TL;=nLd^B+r3VLQBHl5i;+dpjGL6gl3{2q2 zZCwTXrdGV}r$B1Vo;6xmkgAgSAJTC)xebPXs9E_|WJy%qNh)TfugBIVj78Zco0s61 zhjT&i57Ljj^{PXV+sl8(n3KE&7bsR%wm~YdE!}B!pwQ@7M)Qk1=hLE+?(9DvV-yP7$EkObA{D`{!P!%Mm)-Th-^T_gd(heJWc zfJg?Tcje;1+eO}pnFqQ;mSR=?EoDScw_!3xD5pVuBwy_7 zl}#xDEv4@+IZ;{S6Qgn+s7ZhxYrh(nVzSx_*GvE4tAPZidozt+iIJ!3X#4OUEqv?4 zqIj~9)$RZVt~ov;{tMxNPG<7BNFF=u`eI+B?5Y^$VOma2S|Mmw+O?8ZyJ z|7K6n*wrPRA%wn&tCR-9IigBkI4C1h^`#VnR`*7ysxqjylL|S+z|;KXNbcWD)bq6c zdg3WkHO7Y=OD6Bp)TD|_n3)x6Z*yPqO5$C>$xlRzZ)ay%d(&v+?`BXDRCbIgkt7y; z2m~In?H|oW?hV_Y5L>n=g9Q=$ZAgW`8+HZQ)^H)UEPF&Csmol;YMp+w-2hZryjFyZ z{w0f2Ua%#k3){Kdr1bOtT0B+0ySOgkVI;%84|evRASjV=viPxwVQ3v+vmlDsA5Hxv zXX)&cEjbAmcF|t6Uqie69@_U{txYTOLhhndhS(|cjJ~XvR|OE`U=0Fz+S=MADFbdc zFECT~1XWtw9p0>f9(hzQyA>@2umU}x~0 zz<5kxCm`Yb&#rJ+EiDS}#*$o7$_UHei_viHfIQnQ;uHQI2@^6CCNGw9 zppa&Sd-D}u*zO28;?wf3_NM$LDZFAAx-=Ss`w6t37NHiNmlwRQu5LeMWy4pE{V&UD zjyNKL-b)*v_!*PEVPA#NEafRb1&qVfAr%a+biN*NA9O#18CG4SP;aFg^eoFpizs+ z%~P;juC)M_ou#ZttGqDHOWFtB`L^l#HA%rH{*q>`Pn-X(qI|XFqa#kNT>y*S9j$;$dwXuz z0)5G_3?>}Vh!C{4wXYGm@9qH`tYgJ6eMv)uht>Aq3)IHRrtygDGVH?339LrS#ov{_ z*R|GkLOHMtxAA2Z(Uq6N>!m6bu?}fli|lH+-N%qHy&NEp8luV)!^h8bxdqEY$RO!f ze~k2^W1&~?S1u6^iW_w_7lCHlnGbTL3njalO-Oq0sEx_29tR%S*@fW&+bo zqH~gSpS#sD2!>%c4t@ux#Lp;~#+hdM*IKK?SFxqK-KkkunpgiwI7^E&s5s@~ZPM{Y z0Tg>4_x&5|vv9XZX<*#zZD)g9`s4lTwbuE_xLY>XNJrPD3u7yaY15q}N^t6+e(_eh zW2@w09}dgO7y+m4{zoqgE4?fW#;dOKd}6WKlHoK4h)|LwhT8u1xi7_M zG7rZQFrF?M#-L-^3p|Byx!ZX0!Q0&2>WGl+Vzm~AmH3(pYl2HxMR*&P$6+PdXbd=Fz=>Vy_iJ_)bMZi-z2`w_f5dE99&Pr0Ev zZP=TN=a{>y+!f~R!Sl~Er2Nlb0*6!oD{{Vyd|PygY^9=h0iF1{on=xp>+PuXc0UBC z&HoPR_`bv*+kMpRpwIk1z)hXZs#Uj^rXw}z$eUikukiX%v~vw<#0^fKWH4Pg{9zP& zrRVo`migFCe#Y~Boh9Asu`Pvn{bTn^f2muTVr@095*8t}xRg39i!^L1?5>difv1?9 zpHCL>(LUG2LrN=RSMJ{%cU!v zR$t_Pc;c&_t~fN~m&8BJ{nLM^O#X#^6eXz;(ITumY@_FUtNERkGvEU_!@EGxd z|E@^cP}(NCCUq!A<|0`v^-B`*Iu;@zjdEr|*>SvXFf!>Qw9lNAXLO%S{QbLX)8cjM z<|%;Eo<#{sCJ{(IOcklv_wW6>sV7ffM`7XL7aO`MW8ToL4G}ClalZpa%Cls}bJ&t+ zv#6J1j5s0@5fQ?KC{qY*AAWm#WBG&V=;*iyX*^G!ynkJKSP?L`@mZ3K#bwsMrmG7^ z*E;tKEu*=hBe$d-(0K`&r3B=O?ubGvwGCHa9Uu zM#<_6<_SaS&|F^>q>rgKc6N8i5pdofK3d6CK#zD%hQlLN$g1R>4=HbXTb|N!J(?a6 z*vVt}k`TyXK8=!Hfs%kZkf%&`9J0%rwL`02hEsqwp)ejueV7ZT)l~aw-1-7(LwXa@cYMAqMyU_&t~Sr=4Joud{g*PRdYZ z&JF<-iJY`vmKvixG2{KYvalx`JT z!ulVc?hE|ryu1#=T=GnStT;SBzkp1H=!|SQCt@aAz=8AOQ1}2QMev(HB;@(0evZsO zvPn%(feBxsO{HcHlXqC5x!_Q!=r-up(w(K7lb)z{uT285s8`Ac*i@ibjrjTZ9tC?nk22o0K#*gp2@!!hV!lY3=@s|@CNJ6zd??EJa ziE)?Zrm>u2p&<^O?u1B4F6fXEQQp3B!~RK848;+@`@dL|CF!?Sxf-Lp+8RfZ_du5i@#2NtrCMUw?X#={ilWGo|__TrA1LawN{KV!@eLg2GxSRs{~ad zeRV>AGg+o_b5q}g!~E$aNq};$n)xq@*6KC0+!OWJ)pwTZ_L?C$M3-4J!z4&fB7o?H z05j_K?d{QoT!E&hCM+-i5+ptu=QSt8CmC8no!zr#7D4}XtUH1TJE*c-5{n?eb`WwV z(j6^kty#=y=ZD4cs6}*STBS<#f|fla%TOL6&n_e~^Yg`jzTGL;IXj3x{f1D-4%dBn z{*~46bPX77QSD(ITRvh0b2%-o|4Igge-)O`aDhBTI@dOkK1VIyUsDL(=fjSLt>EY zqVj0{l-$e1cuKa6n&W4EagX40{r=?g@rGr6^pn=Bc0`@{ynxdw_O)3RMsL<(11^t^ z0)@U{xlx3bsTsm}mA|nUORPazQnggbE5O^yyi2LIzla3Boz4Ysw{YO`>?Z}k(X_Qo zM;MYEa=CK$^HwsSQsG75T5uBX7Jl5QLXflOqn#G=vE?lfluI*O8$22la$@`ylQQ(Y zrZ*@&@*%aW&60{dGvz98h{U-kl&5me)Gz_Fp@6sDA|#;1Vk-6um(I>)&*a~O$^7+` zV~+?ViN8yHz(BTgz6w!GI^WL$S9_uba|Td2q)b3^-rab;pW<3n-7w|f-GJSQ`OY3} zJjf_!SQn&(vC=z`!N0WV=`&QAojm~I0F9jOA$vB6GvdnyDxvg)9j)v9F~8WltL&5d zJ|4dNym*l1=H~u=`_pG8NLX}{zE@C|1+t&1N)=1XX>@Kd?)Lh@bdC@r*PcEW z$?Lt=GXjw;z*LIRsu`{(0AjHdWdbz?f4iQc;c%{VZ{*>j6)M6|(d#B>T2PCyIFemg z7$-5B>-oy(-*0#HUhpuuvQ(s6nF+qtf(5`O_BrwbqHpX*qxQ!pBK-Vgw4X4~NcVSQ-fc4oQo_t(p*iWf31@%M6ybPJ&Zm%A^n|cDE!v_GjW*YJ63{c{Mt_}UBg1}&Z z5nwvqNjA2oXaeK$-H7Se5bteYgyT614CiGYs`ElgYN37714g_*xsI))%iYDTr>PnP zA!S_@`8+O8PUsXtf2r{C@go&X<9e}5=S8_waPi+&7nm6{!iZ&6c$4;QA|&4S3SExw zv-ed=(MT2$q7iC$@3C276R#$&?}Ot)a3aei8eB=Ua>UFwnzfW(#Z%fwcM8;%_&)#0L@x=PY|rk{ihyHgPq>Xg8LGmKy!_~JH0aXaYO`CkOj#OR_+WgYd zthyyjWa{fnasDHE?i1PPL#V zU|uQtn2Hm7{y@kr-=i>jx+gTMnbr0E#gmnd!%UQ1O1}PQuw7NWRD#FsUVGpB<&u(@ zJDmNSyr@oHYx{JC-;rezOg1(mU~zTvATDbI>vvD5+eT-nkYTSI-XHfrU}!HzI9iaA zY*j6BB#X=89bTT{O!t~CF`^qT;DNq`l5=ii0v!3=zv7)^%^CIIN~pR)68WR zw~wIQO@;2n;<;5TmYQ-8;HFEag^@xo&sn1MXCj+F(Z3*&dU?f!F$=*GO|`X!u{wI0 zwdX~uW7hhoB66kfmD(|a5-Kf)I`$)X4TB{U{(x4NJ0TnvQ@w7s^kl|7@x8Pn=(21{ zz|a>XxH+c72Bus{_O-LZCIu+rugV1uXbdvtTIZ=gD9wVcX)}It)~B?2qXABX(w}fo-74KG+-k=y-MGn2p_m6$X)Z(tP&MYap+dI0 zfA_w3d-n|_a5$H&=8s%lIHa{8r&J^@DKTI7RR#L_q;Hkn)y< zPPeJ!x-$E#D=IjZsUlguwwFH`@u^NDm>p{*HJ6u1B?mnyDJDICJ|B^Y`nXX1yOa1h z4kb!;NB?=(xaF8}!{m{io;%G9$SX%n<>xjvU4=#z%RqPgP#{er7aR262~1kg7Q&sS zLxU~DL6ZJrSH4(84=XQaGhB@1b;oji@w<(BLN6S?e#*&`aVnK>mi$Ym%$4>a=Aai8 z?jhE@qt?*TN#GZ)ptb!EXx41qPG!LX~cT z*7*7K@Nvlc`Aa3Zg)NPtrDI(0=&s0yc=%+`8M>m}F`S^TP;&DEyfnjNTX$d^}%+Z1wLjOV1vcsth zCO_*4s8kko2VO|oot~M2I0;51GwRLxo#Z9e{!DvgkQkN}!Q#Zqq0}lA&^OQ5vIr5+Ou~VA`4_ z)8Jq6h;-OZvL&i0rdtY(I1orzqwa(AoX$xCO*&{%_a55Kl4%7RiIl}%c;r@qnIFMn zN;w;^C*BF+HXQlwC$okH*l!nkGrpF^vgPB(dZf>Wx4+Am-Pj!#yijVYzG+E8H5tqlgPc zpkCX?=$RX@ST+^Q@V-^ylJS?|qiLc%QBP#Z_{(9BRlde(zELsa58NefjexP&&*eSf zkbqLJwQ8LWN|i|N%syT{d$%hc(K~w%CQeOGyE`Ek)fL=0Sm{BU&<|NUX3r*Ia0p?u zv_bt9+2~Xzz*H@*M`4W0-50RnZ#B-2UJ}J3sU4ObV0$LCDE@Zn|5mhk`af6M#RV$4 zL{L~w!|wS;%sf?!^~>u-f(ek|59vk}f0ZmcV%(P`46AlC^+qA5bYEdAe3cdx9FXCmWED>h_)-MW<-<(ljUt>Klg%diV7P?Ugf?eUw+tB(qua zdpBK1YOE{;n2RBlH1gLF8G5!JSb5&KiTk^s%VnMW-B? z=tm`gO8FKF;n3~0hSI`pz9qxt9+!`}N^2HE(Sk%=x=zEpF7%P^P-7++%FuFE5)}TJ zIi+t?g8>0dYl$TV6=v^IXqg0mrc}Z(F$HwE_VMv=J#pjLzMV5=%tcW6lV)|dRBO>D zqG;6*A0{s^PO61T3dRy=%-f(qNzZ_NK?t%CU#B?u)dw6htLxO&5;~k)h+~D=oJPsS z8b&&V)D&W8(z1>{7WzxU%-6R}2&C{C4K&v%XtAO2;$HLz$KvZAjJzdDZtoJQ_}I)Q z7|v`W8*OpVO2riFlQz|$gU9hfv3}AvYI0>P9u3v}140V@f#hpUN#(Iald4*L+r{-U z?t+8#JzgVf$iX!eny3DFk|g7V$(=qyF*Dv!O@MLK#E&1YF24qFq%=SS=pn1`k|E=8 zxsMa-G^%*YqPjWUjEN>E%BhF9%?wVi5o$@aE!L>YhahpaskPZ-DJw-v_}Bv0xH^VY zQVu2BSMFmzbyqNTLL$S2y?a{W*S_Fw&!_MSuFnLE`i-|jqh|E*l@+%aHBA!22bJbj z@Gxxe27hu4$AM_Fe71ML{+P+*Trvgm3kbMAT^Wf&+%%e=30>$J9yy=J0lM+>$~81m zPlHyZP^`W>WkfgwH2dfJJctA0{L1dL>s|m`>=K%F%B5YIhlc{3JU z9b8>~{o(2~2G`RCtLfQk(ls7lGHj$8ZY+icTA}V~dlf?w3F!HeTv4pgy6LAG!vleC z*~^QreS{jJg8PI}$ZNms0@OhR!5g!8GlCz*|SenuN7X>(cS2d$J9z@&E%&#MvKYrhppzcq(H{z`*lh*k%M7D)2uBR z`gZ}>Lj?nEEY&cM;c}y+C$<^J4esN<^51aZ+tk0oi;D~8nboBM)JF{^QzqHea<)`j z;ChlvJkGdc4$;Dl7IvUCy|(!Fw_2T9j(@c^$Vuey5w|vLl>B_et@II;cutvfCf--$E2G?3;I4}Az#Rhz7K|+xowP#XmgG3;T}M&ib)U~&82fQ zIL8%$RvELri|^UcW)e53WT&wRJ5B=$V()^XW-rxt;BttOUAZvH};i?s7nE!xw}I)CoP zMV>Uxf|sX=c1smgBPpn24|do!UB9Mw!jM-FYpju`4RrBVCU^U_(mLRkvco2`FZqB#o(k>aXLEPCc$keX}S znurnO)E>9IoEGEP{TLT}%-_wR7hpzU?7FuR%IWP`N~3xMmAipcYoMh8G5t?b)3oHBie zayCCPd5NMbEI8K;`_1yqmgJ%ihG9l4l4>XM;x#*`l6Nq$33LS$j8!jj5}651$vGOt zA(#jZ1~1KKlepcYjTGp<7{}-s?sh_U^)Ceo zWRiim>S8jG4cbn`pNl?b6l0yOEno}msW3SXWkre@#>}6d;!e#fL0bTGVr}^kkem5y zedo(vWyi2oq+FQ*_VCs{GMM5AsCZ7X8KZImP+Nw~Cm1K>6c=w*R8XF=6wDQKXrgU6 zLQ|K4Z9d}Wa{MLu{dV3!4nsL&?I_r=aoc<689le0Z@53lnTwXdvXbgk+;gVQNY%m? zkj`8WTj2`=o)CC(jxRA8tJe0`u<=aoF|5|4o0ubcV71eJlpDsB7+=t44QCC z5tBw81EH`?3^fyz!7t3jaZ6@m)3yq+;-=DeeJ)dO6{L?5f#>;wh#mu_UZRGSy*MCJKAu&ODmveuVWkPQ0#Muf zEL{GmbTIKi7Tui9doY(!6L|+7CjXsda^{tF#QghQ5{+S|+${|ieZ&fu^Z7up!gkS@QW;tuzQo_^ENJ64 zq~G%_K8Lj3$Ms}3qS%REFDz}unh2u96<^h5$@u)5Soep8;>Y%B2+iW&2Um-Y>G6|o zlj_Fbd!FiI@Ea2(gTb_3kpCb<9K{G{{wKxlD($xWP)tn=5 zsT?y#Z%BH*a4;5OHabH~iTc@ks6>Q$(X=@1Z z`T*(Qe=YF-ew}8GcItcj6}lp=@Y-|h-cZ}SWsJ|O@b^c1?ckz+62#`VXBzVG;Q4m5 zk6{|+8El&ez2L5=vb?iC@E?QoGERin!ybS8O^Q!|&q;_195H8;YDxWMv}C0>$g}^k z5h&{WwkDj2Y3PudtjoFL9LlH8Zas^Wa(@{6nktCArId%A8w#+!DjFMe;ClWv#=>u- zaRyyVsImjk?FH;6II}E9Wuh8+ju}{Vaaw>U@S7OMQ9u+MM?NltmAMKmQ4>w@JBOh} z5Y$=YQG@g#PyT$w7KRDxnPj*P3JsfivJ8)OJQfuK;TbqA<4BMW+8v#My(h6S=mlxo zaweN0oC;OZ$wIDjQR?vgSF=3z?F(y`=Jhgy@WAK&9F-NvH)Dbl3z}n8(KzkewtfmJocvv{A$_|;3(?Q7DJOvc!w9&yA-n`}v7%r_gEk3nW+D*U!QH~^(( zc!SMq93Hty5;rMEg?0}V5AqJ5B2BUIDm|54P1+|FobSRE+`0vS_1jf#5b+JFS+Bpu zOv=5eCc592F(bi@pqPz=7_(Jdxiqe|PG&w=)go7_77lc_94FJnxGUwq5&d_3!(_V$ zls`auQiZz_7S`E`$tdm&=oXbyPr|rA&?=s9t$eKliEnWxEP}~rU8kOri_ z%>HJbRa`fc7EZ~Ep>HUTjjKUB`t&{_w|h`AOxdI8zOflYEHQqmW~YM@QD< z(C})jcrh9iCBJ>WW97mHAEBkr@JkY~gVU;Xy+qgfXHUUSHJtOMz=ZVc3gaC$v(#6( zYO&O+7?9r&7NZD_b>P@@ZZomQiDRin)! trT@bRUjKi8V1raPl0xPE3Iq6%Fsx}7DS8^mf}CjuD9Wk;8>CIc{tu{wvAqBQ literal 0 HcmV?d00001 diff --git a/static/tabbar/scanCode.png b/static/tabbar/scanCode.png new file mode 100644 index 0000000000000000000000000000000000000000..750f029323ec688765e9994a15d1e96f431a98d8 GIT binary patch literal 11336 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 KMNUMnLSTXdh-Xd! literal 0 HcmV?d00001 diff --git a/static/user.png b/static/user.png new file mode 100644 index 0000000000000000000000000000000000000000..1e0740900d309d96ec0d2f22a8e0bade59f1ff1b GIT binary patch literal 31734 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 TUB5nOuc0W*Ysl5ZEW-W=r()Pw literal 0 HcmV?d00001 diff --git a/uni.scss b/uni.scss new file mode 100644 index 0000000..b9249e9 --- /dev/null +++ b/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:12px; +$uni-font-size-base:14px; +$uni-font-size-lg:16px; + +/* 图片尺寸 */ +$uni-img-size-sm:20px; +$uni-img-size-base:26px; +$uni-img-size-lg:40px; + +/* Border Radius */ +$uni-border-radius-sm: 2px; +$uni-border-radius-base: 3px; +$uni-border-radius-lg: 6px; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 5px; +$uni-spacing-row-base: 10px; +$uni-spacing-row-lg: 15px; + +/* 垂直间距 */ +$uni-spacing-col-sm: 4px; +$uni-spacing-col-base: 8px; +$uni-spacing-col-lg: 12px; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:20px; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:26px; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:15px; diff --git a/uni_modules/android-ble/changelog.md b/uni_modules/android-ble/changelog.md new file mode 100644 index 0000000..3e934d8 --- /dev/null +++ b/uni_modules/android-ble/changelog.md @@ -0,0 +1,170 @@ +## 1.1.73(2026-08-15) +优化用户反馈插件存在的问题 +## 1.1.72(2026-08-12) +优化 +## 1.1.71(2026-08-08) +优化demo +## 1.1.70(2026-08-05) +优化ios 连接 +## 1.1.69(2026-07-14) +修复用户反馈Android的闪退问题 +## 1.1.68(2026-07-07) +优化用户反馈的闪退问题 +## 1.1.67(2026-07-03) +增加 Android iOS 鸿蒙 onIndicate 真实订阅与数据读取功能 +优化 Android indicate 特征判断与回调 +优化 iOS 与鸿蒙 indicate 订阅成功失败和数据回调 +## 1.1.66(2026-06-17) +优化ios 与鸿蒙断开连接 +## 1.1.65(2026-06-15) +优化群里反馈的闪退问题 +## 1.1.64(2026-06-14) +增加Android 鸿蒙 微信小程序扫描通过uuid过滤 +优化鸿蒙onReadData +其它群中反馈问题优化 +## 1.1.63(2026-05-20) +优化ble连接多连接 +修复已知问题 +## 1.1.62(2026-04-12) +1.增加主动读取蓝牙数据 +2.优化Android 分包发送 数据较大的时候 出现回掉多次的问题 +3.优化ios 蓝牙多连接 +4 其他优化 +## 1.1.61(2026-03-18) +增加安卓phy 2m 模式设置 +修复鸿蒙获取信号 +ios 增加扫描通过uuid 过滤 +## 1.1.60(2026-03-17) +1 增加多蓝牙连接 收消息时候回掉蓝牙对应的uuid 信息 +2.增加ios 返回广播中蓝牙的名称 其它端不返回 +3.增加扫描多个名称过滤 +4,其它优化 +## 1.1.59(2026-02-02) +修复鸿蒙端自动连接多次回掉问题 +## 1.1.58(2026-01-20) + 优化ios发送字节数据错误 +## 1.1.57(2026-01-19) +优化蓝牙发送数据 优化数据分包 蓝牙连接 +优化已知问题等 +## 1.1.56(2026-01-12) +优化ios mtu +## 1.1.55(2026-01-08) +优化鸿蒙mtu 设置 +## 1.1.54(2025-12-30) +优化蓝牙扫描与连接 +## 1.1.53(2025-12-29) +优化蓝牙扫描 +## 1.1.52(2025-12-20) +修复安卓编译错误 +## 1.1.51(2025-12-19) +优化 +## 1.1.50(2025-12-19) +优化连接 多端错误码同步等 +## 1.1.49(2025-12-18) +优化 +## 1.1.48(2025-12-18) +优化鸿蒙蓝牙扫描与Android 连接 +## 1.1.47(2025-12-17) +优化 +## 1.1.46(2025-12-15) +优化鸿蒙 +## 1.1.45(2025-12-09) + you hua ios connect +## 1.1.44(2025-12-04) +优化鸿蒙发送 +## 1.1.43(2025-12-04) +优化Android 蓝牙权限 +## 1.1.42(2025-11-23) +优化 +## 1.1.41(2025-11-19) +优化 +## 1.1.40(2025-11-18) +优化ios +## 1.1.39(2025-11-18) +优化 +## 1.1.38(2025-11-15) +优化链接 +## 1.1.37(2025-11-14) +优化鸿蒙端 +## 1.1.36(2025-11-11) +优化 +## 1.1.35(2025-11-11) +优化 +## 1.1.34(2025-10-25) +优化蓝牙扫描问题 +## 1.1.33(2025-10-24) +优化 +## 1.1.32(2025-09-17) +优化 +## 1.1.31(2025-09-12) +优化 +## 1.1.30(2025-09-11) +增加微信小程序 +## 1.1.29(2025-09-01) +增加鸿蒙 其它优化 +## 1.1.28(2025-08-31) +优化 +## 1.1.27(2025-06-06) +优化 +## 1.1.26(2025-05-30) +优化 +## 1.1.25(2025-05-22) +优化 +## 1.1.24(2025-05-20) +优化 +## 1.1.23(2025-05-20) +优化 +## 1.1.22(2025-05-18) +优化 +## 1.1.21(2025-05-10) +优化 +## 1.1.20(2025-05-10) +优化iOS端 +## 1.1.19(2025-05-07) +优化 +## 1.1.18(2025-05-07) +优化 +## 1.1.17(2025-05-06) +优化 +## 1.1.16(2025-05-03) +优化 +## 1.1.15(2025-04-30) +优化 +## 1.1.14(2025-04-29) +优化 +## 1.1.13(2025-04-29) +优化 +## 1.1.12(2025-04-22) +优化 +## 1.1.11(2025-04-21) +优化 +## 1.1.10(2025-04-11) +优化Android蓝牙 +## 1.1.9(2025-04-10) +优化蓝牙 +## 1.1.8(2025-04-08) +优化低版本不申请定位权限问题 +## 1.1.7(2025-04-07) +优化 +## 1.1.6(2025-04-04) +优化 +## 1.1.5(2025-04-04) +优化 +## 1.1.2(2025-03-18) +增加ios +## 1.1.1(2025-03-17) +优化 +## 1.0.9(2025-02-28) +优化 +## 1.0.8(2025-02-11) +优化 +## 1.0.7(2025-01-03) +修复编译报错问题 +## 1.0.6(2024-11-19) +修复上次问题 +## 1.0.5(2024-11-19) +修复uniapp 问题 +## 1.0.4(2024-10-08) +修复偶现链接失败的bug +## 1.0.3(2024-09-26) +修复已知bug diff --git a/uni_modules/android-ble/encrypt b/uni_modules/android-ble/encrypt new file mode 100644 index 0000000..efbd413 --- /dev/null +++ b/uni_modules/android-ble/encrypt @@ -0,0 +1 @@ +Ðúñÿô,ØÂtµ ÿ&À‘qØÜ:úSK�'«Äîv–Ç,¨” òøFҳ›vQ�½P•ÌN�Ǯ'_hÙg­47C·CÈTühjI›:žÄX~tˆėt0D©2§ÌiáÕ³ Óäy\d°ÁÀ%ý�óÆ؟ŒÏM@t*¾ëúòQã?ÿµsŠÒIVÉ%P \ No newline at end of file diff --git a/uni_modules/android-ble/old.md b/uni_modules/android-ble/old.md new file mode 100644 index 0000000..142d3f6 --- /dev/null +++ b/uni_modules/android-ble/old.md @@ -0,0 +1,126 @@ + + + +### 开启服务消息通知(旧) +### onNotityReadBleData +参数1 通知服务uuid + +参数2 通知属性 uuid + +参数3 true 开启通知读取 false 关闭通知读取 + +参数4 回掉结果res.type 为0 表示通知数据 1000 表示订阅成功 1001 表示 订阅失败 + +uniappx +~~~ +lib.onNotityReadBleData(lib.getSericUUID(), + lib.getNotityUUID(), + true, + function(res:MyApiResult){ + if(res.type==0){ + console.log(res) + } + + } +) +~~~ +uniapp +~~~ +lib.onNotityReadBleData(lib.getSericUUID(), + lib.getNotityUUID(), + true, + function(res){ + if(res.type==0){ + console.log(res) + } + + } +) +~~~ + +### 发送数据(弃用) +### writeDataToBle +参数1 服务uuid + +参数2 写入属性uuid + +参数3 16进制数组 + +参数4 写入回掉 + +uniappx +~~~ +var b:number[]=[0x55,0xff,oxAA] as number[]; +lib.writeDataToBle( + lib.getSericUUID(), + lib.getwriteUUID(), + b, + function(res:MyApiResult){ + console.log(res) + } +) +~~~ + + +~~~ +var b:number[]=[0x55,0xff,oxAA] as number[]; +lib.writeDataToBleWithType( + lib.getSericUUID(), + lib.getwriteUUID(), + b, + 0, + function(res:MyApiResult){ + console.log(res) + } +) +~~~ +uniapp +~~~ +var b=[0x55,0xff,oxAA] ; +lib.writeDataToBle( + lib.getSericUUID(), + lib.getwriteUUID(), + b, + function(res){ + console.log(res) + } +) +~~~ + + + + +### 发送16进制字符数据(弃用) +### writeStringDataToBle +参数1 服务uuid + +参数2 写入属性uuid + +参数3 16进制字符串 + +参数4 回掉写入结果 + +uniappx +~~~ +var d="00FFAABB" +lib.writeStringDataToBle( + lib.getSericUUID(), + lib.getwriteUUID(), + d, + function(res:MyApiResult){ + console.log(res) + } +) +~~~ +uniapp +~~~~ +var d="00FFAABB" +lib.writeStringDataToBle( + lib.getSericUUID(), + lib.getwriteUUID(), + d, + function(res){ + console.log(res) + } +) +~~~~ \ No newline at end of file diff --git a/uni_modules/android-ble/package.json b/uni_modules/android-ble/package.json new file mode 100644 index 0000000..e7ac47b --- /dev/null +++ b/uni_modules/android-ble/package.json @@ -0,0 +1,111 @@ +{ + "id": "android-ble", + "displayName": "Ble低功耗蓝牙uts插件 支持安卓ios 鸿蒙 微信小程序(2025插件大赛三等奖)", + "version": "1.1.73", + "description": "蓝牙 ble UTS 插件 支持安卓ios 鸿蒙 微信小程序,蓝牙扫描、蓝牙广播 连接 多蓝牙、读取数据 发送数据,蓝牙状态监听、连接状态、数据写入 支持GBK编码 格式转换等", + "keywords": [ + "BLE", + "蓝牙", + "低功耗蓝牙", + "多蓝牙连接", + "bluetooth" +], + "repository": "", + "engines": { + "HBuilderX": "^3.98", + "uni-app": "^4.07", + "uni-app-x": "^4.07" + }, + "dcloudext": { + "type": "uts", + "sale": { + "regular": { + "price": "66.00" + }, + "sourcecode": { + "price": "888.00" + } + }, + "contact": { + "qq": "" + }, + "declaration": { + "ads": "无", + "data": "无", + "permissions": " \n \n \n \n \n " + }, + "npmurl": "", + "darkmode": "√", + "i18n": "√", + "widescreen": "√" + }, + "uni_modules": { + "dependencies": [], + "encrypt": [], + "platforms": { + "client": { + "uni-app": { + "vue": { + "vue2": "-", + "vue3": "-" + }, + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "vue": "√", + "nvue": "√", + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√", + "alipay": "-", + "toutiao": "-", + "baidu": "-", + "kuaishou": "-", + "jd": "-", + "harmony": "-", + "qq": "-", + "lark": "-", + "xhs": "-" + }, + "quickapp": { + "huawei": "-", + "union": "-" + } + }, + "uni-app-x": { + "web": { + "safari": "-", + "chrome": "-" + }, + "app": { + "android": { + "extVersion": "", + "minVersion": "21" + }, + "ios": "√", + "harmony": "√" + }, + "mp": { + "weixin": "√" + } + } + }, + "cloud": { + "tcb": "x", + "aliyun": "x", + "alipay": "x" + } + }, + "extends": { + "sn": "AcF3Eo4MCUoCe6Q513VMY+Y6GBtfln8RTEF0kiwL7ae84o3c+KmUKJlF3Fl7kzYpjilw9Lt9erESBkB/qL2pTBr+xP/aWJP3GzC3oHmsg5e7n6fH4in9Mg2quSV5DOseKObFgIDddAiirAi++uXYJy9ElBlBC4WQH+OGw7UqVtbc7x7lQ2LMEh2xOw1nEFrTThc5TaNi6Mr9Jm5bOr2GRx0hTCIW8WSummY7Cs5/nELcJXEBegufNwHv62lF9WBaGoUKwYLGxEkCQDmCgX/yyA==" + } + } +} \ No newline at end of file diff --git a/uni_modules/android-ble/readme.md b/uni_modules/android-ble/readme.md new file mode 100644 index 0000000..d7bf662 --- /dev/null +++ b/uni_modules/android-ble/readme.md @@ -0,0 +1,1240 @@ +# android-ble + +`android-ble` 是一个面向 `uni-app` / `uni-app x` 的 BLE 低功耗蓝牙插件,支持 Android、iOS、鸿蒙、微信小程序。 + +插件市场相关资源: + +- BLE 插件:`android-ble` 支付多端 安卓 ios 鸿蒙 微信小程序 +- 经典蓝牙 SPP 插件:[安卓Spp经典蓝牙插件](https://ext.dcloud.net.cn/plugin?id=26830) +- Ble服务端插件[Android ble低功耗蓝牙周边服务蓝牙服务端](https://ext.dcloud.net.cn/plugin?id=22510) +- `uni-app` 示例工程压缩包:`bt_uniapp.zip` +- `uni-app x` 示例页面:`App.uvue`、`pages/Multi/Multi.uvue` + +## 功能概览 + +- 支持 BLE 扫描、停止扫描、扫描结果过滤 +- 支持连接、断开、自动重连、连接超时设置 +- 支持扫描服务与特征值、自动识别可写/可通知 UUID +- 支持通知订阅、indicate 订阅、主动读取、RSSI 读取、MTU 设置 +- 支持十六进制字符串、数字数组、`ArrayBuffer` 写入 +- 支持分包发送 +- 支持多蓝牙连接场景 +- iOS 支持按服务 UUID 获取系统已连接设备,并接管到当前 `BleLib` 实例 +- 支持监听系统蓝牙开关状态 + +## 平台支持 + +| 平台 | 支持情况 | +| --- | --- | +| uni-app Android | 支持 | +| uni-app iOS | 支持 | +| uni-app 鸿蒙 | 支持 | +| uni-app 微信小程序 | 支持 | +| uni-app x Android | 支持 | +| uni-app x iOS | 支持 | +| uni-app x 鸿蒙 | 支持 | +| uni-app x 微信小程序 | 支持 | +| Web | 不支持 | + +补充说明: + +- iOS 需 `iOS 13` 及以上版本。 +- Android / iOS / 鸿蒙运行原生能力时,建议使用自定义基座验证。 +- 微信小程序端按 `BleLib` 实例维护连接状态,适合一个对象对应一个蓝牙连接。 +- `getConnectedDevicesWithServices` 与 `redictToConnect` 是 iOS 专属方法,只有 iOS 可以调用,Android、鸿蒙、微信小程序、Web 都不支持调用。 + +## 安装与运行 + +### 插件试用与下载 + +1. 在插件市场选择试用,并绑定目标项目 `appid`。 +2. 下载插件到本地项目。 +3. 在页面中从 `@/uni_modules/android-ble` 引入 `BleLib` 与相关类型。 + +## 快速上手 + +本节用于帮助开发者快速跑通 BLE 标准流程,下面给出 `uni-app x` 与 `uni-app` 双端示例。 + +### 最短接入步骤 + +1. 引入 `BleLib`,创建蓝牙对象实例。 +2. 调用 `openBtBluetooth` 初始化蓝牙适配器。 +3. 调用 `onStartScanBle` 开始扫描设备。 +4. 拿到目标设备地址后调用 `connect`。 +5. 连接成功后调用 `scanServices`。 +6. 调用 `getUUIDs` 查看自动识别出的可用 UUID 组合。 +7. 必要时调用 `setSelectUUID` 切换到目标 `service/notify/write` 组合。 +8. 调用 `onNotityBleData` 开启通知,或调用 `onIndicate` 开启 indicate 订阅。 +9. 调用 `sendData` 发送数据。 +10. 结束时调用 `close` 断开连接。 + +### `uni-app x` 快速上手 + +```ts +import { BleLib, MyApiResult, BleScanResult, WNuuid, WriteData, NotityData, ScanPara } from "@/uni_modules/android-ble" + +let lib = new BleLib() +let firstMac = "" + +lib.openBtBluetooth(function(res:MyApiResult){ + console.log("openBtBluetooth", res) +}) + +lib.onBtOpenStateListener(function(res:MyApiResult){ + console.log("bt state", res) +}) + +let scanPara:ScanPara = { + scantime:10 * 1000, + showEmptyName:0, + btNameFilter:"", + onScanResult:function(res:MyApiResult){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + let scan = res.data as BleScanResult + console.log("scan", scan) + if(firstMac == ""){ + firstMac = scan.device.address + } + } + }, + scanComplate:function(){ + console.log("scan complete") + if(firstMac != ""){ + lib.connect(firstMac,false,function(res:MyApiResult){ + console.log("connect", res) + // type 0 成功 10000 蓝牙连接失败 10001 蓝牙异常断开 10002 表示蓝牙未开启 10003表示无蓝牙权限 10004 表示蓝牙已经连接 10005 鸿蒙虚拟蓝牙地址无效 + if(res.type == 0){ + lib.scanServices(function(serviceRes:MyApiResult){ + console.log("services", serviceRes) + if(serviceRes.type == 0){ + let uuidList = lib.getUUIDs() as WNuuid[] + console.log("uuidList", uuidList) + let uuids = lib.getUUIDs() + console.log("uuids", uuids) + if(uuids.length > 0){ + lib.setSelectUUID(0) + lib.onNotityBleData( + lib.getServiceUUID(), + lib.getNotityUUID(), + true, + function(notifyRes:MyApiResult){ + // type 为0 表示通知数据 1000 表示订阅成功 1001 表示订阅失败 + if(notifyRes.type == 0){ + let data = notifyRes.data as NotityData + console.log("notify", data) + } + } + ) + let writeData:WriteData = { + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + hexStrData:"FF001122" + } + lib.sendData(writeData,function(sendRes:MyApiResult){ + console.log("send", sendRes) + }) + let readData:WriteData = { + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + data:[0xff,0x00,0x11,0x22] as number[] + } + lib.sendData(readData,function(sendRes:MyApiResult){ + console.log("send", sendRes) + }) + } + } + }) + } + }) + } + } +} + +lib.onStartScanBle(scanPara) +``` + +### `uni-app` 快速上手 + +```js +import { BleLib } from "@/uni_modules/android-ble" + +var lib = new BleLib() +var firstMac = "" + +lib.openBtBluetooth(function(res){ + console.log("openBtBluetooth", res) +}) + +lib.onBtOpenStateListener(function(res){ + console.log("bt state", res) +}) + +lib.onStartScanBle({ + scantime:10 * 1000, + showEmptyName:0, + btNameFilter:"", + onScanResult:function(res){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + var scan = res.data + console.log("scan", scan) + if(firstMac == ""){ + firstMac = scan.device.address + } + } + }, + scanComplate:function(){ + console.log("scan complete") + if(firstMac != ""){ + lib.connect(firstMac,false,function(res){ + console.log("connect", res) + // type 0 成功 10000 蓝牙连接失败 10001 蓝牙异常断开 10002 表示蓝牙未开启 10003表示无蓝牙权限 10004 表示蓝牙已经连接 10005 鸿蒙虚拟蓝牙地址无效 + if(res.type == 0){ + lib.scanServices(function(serviceRes){ + console.log("services", serviceRes) + var uuids = lib.getUUIDs() + console.log("uuids", uuids) + if(uuids.length > 0){ + lib.setSelectUUID(0) + lib.onNotityBleData( + lib.getServiceUUID(), + lib.getNotityUUID(), + true, + function(notifyRes){ + // type 为0 表示通知数据 1000 表示订阅成功 1001 表示订阅失败 + console.log("notify", notifyRes) + } + ) + lib.sendData({ + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + hexStrData:"FF001122" + },function(sendRes){ + console.log("send", sendRes) + }) + } + }) + } + }) + } + } +}) +``` + +### 自定义基座 + +1. 在 HBuilderX 中执行云打包并制作自定义基座。 +2. 基座制作完成后,运行到手机或模拟器。 +3. 选择运行到 Android App 基座,并选择自定义基座。 +4. 如果之前安装过旧基座,请先卸载旧版本后再安装。 + +### iOS 蓝牙权限配置 + +iOS 端除了引入插件,还需要在项目 `manifest.json` 的 `app-ios.distribute.privacyDescription` 中配置蓝牙用途说明,否则首次访问蓝牙时可能不弹权限框,系统设置里也不会出现应用的蓝牙权限开关。 + +参考配置: + +```json +{ + "app-ios": { + "distribute": { + "privacyDescription": { + "NSBluetoothAlwaysUsageDescription": "应用需要使用蓝牙扫描、连接和通信外设设备", + "NSBluetoothPeripheralUsageDescription": "应用需要使用蓝牙扫描、连接和通信外设设备" + } + } + } +} +``` + +说明: + +- 修改后需要重新云打包或重新生成 iOS 安装包才会生效。 +- 建议卸载旧包后再安装新包。 +- iOS 一般在首次扫描、连接等真正访问蓝牙时弹权限框,不一定在应用启动瞬间弹出。 + +## 推荐调用流程 + +建议按下面顺序接入: + +1. 创建 `BleLib` 实例。 +2. 调用 `openBtBluetooth` 初始化蓝牙适配器。 +3. 可选:调用 `onBtOpenStateListener` 监听系统蓝牙开关状态。 +4. 调用 `onStartScanBle` 或 `startScanBleDevice` 扫描设备。 +5. 拿到设备地址后调用 `connect` 连接。 +6. 连接成功后调用 `scanServices` 扫描服务。 +7. 通过 `getUUIDs` 获取自动识别出的可用服务组合,必要时调用 `setSelectUUID` 切换。 +8. 调用 `onNotityBleData` 开启通知。 +9. 调用 `sendData` 发送数据,或调用 `onReadData` 主动读取。 +10. 完成后调用 `close` 断开连接。 + +iOS 已连接设备恢复场景: + +- 先调用 `getConnectedDevicesWithServices` 按服务 UUID 获取系统当前已连接设备。 +- 再把返回结果中的 `device.address` 传给 `redictToConnect`,让当前 `BleLib` 实例接管连接。 + +多设备场景建议: + +- 每个蓝牙连接使用一个独立的 `BleLib` 实例。 +- 可参考 `pages/Multi/Multi.uvue` 的多连接演示页面。 + +## 主要类型 + +### `ScanPara` + +扫描参数,常用字段如下: + +- `btNameFilter`:按名称关键字过滤 +- `fliterNames`:按多个名称前缀过滤 +- `scantime`:扫描时长,单位毫秒 +- `showEmptyName`:是否返回空名称设备,`0` 表示不返回,`1` 表示返回 +- `iosFilterUUIDs`:按 service UUID 数组过滤扫描,当前支持 iOS、Android、鸿蒙、微信小程序 +- `onScanResult`:扫描结果回调 +- `scanComplate`:扫描结束回调 + +### `WNuuid` + +自动识别出的可用服务组合: + +- `serviceId` +- `wuuid` +- `nuuid` + +### `WriteData` + +写入参数: + +- `serviceId`:服务 UUID +- `characteristicId`:写入特征 UUID +- `writeType`:写入类型,`0` 为 `WRITE`,`1` 为 `WRITE_NO_RESPONSE` +- `buffer`:原始二进制数据,优先级最高 +- `data`:数字数组 +- `hexStrData`:十六进制字符串 +- `fenbao`:是否自动分包发送 + +写入优先级:`buffer` > `data` > `hexStrData` + +### `MyApiResult` + +统一回调结构: + +- `type`:状态码 +- `message`:状态说明 +- `data`:返回数据 + +### `NotityData` + +通知 / indicate / 读取回调数据结构: + +- `data`:字节数组 +- `mac`:设备地址,部分平台返回 +- `serviceId`:服务 UUID +- `characteristicsId`:特征 UUID + +## API 清单 + +### 适配器与状态 + +- `isEnabled`:检测蓝牙是否开启 +- `openBtBluetooth`:初始化蓝牙适配器 +- `openBluetooth`:打开或关闭蓝牙 +- `openBluetoothSettings`:打开蓝牙设置页 +- `onBtOpenStateListener`:监听系统蓝牙开关状态 + +### 扫描相关 + +- `onStartScanBle`:新版扫描接口,推荐使用 +- `startScanBleDevice`:旧版扫描接口,兼容保留 +- `onScanDataListener`:监听广播信号变化 +- `stopScanBle`:停止扫描 + +### 连接相关 + +- `connect`:连接蓝牙 +- `close`:断开蓝牙 +- `isConnected`:是否已连接 +- `getConnectMac`:获取当前已连接设备地址 +- `setBtConnectTimeout`:设置连接超时时间 +- `setBtAutoConnectTime`:设置自动连接间隔 +- `cancelAutoConnectBt`:取消自动重连 + +### iOS 专属连接恢复 + +- 本小节两个方法只有 iOS 可以调用,其他平台都不支持。 + +- `getConnectedDevicesWithServices`:按服务 UUID 获取系统当前已连接设备 +- `redictToConnect`:接管 `getConnectedDevicesWithServices` 返回的已连接设备 + +### 服务与特征值 + +- `scanServices`:扫描当前连接设备的服务与特征值 +- `getUUIDs`:获取自动识别出的可用 `service + notify + write` 组合 +- `setSelectUUID`:切换当前使用的 UUID 组合 +- `getSericUUID`:获取当前服务 UUID,旧命名,兼容保留 +- `getServiceUUID`:获取当前服务 UUID +- `getNotityUUID`:获取当前通知 UUID +- `getWriteUUID`:获取当前写入 UUID +- `getwriteUUID`:获取当前写入 UUID,旧命名,兼容保留 + +### 数据通信 + +- `onNotityBleData`:开启或关闭通知订阅 +- `onIndicate`:开启 indicate 订阅并监听设备主动上报数据 +- `onReadData`:主动读取蓝牙数据 +- `sendData`:写入数据,支持字符串、数组、`ArrayBuffer` +- `readRssi`:读取 RSSI +- `setMtu`:设置 MTU,仅 Android 有效 +- `setPhy2MMode`:设置 Android PHY 2M 模式,仅 Android 有效 + +### 调试与线程 + +- `setDebugMode`:打开调试日志 +- `setThreadTypeName`:设置回调线程名 + +## 方法说明与调用示例 + +本节按方法逐个列出用途、参数、返回值与调用示例,并同时给出 `uni-app x` 与 `uni-app` 参考写法。 + +### `isEnabled` + +- 用途:检测当前系统蓝牙是否处于开启状态。 +- 参数:无。 +- 返回:`boolean`。 +- 常见场景:进入页面后先判断是否需要提示用户开蓝牙。 +- `uni-app x` / `uni-app` + +```js +var open = lib.isEnabled() +console.log(open) +``` + +### `openBtBluetooth` + +- 用途:初始化蓝牙适配器,并触发回调告知初始化结果。 +- 参数:`callback`。 +- 返回:无,结果通过回调返回。 +- iOS 说明:iOS 端该方法主要用于初始化和检查蓝牙状态,不会像 Android 一样主动打开系统蓝牙。 +- iOS 回调说明:`type=0` 表示蓝牙已开启,`type=10002` 表示系统蓝牙未开启,`type=10003` 表示蓝牙权限被拒绝、受限或待确认。 +- 常见场景:扫描和连接前先调用一次。 +- `uni-app x` + +```ts +lib.openBtBluetooth(function(res:MyApiResult){ + // type 为0 表示初始化成功 其它值可结合 message 查看失败原因 + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.openBtBluetooth(function(res){ + // type 为0 表示初始化成功 其它值可结合 message 查看失败原因 + console.log(res) +}) +``` + +### `openBluetooth` + +- 用途:按布尔值控制打开或关闭蓝牙。 +- 参数:`on:boolean`。 +- 返回:无。 +- 常见场景:Android 或小程序场景下快捷控制蓝牙状态。 +- `uni-app x` / `uni-app` + +```js +lib.openBluetooth(true) +lib.openBluetooth(false) +``` + +### `openBluetoothSettings` + +- 用途:跳转到系统蓝牙相关设置页。 +- 参数:无。 +- 返回:无。 +- iOS 说明:iOS 端会跳转到当前应用的系统设置页,适合在用户拒绝蓝牙权限后引导其手动开启。 +- 常见场景:蓝牙关闭且需要引导用户手动开启时使用。 +- `uni-app x` / `uni-app` + +```js +lib.openBluetoothSettings() +``` + +- 推荐搭配 `openBtBluetooth` 使用 + +```js +lib.openBtBluetooth(function(res){ + if(res.type == 10003){ + // iOS 用户拒绝蓝牙权限后,可引导用户跳转系统设置手动开启 + lib.openBluetoothSettings() + } +}) +``` + +### `onBtOpenStateListener` + +- 用途:监听系统蓝牙开关状态变化。 +- 参数:`callback`。 +- 返回:无,结果通过回调返回。 +- 常见场景:页面常驻监听蓝牙状态变化。 +- `uni-app x` + +```ts +lib.onBtOpenStateListener(function(res:MyApiResult){ + // data 为 true 表示蓝牙开启 false 表示蓝牙关闭 + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.onBtOpenStateListener(function(res){ + // data 为 true 表示蓝牙开启 false 表示蓝牙关闭 + console.log(res) +}) +``` + +### `onStartScanBle` + +- 用途:新版 BLE 扫描接口,支持过滤条件与扫描完成回调。 +- 参数:`ScanPara`。 +- 返回:无,扫描结果通过 `onScanResult` 返回。 +- 常见场景:绝大多数新项目建议优先使用该接口。 +- 补充说明:如需按服务 UUID 过滤扫描结果,可通过 `iosFilterUUIDs` 传入 UUID 数组,当前支持 iOS、Android、鸿蒙、微信小程序。 +- `uni-app x` + +```ts +let scanPara:ScanPara = { + scantime:10 * 1000, + showEmptyName:0, + btNameFilter:"", + onScanResult:function(res:MyApiResult){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + let scan = res.data as BleScanResult + console.log(scan) + } + }, + scanComplate:function(){ + console.log("scan complete") + } +} as ScanPara +lib.onStartScanBle(scanPara) +``` + +- `uni-app` + +```js +lib.onStartScanBle({ + scantime:10 * 1000, + showEmptyName:0, + btNameFilter:"", + onScanResult:function(res){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + var scan = res.data + console.log(scan) + } + }, + scanComplate:function(){ + console.log("scan complete") + } +}) +``` + +### `startScanBleDevice` + +- 用途:旧版扫描接口,保留给旧项目兼容使用。 +- 参数:扫描时长、回调函数。 +- 返回:无,结果通过回调返回。 +- 常见场景:已有老代码迁移成本较高时继续使用。 +- `uni-app x` + +```ts +lib.startScanBleDevice(15000,function(res:MyApiResult){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + let scan = res.data as BleScanResult + console.log(scan) + } +}) +``` + +- `uni-app` + +```js +lib.startScanBleDevice(15000,function(res){ + // type 为0 扫描成功 10001 表示无蓝牙权限 10002 表示蓝牙未开启 + if(res.type == 0){ + var scan = res.data + console.log(scan) + } +}) +``` + +### `onScanDataListener` + +- 用途:实时监听扫描过程中的广播变化与 RSSI 数据。 +- 参数:`callback`。 +- 返回:无,数据通过回调返回。 +- 常见场景:需要显示信号强度变化或原始广播数据。 +- `uni-app x` + +```ts +lib.onScanDataListener(function(res:MyApiResult){ + let data = res.data as ScanRssiBR + console.log(data) +}) +``` + +- `uni-app` + +```js +lib.onScanDataListener(function(res){ + console.log(res) +}) +``` + +### `stopScanBle` + +- 用途:停止当前 BLE 扫描。 +- 参数:无。 +- 返回:无。 +- 常见场景:页面离开、用户手动停止扫描、连接前停止扫描。 +- `uni-app x` / `uni-app` + +```js +lib.stopScanBle() +``` + +### `connect` + +- 用途:连接指定蓝牙设备。 +- 参数:设备地址、是否自动连接、回调函数。 +- 返回:无,结果通过回调返回。 +- 回调 `type` 说明:`0` 成功,`10000` 蓝牙连接失败,`10001` 蓝牙异常断开,`10002` 表示蓝牙未开启,`10003` 表示无蓝牙权限,`10004` 表示蓝牙已经连接,`10005` 表示鸿蒙虚拟蓝牙地址无效。 +- 常见场景:用户点击扫描结果后发起连接。 +- iOS 说明:若你希望控制应用退到后台后,连接成功、连接断开、收到通知时系统是否弹出唤回应用提示,请在 `connect` 前先调用 `setIOSConnectNotifyAlertEnabled`。 +- `uni-app x` + +```ts +lib.connect(device.device.address,false,function(res:MyApiResult){ + console.log(res) + // type 0 成功 10000 蓝牙连接失败 10001 蓝牙异常断开 10002 表示蓝牙未开启 10003表示无蓝牙权限 10004 表示蓝牙已经连接 10005 鸿蒙虚拟蓝牙地址无效 + if(res.type == 0){ + + }else{ + + } +}) +``` + +### `getConnectedDevicesWithServices` + +- 用途:按服务 UUID 查询 iOS 系统当前已经连接的 BLE 外设。 +- 参数:`string[]`,传入目标设备对应的服务 UUID 数组。 +- 返回:`MyApiResult`,`data` 为 `BleScanResult[]`。 +- 平台说明:只有 iOS 可以调用;Android、鸿蒙、微信小程序、Web 都不支持该方法。 +- 返回说明:返回结果中的 `device.address` 为 iOS 外设标识 `identifier.uuidString`,后续需要原样传给 `redictToConnect`。 +- 常见场景:App 重启后恢复已连接设备、需要接管系统层已保持连接的外设。 +- `uni-app x` / `uni-app`(仅 iOS) + +```js +var serviceIds = ["FFF0"] +var res = lib.getConnectedDevicesWithServices(serviceIds) +console.log(res) + +if(res.type == 0){ + var list = res.data || [] + if(list.length > 0){ + console.log(list[0].device.address) + } +} +``` + +### `redictToConnect` + +- 用途:把 `getConnectedDevicesWithServices` 查到的已连接 iOS 外设接管到当前 `BleLib` 实例。 +- 参数:设备地址、回调函数。 +- 返回:无,结果通过回调返回。 +- 平台说明:只有 iOS 可以调用;Android、鸿蒙、微信小程序、Web 都不支持该方法。 +- 调用前提:必须先调用 `getConnectedDevicesWithServices`,并使用其返回结果中的 `device.address` 作为第一个参数。 +- 回调 `type` 说明:`0` 表示接管成功,`10001` 表示设备已断开。 +- 常见场景:业务层拿到系统已连接设备后,继续调用 `scanServices`、`onNotityBleData`、`sendData` 等插件能力。 +- `uni-app x` / `uni-app`(仅 iOS) + +```js +var res = lib.getConnectedDevicesWithServices(["FFF0"]) +if(res.type == 0){ + var list = res.data || [] + if(list.length > 0){ + var deviceId = list[0].device.address + lib.redictToConnect(deviceId,function(connectRes){ + console.log(connectRes) + if(connectRes.type == 0){ + lib.scanServices(function(serviceRes){ + console.log(serviceRes) + }) + } + }) + } +} +``` + +### `setIOSConnectNotifyAlertEnabled` + +- 用途:控制 iOS 端在应用进入后台后,连接成功、连接断开、收到通知时系统是否显示唤回应用提示。 +- 参数:`enabled:boolean`。 +- 返回:无。 +- 默认值:`true`,即默认允许系统显示相关提示。 +- 生效时机:必须在 `connect` 前调用;连接发起后再修改,不影响当前这次连接。 +- 平台说明:仅 iOS 生效,Android、鸿蒙、微信小程序为空实现,用于保持多端调用一致。 +- `uni-app x` / `uni-app` + +```js +lib.setIOSConnectNotifyAlertEnabled(false) +lib.connect(device.device.address,false,function(res){ + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.connect(device.device.address,false,function(res){ + console.log(res) + // type 0 成功 10000 蓝牙连接失败 10001 蓝牙异常断开 10002 表示蓝牙未开启 10003表示无蓝牙权限 10004 表示蓝牙已经连接 10005 鸿蒙虚拟蓝牙地址无效 + if(res.type == 0){ + + }else{ + + } +}) +``` + +### `close` + +- 用途:断开当前蓝牙连接并释放连接状态。 +- 参数:无。 +- 返回:无。 +- 常见场景:页面卸载、切换设备、手动断开。 +- `uni-app x` / `uni-app` + +```js +lib.close() +``` + +### `isConnected` + +- 用途:判断当前对象是否已连接蓝牙设备。 +- 参数:无。 +- 返回:`boolean`。 +- 常见场景:发送、读取、订阅前做前置判断。 +- `uni-app x` / `uni-app` + +```js +var isconnect = lib.isConnected() +console.log(isconnect) +``` + +### `getConnectMac` + +- 用途:获取当前已连接设备地址。 +- 参数:无。 +- 返回:设备地址字符串,未连接时通常为空字符串。 +- 常见场景:业务层记录当前连接目标。 +- `uni-app x` / `uni-app` + +```js +var deviceId = lib.getConnectMac() +console.log(deviceId) +``` + +### `setBtConnectTimeout` + +- 用途:设置蓝牙连接超时时间。 +- 参数:超时时间,单位毫秒。 +- 返回:无。 +- 常见场景:外设连接较慢,需要调整默认超时值。 +- `uni-app x` / `uni-app` + +```js +lib.setBtConnectTimeout(12000) +``` + +### `setBtAutoConnectTime` + +- 用途:设置自动重连的时间间隔。 +- 参数:时间间隔,单位毫秒。 +- 返回:无。 +- 常见场景:需要控制自动连接重试节奏时使用。 +- `uni-app x` / `uni-app` + +```js +lib.setBtAutoConnectTime(12000) +``` + +### `cancelAutoConnectBt` + +- 用途:取消自动重连。 +- 参数:无。 +- 返回:无。 +- 常见场景:用户主动退出当前连接流程。 +- `uni-app x` / `uni-app` + +```js +lib.cancelAutoConnectBt() +``` + +### `scanServices` + +- 用途:扫描当前连接设备的服务与特征值。 +- 参数:回调函数。 +- 返回:无,服务列表通过回调返回。 +- 常见场景:连接成功后必须执行一次,供后续通知与写入使用。 +- `uni-app x` + +```ts +lib.scanServices(function(resSevice:MyApiResult){ + console.log(resSevice) + if(resSevice.type == 0){ + let d = resSevice.data as BleServices[] + console.log(d) + } +}) +``` + +- `uni-app` + +```js +lib.scanServices(function(resSevice){ + console.log(resSevice) +}) +``` + +### `getUUIDs` + +- 用途:获取插件自动识别出的可用 `service + notify + write` 组合列表。 +- 参数:无。 +- 返回:`WNuuid[]`。 +- 常见场景:设备存在多个服务组合时供业务层选择。 +- `uni-app x` / `uni-app` + +```js +var uuids = lib.getUUIDs() +console.log(uuids) +``` + +### `setSelectUUID` + +- 用途:切换当前使用的 UUID 组合。 +- 参数:组合下标。 +- 返回:无。 +- 常见场景:自动识别到多组候选服务时手动切换。 +- `uni-app x` / `uni-app` + +```js +lib.setSelectUUID(0) +``` + +### `getSericUUID` + +- 用途:获取当前选中的服务 UUID,旧命名接口。 +- 参数:无。 +- 返回:`string`。 +- 常见场景:兼容旧项目代码。 +- `uni-app x` / `uni-app` + +```js +console.log(lib.getSericUUID()) +``` + +### `getServiceUUID` + +- 用途:获取当前选中的服务 UUID。 +- 参数:无。 +- 返回:`string`。 +- 常见场景:写入、订阅、主动读取前获取服务 UUID。 +- `uni-app x` / `uni-app` + +```js +console.log(lib.getServiceUUID()) +``` + +### `getNotityUUID` + +- 用途:获取当前选中的通知特征 UUID。 +- 参数:无。 +- 返回:`string`。 +- 常见场景:开启通知前读取当前通知 UUID。 +- `uni-app x` / `uni-app` + +```js +console.log(lib.getNotityUUID()) +``` + +### `getWriteUUID` + +- 用途:获取当前选中的写入特征 UUID。 +- 参数:无。 +- 返回:`string`。 +- 常见场景:发送数据前获取写入 UUID。 +- `uni-app x` / `uni-app` + +```js +console.log(lib.getWriteUUID()) +``` + +### `getwriteUUID` + +- 用途:获取当前选中的写入特征 UUID,旧命名接口。 +- 参数:无。 +- 返回:`string`。 +- 常见场景:兼容旧项目代码。 +- `uni-app x` / `uni-app` + +```js +console.log(lib.getwriteUUID()) +``` + +### `onNotityBleData` + +- 用途:开启或关闭通知订阅,并监听设备主动上报数据。 +- 参数:服务 UUID、通知 UUID、开关状态、回调函数。 +- 返回:无,订阅状态与通知数据通过回调返回。 +- 常见场景:连接成功并完成服务扫描后开启通知。 +- `uni-app x` + +```ts +lib.onNotityBleData( + lib.getSericUUID(), + lib.getNotityUUID(), + true, + function(res:MyApiResult){ + // type 为0 表示通知数据 1000 表示订阅成功 1001 表示订阅失败 + if(res.type == 0){ + let data = res.data as NotityData + console.log(data) + } + } +) +``` + +### `onIndicate` + +- 用途:开启 indicate 订阅,并监听设备主动上报的 indicate 数据。 +- 参数:服务 UUID、indicate 特征 UUID、回调函数。 +- 返回:无,订阅状态与 indicate 数据通过回调返回。 +- 常见场景:设备特征值属性为 `INDICATE`,需要带确认机制的数据上报时使用。 +- 平台说明:Android、iOS、鸿蒙已支持真实 indicate 订阅;微信小程序端当前未实现该接口。 +- `uni-app x` + +```ts +lib.onIndicate( + "serviceUUID", + "indicateUUID", + function(res:MyApiResult){ + // type 为0 表示 indicate 数据 1000 表示订阅成功 1001 表示订阅失败 + if(res.type == 0){ + let data = res.data as NotityData + console.log(data) + } + } +) +``` + +- `uni-app` + +```js +lib.onIndicate( + "serviceUUID", + "indicateUUID", + function(res){ + // type 为0 表示 indicate 数据 1000 表示订阅成功 1001 表示订阅失败 + console.log(res) + } +) +``` + +- `uni-app` + +```js +lib.onNotityBleData( + lib.getSericUUID(), + lib.getNotityUUID(), + true, + function(res){ + // type 为0 表示通知数据 1000 表示订阅成功 1001 表示订阅失败 + console.log(res) + } +) +``` + +### `onReadData` + +- 用途:主动读取某个特征值的数据。 +- 参数:服务 UUID、读取 UUID、回调函数。 +- 返回:无,读取结果通过回调返回。 +- 常见场景:设备不主动通知,需要业务端手动拉取数据。 +- `uni-app x` + +```ts +lib.onReadData("sericeUUID","readUUID",function(res:MyApiResult){ + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.onReadData("sericeUUID","readUUID",function(res){ + console.log(res) +}) +``` + +### `sendData` + +- 用途:向指定特征值写入数据。 +- 参数:`WriteData`、回调函数。 +- 返回:无,写入结果通过回调返回。 +- 常见场景:发送控制指令、配置参数、透传数据。 +- `uni-app x` 发送 16 进制字符串 + +```ts +let writeData:WriteData = { + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + hexStrData:"FF001122" +} +lib.sendData(writeData,function(res:MyApiResult){ + // 发送结果可结合 type 和 message 判断是否成功 + console.log(res) +}) +``` + +- `uni-app` 发送 16 进制字符串 + +```js +lib.sendData({ + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + hexStrData:"FF001122" +},function(res){ + console.log(res) +}) +``` + +- `uni-app x` 发送字节数组 + +```ts +let writeBytes:WriteData = { + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + data:[0xff,0x00,0x11,0x22] as number[] +} +lib.sendData(writeBytes,function(res:MyApiResult){ + // 发送结果可结合 type 和 message 判断是否成功 + console.log(res) +}) +``` + +- `uni-app` 发送字节数组 + +```js +lib.sendData({ + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + data:[0xff,0x00,0x11,0x22] +},function(res){ + console.log(res) +}) +``` + +- `uni-app x` 发送 `ArrayBuffer` + +```ts +let buffer = new ArrayBuffer(4) +let view = new Uint8Array(buffer) +view[0] = 0xff +view[1] = 0x00 +view[2] = 0x11 +view[3] = 0x22 +let writeBuffer:WriteData = { + serviceId:lib.getServiceUUID(), + characteristicId:lib.getwriteUUID(), + fenbao:false, + buffer:buffer +} +lib.sendData(writeBuffer,function(res:MyApiResult){ + console.log(res) +}) +``` + +### `readRssi` + +- 用途:读取当前连接设备的 RSSI 信号强度。 +- 参数:回调函数。 +- 返回:无,读取结果通过回调返回。 +- 常见场景:显示连接质量或调试信号强度。 +- `uni-app x` + +```ts +lib.readRssi(function(res:MyApiResult){ + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.readRssi(function(res){ + console.log(res) +}) +``` + +### `setMtu` + +- 用途:设置 BLE 连接的 MTU。 +- 参数:MTU 值、回调函数。 +- 返回:无,设置结果通过回调返回。 +- 常见场景:需要发送较大数据包时在 Android 端提高 MTU。 +- `uni-app x` + +```ts +lib.setMtu(512,function(res:MyApiResult){ + console.log(res) +}) +``` + +- `uni-app` + +```js +lib.setMtu(512,function(res){ + console.log(res) +}) +``` + +### `setPhy2MMode` + +- 用途:切换 Android BLE PHY 2M 模式。 +- 参数:无。 +- 返回:无。 +- 常见场景:Android 设备支持高物理层速率时启用。 +- `uni-app x` / `uni-app` + +```js +lib.setPhy2MMode() +``` + +### `setDebugMode` + +- 用途:打开或关闭插件内部调试日志。 +- 参数:`debug:boolean`。 +- 返回:无。 +- 常见场景:联调阶段查看内部扫描、连接、通知过程。 +- `uni-app x` / `uni-app` + +```js +lib.setDebugMode(true) +lib.setDebugMode(false) +``` + +### `setThreadTypeName` + +- 用途:设置插件回调线程名。 +- 参数:线程名字符串。 +- 返回:无。 +- 常见场景:需要和现有线程调度策略保持一致时使用。 +- `uni-app x` / `uni-app` + +```js +lib.setThreadTypeName("main") +``` + +## 常用返回码 + +不同接口返回码略有差异,常见约定如下: + +| type | 说明 | +| --- | --- | +| `0` | 成功 | +| `1000` | 通知或 indicate 订阅成功 | +| `1001` | 通知或 indicate 订阅失败,或部分平台表示蓝牙异常断开 | +| `10000` | 连接失败、读取失败或通用失败 | +| `10001` | 蓝牙异常断开,或部分场景表示无权限 | +| `10002` | 蓝牙未开启 | +| `10003` | 无蓝牙权限 | +| `10004` | 蓝牙已经连接 | +| `10005` | 部分平台用于地址无效或未连接 | + +说明:不同平台和不同接口对错误码的语义可能略有差异,建议结合 `message` 一起判断。 + +## 平台注意事项 + +### Android + +- 运行原生 BLE 能力建议使用自定义基座。 +- `setMtu` 与 `setPhy2MMode` 为 Android 特有能力。 +- Android 12 及以上系统请注意蓝牙权限授权。 +- Android 端支持通过 `iosFilterUUIDs` 按服务 UUID 过滤扫描。 +- Android 端现已支持真实 `onIndicate` 订阅与数据回调。 + +### iOS + +- 仅支持 `iOS 13` 及以上。 +- iOS 扫描在部分系统版本下建议配合 `iosFilterUUIDs` 使用。 +- 多连接与多通知场景已做兼容,但仍建议每个连接使用独立实例。 +- 若应用进入后台后不希望系统在连接、断开、通知事件发生时弹出唤回应用提示,可在连接前调用 `setIOSConnectNotifyAlertEnabled(false)`。 +- 该开关底层对应 iOS 连接参数中的 `CBConnectPeripheralOptionNotifyOnConnectionKey`、`CBConnectPeripheralOptionNotifyOnDisconnectionKey`、`CBConnectPeripheralOptionNotifyOnNotificationKey`。 +- iOS 端现已支持真实 `onIndicate` 订阅与数据回调。 +- `getConnectedDevicesWithServices` 与 `redictToConnect` 只有 iOS 可以调用,Android、鸿蒙、微信小程序、Web 都不支持;推荐按“先查已连接设备,再传 `device.address` 接管连接”的顺序调用。 + +### 鸿蒙 + +- 部分虚拟蓝牙地址场景可能返回特定错误码。 +- 建议在真机环境验证扫描、连接、RSSI 与发送流程。 +- 鸿蒙端支持通过 `iosFilterUUIDs` 按服务 UUID 过滤扫描。 +- 鸿蒙端现已支持真实 `onIndicate` 订阅与数据回调。 + +### 微信小程序 + +- 需在微信小程序蓝牙权限与机型能力允许的前提下运行。 +- 建议一个 `BleLib` 实例绑定一个设备连接。 +- 支持多对象多蓝牙连接。 +- 微信小程序端支持通过 `iosFilterUUIDs` 按服务 UUID 过滤扫描。 + +## 示例入口 + +- `App.uvue`:基础单连接示例 +- `pages/Multi/Multi.uvue`:多连接、UUID 选择、通知与发送示例 + +如果你需要查看完整调用方式,优先参考项目内这两个页面的实际示例。 + +## 旧接口说明 + +历史接口与旧版示例已保留在 `old.md` 中,主要用于兼容旧项目: + +- `onNotityReadBleData` +- `writeDataToBle` +- `writeDataToBleWithType` +- `writeStringDataToBle` + +新项目建议优先使用: + +- `onNotityBleData` +- `sendData` +- `getServiceUUID` +- `getWriteUUID` + +## 更新记录 + +版本变更请查看 `changelog.md`。 diff --git a/uni_modules/android-ble/utssdk/app-android/AndroidManifest.xml b/uni_modules/android-ble/utssdk/app-android/AndroidManifest.xml new file mode 100644 index 0000000..bc59599 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/AndroidManifest.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/uni_modules/android-ble/utssdk/app-android/Result.java b/uni_modules/android-ble/utssdk/app-android/Result.java new file mode 100644 index 0000000..2e36bc8 --- /dev/null +++ b/uni_modules/android-ble/utssdk/app-android/Result.java @@ -0,0 +1,7 @@ ++ž5¶ µ52W×ҥiyi7Y£á±Øu¿õö ˆª‰žp^w”‡˜µîYä@?à+`¬¶ÅýϊÐX˜¾jp©) +:Þ\åP±è²Bëw/D š_üØ*;ݍK.S 8vZ6Mv �~ Î(KÈR]ûÝÆðà³�H`@\ŒDÅF¹MÐXܧŒ^vù\ºc ÞZ6½renôەǤ �Æ&�x7%¨£Óp±êšÑB§¤JÏ�Áֈû¼�‚ Á”šˆoTUI=¥LMçãü%ϞiÕDl/y—ÂR:GüF‹˅Øûêê锯JUÎZ–õ°gþx)uÕb­ 8–›ÙØ#"Brӹ›lÞ\éF´µŒN~OF5ˆY•d4Ýӛô罘•“J„È&Pº¶éM;ÖËØ?='W� ²ã¸ÿ\PŒæþ޻„qžn]¾›Ê=qn•tÓò×3^¸ùóÛY„êÔΕÌmMçØjÆü . +p\ò5žv̤¢ �M¿Ž}›t0 +äa¼‡ìn¾VéïÀAŒ:Å83.M0“Ý3IڞAawëoÛ :ڿèþ²vuÈ4¸¢²*¨' �†¯9ÒèEœÇ +¿­†…Ãå,£š?õx+óË?ŒU¬é>˜g‘±J�ç렕q÷¦'�¦ÃJm’̼6(§êŠÏyÈUB-)µ+mu’➛–k`_fO©ºcԡ¨‹rJñlÿը)ýNìb„{`I»ÈCÑ ÐíCa$�‘Äu +­ý¨ŠÍ3žôt%<;µJ֠­%3ÑXWf۽Á¼«Š¢jó¸z7ªc߾KHty=‘�äw®‹ŒÐæãõÍÚ +ÎdëbÖP�ç•G&Çû:è^zŽMc eÁEÞÏî…T÷�¡ˀ¢‰0knYÌÜ%ø¿ŠBZ閡b2}EüZs \ No newline at end of file diff --git a/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/BleHelper.kt b/uni_modules/android-ble/utssdk/app-android/com/clj/fastble/BleHelper.kt new file mode 100644 index 0000000000000000000000000000000000000000..f16db7f687da4dad97ce70c9cd776b144897316b GIT binary patch literal 36752 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 z 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 xOL(=$2Q{{~c-zUT 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 literal 0 HcmV?d00001 diff --git a/static/charge/UnAvailable.png b/static/charge/UnAvailable.png new file mode 100644 index 0000000000000000000000000000000000000000..55442c6c4a741b09e6078dc400f4baa7869bce6a GIT binary patch literal 15535 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 SQFC)J9W7|iQ8F3Q`#%61`17#< literal 0 HcmV?d00001 diff --git a/static/charge/charging.png b/static/charge/charging.png new file mode 100644 index 0000000000000000000000000000000000000000..b0701e56b23a1caf4035ceeb4811deb8871d822f GIT binary patch literal 30734 zcmb@u1ymeOyEQrl2m}r83>paT4g(>00)ZgG6Wj?QxC|29AwYt=OK`W~1b24`?lQnI zbNl_yIp6u^u66H!*KJn8Om$Jy58d_1-n&4~BiBLCmF1P>K`1C75DM@GLN0-1K~K@p zpQ58ZeTx1R1LG+s)^jYZXV0*R@$hk;lM$1XlM$1WQqnMkDXAE#NlEEA=onwHykvVx z0p{f4WaVLIeaZUIBq$gd7+9ECL|9lvtdyjbtpCRcvJ*sriNb+$g^I!edP0DLN`Qjw z0fB+*L`V780s7Aa_)Ie7&| zCFS>;TG~1vboETl%q=XftZkgXy12Tzdw2$Z3knVi4GWJ?_@0=Q{NrazPHtX)L19sG zNp($aU427iQ}gfcp5DIxfx)54sp*;7x%q{~jm@p?o!!5C`v>P2msi&}x3IhWf9yg5 zq5g+i!1wO~0I=%`8X77Z#y@tUJaGdWDghcgJ?~RO8Fh?LPDBiR{+PtC;$hmi^nX|F&xpgoBC#+&okQ5Cn8z5YC$Q z?-s|7s~9)?5J#KP=V}VvxGr|6h#)xDb9h;Di5ZGFkYf zu#WR;2<8D2G;c&(9iuV(yeMrz|4-15Cq+*#PGm4Zk!D}iP)AP?FTM4r`8dB8{#u!G zNHIk{Pi1IAf=&xEsonC`A9Jwbx} zEcR!P5J(V=C7vr}D;~w(Y4CQ|95PtErF6awy`)G$pq9UZq+(siz_by<$1WR{qtLUW ze36MkHv{TCCA> z>4Y*@%k7^@(;8uIo8@dDa;EE^ty?_gs!z?*&0mQVgGZa~@wa+sYO7)h_s0cOeGXIQ ztcLL4mFXJqk%Of@wRIv|$;$ScjlAW|3s$VBeuXX0Dty&u!J_61_?AJ^1rfqP3qRv@ zQx;RLa%NvwxG}w`W?>7I|B7#P7kf#OtDIS>yihLw z<+~k2#et7r0l06C93R9D|9G5*$nw|!4IRV0(fav2rb`+e9YvO~^O1s+;$Qf}f$JV(zktK5_2d>0s}}O(ZB( z&mpnG=!1%ViF?7ts&@3DX6ww~1|@T9k#KTdbw&(26eMU)q~ol%cI}>64T0|nh3$CU zh9W`RW-}d!H;#|wHgDNw+h)otPweO~d*efr1R)N@}7NyaZr=C)^52Tq|I zR{I@StTAxfRp5>dLH_lY3H8G#f6VqSED>2nuDfKOP8XIKMLC>eICgUjt?AIdU3gjWmy6T zjAI5fP|VCPY>v)D81Um^eVG4=y$jQSib-h;ChQapxAoW!nc zCQtK&o^Gy_@^~@bcb443x!S@a^mBNByLc6i+El!)C-L3N>d;!)m{DnPoL&n8qr+Wc zi!3Z8G*|6;s_7@bZFzfmMPnCkTBZ6QvoB((jXo$jw%TGNRY`pxd+`PtSn!G5v}s~4 z*CPXPy`75>AofB;D)fn)GFVlJy%>-$71>3>zAw8W_9j_yoyBM0J{oEYA;$}|ASNsS*Rs^v)y<=*2d~^f+?8K>2wvq9JFm#Z45(zr28$-l+UZWTYc7$=i zuTJg^XfzH_mjLEAB}u-tIVlZ-6;Azz-tg)|g~~?oLj;S=n$9iq(J+m49d}-7D zwz77iNg97;5IbBREw7-Sk$$)awLAqDA;u%rX6>Gtow5aL7#)cfAMk!nje7=RckebC zF3DQKIE%%a1uQ_1hA8j1o1AiTncYiP%&M>N>w3at>8b5P(|%G_=xTlc`mnGBJU;l| zj+=kDX$LpjEa0g>|GfU=S+HRe`_hFym;xuuKe%hTpg!uEvamc+CAkvI^u2ueMnQ-{ z<|8zWE1Nb+D7FuBLH8X|r(3I)ih#HnIvgQE4Ml&RL%zM>z1Pq*>pSeF4N@QEa6*F0 z;)ou1pEROulvAhuv9N?(T}sp-L3?&KR&dFj*Uq$2`Nh|yPL`KTT1Vh7KFvoileUy* z#)pFJ0!Waj3wSn5ihd%*&{!1->imubQFccU4T?k$jX;+DF)m2hmVS%LJqO||mT&j4 zWX+NNi>ADRrz0A@?a9v&f;Q}jO3)dDP9*4L0ROtezMM1lROZ=zPaRH*Q5x{Xa&Q%7`cYIHo3WE3^z>s2e!&jF8PspsisKmIZ7MuH3+E1vtxoZoBQ z;5Qj94VC|2gJpnPtP`i)c9~UeqTl>JF-?FJD<*huWr3b%|z%SY0>ef5^@LD@XhHPZAefS)Y6( zy{A}~L7O<9xI+rpmBGGrFzmh*x#48JvEUE-(kedH3lcN0F+?q7BT-g51#g37T^vbf zYU^)#6$A*26{6*ED)K%C;G+>N))s30zTrp!#@wmAa0_PyoPV>b;!ix)OiboqlBHiTFo~$&O)?)okPEUJBN8ICf!%0wxz$e z`%L3zcDCEvlP#+0Wnr#1Gndxp!w)w82r{;$-38l1>FGPMl?B8v0&E?T@VkUAeKIi68OABcrc>X5U?Iav(v! z6-rLfcv@1~JOg)y^`hAqHfxh6EMoPBh9-ZL2Ytb(Ah`+&^Cgw4DPJ~%#dIxB*~HUK zt-8Ctt0QfQSvBVRLPLJdIM;NjYkXGlwd0;xiVjF1UDJ`EULBiKDuaz;nIVOrm64p4 z%;(g%d-jNh!t(qwOyQEmJ~EN@&#Jam8s}O&^OL(#8MF68%S)-DW^9w(be1$CBDa<1 zNKg=Oe&*fx_J2?M9tqk|-iKbj^p*jf!J{w|6j6B0@THrxP;J9_ru+^p9Yjm2_T5l$~?1m#gucKgL=Jtnm6K3x; zv>56TS9%oc$ePF_hE{DPNY-`c%GTcLWAog#hwN(Tw1<$Z&^ly+&M1ub^d+Cv?MPan z-ed?re=$2dO=Y0BdZmrn_|)|yA+8WrgnU!=Mc(q~Ae5+f)8HkBH2XKER6Y`go7#0` zA?>0s^3DgDT&s1*82Y3+NS?8xE5#1%vy?MB_m33!Eu73jbsB1}Tp70mhMYqXLvunm_nE;UNgZObY1uN;!1h zt^=;6!r43;giq6Tg8M%Cja8q~F)_5Z5m9F}L=$w(vK$Mm=>uJE9y=mIs1`tJQw-VQ zJcmBwF0LV-jsTD440gop*A`?|O`!A=u?LqT`fnY&iICN7jl%g%TdAX!m_7twBuGLB zD4skwVlH2l>wC+b&&P7mGNunAK^gv3NYE=;gR?5`Tdufvz`gy1$GOQ)E-eS3^6Ex}^j^US`_AT9y>7u#;^RH#T$^nlZy4jy?% zZBy~hyCa?Yxc!?Bnv>0?$Ks8b6Ogd=CdUaq3Fy|$AZ)3Bm3q34+*@fQc>1dv@ls=4 zWE|I@iskR7m+KjdD9LOKo4@S;)DBWh*G7LX!Q->h4_z1xzj!{6c$SNUvHm-IT+O7d z<-kYgtaOtzIjYv(oRDD!s0)*%f|ya66>mY+akqYwSiflfjq$ARzptXtWz7j(nHDO) zCY!DLj75mazSrevE}5=i!O;HatiI-HU4FL{S}|WWds*1;p-8@J)+2J~qc38`m11pR zi>vu7R;|C$EvY~)@0|YsR0?2FoX5kg*RZ|SMMYLVaR4j5j_#uW;CJSk@6u5wb}Ksp zxoJTcBmPY~DtIOeNG9q8x8uCI#k?8$ZIZ|J=xzsNeXIOob7j^yRrB*pi=9HfXtsp- za_au~Smn7UWIcoZo(d1a-`(<{jW#M$jxZp1X2b~WI3iuUXArxWZ@2$f5B|Sz|n-z`g9&+ql zp;iEU@<+8kF_$uNb?}!{JCjB)lym|1M0}R}$f?X=qyQEpm-1?MHon{WN#;5q1|CM% z5UT%jre1f#$}V^2>W)-&PB^YiHmZ?6^QN9)54-E0*#{NBquf&T1BEtKPo2)S=iWL+ z4ZUspJ?{(}Tk58bk17)`I8?RB9#?YFzKV(-*q(lPp}QWf`B35CKOSC4MMU9jP+krM zEK(#0(Y6gNw71^ETN#jQ$l)OS$y-N+G!TofPg(xS^*g|4U!h)1l?q%B#@y2z{XUsL zuQ85*70Q&Lf&^8}LGC3Fr{z4{ju!suQvUC*&)Nv4Hq{~HC#;8h?djS37sj^2v-PCb zepAasRaq=qgOX~WRvRm+;7WB<67-)cU?zr;4*`ej0sWq8O=Mo5nvAx_@8=}X2eYQ& zj%T+9=Q#M>-)bLHGwVB&%%Ulbc<4QdQDezJJM~M|b-@*qe|wJky8xGjxp%p^Kj%wd zrF#-C;Ceg!Ok;vxf^`rr$RHuZmS1)+imd0Jw1s)uldGz5ZP3a|Y{`Hl7;^i|eGkf3 zngd(vraZ}gk(qnAXnuU;!HGu3cIrRvhfn7je!fPlx3~u;6O^A6ATJ0+JWmad|GglQ z-`q35=!ycDa2my!Y=Yt(2+aY>8-na@;X#Vr5c_b!lJaEAEIZ8^cts#`*s%HRv-=?R z6zblwcrUPe^Lh90PkuVnh5a>)-ls?s5Z4_T1JOPcq)pv|Vjsl!lBRFcupKB_@W}sK zVN6b-SOiI=IU7sC9Djc?@*NhtS_My`%vBctcypF@`8SL!c&{7(M^so;+oNdtGr`Pf zhaH4cB!4z&*i=5*OZ-w{nb(_F2zCD!|Mcd4yi+XyTnd`!ZBVPdty5OF$ELl4^sfx- z-Ec_F0XCD`PC}Y!KOIioVuQdKv6Ws$vQ%Ngp_t2Tx?`r;F8g<@t$r3~OYDA$x#0}* zDf>Eh;}BBMpjsWFYWG5oHR2Kqa@1H%NqOnbS_!9YHKC^S@c!<5?-;Z%d$$@3di@Qf zQ99mTnxB;(dhi;v6vp+`qP;oG)Eu8CZsM|C*oIhbMq?+sx@s+Vf}CST@0|_7Hg|P( zmDq=CR0wiIm{@0*U9ksoLV1KfqX}wgu%-j+v;A1%7`C4Nqt=Mnvzwbn|lk=CyJfF{=WN%k32JuTJQ>*k8t2f?YfO-FKPN6O;}x2AAG z=L0j-)vDH)E>4acRJ`oq`Zcol*6*KncTM1)G-ZKjm8wzVOwp7HEq14^{9=ag8%c~w z^;70i1KX$^<6D`=%WduwuxSaG&82TUc)2ez=Ks8a$QVtW#oV^j&l*3}->CmRxJ5&x z+Wv+U2rqWjR>bJ;;`kPFB0)9Uu?TkFa=3VE=E7c9%`gFmHlzQwXs?vucrLhOCdc9` z^5jvIr_7jqIsIm~#GP)a^Gad^8du@kOjR}HX&%0(qrstln_(7mQusqNGmFlm7E;Xt zZR|%Z3VH}Q3=IwR8melAm>M;iinLWXG#j7@*lgqV_$k8o4W2^H=8>Q=z>#!B8T^eF zfE^u`?>1-?oU(0Ki41JrQ69b1%qhYrzf68OyqoyTayxZdX&T1>?I0AMk*RR(@w~22 z5YvB=?kF&vdLjKTP=p49B~Y3=I>?^$8m8itul1pY(6y4<>>;HCiu$4cPeGLaxCo@s zc(Q<&uStT6-CVVcA{e6gx3JMGH6-bk3h!WE7bSzcnv%|SMZ()(^|m6Gaj#FdAi``A zyhkL6Z4(ot+{G8S`O@x$^9Ou9_7CFF@;(wFkkB|BvBo#`&gGS?>P@ko#U+$Ib>Rhg8WbQCqjIy|u^BYw0|! zE4ttK7mO9Ye^##=k9h~xJAztfk}2h^8Mqs3Bs(vhHr8>@>N{U5`nlXeXZ=thhYFtA z<@1jvD+MwSd&x03AsUb(xQ}i4>~{07_-^A#Cf)-vg9x^I{)^x}A8D4tTp?Sw>ANjc z8$nSfpP@Xy08F|I%=`+-MsnzJtIWod=rM7A>#wjZ;}d!&^04cuZu%Q6uenb~9Lel8 zlA-P9pL4=r;`}!<_dlX^z-s|@XlzEV#{@0o1UOf9o z!bSMU#*4`+kzZ1Tz5&Ryn}saw_^0iHmzHEaA*;>3-_+GYMg231&qYD?!4~wIMDv6S zlBL5EI%TjJ#j~5zvXP4B^17DMPvMxa&P1>%uw6R0GujR-VcAY34c}G@`{Sp2D%3u; zLJf36;IG@KLb^wMOwHYr(Bv) zZ_hM|LX)pKBP;ODL~SVz(VIZkNqhR5DnI*Za!s~MQ3=m@C6*?pl>W@+9nPuSyNFs! zRsh@@>j*WX?FiW{Xv)sRnM)S?9^puifQa78#T2=~4^I!RdW81L_rjn1J}FY$IA-wi z#C0$fnz(i+8VWzod8+w71J&hZ?dP>%fjmmdmnPmA&Y_e!xId899s-%$KLsURX59*U zz5U;D`~;{epH&7SSfIrdRY;JOED~g1u}m7SHgzq^8`tsjD&**)Z0UnH>m*|%8H2pX zHj4eWUGdKWx}a?W!;`qJO#Fkz?R&w3tjxtjroGx@@32SZawXX z8=m)mPQ^)@{E??7uT33*`Lyv7f1`TQJ>>1IU6h1szcD!!{SCV*gHWSj+7$FF%2yS9s zSfJ7Q)8b8B<=-p;J*(d|>vcAMu(AG$>oT2oIgSy9%@oy_Z>cQVdb~=f929u)u3t7j zV0xWrS~347=199eAj9f-Bi?$&G+dDD1jrC6m@<{`8dN8)(>*!)wW5E!QbuQcR2uGR zJ>fNGnB|$|3k+RYcJAL~*HdqeENSET2$yT@4+>7VekiJ-rQuspI4k}L0;(>OAl)B1 zIIo4WH!yOp)L}T_kwZa1 z@+koGNWs*oRWGSORiw5~>@?^W+pz#v56AJ~M<081uG2w+7Dn8S{V_w7zGvPY#|)CT zC2U*)1uK?>b&n#)Pc1k=+IAtpTH;|20U5+fB5wEn_F3 zRQZ@5dz?^71ir82hxLUrR8aEm+sV(3qa*&{)9`ov&VrHPa@I$u9(0 zTt`(g84GD^>C<&0HdpdJa?4cl*JZ%N;X`L~>-BT$)aebFCXCZ(I@cgy!F-RBd7DL_ zk-FNgQTJ54FSy@+Q5d*N_>a#q+VU$f@yok5|N7{IS%6VJ_p)q}x$YdBT&M>1g7yc* z!#6FnGkpKkPY1g2uMhEAvA&FgYB~)MZ+~J*eZ5PDL)fy2ZlLEl?KI~=y%Ox8(ws|m z$T&Tat&mE7q9TtPwBO9_dEYLqOJIn})=d|^*-kY3w{f!Ks*=F^O|e)0aOEW}Zwq^- z)=I2`&-D#Px6hY3-SLm{J(<-KN|L`=m`%Jl@U!LdX~pem>vlGa7nZNiX1K~m>%;pJ zdYU~~RM6x%H?p0nqtNj7%ET(xc@!m{^9ROykVqCZ6|TJbmG|(%v4whXLLB^Yod~8w zvEZ!yzthP7K`jT$5uw}(D(PU--ecj$B+L-^ zHT`}VcMAL5gOt2vZ!5fDK#co zZ(aRTj&K;V&Q%7Lw%v*$Fx--DG(MFu1#k_Fd!17Mc+D3v*u3A`8&r)lf1YHb0TIOX zp9o?MM38P{d7V)xTF17@ncHIk80hH&dPuopnM_{f#(}$|vi)n%YavgT_r?#$*l08? z!iD6}O||;&sN;Denw%puJU`q1suY5quH(bh;N-LQ;ki0Brp{&~om@|G%x-W*?)|)U zqT!^l1(u-Bv&tCL#_-kQAM}l8FI3(ZK7INAl*Gs{GOn|WI@(u1wZZhDnVnJboGYwM zFTXFjbpO^#SUz}z+DAmvr!?ifur~(NU3pf!ZRTTh%bU&7!CC9DD>`cKnNZqmA(9br zn3VXWFW3rIbGCIKb$~H^bwyT%owh}W?lYgN;{JiOBwnhIeTj8a!wnI~O|m-2_&^&C zxfubB61F(wE%P7^f1||h{l^e%{N!s?4NV%_g>t1xg$?R&o%&^vk-Bs@r;N{}Go~)gIC2ej`CdO%V#mr+0dN5~jbV7HyAzor-)~6T!HU`yL+U?oxJWar)_V zG}pQ_Cg#)G?JZYDx)=j$KMWe%X*m1e!tOO3!)1P+q*bfx{#`g}G(Pq*EfeJQSCq?<0#$cl)E)z2-F6PPU|yt9IW_w(hmvDgacnEruq{ z)|RM#pW{XR^rMIiJaO8Wt7-X)U@-w2YdQ@b6lMK46RRzE(YF(OU^GD8_{T=Rp>mtI^O2K32eP) zCjNU#GT=Ksr!%`Klv%RRNl$6Ei=7@nNK5*$kSX`&dYLJ}N|cdYrWq4l!=g>61<5-O zGYUULQd5qz|B$boIB7dOu1NJ5%3pnLVnjU2+%V!lf3Z_m*Fmt%i)H#my&>kuQf_8X z3wX4(0vztk5LLZc|7-2k25;-aEaWhuAWxf6Gw) zyLM4`Qr?yAg=9ll<{q@hHSbYk1o942R{Y4`b<9P+k8PFpji`lpY<0u^k$vwi*Y9=2 z=)SchT8)8P9zTaVy_@sP6~EkgU(YjEZ8SIU6yHXeYLS@K}-Vc=|HyTCfS3RJ0 zCxxGS6Yl!Gs#3;Sww8!_G=x*a{qz}(rLX#N4BN2s(It%qF*kK}|Ug zAiY;>+Pw&yOkNBC5>tWVgnJrR@g@cE?2a1rZXEwgonXlT*9&$5QL~{;B6i^P{M;kTRds^;OXzmsw#Zc*yvG92AlaJx8$nSL*I!&lm1j3W$ z@ru0}jNYp1c|a+K1hseo2r~s_G#!YKke)siXr5|BcIC2HE*^?E>$kj&Wr0n;j&=dmU>I6&%Ii2t3uyL4vd) zl!pZ{?#)UL4`E6skz@3o-`Q|l{(Ay-=-yYN2Kby2W%*giakArfw$Q!AAi7=m`hjogvY{a@ANiMM2ERvjkb3g z4<$%?c&T3 zPkYl89g4L!XefBNRL?J~G3CcS#eQ<+zWTu_T63;$E>&YlE!lLU&{u1uQC*G%{XZC^ zf6J@>McvWLon_-T^sa^15A&>9*ZjbLcgPN9V4t%cxLSjKM@%;N;4Qt^n=olMc8mJ< z(Z@A6<+@9Yb0F;JrakwAWA|b~k^#e-o{HUv$m7)@XP8Ah%CEEChGN(d1j_@jIjc!% zvaerC{rx3C;hW*4Me|7Z`i9PpW`NIjp|;@X1_JAxbqPiv71HiP!)h=4P!lp>x25^Q zxS^%!k^>0LUs4Qb!QxgY&`+d;uFa4FU$ zcla8{S8nhC_n-Qo6|7j?+0v^YY0$#rI#9C*82!_nj8f&C3r({Ryv<8}M^*(J8Xc>J z;-IwdF3na;v-gJm4gPkV$smjowIbGBm}8w&7k7tp;I z?ayIhw_kxpt7>|$vvU7Wfz|&gJ_sbgDKLdiy1TEA_m|+wmNO_C!nn9Ue9v<@tDg+g1)t%D*c=Yx=yv=>rAqmf6j|I9I|bE z%&;rJ<_;je(WwfvcQ87kFqNdCRKUTXCNkpPC}&0xdOMoU_9V!m*G^iWP_0woAWEihEFw`JcQXng=r4Sbe{MHzD;`lL}hc?Gr^PG(|W8qO{0GQ zgs>8^ncI1e$Z*s*+X{pkL1S+o@RTI|UR3IUw+_SX7e}%pMxk6LRb-1a?b1)Zh~oKA zZ1($8l$kV>ne=({6&*}6MmGhT>do0d*JL@pg#HMA-!&l0SU7TQKw5Q{+nJ0v`jyB| zZP>TpSu9pOw&kaf2=;382p(*8u{P7Jv0nNJ0%d4&T~>LnQ-q^kS@oNIhjbx_Bw~ZIg-;K;KHvV>0j>GI!6R- zcE=QFPi2f-E$bC1uF%8~EF>olH$n-yO3qXipgSW-V%TxoXXtaA==A)y2nVGFCc8wO z)PR`J&;mUEf&8Onrw407`QtomN}uxFA3avT3V56-=?p%euRz)C+$I{aJwWV_d+w09 zf5>}Vrtnn9a@0cjRsE}jj#Gs{MM#jF`-$Ri@{y3+yS%v2RWho0Mew%M0U%hZ;5SrH zZDH5fm2=6gT8>wc(vSRgAKj7UTYFQVME|houXb9=uD)!ok&WxHaXx_aSz#O~>Pr+| zR9a*st}Kmye!2vdOo!J6k_!3XCcTGv3JXrybjbK*!Y_)$0+m%wu(Wlzisaw^3F!TGevA$85u3*lKN1880rxjLPQxMp^9^Lv5TD@x5aKFm_D0<9zL`v6=dJ`9WLxh8gykYL=n6aC0|_j6Z>F=Q)N^r5>#JX-#&FF7Fxa`X~TLrXJ_`PbdDM)obK)9Xb!%%>r*kR46M4{_PM8CN1 z8*)xP4J$^a|N0y{YXFAfe1iUj4ApWRO%5tAk-qbc|DrZM1Bjo9dZkDwytOQE?4fGm z=hF0M5RR(9@ftFh+*2ZwU1i4Da7vgP$xt_!-^H?j6XouOl2+$o;xd_3&)2`REqcWz z1LGeAdmIJ@@Z#kUBTFs8MND85ThZ=RlMSi&Ej9H4qq9`Dilzap#034sHYDoOfc^nQ z8&FVTDSQ4}Sc%x}fG+730W-x#zUe%8-L!vbWt6xF_4jpIC3Q>-PH8~@g3btBvC>pF5zURF!fg{AOn)8|C}@ba zUgA^1A;DRlf*MJqR?|*pN2pb0SaMZbzpcHw?bvOK;MgGrILHh4c$rj4hs-U$OlbDJwtC<% z3W2thz6PCZ&HM-Kg8K~ZtzGXz^4-=E6!4Ds5#+~? zKd%4}Jq55-fq-DBG9u=YdS)2@bqcb1?#(r=ZOmEFrvJrh>Q9O=D&*MllOg121{fRh z56N{4xfd-7IewBY2-MudXkRjz8l<7CE&z*co20hpTQCtLppzZ3F@g&he$YC2J@Qa) ztdexYjP==Vpd~>nJJ;ggbhhojHE^^2m}N7$8~mIB%(40>f4I9NBl{irQ?lUUHJ_V+ z@*=%ePI$m?pkT&4u?(MG)Q|XS8jKm+8n4);MT`@#vzTs){m-$K#|&nN(iju6M!S25<$W zV&8VD^sTXLokUrDHUC-}VaPN%q3LA06ZMd0P-_NLsR@bX6380|5W9$OKUq<066}Iy z8mQ5DtJcXf|M@+)SL$Hwt)3G)DX$*Q7aO4Ft&?vgHNs*#@LNl3hbbfCLaM+i8T&AE zG8b~#aX$73xKD2_KG+WO#WaB8!CS`7YEyOA-Ir`c)9|&QBQn!!WYk#ZJ!pz^q*V0H zrcK=mJEKnUk9bstr=VpX{zlyV!(Iibmu=y~TMwucNnIX$vr@ht8(tcM2_zOTO`S3- zAIGUb)bRXN%j~185|JM*3y3fhg;9j=Opz|&85&_FWp(05tc)Hr9Yz-bGu2l@KV5S8 zB)^2V>YMI@C7^p}z~A%q-7nFxWy|&0#yx=%H^rGBxQyCU*H66k4f3LpAn(AGAEP@% zq%RCb`dNNj(g(}T)3Ui+qPG@L%h4gY{M!>>98psjUrA^rG=B2?bi%LW^>aSe>001v zQP*bVbY#YNEhyi2C9RK~SOzo3LJ1=|-JIL%aat0KYGM&6jtl{EnwM?+?XI4bu225p zUo~zc$nL1_!QGjoX-+A{yAKn)50g74oSTtaGTd$4>8C1*{uV`t-C}PJ#OlW(r&$0d zCY*Zurtz-cGHy0n8{J22?day!OD$?1`k7?9!0G3n(K9s#2Y*%OlexwU`O)zHa@r|% z4jz~?`6mn|j1Bp|If%ZuRq>J9G*tfZsR~oWgC$mhT$`N!N9lp&)SR<^pu9rlE=W=Mc44$}N`X47; zR~*Sb8!7I!Hgi@lC1)X9$ykzecZ74C5(AN!8z4B=go!)OYFYuBL&94ec#4*FATtN9 zLO0_lUQr~Q;IkU<|2mZb-ca;?0V@O_{4)@Er**B@7PutabVBl8r#|IUHDhtnk$DFN zCy=fr9+iYK*M1b=G|-3v2_k{3(?Xp#0PpD!-gpO&$Y38MMF0roV9Z(mwO;x^a~!ub zH3xLdOrLU7E7+r#RS*5m$;oCyXq{v9C=MGh5Hv0^EFPO*F;b8mwzHmRv}}5@+Pips zg_RTZl-rtA`#yFJ-9^IgP(a5tiWDN`Qt!{jcbli?FZx~#!sT2ytdt27lHW&=Xz(ld zPj=Mkz~ec&5iQFAx3gOYu(c32BnWTW#h6$R%C86cpHHtX%AUd{z}NhXNRZy;4qV~D zbqc1F?RJw?_Z`lbs!=b}GRe(Znax=9?1|+WA%I&J?z>gl=-HQFSFNBAD+yT6=*ptr zQ4XH3Mgvm>2#zol3p6CXm!nls!lDT|v!nd$3$n@8fhlY(G_9aL9S`uJeNWzx5G#H6 zM-nfbwV0JX0ya_s3GtE1!a8fnL&L zyL0ee42G4Kaa*9@hxK}Nh0QTSn~WDTQ9JN4iJJO>iRYJN&nR)$Jy{1Ol}txG<+C4n z<|UGz6}X4*PELxvT4C?nZLPj_x$}E--iOD#CaB+~ry7$d=R%u6UCF_5=2Nn9J9NIi zl@X4IrzK78oO1PRGBR&x`l9N)L44Fv2Y>8DD{j%6{=j|W)V}gz=*)8^9;rM_Ows-L zm0yJ^JME+}%|-85vsz}>CX*5a8kRAiEG<~`DpZ%VVy`99z23al64*DpfO=hCE#2V* z`&Kp#Nf@@L>_+1?bGFcJ!n-qz8H}&Cb@b>FbI+_Vgu4Kfr$DKb;|5|f*U|nIv zcVo&|PjJnv|Xddlunu0+n%N7#VFR#Iec^|&x`?8+}&S3ej-f&J# zvd1%p^Yo*x4)OI9;ORB9^Y`4^g(flwASn^W>4KOlF;@Vi;F3bn|l`BGG?u;Wpx{-$IoImdX`W*uEY%9eFO*A$A#iCv>o=JlQWv?FH$N&l zjpif6lFWGH5D3@I&bd_RZ%%p>h$^xxU02OP#l(nc?D9?OcA6A8eQER*nGllFX%@${jV&l1EaCut!SeO9o zybFfonh8U?c@)wNc-)f7vm;bod1c zYRXv!Kjs^83m-FAH2$^{vjSA(V*$I4n^#7ypz+Wo5=!-*5w zK5gg~#dM1hjYy4)*1n zlA^OVvDMA3o6ZIAlj75HgCA59l4R$%<{u_gysAV5s{tdvO|Bt=*2tmj!8RC?$El}Q zwA|{aSq4xU!^)dy5_kOwSjl2=CSJPTEtyVL7mkhL_V>^kO(3t70I{7kD;iXmh{~M@ zWlQYSvZy0wgIpd7(^mN=#x2Zdvw_^InRyRzvszoU46xfG*)oIvjYnbCgtrRpI1ORE z@zNs8uLiO#fAvXsGNsM%KFGR9SmEYch0q49Lyz^MU7KU#TqRo&q~IVECbbd?==Gdx zOAMfx41J$-4qW*QJMOTrbyD$fcL0C>Q71y-LC)68i7TW4_`8@`15w9PPz*8Q7KP~O zu7XquVgO|2_laZh=j{u)+UJ^cwUAS$i(_w@oHt0&N{o6?>cxuMoVQBO9#6kedGV4y zQy_1#&!iG!+cw!DH%o9s!`orJj*oFxg2a(Y;gmO?Vr+W?|F5BMLW%VvTkmGflYKq0 z?&2T?%Nms9oo(D~#f5k*z9%}LUtx?TsDIC|d7-56)g{gbsK;a$00}SD^aBLm1DClF zr7gDW5FT&9SS+pgUtgiUc4)OMTXkPEj%rt=cpcZ*P4UbjvpMoXw8B(-4lY|EzxBQ? zJ)7|b%_eK;6&nxLp7T51B@bo!vnIv)k00&loBH9{u0FlSGfT5y2z!|G)c3!@s(n=C zs%DND1OBM~nnts?Bjd}GNk}5c!Z8m9ZAp60RfeC5jK^TX@}!Q$b(6qXv#;m>9;g|6 z&o%5NL+mHYxMFmVx4!?gV}kOMtysP+=Vo%vY45%DRK#I1uyL!H_5V&8@{;OgauVEZ zMIM)hy=-T+D2{`y9@EM1YgC8&|d(Q>eBveU{O%i&~YdWTDIWea@Jx}uPi(QFE|t(j+$ z;3)WmP+=ND(hFAt7IPE?(bRBBve+jI334(f6m0~aqQg`u@7rTjAs_AsLFgdkB+%0a z>`by5e$0V-lz0pHxg_+=_FsI2lv^W4j4u?gI_^(_MVPx-Ed>!erG~%sbFp_a2cUfO zkbBCzJ0u8D+1IIU7=_g7#3IJ>tlf-6&zjcv^`_%rx5uhva$iMe_O*GzZTkgG1R#r! z1~sGe*DJK_V;1pz&+!MDAyF0)l1bqh$}fq9bO~8Al*l=(u=$DnKnJ!x9hUQX=TaS; zr=iIamo^RZlbt-f;%5D76^!ps39c)WZ^GuH{m+v1-RH3*rb&5U9`wnEpsxK{RhVox z4xyzr#&RcnJ@Lw)xx6|o6!B7RgdT4A10nFNv?i}I8i8k9eUO~-B0ytgXGI{i=SqhO zoz~CZ0kT+G#lAk~pKO6oeNev*PmumgTUJqcM_Lidk&+(i#H&hn>!Xv!C zqzc=SrdccrOBo`SZm9@KU=LV@+CRAJ-P4ne3Wvf*Xd6cq{e42p?|dEAS)qI-&9<>> zUs9V)`?HPOxEjI83}Z=G;bDkj_a6FJ&-C$d1~m0QjO?t@GT)t|Ws#t&X#5JN)mF!K zhuVv`4Z*_NtpT4U29~HZomvrshkP%YtKIm0cCUdu?}@j%9dF(DK=4d|+ZjRGsut2v zHRxknWMt*ERM%FYZx2q7un>=@%0u0b;~`f1UG0BmC~j!Gfv6-)1e6mOlhnlepEqXd zJWGY`F8r)i1AjII&=7a9t^r6EFK(a zOGJAn5$hY*9A2`9>&^2av8L_KjiL4t{v(A(x?ByI!;5^8G=T^fd|+HFCz%vOA7+m8 z<_n++B7MfP^NrTaBj%9CT{z0cm;hGUtK(V!GiPPRdKgW}!jNN`J3ep2&y0?gsp{6w zmE?-0=a}oQ@P>Si<;J{et%?_fi#3Nzoqk!OQ}V`f`$AP|urg_DyfWmzlF;f8;-rkU zq)@PqL?Cs%VaL5*gvs)3ldBVdY$MgzqyIgw%&vPSB51zjEEUicZwbJzINy||wkqW| zv0o%q^mYwge_CQZ2e8p!f-(2_Km>(BLV(R1Ww>QbrJI_cfF;H({+(6=f_Xd!ueu)L zc($p;{2I|S{|xkN{1Z9a7UZCqOMp{XgW6V4AD*Z9w8O#Iz8{g|Xj98DH04Ph4k3QfXAN&_&wTufaY2DZuk74UbQ_A!q0vuoOs@pyNH75p*3J zdM=pt)yEPM;0lF_|6^`##{y-4Qul-Mm=j~>af?IRUxeNxD@k9M{ifEtI4imDUpaH+ z`!9Jd%0?_V{kkmxDXu|W*6Yv80SfmO3%%NizF99DSMV9<7eH_wJ+&q?t#s#N$SZ?N zcj(%mh68NXRx_BS`NPw-nO+9n0JGOQCv5Dgdh8=gVz_$&IT&XQoCTl`w*-wK_^Wma zBQsa!^Hh*cCwzm*E5|oes)1kHTpnqlC#>c0BJ31CUH3t!hHkDcEG1gXzyN6`Xz_8H zFUf*8U1M8qd;8g3xShi>hhUKFx3>=VzemY-7do+&BLl<)tivxCt}vMrAZPJbp^aen z73Jl1%RI~Ww;#@K!cER;zYAnO-zPeFaY67znv0?#8ASafVBM01$tk5#sZZzih%@8< z8n!#9V5&-R^R&JFN!bpMVMTZMnXG@TP;;Ww7|QuHB z7AEk|VEzH}PNw^m(dky^Ja_+Nhii5PYf_SDOz;0-e-{=1(Dx@UUJ*lNu>XBLeh7l( zTQDU}*~sD73j;)a4c4mfL`%I%TYCNU@HtC(tLTda=Z%i1gDz#Z!dzxgAgkg-Sx1(p zQQ?Irx7Zh}WrIPOc`^;NIB;+I^i;~wYda}a(yjMlcei46-!>kak5J zchQqN1cgCZx!`LIHm>2Yqq3)vceYr+YPoDxRni%20F6NGApl(f|1RNwX|lI(Iq4q? z{Q0*}Q30&9B@a6H9emGe>$-^|vI2TMExhfxzYbY-n7ZvvdlTBH5cM~1R@2q=Uqlz%)TUPJxN>#>ue!cFtckbVHVTN;sEBl;0wP^{ z5s0F60RbU&R0M=jq<11p??tLWlwJg+_udqxH|d1lNvI*sJHPLod%kndeeORn^JFIT zJ~NYduf6u#>z!aY`XML75!hCnD(K8|(Wh#|=ra1gZ`ys8`9*7uv*l9J<~aEp#LD2_ z1gepSv8HJ4`!V$c>&FvsV%K6RC(b15i*J@~XpxKk@NG#b6(y(@S;booL@0ruK5rkW zOICIadG!T9USjb6eDK+K!^>=!-vuUj5}pFlxD*Q4n_mpw{PRhcY1d_teg_6f22yFK|$l)@+XoX<4h61cw7ej~g5@T2yZ z++IcLzn~s~?bYcmFKX+(G~9pMSB=DE=P85PjwCyk$Ehq`U40s7k*btvwfU@rrW_I(H@cu!ZI$tQ|j zQyamW8fS=y#SYl&Z#{K@uX8BQ4S(Lme@wD8z!s984qrq3QCtPknxubkf$$&mRxKCU zdHRgDw#1xjopqvKwUegC; z=BzlESngM(Nx0^+>cix9M+WAYnAjH|7{ge|t*Cv4o^3A}HF?NdyKNLX5M;t! zCQm6Tj9#5|Tv5Btd2c_H#K=7EPBw1Q1TmKY`Z@*tbkU^z{AX4ZEmR)lQ4>M#CE!Z# z4?v0N=iN%kZi|8!WNbs3^cEi450f=MSpqX(ztVbpw&##E6zCQU9-M=eN#n(pNRaD= ztFJ_WUup!K`h6}r<(;C}f0#OGk>4yPMu|~N+HFAY7mOg-1RdYV5?8b1Xh(6^MT_5} zIg_oTBw|$03=?WQFg!_#AkfS_tt*&td{$(gr2H3z6xaj$%$1-daW(Ey#O44V=xqBZ zw!NSflH_9& z5G|0VhXnelzo3}s0y5UXKjNhic@}MmiSQU5*Jc#av~^R*lPUe+%Z}98_wiwwdf6>DGzbd zK^k((MZe4ajP3R4y<{r#QVVg!7C%41GuxA*@S}8xL7U1dYO`T z%|>0wsq2GZN}|@604=}a5chnvN(?;DMB>JLcavtLZlFq|zw@lZP5v*6{Zn8&Fo%I(&V6)~c&dcUbtbvK7RPY(X zeeiz!BG-hf#{HYHMBi8co5B8PUoCJuKM(3Ya?d|&Ijldd28l!elXm61KP>%(c0giy zMxT3ChMh!cdE9M_%xwLEW`BCA zS8t*L3MNihh-2e*X5IgS{xvVxp*UN9tpH(54akz_oj3S2Q9QZZhcl%l^;@ZbLFNaD z6E{Ph;EA23n)7I9(g~~fXSxs4FNe7N!M$(FEN2RVK~Yp zxHDvMZ7E31>09A@@OkblBK&S7gy!(G9@YaD)$cf_RWO$d-M@G#y_>PU`x|QWdAQD> zd4xvFLPYM~S!;EW_-p1`zN&rnh z{pJF*0{sYUQ%^uhW-%KTtzNt|>^^gL7rMz(@j6d}5j`ENTh^k#LR412hFt0U$v@1hV*TMt zy8MqR<%R5>j*mwN(2xM0Ricb3R@G9J{pqa7DCm@2X_IlKokn7*)-Gdz9Ar4vIdpZ$ zgawA%sLXU4WLpm!-hO;%a`+Q1U!^E(e&LWG`lBQHFo5ldXoq+ceFO{8R}d)=JWVOHYbsjsN>f~ZUB zCd8`+#g*@Hc&dFyg_>+7k^g*;d9-l`;RQYfSnb0%UgD{8TW5hCB^3* zM80e{|D6Z+*LSVVk5hMhHt6PJX?&kJC$@@@x*JD$mtZ25c!3EGJyL=;y<5tqo$QUC zpwkOgtTj;Y7&b}PdLUIMuUcx{Q#rRZaNSp+q@ll%ONL;N^IkI3{onvu_~N{^(irJs z%l{x{D_^Q9O9s>SP3Q2=xDjHS5`tF%eiKw#DE2>gV~7rBM2zdF+}LC&EbJBkcz|{; ziGfPToJkXk1Y}MB90(&ml4u8jN_e?_G}1(|g1+nQ_`tm#os5_u(T=1up39qViGGYI--SRZWlz{sxnL+>gx@qoU_8>+`x7UX~O@jkB zQ=fZ0nNVfr-MNCovUYn8k7aAy-x_pezP}g3AL~~s_Bj7asb)JA;fybVmMdE?F3vsq zlr}8>7vvraC1~h3-m5vEnpzK@zLqOu-~}QX%=-)9X;E5Z|7dpyaz1ac+_V`dB+-gC zndP${9&oy)__%)|nv;|VYap=joYL4mn~IB*zoL7)sdQ#_T5F`cN6wDdTH{o6 zT8=wZ&b6oV$E=&$n`_~o4X{=>t}C>;mm*^oozfNmY$}Gp!YbI6CG`}PEmA8#haCKa zsz2#Ln&56%{H;(lUz(gkeLCtxbjDxmTYT6OwRnZzOZS(3#dY*t%x!NEnj$c|FHDXO zLS_c+;HdwB*0*#P1Hbh6PQ1ZS?1ev^P=3KW^7^tJmA%*H43o6$b#?`L_i~*+y)X5j zyUpz(xdFL8eE81<3ju(yg5Hz(oJx7CWqia*nSe=SiYVESk$!vbqxH|(#-?x(NKc*X zJBN{>QRGPe&Aij3Ds$7tUu&P)@2;K9a3(F6y~8@6>9$Oao;|BH&l8$g=RRbGbf&SM z>U_)wlW$2Pd5H{Mah;iQT`k4_JU-H0j+9Di%qM;{$o+@)4FU|q z^qcX0yA9!ekcaiskNfQx(1m?k@SdjMo~(!u)Ccp64oxYOYW*=~@OrRZo9*@TSf{re5oF z%JSNPseE-u#ijqDNn^Hc*v32UeIIE1NUerp^TQpi>B>_%+cRVoZ;F?>vA?Q+WlxEk zw||Ga74j2VGl#1>plea~=fhl))N=0IPZk^ew#dZ}OoScW0W5hshy{GcDZ2f7cjU|s zZ&O2{j7_(lTK`<#?aRFQT}4+e_t(^+q${g;OxeP?=0*UPgvX#|?4TaBM`e-Ad(Z@= zWt598rKtKSC--nC!Gt@_^#Q-!Ub#wlyIq&<=B=FfqKCbckB;1bjV8!_izz0^H7AQC zcxmO#tFgY(Svg9>@O$2Ajab{~z!Z<5GFff&;J)*$$Y76B&53LC3eg>EvMR(mdIc(S zk^&Bv=zlxOF|-jrdoX}{?%SjS1j@D6x5nN%0;Lb<=nSQ*TSe75Sv1N$vsp|(Ibc5a zk2Q+WYWn1DOZiT=DDS_VVCB2Y{VMtH>)_bWsa}ealg~_Z!XiL*wdnDX4J}b?D3(DK z@`Z6<@lyOCitTd$C$YkHfz^|{Ez-RVs)~jDkKE{5s2rK(9b*_TLCo`r>J`>l7$35$ zsvb>KPpxoC4PaPo3U639v0yyioYA`mv+oW@_(=?02#w?RkaLs52#>9A2Zn=tFD=DT zA<_Iwu{SBNGT->aGW-k&bH?-}V*{~U)A2y5q|FS_8P!&!e|2+pTd+mS#?#>6^EAk; zYs$!^b+%cjDAmy0iz z`5MV!n!n4A(iPLDv z;q~bemuVSHmD|s6{03e%T3qzs_S;c!u>i^TYrUOx8G!mdV~DO%07Q^X5zB&>1g&=k zkH8x8qkw_{2uz2hTGiTAH-s%`KOk|UQSG%nzHkJ5lqwMziT`!lB0$(>TVnr$fWmsv zePA20ND^_*w;dMV3mj5N0FvGRahdzr+?9$8LLE?jFlz5=081ho5Qi0{T21m&V)q5{ z?PjVceJ1RwSNBR>WEi3CpTQwesstftM(~CIzs>@_upxv)rf7Y&R?*JO#!i{|$qRw5 zB^dk#K~t8nG!X0yA&h2k@aF#65|)w)h|6ZY8I*)-AXv8JCJLUDBbtHD*5O)VA1|Bi z0bq#8NJT+_e-4IXDJTKmrY|j9av~yj~M9YqePy= z-SqABbsFLRK3(@j*H(pMDK{>iw7V6QC9OYNG1T}&5+@**9r)qmPN2k9eC zPATquy5@TIhh%|yc$o#=RGd&t2B9}1S0hOyvm&53C-TWyD_K0Y{&9^n9UOQ@A>~J@ zx1?PqOhe^=;2&^?cuJ2FOMPtK{t*+sl0z&3Tr^=TOO(c*y9{>8X$oQc%u%I$<54J?dVvDS_k#x4iJUaJrf z>#KVMR-6LDy?ZF>jX@qJ_S1sNc3>rVYqGv3B7G~Jvu05svKG@8!?K|nhd&00ozffL z=Ro?LoeDh%*qI7ddB50Ali#2n0mY5Y#9NJhn8k3_#TH&t1DM2LdC=l)lSj-RTd`F7 z%|Nh|Rc+vS6KN^fPgbtwuE-JT%z%yRt~862R;e1ZYUWp^XHKXmT^VRRHTqG(IPGuj zRb)&|VNRL4GPJ@bygCw33DK^d@rJF^`d*2$E$saw`5XNxUR}2FdYFMA40K1{N%DAx zP^q11{XR}&a#~BcEWnSep1i1T(zXB@wB+xJnfG;_^LCvvQ9&|Tkjvary^oAw3twIq zu_<3d^@YkSpipPQWO~g#(-uW8NBw_6mkvpzR^yDv!yiruq2}1q9P=H+R4o^TADdv( zd|r5B`&Hwo_G)zXpzG(VuOe}Uy6Eys7i$;Blu}zem%EIbK~6(fyx8{(A5@)pEoEan zSKp%SUOpHd-IX=BUm7mF;H>3UF|amq9)%Y!dn0?7BI;Coz+b!BtLBVEZ?rhZ9G`HJ zF8%lm@~$@{Gq>#$a8J_E^4(yHHEk&?Y5XM!T{@fh^`l)2{l*5F3C=$ex98+%dLBXc zi@EBJ80}GhOP7jY#;FjzTi=dVa^ve6{!LwFosR~M=OsN!UNUe;N3V0beor?g`#npx zr4?V1!BfAaFkKIGjiY+2Fl;sER=0}sXznpjL%Q_5;8QYoAC$J*debVt{ScO9pBnF7 zp*_C$r9O+RdD8LQFEx;!rRR%lI$V6n^ALB^Rji~7MxfhpQDoBpi9-HC$(RO)?IpG+ z`u(OaT4@agm_Iu%VTI`!Rse%FO1pD5RCR2ChOvB`*FLw}{E=oC=w#WQaSQbl&HQ#W zm(vdJl`}PXda#$eS{dC~sx_ef>+3d20Ar2}JrO8_=_*xrW%6g64_(f|C-v8Jqv`xN zQA;;8S1Q7<+w1lFNX{p*Sa)4c02R{22O5B0+J47PE8`7}f917@<~Fyc_^BJB2;q;y z1qxGWl8&9YWyr=UC#LPt4?A6up;PD2ja5eN%bjUqV&B4?7oMv3PSa?h zCC}GGN}5EJ3P&uF*ta)go+&lgSXIpXg{BvoSayGYSR_n+seK?`YAnEItc?r%L3BkV z9C=Fg`U}dB2WYDRgD-F0wzBzap_dE0Rpr2{C>%j_QMM+ESh}$J8z#HEwLcRHOJr#i}aRZ?2nbUzHr&YU57ejfjqM zeiu!x!*XAIw|_x#^`zXIxO1nYe8|x$n*BveVe{}x3|FtGYxgRRmzK7S+2hjL+r~2b zwKmTmbk{w?QLIh2hm_@kLrwBb2&3JFgT)fA65mwZZa#Gc-7vG_ddnNV96hZA?$|nA z3SDHG@)vnfJGnkCw2{3CQ#9z7com^fpm!r}AAU@!;6q1W-(j`>#2_E_M)-gyIcP&B zh1o(+;p`6CeB>14%`@2&efM+G)5B_~%3EU^n?Ic&sB?CO4F=>E%4&Vnk+0^Daa62B@L(6@Y-SH)2xyw@}G>M z^Dcx4%99FFY~iXn>X+pno(l-#@ZjY&MDACTIB9f~40AFJamIjqDlf&TSe*g|zET4i z#-R(A;+^Lef8Z+2Cb;mESJJcTtwv5`7tOR8A-%Q2l;n4i67-0i7;rH``KR*6G5E)wJhNtiz@T=uBBqeVSd}EHgROB`bmJV zL>wGKxT1s3lgmUN?^^-5=qHKsL=D@!d_cMe#nL#E7;ghRB&FOLwedNwjc}1Qrt2#Yp>6F)T~KtvUyxlp;i&o_;0Hjswq$4x-TS{F z15`R?Lpp%ctcxtqK01&NpJq|k{(<0mUcCJoF|BqnMKk>gc)WE4A>ck!*YE(WVTvdi zOHqOd@yq)Qf>fB14mCa@+5=UOG=8>Ydjk+zxTiv-)88>f3Ws8GX=6^?+`k}a6MMs^ zP$b-YTIzs8yv zXZWzRSMOWBc6Dh%{*t_zaeAy;C0oaZptT1{8%{Mjg6jD%CaXKJk1CRvz2D$hz?$F$v0G7{fLV^=75<@@7oyD)1h5@ve^k8Qv^G|4*{4KZ+3vA}Gv0@6YYa2^ZWi~ zymegOH~FMCqp`zso5VDE&p4aJ=0#I~O^aQ_hnHJyQ~tDMaJg0SRnxGcYheK+4`6v_ z^g_>H3d0Xh5Cq;%*KJi&NaP2dur|KON%>CarfFc(aK?$%L2gLFpK2^U!FKQ5a|pVf z=X!@oW*{riR8mN&sdmnbhGs+>qEjPhqGNy>GjT%6Ai1>;zRnw>c_!F@@3==yMX zqQc>+7C&xm^eUauZyV9Xcc6u6U(~0NM=YfNV!OFqq@Qd6^=p?YH>n}!w)I=fWe=K6PvGjw##*AzVlX0qTKFI# zClyQHAA7Xx49~XyI1Bv&`aB<8K$n3+G*$l{XH0#M+~Tg~Wp5|EQF;TD*MlN8;y|B9 z(7~9H&N7(7J5hx3*UIqqi>AUzvsW~rmo<7N!aN$Zw(!+8q^NLY!45sA34F+Oen^#K}J(t zu+xFK(B{Hfoq$q6*Vy^Wkxl2J-BQP4g*vz1GsAT(%rE=j@q8>a4F+-~Y zrJ`*QVx*Vi(@8r*&h9>E;(S zlen-Y)4wh}xT_mrLsBJAZ$^9lx=kqEM&9r?_qn76{W?COtgNtfi=Be1$TPu-$tWQPt<(r1hnK-b zLrKV3+XM9HC}^1P{AkVOscY{m7zFrlL$QOs<+4S*BR0aW**}FjPTV&l-zmVT+Lsim#w3I{cX5hW96cSIwO)HP&79bS) z`5r7>TvPm#ecC<$t2Q@Ld`I!nDfc3~c%Y{%4 z6FO@k1co@0v}#>3q5ZudE8@4m)@DC(RTT+2j|r$;_veKkUl~E5wV~LB`(Y?3@zVeA zge)fDgvND$K44N5{s^>QxB&I$-4$fGiMy{zjO3u=!lMstjkJO?3k*_QLl6B!yz_Pk zoxVvbiP*Y=<)DXp_sv4!WQm#B(CYe(PtDGJV_<)Uk6PuEYf4) zs8(oKhGa@UYJqhHMBhFqm!jKtf53?da@gZcf%Q23^u{=3@!Z z@YuNZy0NQd@h*{yjl!L$*7I1?{RBVK3ydFAaX-E`l%wv9usyJ!y_5wpPJM~1(W)$Z z3Z{r7T*)F9(t7^|8T~nftd4y@XH66(Axw&<6X=6|Gs*&Ol&-V9I8{(T8_o|5BJjoi z0@_I!4DN6d&t*mbB@mJT%3_#5E^|g^JQ-K*EP;W z0P}$%_y6L2^d?T(0_3jq{FLDZ-RDk%!Q(NZ5vBHe0!HTDwX#NUx`O)U_qjKBBfD?x zsC>#-=H;$wbpK>F_PNUT;R>CK!V@FBHY?8yqY3qp)ryfLt*1YR8X=M|GKPCSA6?+C zHO4iDTFV0QZVhnf`;oZvXial@j!4A3YCfg01RI75=Vk76E?hu#wUcFfRc;tsE?RCt z4I7m8KI0HfkGH34TFAZ?Bzbuy+ug~$^YWt$o7;FMf@#}$^j@(D!P{GD1A3Ot6L%40 znEDix|7SMC!SL5#kd}=$6thYwHB+FqW+~PyINWeIIMdJB*472ecs_v|n-zZ+Is@!e zZw+zsvR@~()xJD7s|a={IzOw8oFeXXM~E4{_e$YT`mxH6quv3qDc)C}5HYbhi$iiq zG-j9vTFcfnQytk<)yLynUS{Nrgi3hr7Ir`v1^|;;(-(#%uBPJBS6fGi+CRFhY}><# zGf09R5*=d4ydoP$tl_R2$R!l51FB+FgU52>=(2t5d7=7%MZYExx(EB~9sT%8$czS7irT4$OP-&TO?sG4q zhdV21?5N}X9A?Y92y^9__0YrcX_~n6j}YJKtX>P(rLP|~wE8jwZISJ9?tY~OAG=7b zlc&aEHu1KkiwN^}d4nH&ZQQ$RirruBW+muG=J}n-mV7(`R+Yl9H@~bklZNh_=woW) zM9k$P+$BSq++Cd<;lii+7YpAFN1jocRp4*) z<3ibCJWO5te!7^ws@)96-o8Ye#^h`m)#eRm6?N5lDnT$O(gc^ZU)S#7r|Ux1s7#M> zW}DQ0r?zvcv-3=%E;Z#mA+Pc2DtPj^9yZ%j0+b8g~1%9NOV^zC^#5Ux!hBUyxqV7rYM7+Z`#jl$?*7DJ?Y5)(-HboTMS&;u}Qh5@|e-d_K;_27!JL%v{PZ)dcao`AlBmXj9AZh&?N-53jkt^(%SjLIC>6~xbJQ>K{ z1_zjUvV82|svl8bEv$3aI@+!jZf$j!?W?GoI<2N7^QHHj#P^%AbWV0Ib9PP2F(LWc zZQo5ErEI-yPh@-ZR<-%WI78qZzi&+>t0&iNHmRA%?YwjZOdxlJL5Sl{O zg?uqUNC3f0x(yG@RAm2l^BFB)WiCimtq$qn8`E>xs|~QygtH`6lntrKIQ}7&LOKua zRz#>&Z-!*O@{In@Y<+v}eSO{->SDy&-dK4&9^4(S8G*xrhFNeLZy z%WILk5C-%uVr(Su?Psl*byD%p{-`N@sG*hJ>Iu~t(NwqH+xF8 zbYB~fy}iDsr17mZG-M=U+?9`oL)sANjrz@Zsv^?s^E6v(;+pNPZHjtOCi8L(m?U4& z;Fle)*p@p!RkoWEJ>8T)xZZt`?PFrh>}A89bdhAN_p@c1eP;Bk2Xi-pBsoHmj{do7 zE)%zWY^5zN?=bQP=gC-j5D%!$Z$AC@6Ey&3&peWfcK$6TwErpqQ#*~@Z z3wbHbnaZTdWHG|LW%XP#-~06Y(_-TN%yf;vDJb?Kjf&^@+z;8|DNjg>|5T%zWsafx z!@K65$rz=Dfr4C{Enny01H!~AB)#GeZGe_MD{p8%51d+ZM|p8`G{Z8YCgxd4O)g6C90&-R{ zmUa*xc#}hhDqtZftlOk15aF1HsAXe>{+KiaSE=7q{0kar5921WgZrA1F(YDxC#@5g zx#7i^yvcpYT-eNxw5dGYu#w9J$?NaTHp$-Z_qxh7G>cb>>8XGHHDVABELett{y@YS zk~0qe%${W23Sf%&hey=JC$3!Z~xmd3dIS+MOESURR zI0Mi6?z}(gbT0E0GPl|%2+*%xHgO#bHJySGjW&+J2D#5>PB z9HxbGcxyY}x?meFS6F!Oc1zX8x#AXrD}}EJ*$r?y8Blod{%@79yylTBVJvDPFb)*<97uxFM^5K>zrh zvCND!q!62`GU9MT6dTs~FuQm=p{Kkf&Meb|mpgkcW23jdPrdEzD{2l=2*p2}PD9zk zvr}uETGRJ#Cd#R@$wwDOiW$d(Dmal{2u2ScDxcMd0)Vw;jvG!T?6in!Ijb-KK7!G^ z-*EEkPPkMYA$%BjNh#9r`&pvj({XGRM)PrXwI3bl(<#YxMI)}-duprkXd1CofSb6y z9szpkL5sC6ocE^b6cMhj_25uK)UbK^Gx8WHA>WmV#|9@HnmdR1Q=krMk^{K3pEi*} z?2@Ca@Tjz`FF0X}x4WDiJ_IGP~yq>iw3xIF2IYdI~ z`Kz&HCOW4UcOrlc2p}2vN>@tOnP;>H0*?;?3J!#8GKyy6e~uI>LFB+OvisT_8!!0i zl1HM^#>vkCC1Q_(In9g4QIWylqP;Blt(+x;gV#QeYCrTCbU#D`Tu|V-We9XP>kEMU zL#`3-g`k~lOLvpz`N=7d@0F(*M;DA2e6sW_aKfYst5PR51tbymbG_wY?#JX%R27tCNCxJrBVP#;`RVu}b#= zYwZnCPWG1t1XCDHO3W!34rywsEDA*VTrvcf>ba@_uVRi+k*|2+svZ31BH<$GVPbzq zl;pWo86JuiTc6pNn0uR+8IJ80Ic=^^h zCsv{vby9~w7a(5kAWrCk(tQW;4b=8|mU`y0<Ud5fYscyibE1Ai*KG`;LvQ;p2H}V<1%US%5zqz31Ovtd zMR805Tnu9ous)6eFcx8NFM1#e5fF3P*GfoNG34V`On9$zTvmxHgOh?x!boIL?29N= ztAqQPNc&+oB7}1c@|!)0Wa!GUQwCnFZm>Kb8s4&xZo8kzb@b%MUr@{5(gf^lKgv8% zJHs3h0K8`;0cC2elKc}9Le~cLPz<53zyEcCvKo1mO|`n)kGX}s>iyL;O68tZ1oMru zm|s7k3*^35OL1cIoW7BGE)wHLBd_^&=&}wVL1ffdM*q@JB043#MjkS^7r-;V@lAMb zs#^06QO_6lJ?zIzto>@rq5Itr65-Ck+W@OEzVF8=CPAhFH_PNgI2zCoN*#=e;5M&A zQAV!%mJZXigT#+X#7smLffD8OYLYBQUpHRIP2#0o-4|lKLsqJSzgnPieH2 zAW{P>e5(h#)o~U1@6Mof-*WnAoo#_?;JCyKNcqmrNeqq7nA;iKyI7T}ga})%ao+mx zD^(@M#1u!(+4cwl)|2OQx<>!GIMe^M+WUVTnEr{7&vffjB0*X;uYtc0?sxnvW>Nr3 z?Vx`mCoMH#QS@I+pMLt!#rFQaT+e?7S&wpDO5!n9s*ZemTIOX3Nx^OA#e-@bi V=r3?_w0p%6L&NImwQ}k8{{i8xFI)fs literal 0 HcmV?d00001 diff --git a/static/charge/connectGun.png b/static/charge/connectGun.png new file mode 100644 index 0000000000000000000000000000000000000000..fd5e9d14906f2ad699e17a2fe98424d901c32e2e GIT binary patch literal 28983 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 literal 0 HcmV?d00001 diff --git a/static/charge/error.png b/static/charge/error.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad827606f6af5ea0bb6e6fa803fbdf941640043 GIT binary patch literal 15358 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 literal 0 HcmV?d00001 diff --git a/static/charge/insertGun.png b/static/charge/insertGun.png new file mode 100644 index 0000000000000000000000000000000000000000..7ac80bac5a9c7aed8fbf8d498fb8515484a1d64c GIT binary patch literal 29767 zcmcF~2UHVLyKNAZCenL}3P@L~bOI_(r1u&TkR~0Z69nlU1O$X2MLJ0DMd=_SU3%{| zNC_e3jsLy>efPibuJy`VFRTMI%w*=A91TZDwSh)5_%NQj9^Xzq~Trl6-`V4$a=qhn&_1T!(Sv(VAq<-g1R zfQyHhhY>6wD8Mbq$<4$4_ab+0zn7#bOySXtY=wzac&@bL6{>+R#~7y3RdJR&kGIyvP-YFhfojLf|J zg2FFF#U-URwRQCkjZMuh-@AKy`}zk4hsGx+r>19q&(5u`t#52@ZSU;vAx{6ConKrc zuTX!-g$Kg_w_yRl|7~FZWn7fNxNZ;-;1dx39T(mWZ=m5*65PBebc;$so6ypY`o8cx zBAO>jpR2zSvy14Q(7tjXBcbCEUFAgl9oj!e_J208kpHKV{l~!m=eXuTxAF0SFAtv* z1OcJGM04lf_+OfcmiglRZ10x2CJhf}mxUWWg6HnX_i-}7e^o&0LGquT%x4Zw1J@=Z zLGmd^H36?qSZv{xT}!*SKhBG?Vj)vC2@BunvDu}<@~oo__|0Wgo3Oec73AOITuazJ=F2F2zcnS?|D?b8 z{>)GYtTTglLCBpRYdIOHgO!$E#S=6oO9ZnV=xbQNB;xO}%E=Ea{fd4l!a8Guc<9$M zTbqId1xi%CKzgl`ANn4i={2X#Xio62U+aAZ)d;=n;-w-oKdNbEv39*BZWBm=zCYIL z$i@LySKS{=eXi$3*!*o!r?U8jJBViYDckGn5>@PGi!yq)bOzUPkl@3TF?fxeZ0fPIJm!hv@9)}UynVXP>&QS)n{MN!h~`s#AHGP-g44-Nzs z#DNf*@!MTFtc~wBuAOV5LuD48!7ft$i_koWq}Y%Sj=z`cTvvAq^~1lxtczeIte&#L zftci)HNWQ2J8LYj^i4ycdQxc#xQMeq&)^NTEEhJRH9S#EBZo{6)lMay@x(Y zG5%FgdL8*DBHM#(p~I2GDuv%AxGQ&%<(Zc)Rx7WcW+#`(t z%@h3JJk_C!w}K_1tUl|iCxJB$c{XWVijP>^cu6Vl2>(!d2EEAs;MJ!|`{z+)fN2F< zbH?S^=^@jMW_9d`#_-ixx4z0^GuPJNwbsdm!)KM97e)5$)AxNUGWTshIKKjYiu-dz z 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 literal 0 HcmV?d00001 diff --git a/static/charge/noDevice.png b/static/charge/noDevice.png new file mode 100644 index 0000000000000000000000000000000000000000..2fa1a1f8af9119f98974b4f22b92c33d847b4f15 GIT binary patch literal 14957 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