uview-pro 0.6.18 → 0.6.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/changelog.md +1778 -1768
  2. package/components/u-action-sheet/types.ts +52 -52
  3. package/components/u-action-sheet/u-action-sheet.vue +196 -196
  4. package/components/u-action-sheet-item/types.ts +35 -35
  5. package/components/u-action-sheet-item/u-action-sheet-item.vue +85 -85
  6. package/components/u-alert-tips/types.ts +49 -49
  7. package/components/u-alert-tips/u-alert-tips.vue +239 -239
  8. package/components/u-avatar/types.ts +44 -44
  9. package/components/u-avatar/u-avatar.vue +218 -218
  10. package/components/u-avatar-cropper/types.ts +23 -23
  11. package/components/u-avatar-cropper/u-avatar-cropper.vue +299 -299
  12. package/components/u-avatar-cropper/weCropper.d.ts +62 -62
  13. package/components/u-avatar-cropper/weCropper.js +1281 -1281
  14. package/components/u-avatar-cropper/weCropper.ts +1276 -1276
  15. package/components/u-back-top/types.ts +44 -44
  16. package/components/u-back-top/u-back-top.vue +141 -141
  17. package/components/u-badge/types.ts +46 -46
  18. package/components/u-badge/u-badge.vue +153 -153
  19. package/components/u-button/types.ts +76 -76
  20. package/components/u-button/u-button.vue +608 -608
  21. package/components/u-calendar/types.ts +126 -126
  22. package/components/u-calendar/u-calendar.vue +1243 -1243
  23. package/components/u-car-keyboard/types.ts +22 -22
  24. package/components/u-car-keyboard/u-car-keyboard.vue +263 -263
  25. package/components/u-card/types.ts +69 -69
  26. package/components/u-card/u-card.vue +210 -210
  27. package/components/u-cell-group/types.ts +27 -27
  28. package/components/u-cell-group/u-cell-group.vue +60 -60
  29. package/components/u-cell-item/types.ts +64 -64
  30. package/components/u-cell-item/u-cell-item.vue +221 -221
  31. package/components/u-checkbox/types.ts +45 -45
  32. package/components/u-checkbox/u-checkbox.vue +363 -363
  33. package/components/u-checkbox-group/types.ts +45 -45
  34. package/components/u-checkbox-group/u-checkbox-group.vue +172 -172
  35. package/components/u-circle-progress/types.ts +63 -63
  36. package/components/u-circle-progress/u-circle-progress.vue +299 -299
  37. package/components/u-city-select/types.ts +30 -30
  38. package/components/u-city-select/u-city-select.vue +281 -281
  39. package/components/u-col/types.ts +40 -40
  40. package/components/u-col/u-col.vue +142 -142
  41. package/components/u-collapse/types.ts +41 -41
  42. package/components/u-collapse/u-collapse.vue +190 -190
  43. package/components/u-collapse-item/types.ts +35 -35
  44. package/components/u-collapse-item/u-collapse-item.vue +291 -291
  45. package/components/u-column-notice/types.ts +58 -58
  46. package/components/u-column-notice/u-column-notice.vue +223 -223
  47. package/components/u-config-provider/types.ts +53 -53
  48. package/components/u-config-provider/u-config-provider.vue +185 -185
  49. package/components/u-count-down/types.ts +52 -52
  50. package/components/u-count-down/u-count-down.vue +288 -288
  51. package/components/u-count-to/types.ts +42 -42
  52. package/components/u-count-to/u-count-to.vue +266 -266
  53. package/components/u-divider/types.ts +41 -41
  54. package/components/u-divider/u-divider.vue +146 -146
  55. package/components/u-dropdown/types.ts +67 -67
  56. package/components/u-dropdown/u-dropdown.vue +436 -436
  57. package/components/u-dropdown-item/types.ts +40 -40
  58. package/components/u-dropdown-item/u-dropdown-item.vue +124 -124
  59. package/components/u-empty/types.ts +46 -46
  60. package/components/u-empty/u-empty.vue +109 -109
  61. package/components/u-fab/types.ts +83 -83
  62. package/components/u-fab/u-fab.vue +330 -330
  63. package/components/u-field/types.ts +81 -81
  64. package/components/u-field/u-field.vue +398 -398
  65. package/components/u-form/types.ts +39 -39
  66. package/components/u-form/u-form.vue +175 -135
  67. package/components/u-form-item/types.ts +95 -95
  68. package/components/u-form-item/u-form-item.vue +563 -563
  69. package/components/u-full-screen/types.ts +26 -26
  70. package/components/u-full-screen/u-full-screen.vue +100 -100
  71. package/components/u-gap/types.ts +28 -28
  72. package/components/u-gap/u-gap.vue +50 -50
  73. package/components/u-grid/types.ts +29 -29
  74. package/components/u-grid/u-grid.vue +91 -91
  75. package/components/u-grid-item/types.ts +24 -24
  76. package/components/u-grid-item/u-grid-item.vue +130 -130
  77. package/components/u-icon/types.ts +69 -69
  78. package/components/u-icon/u-icon.vue +301 -301
  79. package/components/u-image/types.ts +61 -61
  80. package/components/u-image/u-image.vue +245 -245
  81. package/components/u-index-anchor/types.ts +24 -24
  82. package/components/u-index-anchor/u-index-anchor.vue +120 -120
  83. package/components/u-index-list/types.ts +44 -44
  84. package/components/u-index-list/u-index-list.vue +346 -346
  85. package/components/u-input/types.ts +165 -165
  86. package/components/u-input/u-input.vue +453 -453
  87. package/components/u-keyboard/types.ts +40 -40
  88. package/components/u-keyboard/u-keyboard.vue +201 -201
  89. package/components/u-lazy-load/types.ts +37 -37
  90. package/components/u-lazy-load/u-lazy-load.vue +246 -246
  91. package/components/u-line/types.ts +44 -44
  92. package/components/u-line/u-line.vue +68 -68
  93. package/components/u-line-progress/types.ts +58 -58
  94. package/components/u-line-progress/u-line-progress.vue +131 -131
  95. package/components/u-link/types.ts +54 -54
  96. package/components/u-link/u-link.vue +100 -100
  97. package/components/u-loading/types.ts +45 -45
  98. package/components/u-loading/u-loading.vue +106 -106
  99. package/components/u-loading-popup/types.ts +26 -26
  100. package/components/u-loading-popup/u-loading-popup.vue +254 -254
  101. package/components/u-loadmore/types.ts +88 -88
  102. package/components/u-loadmore/u-loadmore.vue +170 -170
  103. package/components/u-mask/types.ts +48 -48
  104. package/components/u-mask/u-mask.vue +113 -113
  105. package/components/u-message-input/types.ts +90 -90
  106. package/components/u-message-input/u-message-input.vue +283 -283
  107. package/components/u-modal/service.ts +48 -48
  108. package/components/u-modal/types.ts +139 -139
  109. package/components/u-modal/u-modal.vue +465 -465
  110. package/components/u-navbar/types.ts +104 -104
  111. package/components/u-navbar/u-navbar.vue +268 -268
  112. package/components/u-no-network/image.ts +2 -2
  113. package/components/u-no-network/types.ts +29 -29
  114. package/components/u-no-network/u-no-network.vue +313 -313
  115. package/components/u-notice-bar/types.ts +111 -111
  116. package/components/u-notice-bar/u-notice-bar.vue +191 -191
  117. package/components/u-number-box/types.ts +42 -42
  118. package/components/u-number-box/u-number-box.vue +322 -322
  119. package/components/u-number-keyboard/types.ts +26 -26
  120. package/components/u-number-keyboard/u-number-keyboard.vue +189 -189
  121. package/components/u-pagination/types.ts +38 -38
  122. package/components/u-pagination/u-pagination.vue +102 -102
  123. package/components/u-picker/types.ts +140 -140
  124. package/components/u-picker/u-picker.vue +854 -854
  125. package/components/u-popup/types.ts +64 -64
  126. package/components/u-popup/u-popup.vue +427 -427
  127. package/components/u-radio/types.ts +39 -39
  128. package/components/u-radio/u-radio.vue +349 -349
  129. package/components/u-radio-group/types.ts +40 -40
  130. package/components/u-radio-group/u-radio-group.vue +96 -96
  131. package/components/u-rate/types.ts +50 -50
  132. package/components/u-rate/u-rate.vue +250 -250
  133. package/components/u-read-more/types.ts +46 -46
  134. package/components/u-read-more/u-read-more.vue +182 -182
  135. package/components/u-root-portal/u-root-portal.vue +55 -55
  136. package/components/u-row/types.ts +30 -30
  137. package/components/u-row/u-row.vue +105 -105
  138. package/components/u-row-notice/types.ts +49 -49
  139. package/components/u-row-notice/u-row-notice.vue +257 -257
  140. package/components/u-safe-bottom/types.ts +19 -19
  141. package/components/u-safe-bottom/u-safe-bottom.vue +55 -55
  142. package/components/u-search/u-search.vue +297 -297
  143. package/components/u-section/types.ts +42 -42
  144. package/components/u-section/u-section.vue +156 -156
  145. package/components/u-select/types.ts +56 -56
  146. package/components/u-select/u-select.vue +447 -447
  147. package/components/u-skeleton/types.ts +89 -89
  148. package/components/u-skeleton/u-skeleton.vue +253 -253
  149. package/components/u-slider/types.ts +55 -55
  150. package/components/u-slider/u-slider.vue +422 -422
  151. package/components/u-status-bar/types.ts +21 -21
  152. package/components/u-status-bar/u-status-bar.vue +64 -64
  153. package/components/u-step/types.ts +37 -37
  154. package/components/u-step/u-step.vue +292 -292
  155. package/components/u-steps/types.ts +39 -39
  156. package/components/u-steps/u-steps.vue +105 -105
  157. package/components/u-sticky/types.ts +33 -33
  158. package/components/u-sticky/u-sticky.vue +177 -177
  159. package/components/u-subsection/types.ts +46 -46
  160. package/components/u-subsection/u-subsection.vue +358 -358
  161. package/components/u-swipe-action/types.ts +60 -60
  162. package/components/u-swipe-action/u-swipe-action.vue +276 -276
  163. package/components/u-swiper/types.ts +57 -57
  164. package/components/u-swiper/u-swiper.vue +308 -308
  165. package/components/u-switch/types.ts +39 -39
  166. package/components/u-switch/u-switch.vue +212 -212
  167. package/components/u-tabbar/types.ts +57 -57
  168. package/components/u-tabbar/u-tabbar.vue +480 -480
  169. package/components/u-table/types.ts +35 -35
  170. package/components/u-table/u-table.vue +67 -67
  171. package/components/u-tabs/types.ts +64 -64
  172. package/components/u-tabs/u-tabs.vue +328 -328
  173. package/components/u-tabs-swiper/types.ts +64 -64
  174. package/components/u-tabs-swiper/u-tabs-swiper.vue +407 -407
  175. package/components/u-tag/types.ts +47 -47
  176. package/components/u-tag/u-tag.vue +276 -276
  177. package/components/u-td/types.ts +22 -22
  178. package/components/u-td/u-td.vue +65 -65
  179. package/components/u-text/types.ts +80 -80
  180. package/components/u-text/u-text.vue +355 -355
  181. package/components/u-textarea/types.ts +105 -105
  182. package/components/u-textarea/u-textarea.vue +450 -450
  183. package/components/u-th/types.ts +22 -22
  184. package/components/u-th/u-th.vue +63 -63
  185. package/components/u-time-line/u-time-line.vue +64 -64
  186. package/components/u-time-line-item/types.ts +24 -24
  187. package/components/u-time-line-item/u-time-line-item.vue +89 -89
  188. package/components/u-toast/service.ts +40 -40
  189. package/components/u-toast/types.ts +54 -54
  190. package/components/u-toast/u-toast.vue +385 -385
  191. package/components/u-top-tips/types.ts +25 -25
  192. package/components/u-top-tips/u-top-tips.vue +130 -130
  193. package/components/u-tr/types.ts +19 -19
  194. package/components/u-tr/u-tr.vue +39 -39
  195. package/components/u-transition/types.ts +43 -43
  196. package/components/u-transition/u-transition.vue +437 -437
  197. package/components/u-upload/types.ts +171 -171
  198. package/components/u-upload/u-upload.vue +1605 -1605
  199. package/components/u-verification-code/types.ts +32 -32
  200. package/components/u-verification-code/u-verification-code.vue +183 -183
  201. package/components/u-waterfall/types.ts +26 -26
  202. package/components/u-waterfall/u-waterfall.vue +188 -188
  203. package/iconfont.css +913 -913
  204. package/index.scss +26 -26
  205. package/libs/config/color.ts +9 -9
  206. package/libs/config/config.ts +59 -59
  207. package/libs/config/theme-tokens.ts +102 -102
  208. package/libs/config/zIndex.ts +32 -32
  209. package/libs/css/color.scss +155 -155
  210. package/libs/css/common.scss +183 -183
  211. package/libs/css/style.components.scss +16 -16
  212. package/libs/css/style.h5.scss +8 -8
  213. package/libs/css/style.mp.scss +68 -68
  214. package/libs/css/style.nvue.scss +15 -15
  215. package/libs/css/style.theme.scss +56 -56
  216. package/libs/css/style.vue.scss +188 -188
  217. package/libs/function/$parent.ts +24 -24
  218. package/libs/function/addUnit.ts +50 -50
  219. package/libs/function/clipboard.ts +73 -73
  220. package/libs/function/color.ts +28 -28
  221. package/libs/function/colorGradient.ts +139 -139
  222. package/libs/function/debounce.ts +28 -28
  223. package/libs/function/deepClone.ts +39 -39
  224. package/libs/function/deepMerge.ts +35 -35
  225. package/libs/function/getParent.ts +63 -63
  226. package/libs/function/getRect.ts +26 -26
  227. package/libs/function/guid.ts +42 -42
  228. package/libs/function/md5.ts +403 -403
  229. package/libs/function/parent.ts +21 -21
  230. package/libs/function/queryParams.ts +64 -64
  231. package/libs/function/random.ts +16 -16
  232. package/libs/function/randomArray.ts +11 -11
  233. package/libs/function/route.ts +118 -118
  234. package/libs/function/styleUtils.ts +83 -83
  235. package/libs/function/sys.ts +15 -15
  236. package/libs/function/test.ts +289 -289
  237. package/libs/function/throttle.ts +31 -31
  238. package/libs/function/timeFormat.ts +55 -55
  239. package/libs/function/timeFrom.ts +48 -48
  240. package/libs/function/toast.ts +14 -14
  241. package/libs/function/trim.ts +21 -21
  242. package/libs/function/type2icon.ts +38 -38
  243. package/libs/hooks/index.ts +10 -10
  244. package/libs/hooks/useColor.ts +61 -61
  245. package/libs/hooks/useCompRelation.ts +424 -424
  246. package/libs/hooks/useDebounce.ts +15 -15
  247. package/libs/hooks/useEmitter.ts +79 -79
  248. package/libs/hooks/useLocale.ts +34 -34
  249. package/libs/hooks/useModal.ts +131 -131
  250. package/libs/hooks/useRect.ts +40 -40
  251. package/libs/hooks/useRouter.ts +173 -173
  252. package/libs/hooks/useTheme.ts +173 -173
  253. package/libs/hooks/useThrottle.ts +16 -16
  254. package/libs/hooks/useToast.ts +115 -115
  255. package/libs/index.ts +349 -349
  256. package/libs/request/auto-http.ts +76 -76
  257. package/libs/request/index.ts +301 -301
  258. package/libs/store/index.ts +88 -88
  259. package/libs/util/async-validator.d.ts +75 -75
  260. package/libs/util/async-validator.js +1 -1
  261. package/libs/util/calendar.d.ts +57 -57
  262. package/libs/util/canvas-2d.ts +182 -182
  263. package/libs/util/config-provider.ts +804 -804
  264. package/libs/util/emitter.ts +112 -112
  265. package/libs/util/mitt.ts +118 -118
  266. package/libs/util/system-theme.ts +25 -25
  267. package/locale/index.ts +2 -2
  268. package/locale/lang/en-US.ts +136 -136
  269. package/locale/lang/zh-CN.ts +136 -136
  270. package/package.json +1 -1
  271. package/plugins/root/page.ts +77 -77
  272. package/plugins/root/root.ts +53 -53
  273. package/theme.scss +149 -149
  274. package/types/components.d.ts +105 -105
  275. package/types/global.d.ts +470 -470
  276. package/types/ignore-errors.d.ts +30 -30
  277. package/types/index.d.ts +15 -15
  278. package/types/uni-app.d.ts +63 -63
@@ -1,313 +1,313 @@
1
- <template>
2
- <view class="u-no-network" v-if="!isConnected" :style="{ 'z-index': uZIndex }" @touchmove.stop.prevent="() => {}">
3
- <view class="u-inner">
4
- <image class="u-error-icon" :src="image" mode="widthFix"></image>
5
- <view class="u-tips">
6
- {{ getTips }}
7
- </view>
8
- <!-- 只有APP平台,才能跳转设置页,因为需要调用plus环境 -->
9
- <!-- #ifdef APP-PLUS -->
10
- <view class="u-to-setting">
11
- {{ t('uNoNetwork.checkNetwork') }}
12
- <text class="u-setting-btn" @tap="openSettings">
13
- {{ t('uNoNetwork.setting') }}
14
- </text>
15
- </view>
16
- <!-- #endif -->
17
- <view class="u-retry" :hover-stay-time="150" @tap="retry" hover-class="u-retry-hover">
18
- {{ t('uNoNetwork.retry') }}
19
- </view>
20
- </view>
21
- </view>
22
- </template>
23
-
24
- <script lang="ts">
25
- export default {
26
- name: 'u-no-network',
27
- options: {
28
- addGlobalClass: true,
29
- // #ifndef MP-TOUTIAO
30
- virtualHost: true,
31
- // #endif
32
- styleIsolation: 'shared'
33
- }
34
- };
35
- </script>
36
-
37
- <script setup lang="ts">
38
- import { ref, computed, onMounted } from 'vue';
39
- import { imageSrc } from './image';
40
- import { $u, useLocale } from '../..';
41
- import { NoNetworkProps } from './types';
42
-
43
- /**
44
- * noNetwork 无网络提示
45
- * @description 该组件无需任何配置,引入即可,内部自动处理所有功能和事件。
46
- * @tutorial https://uviewpro.cn/zh/components/noNetwork.html
47
- * @property {String} tips 没有网络时的提示语(默认哎呀,网络信号丢失)
48
- * @property {String | Number} zIndex 组件的z-index值(默认1080)
49
- * @property {String} image 无网络的图片提示,可用的src地址或base64图片
50
- * @event {Function} retry 用户点击页面的"重试"按钮时触发
51
- * @example <u-no-network></u-no-network>
52
- */
53
-
54
- const props = defineProps(NoNetworkProps);
55
-
56
- const { t } = useLocale();
57
-
58
- // 国际化计算属性
59
- const getTips = computed(() => props.tips || t('uNoNetwork.tips'));
60
-
61
- const isConnected = ref(true); // 是否有网络连接
62
- const networkType = ref<string>('none'); // 网络类型
63
- const isIOS = ref(false); // 是否iOS平台
64
-
65
- /**
66
- * 计算z-index,优先使用props,否则取$u.zIndex.noNetwork
67
- */
68
- const uZIndex = computed(() => {
69
- return props.zIndex ? props.zIndex : $u.zIndex.noNetwork;
70
- });
71
-
72
- /**
73
- * 组件挂载时初始化网络监听
74
- * 保留所有说明注释
75
- */
76
- onMounted(() => {
77
- isIOS.value = uni.getSystemInfoSync().platform === 'ios';
78
- uni.onNetworkStatusChange(res => {
79
- isConnected.value = res.isConnected;
80
- networkType.value = res.networkType;
81
- });
82
- uni.getNetworkType({
83
- success: res => {
84
- networkType.value = res.networkType;
85
- if (res.networkType == 'none') {
86
- isConnected.value = false;
87
- } else {
88
- isConnected.value = true;
89
- }
90
- }
91
- });
92
- });
93
-
94
- /**
95
- * 重新检查网络
96
- * @event retry 用户点击页面的"重试"按钮时触发
97
- */
98
- function retry() {
99
- uni.getNetworkType({
100
- success: res => {
101
- networkType.value = res.networkType;
102
- if (res.networkType == 'none') {
103
- uni.showToast({
104
- title: t('uNoNetwork.noConnection'),
105
- icon: 'none',
106
- position: 'top'
107
- });
108
- isConnected.value = false;
109
- } else {
110
- uni.showToast({
111
- title: t('uNoNetwork.connected'),
112
- icon: 'none',
113
- position: 'top'
114
- });
115
- isConnected.value = true;
116
- }
117
- }
118
- });
119
- emit('retry');
120
- }
121
-
122
- /**
123
- * 打开系统设置页(仅APP平台)
124
- */
125
- function openSettings() {
126
- if (networkType.value == 'none') {
127
- openSystemSettings();
128
- return;
129
- }
130
- }
131
-
132
- /**
133
- * 打开APP设置页(仅APP平台)
134
- */
135
- function openAppSettings() {
136
- gotoAppSetting();
137
- }
138
-
139
- /**
140
- * 打开系统设置页(仅APP平台)
141
- */
142
- function openSystemSettings() {
143
- // 以下方法来自5+范畴,如需深究,请自行查阅相关文档
144
- // https://ask.dcloud.net.cn/docs/
145
- if (isIOS.value) {
146
- gotoiOSSetting();
147
- } else {
148
- gotoAndroidSetting();
149
- }
150
- }
151
-
152
- /**
153
- * 获取蜂窝网络权限(仅APP平台)
154
- */
155
- function network() {
156
- // 该方法仅供参考,实际使用请查阅5+文档
157
- let result: number | null = null;
158
- const cellularData = plus.ios.newObject('CTCellularData');
159
- const state = cellularData.plusGetAttribute('restrictedState');
160
- if (state == 0) {
161
- result = null;
162
- } else if (state == 2) {
163
- result = 1;
164
- } else if (state == 1) {
165
- result = 2;
166
- }
167
- plus.ios.deleteObject(cellularData);
168
- return result;
169
- }
170
-
171
- /**
172
- * 跳转到APP设置页(仅APP平台)
173
- */
174
- function gotoAppSetting() {
175
- if (isIOS.value) {
176
- // @ts-ignore
177
- const UIApplication = plus.ios.import('UIApplication');
178
- // @ts-ignore
179
- const application2 = UIApplication.sharedApplication();
180
- // @ts-ignore
181
- const NSURL2 = plus.ios.import('NSURL');
182
- // @ts-ignore
183
- const setting2 = NSURL2.URLWithString('app-settings:');
184
- application2.openURL(setting2);
185
- // @ts-ignore
186
- plus.ios.deleteObject(setting2);
187
- // @ts-ignore
188
- plus.ios.deleteObject(NSURL2);
189
- // @ts-ignore
190
- plus.ios.deleteObject(application2);
191
- } else {
192
- // @ts-ignore
193
- const Intent = plus.android.importClass('android.content.Intent');
194
- // @ts-ignore
195
- const Settings = plus.android.importClass('android.provider.Settings');
196
- // @ts-ignore
197
- const Uri = plus.android.importClass('android.net.Uri');
198
- // @ts-ignore
199
- const mainActivity = plus.android.runtimeMainActivity();
200
- // @ts-ignore
201
- const intent = new Intent();
202
- // @ts-ignore
203
- intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
204
- // @ts-ignore
205
- const uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
206
- intent.setData(uri);
207
- // @ts-ignore
208
- mainActivity.startActivity(intent);
209
- }
210
- }
211
-
212
- /**
213
- * 跳转到iOS设置页(仅APP平台)
214
- */
215
- function gotoiOSSetting() {
216
- // @ts-ignore
217
- const UIApplication = plus.ios.import('UIApplication');
218
- // @ts-ignore
219
- const application2 = UIApplication.sharedApplication();
220
- // @ts-ignore
221
- const NSURL2 = plus.ios.import('NSURL');
222
- // @ts-ignore
223
- const setting2 = NSURL2.URLWithString('App-prefs:root=General');
224
- application2.openURL(setting2);
225
- // @ts-ignore
226
- plus.ios.deleteObject(setting2);
227
- // @ts-ignore
228
- plus.ios.deleteObject(NSURL2);
229
- // @ts-ignore
230
- plus.ios.deleteObject(application2);
231
- }
232
-
233
- /**
234
- * 跳转到Android设置页(仅APP平台)
235
- */
236
- function gotoAndroidSetting() {
237
- // @ts-ignore
238
- const Intent = plus.android.importClass('android.content.Intent');
239
- // @ts-ignore
240
- const Settings = plus.android.importClass('android.provider.Settings');
241
- // @ts-ignore
242
- const mainActivity = plus.android.runtimeMainActivity();
243
- // @ts-ignore
244
- const intent = new Intent(Settings.ACTION_SETTINGS);
245
- // @ts-ignore
246
- mainActivity.startActivity(intent);
247
- }
248
-
249
- // 组合式API emit
250
- const emit = defineEmits(['retry']);
251
-
252
- defineExpose({
253
- retry,
254
- openSettings,
255
- openAppSettings
256
- });
257
- </script>
258
-
259
- <style lang="scss" scoped>
260
- @import '../../libs/css/style.components.scss';
261
-
262
- .u-no-network {
263
- background-color: var(--u-bg-white);
264
- position: fixed;
265
- top: 0;
266
- left: 0;
267
- right: 0;
268
- bottom: 0;
269
- }
270
-
271
- .u-inner {
272
- height: 100vh;
273
- @include vue-flex;
274
- flex-direction: column;
275
- align-items: center;
276
- justify-content: center;
277
- margin-top: -15%;
278
- }
279
-
280
- .u-tips {
281
- color: $u-tips-color;
282
- font-size: 28rpx;
283
- padding: 30rpx 0;
284
- }
285
-
286
- .u-error-icon {
287
- width: 300rpx;
288
- }
289
-
290
- .u-to-setting {
291
- color: $u-light-color;
292
- font-size: 26rpx;
293
- }
294
-
295
- .u-setting-btn {
296
- font-size: 26rpx;
297
- color: $u-type-primary;
298
- }
299
-
300
- .u-retry {
301
- margin-top: 30rpx;
302
- border: 1px solid $u-tips-color;
303
- color: $u-tips-color;
304
- font-size: 28rpx;
305
- padding: 6rpx 30rpx;
306
- border-radius: 3px;
307
- }
308
-
309
- .u-retry-hover {
310
- color: var(--u-white-color);
311
- background-color: $u-tips-color;
312
- }
313
- </style>
1
+ <template>
2
+ <view class="u-no-network" v-if="!isConnected" :style="{ 'z-index': uZIndex }" @touchmove.stop.prevent="() => {}">
3
+ <view class="u-inner">
4
+ <image class="u-error-icon" :src="image" mode="widthFix"></image>
5
+ <view class="u-tips">
6
+ {{ getTips }}
7
+ </view>
8
+ <!-- 只有APP平台,才能跳转设置页,因为需要调用plus环境 -->
9
+ <!-- #ifdef APP-PLUS -->
10
+ <view class="u-to-setting">
11
+ {{ t('uNoNetwork.checkNetwork') }}
12
+ <text class="u-setting-btn" @tap="openSettings">
13
+ {{ t('uNoNetwork.setting') }}
14
+ </text>
15
+ </view>
16
+ <!-- #endif -->
17
+ <view class="u-retry" :hover-stay-time="150" @tap="retry" hover-class="u-retry-hover">
18
+ {{ t('uNoNetwork.retry') }}
19
+ </view>
20
+ </view>
21
+ </view>
22
+ </template>
23
+
24
+ <script lang="ts">
25
+ export default {
26
+ name: 'u-no-network',
27
+ options: {
28
+ addGlobalClass: true,
29
+ // #ifndef MP-TOUTIAO
30
+ virtualHost: true,
31
+ // #endif
32
+ styleIsolation: 'shared'
33
+ }
34
+ };
35
+ </script>
36
+
37
+ <script setup lang="ts">
38
+ import { ref, computed, onMounted } from 'vue';
39
+ import { imageSrc } from './image';
40
+ import { $u, useLocale } from '../..';
41
+ import { NoNetworkProps } from './types';
42
+
43
+ /**
44
+ * noNetwork 无网络提示
45
+ * @description 该组件无需任何配置,引入即可,内部自动处理所有功能和事件。
46
+ * @tutorial https://uviewpro.cn/zh/components/noNetwork.html
47
+ * @property {String} tips 没有网络时的提示语(默认哎呀,网络信号丢失)
48
+ * @property {String | Number} zIndex 组件的z-index值(默认1080)
49
+ * @property {String} image 无网络的图片提示,可用的src地址或base64图片
50
+ * @event {Function} retry 用户点击页面的"重试"按钮时触发
51
+ * @example <u-no-network></u-no-network>
52
+ */
53
+
54
+ const props = defineProps(NoNetworkProps);
55
+
56
+ const { t } = useLocale();
57
+
58
+ // 国际化计算属性
59
+ const getTips = computed(() => props.tips || t('uNoNetwork.tips'));
60
+
61
+ const isConnected = ref(true); // 是否有网络连接
62
+ const networkType = ref<string>('none'); // 网络类型
63
+ const isIOS = ref(false); // 是否iOS平台
64
+
65
+ /**
66
+ * 计算z-index,优先使用props,否则取$u.zIndex.noNetwork
67
+ */
68
+ const uZIndex = computed(() => {
69
+ return props.zIndex ? props.zIndex : $u.zIndex.noNetwork;
70
+ });
71
+
72
+ /**
73
+ * 组件挂载时初始化网络监听
74
+ * 保留所有说明注释
75
+ */
76
+ onMounted(() => {
77
+ isIOS.value = uni.getSystemInfoSync().platform === 'ios';
78
+ uni.onNetworkStatusChange(res => {
79
+ isConnected.value = res.isConnected;
80
+ networkType.value = res.networkType;
81
+ });
82
+ uni.getNetworkType({
83
+ success: res => {
84
+ networkType.value = res.networkType;
85
+ if (res.networkType == 'none') {
86
+ isConnected.value = false;
87
+ } else {
88
+ isConnected.value = true;
89
+ }
90
+ }
91
+ });
92
+ });
93
+
94
+ /**
95
+ * 重新检查网络
96
+ * @event retry 用户点击页面的"重试"按钮时触发
97
+ */
98
+ function retry() {
99
+ uni.getNetworkType({
100
+ success: res => {
101
+ networkType.value = res.networkType;
102
+ if (res.networkType == 'none') {
103
+ uni.showToast({
104
+ title: t('uNoNetwork.noConnection'),
105
+ icon: 'none',
106
+ position: 'top'
107
+ });
108
+ isConnected.value = false;
109
+ } else {
110
+ uni.showToast({
111
+ title: t('uNoNetwork.connected'),
112
+ icon: 'none',
113
+ position: 'top'
114
+ });
115
+ isConnected.value = true;
116
+ }
117
+ }
118
+ });
119
+ emit('retry');
120
+ }
121
+
122
+ /**
123
+ * 打开系统设置页(仅APP平台)
124
+ */
125
+ function openSettings() {
126
+ if (networkType.value == 'none') {
127
+ openSystemSettings();
128
+ return;
129
+ }
130
+ }
131
+
132
+ /**
133
+ * 打开APP设置页(仅APP平台)
134
+ */
135
+ function openAppSettings() {
136
+ gotoAppSetting();
137
+ }
138
+
139
+ /**
140
+ * 打开系统设置页(仅APP平台)
141
+ */
142
+ function openSystemSettings() {
143
+ // 以下方法来自5+范畴,如需深究,请自行查阅相关文档
144
+ // https://ask.dcloud.net.cn/docs/
145
+ if (isIOS.value) {
146
+ gotoiOSSetting();
147
+ } else {
148
+ gotoAndroidSetting();
149
+ }
150
+ }
151
+
152
+ /**
153
+ * 获取蜂窝网络权限(仅APP平台)
154
+ */
155
+ function network() {
156
+ // 该方法仅供参考,实际使用请查阅5+文档
157
+ let result: number | null = null;
158
+ const cellularData = plus.ios.newObject('CTCellularData');
159
+ const state = cellularData.plusGetAttribute('restrictedState');
160
+ if (state == 0) {
161
+ result = null;
162
+ } else if (state == 2) {
163
+ result = 1;
164
+ } else if (state == 1) {
165
+ result = 2;
166
+ }
167
+ plus.ios.deleteObject(cellularData);
168
+ return result;
169
+ }
170
+
171
+ /**
172
+ * 跳转到APP设置页(仅APP平台)
173
+ */
174
+ function gotoAppSetting() {
175
+ if (isIOS.value) {
176
+ // @ts-ignore
177
+ const UIApplication = plus.ios.import('UIApplication');
178
+ // @ts-ignore
179
+ const application2 = UIApplication.sharedApplication();
180
+ // @ts-ignore
181
+ const NSURL2 = plus.ios.import('NSURL');
182
+ // @ts-ignore
183
+ const setting2 = NSURL2.URLWithString('app-settings:');
184
+ application2.openURL(setting2);
185
+ // @ts-ignore
186
+ plus.ios.deleteObject(setting2);
187
+ // @ts-ignore
188
+ plus.ios.deleteObject(NSURL2);
189
+ // @ts-ignore
190
+ plus.ios.deleteObject(application2);
191
+ } else {
192
+ // @ts-ignore
193
+ const Intent = plus.android.importClass('android.content.Intent');
194
+ // @ts-ignore
195
+ const Settings = plus.android.importClass('android.provider.Settings');
196
+ // @ts-ignore
197
+ const Uri = plus.android.importClass('android.net.Uri');
198
+ // @ts-ignore
199
+ const mainActivity = plus.android.runtimeMainActivity();
200
+ // @ts-ignore
201
+ const intent = new Intent();
202
+ // @ts-ignore
203
+ intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
204
+ // @ts-ignore
205
+ const uri = Uri.fromParts('package', mainActivity.getPackageName(), null);
206
+ intent.setData(uri);
207
+ // @ts-ignore
208
+ mainActivity.startActivity(intent);
209
+ }
210
+ }
211
+
212
+ /**
213
+ * 跳转到iOS设置页(仅APP平台)
214
+ */
215
+ function gotoiOSSetting() {
216
+ // @ts-ignore
217
+ const UIApplication = plus.ios.import('UIApplication');
218
+ // @ts-ignore
219
+ const application2 = UIApplication.sharedApplication();
220
+ // @ts-ignore
221
+ const NSURL2 = plus.ios.import('NSURL');
222
+ // @ts-ignore
223
+ const setting2 = NSURL2.URLWithString('App-prefs:root=General');
224
+ application2.openURL(setting2);
225
+ // @ts-ignore
226
+ plus.ios.deleteObject(setting2);
227
+ // @ts-ignore
228
+ plus.ios.deleteObject(NSURL2);
229
+ // @ts-ignore
230
+ plus.ios.deleteObject(application2);
231
+ }
232
+
233
+ /**
234
+ * 跳转到Android设置页(仅APP平台)
235
+ */
236
+ function gotoAndroidSetting() {
237
+ // @ts-ignore
238
+ const Intent = plus.android.importClass('android.content.Intent');
239
+ // @ts-ignore
240
+ const Settings = plus.android.importClass('android.provider.Settings');
241
+ // @ts-ignore
242
+ const mainActivity = plus.android.runtimeMainActivity();
243
+ // @ts-ignore
244
+ const intent = new Intent(Settings.ACTION_SETTINGS);
245
+ // @ts-ignore
246
+ mainActivity.startActivity(intent);
247
+ }
248
+
249
+ // 组合式API emit
250
+ const emit = defineEmits(['retry']);
251
+
252
+ defineExpose({
253
+ retry,
254
+ openSettings,
255
+ openAppSettings
256
+ });
257
+ </script>
258
+
259
+ <style lang="scss" scoped>
260
+ @import '../../libs/css/style.components.scss';
261
+
262
+ .u-no-network {
263
+ background-color: var(--u-bg-white);
264
+ position: fixed;
265
+ top: 0;
266
+ left: 0;
267
+ right: 0;
268
+ bottom: 0;
269
+ }
270
+
271
+ .u-inner {
272
+ height: 100vh;
273
+ @include vue-flex;
274
+ flex-direction: column;
275
+ align-items: center;
276
+ justify-content: center;
277
+ margin-top: -15%;
278
+ }
279
+
280
+ .u-tips {
281
+ color: $u-tips-color;
282
+ font-size: 28rpx;
283
+ padding: 30rpx 0;
284
+ }
285
+
286
+ .u-error-icon {
287
+ width: 300rpx;
288
+ }
289
+
290
+ .u-to-setting {
291
+ color: $u-light-color;
292
+ font-size: 26rpx;
293
+ }
294
+
295
+ .u-setting-btn {
296
+ font-size: 26rpx;
297
+ color: $u-type-primary;
298
+ }
299
+
300
+ .u-retry {
301
+ margin-top: 30rpx;
302
+ border: 1px solid $u-tips-color;
303
+ color: $u-tips-color;
304
+ font-size: 28rpx;
305
+ padding: 6rpx 30rpx;
306
+ border-radius: 3px;
307
+ }
308
+
309
+ .u-retry-hover {
310
+ color: var(--u-white-color);
311
+ background-color: $u-tips-color;
312
+ }
313
+ </style>