jmash-core-mp 0.1.21 → 0.1.22

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 (150) hide show
  1. package/.editorconfig +9 -9
  2. package/README.md +60 -60
  3. package/babel.config.json +34 -34
  4. package/eslint.config.mjs +7 -7
  5. package/lib/api/auth/index.d.ts +21 -21
  6. package/lib/api/auth/index.js +199 -199
  7. package/lib/api/auth/types.d.ts +86 -86
  8. package/lib/api/auth/types.js +9 -9
  9. package/lib/api/cms/index.d.ts +20 -20
  10. package/lib/api/cms/index.js +161 -161
  11. package/lib/api/cms/types.d.ts +200 -200
  12. package/lib/api/cms/types.js +1 -1
  13. package/lib/api/constant.d.ts +5 -5
  14. package/lib/api/constant.js +6 -6
  15. package/lib/api/dict/index.d.ts +18 -18
  16. package/lib/api/dict/index.js +34 -34
  17. package/lib/api/dict/types.d.ts +28 -28
  18. package/lib/api/dict/types.js +1 -1
  19. package/lib/api/dicts.d.ts +18 -18
  20. package/lib/api/dicts.js +67 -67
  21. package/lib/api/files/index.d.ts +25 -25
  22. package/lib/api/files/index.js +135 -135
  23. package/lib/api/files/types.d.ts +38 -38
  24. package/lib/api/files/types.js +1 -1
  25. package/lib/api/index.d.ts +4 -4
  26. package/lib/api/index.js +6 -6
  27. package/lib/api/myorgan/types.d.ts +22 -22
  28. package/lib/api/myorgan/types.js +1 -1
  29. package/lib/api/region/index.d.ts +7 -7
  30. package/lib/api/region/index.js +19 -19
  31. package/lib/api/region/types.d.ts +19 -19
  32. package/lib/api/region/types.js +1 -1
  33. package/lib/api/storage/index.d.ts +10 -10
  34. package/lib/api/storage/index.js +43 -43
  35. package/lib/api/storage/types.d.ts +28 -28
  36. package/lib/api/storage/types.js +1 -1
  37. package/lib/api/types.d.ts +42 -42
  38. package/lib/api/types.js +1 -1
  39. package/lib/app.mpx.d.ts +1 -1
  40. package/lib/components/auth-user/jmash-update-user.mpx.d.ts +1 -1
  41. package/lib/components/auth-user/jmash-user.mpx.d.ts +1 -1
  42. package/lib/components/cms/jmash-cms-acticle-list.mpx.d.ts +1 -1
  43. package/lib/components/cms/jmash-cms-article-item.mpx.d.ts +1 -1
  44. package/lib/components/cms/jmash-cms-article-view.mpx.d.ts +1 -0
  45. package/lib/components/cms/jmash-cms-article.mpx.d.ts +1 -1
  46. package/lib/components/cms/jmash-cms-like.mpx.d.ts +1 -1
  47. package/lib/components/common/jmash-upload-picture.mpx.d.ts +1 -0
  48. package/lib/components/core/jmash-login.mpx.d.ts +1 -0
  49. package/lib/index.d.ts +21 -21
  50. package/lib/index.js +14 -14
  51. package/lib/packages/pages/cms/cms-article-list.mpx.d.ts +1 -1
  52. package/lib/pages/index.mpx.d.ts +1 -0
  53. package/lib/store/user.d.ts +31 -31
  54. package/lib/store/user.js +227 -227
  55. package/lib/utils/common.d.ts +35 -35
  56. package/lib/utils/common.js +166 -166
  57. package/lib/utils/config.d.ts +5 -5
  58. package/lib/utils/config.js +29 -29
  59. package/lib/utils/db.d.ts +21 -21
  60. package/lib/utils/db.js +84 -84
  61. package/lib/utils/grpc.d.ts +5 -5
  62. package/lib/utils/grpc.js +20 -20
  63. package/lib/utils/net.d.ts +7 -7
  64. package/lib/utils/net.js +15 -15
  65. package/lib/utils/request.d.ts +2 -2
  66. package/lib/utils/request.js +123 -123
  67. package/mpx.config.js +27 -27
  68. package/package.json +1 -1
  69. package/postcss.config.js +11 -11
  70. package/project.config.json +24 -24
  71. package/project.private.config.json +13 -13
  72. package/public/index.html +15 -15
  73. package/src/api/auth/index.ts +227 -227
  74. package/src/api/auth/types.ts +166 -166
  75. package/src/api/cms/index.ts +218 -218
  76. package/src/api/cms/types.ts +379 -379
  77. package/src/api/constant.ts +6 -6
  78. package/src/api/dict/index.ts +44 -44
  79. package/src/api/dict/types.ts +49 -49
  80. package/src/api/dicts.ts +72 -72
  81. package/src/api/files/index.ts +163 -163
  82. package/src/api/files/types.ts +67 -67
  83. package/src/api/index.ts +11 -11
  84. package/src/api/myorgan/types.ts +42 -42
  85. package/src/api/region/index.ts +23 -23
  86. package/src/api/region/types.ts +36 -36
  87. package/src/api/storage/index.ts +62 -62
  88. package/src/api/storage/types.ts +54 -54
  89. package/src/api/types.ts +72 -72
  90. package/src/app.mpx +71 -71
  91. package/src/components/auth-user/jmash-logout.mpx +91 -91
  92. package/src/components/auth-user/jmash-update-user.mpx +386 -386
  93. package/src/components/auth-user/jmash-update-user.web.mpx +366 -366
  94. package/src/components/auth-user/jmash-user.mpx +359 -359
  95. package/src/components/cms/jmash-cms-acticle-list.mpx +182 -182
  96. package/src/components/cms/jmash-cms-article-item.mpx +241 -241
  97. package/src/components/cms/jmash-cms-article-view.mpx +131 -131
  98. package/src/components/cms/jmash-cms-article.mpx +68 -68
  99. package/src/components/cms/jmash-cms-like.mpx +151 -151
  100. package/src/components/common/jmash-avatar-edit.mpx +153 -153
  101. package/src/components/common/jmash-cascader-region.mpx +112 -112
  102. package/src/components/common/jmash-menu.mpx +129 -129
  103. package/src/components/common/jmash-none-data.mpx +82 -82
  104. package/src/components/common/jmash-pic-swiper.mpx +71 -71
  105. package/src/components/common/jmash-popup.mpx +137 -137
  106. package/src/components/common/jmash-search.mpx +126 -126
  107. package/src/components/common/jmash-single-btn.mpx +53 -53
  108. package/src/components/common/jmash-stepper.mpx +214 -214
  109. package/src/components/common/jmash-tab-bar.mpx +50 -50
  110. package/src/components/common/jmash-textarea.mpx +88 -88
  111. package/src/components/common/jmash-top-navigation.mpx +203 -203
  112. package/src/components/common/jmash-upload-picture.mpx +129 -126
  113. package/src/components/core/jmash-cms-protocol.mpx +66 -66
  114. package/src/components/core/jmash-login.ali.mpx +284 -284
  115. package/src/components/core/jmash-login.mpx +348 -348
  116. package/src/components/core/jmash-login.web.mpx +421 -421
  117. package/src/components/core/jmash-popup-login.ali.mpx +311 -311
  118. package/src/components/core/jmash-popup-login.mpx +415 -415
  119. package/src/components/core/jmash-popup-login.web.mpx +389 -389
  120. package/src/custom-tab-bar/index.mpx +10 -10
  121. package/src/global.d.ts +11 -11
  122. package/src/index.ts +71 -71
  123. package/src/packages/index.mpx +10 -10
  124. package/src/packages/pages/auth/cms-protocol.mpx +31 -31
  125. package/src/packages/pages/auth/login.mpx +59 -59
  126. package/src/packages/pages/auth/update-user.mpx +17 -17
  127. package/src/packages/pages/cms/cms-article-list.mpx +164 -164
  128. package/src/packages/pages/cms/cms-article.mpx +32 -32
  129. package/src/pages/basic-component.mpx +30 -30
  130. package/src/pages/half-home.mpx +58 -58
  131. package/src/pages/home.mpx +52 -52
  132. package/src/pages/home2.mpx +47 -47
  133. package/src/pages/index.mpx +13 -3
  134. package/src/pages/tabbar/home.mpx +77 -77
  135. package/src/pages/tabbar/my.mpx +80 -80
  136. package/src/store/user.ts +270 -270
  137. package/src/styles/index.scss +20 -20
  138. package/src/styles/vars.scss +27 -27
  139. package/src/utils/common.ts +179 -179
  140. package/src/utils/config.ts +35 -35
  141. package/src/utils/db.ts +100 -100
  142. package/src/utils/grpc.ts +21 -21
  143. package/src/utils/net.ts +18 -18
  144. package/src/utils/request.ts +134 -134
  145. package/static/ali/mini.project.json +4 -4
  146. package/static/dd/project.config.json +15 -15
  147. package/static/swan/project.swan.json +14 -14
  148. package/static/tt/project.config.json +11 -11
  149. package/static/wx/project.config.json +40 -40
  150. package/uno.config.js +9 -9
@@ -1,348 +1,348 @@
1
- <template>
2
- <slot name="before"></slot>
3
- <view class="login_box">
4
- <!-- 头像区域 -->
5
- <view class="avatar-section">
6
- <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
7
- <image class="avatar-img" src="{{ avatarUrl || avatar }}" mode="aspectFill" />
8
- <view class="avatar-badge">
9
- <text class="badge-icon">✎</text>
10
- </view>
11
- </button>
12
- <text class="avatar-tip">点击更换头像</text>
13
- </view>
14
-
15
- <!-- 姓名输入 -->
16
- <view class="name-section">
17
- <view class="name-field">
18
- <text class="field-icon">👤</text>
19
- <input name="nickname" type="nickname" class="weui-input name-input" placeholder="请输入您的姓名" bindinput="validate"
20
- wx:model="{{ nameValue }}" />
21
- </view>
22
- </view>
23
-
24
- <button open-type="getPhoneNumber" style="{{ loginStyle }}" bind:getphonenumber="wxPhoneLogin"
25
- wx:if="{{ agreeStatus && isValidate }}">手机号授权登录</button>
26
- <button bind:tap="onLogin" style="{{ loginStyle }}" wx:else>授权登录</button>
27
- <checkbox-group bindchange="agreeChange" class="protocol_agree" wx:if="{{ showPrivacyPolicy }}">
28
- <label>
29
- <checkbox value="{{ agreeStatus+'' }}" checked="{{ agreeStatus }}" color="{{ checkedColor }}" />
30
- 已阅读
31
- <text id="user" style="{{ agreementStyle }}" catch:tap="goPolicyInfo">《用户使用协议》</text>
32
- <text id="privacy" style="{{ agreementStyle }}" catch:tap="goPolicyInfo">《隐私权政策》</text>
33
- </label>
34
- </checkbox-group>
35
- <slot name="after"></slot>
36
- </view>
37
- </template>
38
-
39
- <script lang="ts">
40
- import { useUserStore } from '../../store/user'
41
- import mpx, { createComponent, ref } from '@mpxjs/core'
42
-
43
- createComponent({
44
- options: {
45
- multipleSlots: true,
46
- },
47
- properties: {
48
- // 登录按钮样式
49
- loginStyle: {
50
- type: String,
51
- value:
52
- "width: 100%;background-color: #2563EB;color: #fff;font-size: 15px;",
53
- },
54
- // 单选框选中的颜色
55
- checkedColor: {
56
- type: String,
57
- value: "#0551ff",
58
- },
59
-
60
- // 协议样式
61
- agreementStyle: {
62
- type: String,
63
- value: "color: #0551ff",
64
- },
65
-
66
- //登录后跳转页面
67
- backurl: {
68
- type: String,
69
- value: "/pages/home",
70
- },
71
- // 登录后跳转方式 "redirectTo switchTab reLaunch navigateTo"
72
- linkType: {
73
- type: String,
74
- value: "redirectTo",
75
- },
76
- //遮罩层效果
77
- isShowModel: {
78
- type: Boolean,
79
- value: false,
80
- },
81
- // 是否显示隐私协议和政策
82
- showPrivacyPolicy: {
83
- type: Boolean,
84
- value: true
85
- }
86
- },
87
- setup(props) {
88
- let config = getApp().globalData.config || { resourceUrl: '', name: '应用' };
89
- let agreeStatus = ref(false);
90
- let nameValue = ref('');
91
- let avatarUrl = ref('');
92
- let isValidate = ref(false);
93
- let userStore = useUserStore();
94
- let avatar = ref(config.resourceUrl + "/images/components/gray_head2x.png");
95
- console.log(avatar);
96
- return {
97
- agreeStatus,
98
- nameValue,
99
- avatarUrl,
100
- isValidate,
101
- avatar,
102
- userStore
103
- };
104
- },
105
- methods: {
106
- // 协议勾选事件
107
- agreeChange() {
108
- this.agreeStatus = !this.agreeStatus;
109
- this.validate();
110
- },
111
- // 跳转隐私协议
112
- goPolicyInfo(e: any) {
113
- const id = e.currentTarget.id
114
- this.triggerEvent("policy", id);
115
- mpx.navigateTo({
116
- url: '/jmash/pages/auth/cms-protocol?channelAlias=' + id
117
- });
118
- },
119
- // 头像选择
120
- onChooseAvatar(e: any) {
121
- this.avatarUrl = e.detail.avatarUrl;
122
- this.validate();
123
- },
124
- // 验证
125
- validate() {
126
- if (!this.nameValue) {
127
- this.isValidate = false;
128
- return;
129
- }
130
- this.isValidate = true;
131
- },
132
- // 登录前验证
133
- onLogin() {
134
- console.log(this.agreeStatus);
135
- if (!this.agreeStatus && this.showPrivacyPolicy) {
136
- mpx.showModal({
137
- title: "提示",
138
- content: "您是否已阅读《用户使用协议》《隐私权政策》?",
139
- success: (res) => {
140
- if (res.confirm) {
141
- this.agreeStatus = true;
142
- }
143
- },
144
- });
145
- }
146
- if (!this.nameValue) {
147
- mpx.showToast({
148
- title: "请输入姓名",
149
- icon: "none",
150
- duration: 2000,
151
- });
152
- }
153
- },
154
- wxPhoneLogin(event: any) {
155
- let that = this;
156
- console.log(event);
157
- if (!this.agreeStatus && this.showPrivacyPolicy) {
158
- mpx.showModal({
159
- title: "提示",
160
- content: "您是否已阅读《用户使用协议》《隐私权政策》?",
161
- success(res) {
162
- if (res.confirm) {
163
- that.agreeStatus = true;
164
- }
165
- },
166
- });
167
- return;
168
- }
169
- if (!this.nameValue) {
170
- mpx.showToast({
171
- title: "请输入姓名",
172
- icon: "none",
173
- duration: 2000,
174
- });
175
- return;
176
- }
177
- if (event.detail.errMsg === "getPhoneNumber:ok") {
178
- console.log(event.detail.code);
179
- this.userStore.mpRegister(event.detail.code, this.nameValue).then((resp) => {
180
- if (resp.status === false) {
181
- mpx.showToast({
182
- title: resp.message ? resp.message : "登录失败联系管理员",
183
- icon: "none",
184
- duration: 2000,
185
- });
186
- return;
187
- }
188
- const backurl = decodeURIComponent(this.backurl);
189
- if (this.linkType === "switchTab") {
190
- mpx.switchTab({ url: backurl });
191
- } else if (this.linkType === "navigateTo") {
192
- mpx.navigateTo({ url: backurl });
193
- } else if (this.linkType === "redirectTo") {
194
- mpx.redirectTo({ url: backurl });
195
- } else {
196
- mpx.reLaunch({ url: backurl });
197
- }
198
- });
199
- } else {
200
- mpx.showToast({
201
- title: "您已取消授权",
202
- icon: "none",
203
- duration: 2000,
204
- });
205
- }
206
- }
207
- }
208
- })
209
- </script>
210
-
211
- <style lang="scss">
212
- @use "../../styles/index.scss" as *;
213
-
214
- $primary: #07c160;
215
- $primary-dark: #06ad56;
216
- $text-1: #111111;
217
- $text-2: #555555;
218
- $text-3: #888888;
219
- $border: #d0d0d0;
220
- $bg-page: #f2f2f2;
221
- $bg-card: #ffffff;
222
-
223
- .login_box {
224
- padding: 13% 3% 4%;
225
- display: flex;
226
- flex-direction: column;
227
- align-items: center;
228
-
229
- .login_btn {
230
- background-color: $blue-color;
231
- color: $white-color;
232
- padding: 16px 0;
233
- width: $width;
234
- font-size: $font-size;
235
- }
236
-
237
- .protocol_agree {
238
- color: $font-color-grey-opacity;
239
- font-size: $font-size;
240
- margin-top: 20px;
241
-
242
- text {
243
- color: $blue-color;
244
- }
245
- }
246
-
247
- .avatar-section {
248
- display: flex;
249
- flex-direction: column;
250
- align-items: center;
251
- margin-bottom: 32rpx;
252
-
253
- .avatar-wrapper {
254
- position: relative;
255
- margin: 0;
256
- padding: 0;
257
- background: none;
258
- border: none;
259
- line-height: 1;
260
-
261
- .avatar-img {
262
- width: 120rpx;
263
- height: 120rpx;
264
- border-radius: 50%;
265
- border: 4rpx solid $border;
266
- display: block;
267
- }
268
-
269
- .avatar-badge {
270
- position: absolute;
271
- right: 0;
272
- bottom: 0;
273
- width: 36rpx;
274
- height: 36rpx;
275
- background: $primary;
276
- border-radius: 50%;
277
- border: 3rpx solid $bg-card;
278
- display: flex;
279
- align-items: center;
280
- justify-content: center;
281
-
282
- .badge-icon {
283
- font-size: 16rpx;
284
- color: #fff;
285
- }
286
- }
287
- }
288
-
289
- .avatar-tip {
290
- margin-top: 16rpx;
291
- font-size: 20rpx;
292
- color: $text-3;
293
- }
294
- }
295
-
296
- .name-section {
297
- width: 100%;
298
- margin-bottom: 32rpx;
299
-
300
- .name-field {
301
- display: flex;
302
- align-items: center;
303
- background: $bg-page;
304
- border-radius: 20rpx;
305
- padding: 0 28rpx;
306
- height: 88rpx;
307
- border: 2rpx solid transparent;
308
- transition: border-color 0.25s, background-color 0.25s;
309
-
310
- .field-icon {
311
- font-size: 32rpx;
312
- margin-right: 16rpx;
313
- flex-shrink: 0;
314
- }
315
-
316
- .name-input {
317
- flex: 1;
318
- min-width: 0;
319
- font-size: 28rpx;
320
- color: $text-1;
321
- background: transparent;
322
- border: none;
323
- outline: none;
324
- height: 80rpx;
325
- line-height: 80rpx;
326
- padding: 0;
327
- }
328
-
329
- .name-input::placeholder {
330
- font-size: 28rpx;
331
- color: $text-3;
332
- }
333
- }
334
-
335
- .name-field:focus-within {
336
- border-color: $primary;
337
- background: $bg-card;
338
- }
339
- }
340
- }
341
- </style>
342
-
343
- <script type="application/json">
344
- {
345
- "component": true,
346
- "usingComponents": {}
347
- }
348
- </script>
1
+ <template>
2
+ <slot name="before"></slot>
3
+ <view class="login_box">
4
+ <!-- 头像区域 -->
5
+ <view class="avatar-section">
6
+ <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
7
+ <image class="avatar-img" src="{{ avatarUrl || avatar }}" mode="aspectFill" />
8
+ <view class="avatar-badge">
9
+ <text class="badge-icon">✎</text>
10
+ </view>
11
+ </button>
12
+ <text class="avatar-tip">点击更换头像</text>
13
+ </view>
14
+
15
+ <!-- 姓名输入 -->
16
+ <view class="name-section">
17
+ <view class="name-field">
18
+ <text class="field-icon">👤</text>
19
+ <input name="nickname" type="nickname" class="weui-input name-input" placeholder="请输入您的姓名" bindinput="validate"
20
+ wx:model="{{ nameValue }}" />
21
+ </view>
22
+ </view>
23
+
24
+ <button open-type="getPhoneNumber" style="{{ loginStyle }}" bind:getphonenumber="wxPhoneLogin"
25
+ wx:if="{{ agreeStatus && isValidate }}">手机号授权登录</button>
26
+ <button bind:tap="onLogin" style="{{ loginStyle }}" wx:else>授权登录</button>
27
+ <checkbox-group bindchange="agreeChange" class="protocol_agree" wx:if="{{ showPrivacyPolicy }}">
28
+ <label>
29
+ <checkbox value="{{ agreeStatus+'' }}" checked="{{ agreeStatus }}" color="{{ checkedColor }}" />
30
+ 已阅读
31
+ <text id="user" style="{{ agreementStyle }}" catch:tap="goPolicyInfo">《用户使用协议》</text>
32
+ <text id="privacy" style="{{ agreementStyle }}" catch:tap="goPolicyInfo">《隐私权政策》</text>
33
+ </label>
34
+ </checkbox-group>
35
+ <slot name="after"></slot>
36
+ </view>
37
+ </template>
38
+
39
+ <script lang="ts">
40
+ import { useUserStore } from '../../store/user'
41
+ import mpx, { createComponent, ref } from '@mpxjs/core'
42
+
43
+ createComponent({
44
+ options: {
45
+ multipleSlots: true,
46
+ },
47
+ properties: {
48
+ // 登录按钮样式
49
+ loginStyle: {
50
+ type: String,
51
+ value:
52
+ "width: 100%;background-color: #2563EB;color: #fff;font-size: 15px;",
53
+ },
54
+ // 单选框选中的颜色
55
+ checkedColor: {
56
+ type: String,
57
+ value: "#0551ff",
58
+ },
59
+
60
+ // 协议样式
61
+ agreementStyle: {
62
+ type: String,
63
+ value: "color: #0551ff",
64
+ },
65
+
66
+ //登录后跳转页面
67
+ backurl: {
68
+ type: String,
69
+ value: "/pages/home",
70
+ },
71
+ // 登录后跳转方式 "redirectTo switchTab reLaunch navigateTo"
72
+ linkType: {
73
+ type: String,
74
+ value: "redirectTo",
75
+ },
76
+ //遮罩层效果
77
+ isShowModel: {
78
+ type: Boolean,
79
+ value: false,
80
+ },
81
+ // 是否显示隐私协议和政策
82
+ showPrivacyPolicy: {
83
+ type: Boolean,
84
+ value: true
85
+ }
86
+ },
87
+ setup(props) {
88
+ let config = getApp().globalData.config || { resourceUrl: '', name: '应用' };
89
+ let agreeStatus = ref(false);
90
+ let nameValue = ref('');
91
+ let avatarUrl = ref('');
92
+ let isValidate = ref(false);
93
+ let userStore = useUserStore();
94
+ let avatar = ref(config.resourceUrl + "/images/components/gray_head2x.png");
95
+ console.log(avatar);
96
+ return {
97
+ agreeStatus,
98
+ nameValue,
99
+ avatarUrl,
100
+ isValidate,
101
+ avatar,
102
+ userStore
103
+ };
104
+ },
105
+ methods: {
106
+ // 协议勾选事件
107
+ agreeChange() {
108
+ this.agreeStatus = !this.agreeStatus;
109
+ this.validate();
110
+ },
111
+ // 跳转隐私协议
112
+ goPolicyInfo(e: any) {
113
+ const id = e.currentTarget.id
114
+ this.triggerEvent("policy", id);
115
+ mpx.navigateTo({
116
+ url: '/jmash/pages/auth/cms-protocol?channelAlias=' + id
117
+ });
118
+ },
119
+ // 头像选择
120
+ onChooseAvatar(e: any) {
121
+ this.avatarUrl = e.detail.avatarUrl;
122
+ this.validate();
123
+ },
124
+ // 验证
125
+ validate() {
126
+ if (!this.nameValue) {
127
+ this.isValidate = false;
128
+ return;
129
+ }
130
+ this.isValidate = true;
131
+ },
132
+ // 登录前验证
133
+ onLogin() {
134
+ console.log(this.agreeStatus);
135
+ if (!this.agreeStatus && this.showPrivacyPolicy) {
136
+ mpx.showModal({
137
+ title: "提示",
138
+ content: "您是否已阅读《用户使用协议》《隐私权政策》?",
139
+ success: (res) => {
140
+ if (res.confirm) {
141
+ this.agreeStatus = true;
142
+ }
143
+ },
144
+ });
145
+ }
146
+ if (!this.nameValue) {
147
+ mpx.showToast({
148
+ title: "请输入姓名",
149
+ icon: "none",
150
+ duration: 2000,
151
+ });
152
+ }
153
+ },
154
+ wxPhoneLogin(event: any) {
155
+ let that = this;
156
+ console.log(event);
157
+ if (!this.agreeStatus && this.showPrivacyPolicy) {
158
+ mpx.showModal({
159
+ title: "提示",
160
+ content: "您是否已阅读《用户使用协议》《隐私权政策》?",
161
+ success(res) {
162
+ if (res.confirm) {
163
+ that.agreeStatus = true;
164
+ }
165
+ },
166
+ });
167
+ return;
168
+ }
169
+ if (!this.nameValue) {
170
+ mpx.showToast({
171
+ title: "请输入姓名",
172
+ icon: "none",
173
+ duration: 2000,
174
+ });
175
+ return;
176
+ }
177
+ if (event.detail.errMsg === "getPhoneNumber:ok") {
178
+ console.log(event.detail.code);
179
+ this.userStore.mpRegister(event.detail.code, this.nameValue).then((resp) => {
180
+ if (resp.status === false) {
181
+ mpx.showToast({
182
+ title: resp.message ? resp.message : "登录失败联系管理员",
183
+ icon: "none",
184
+ duration: 2000,
185
+ });
186
+ return;
187
+ }
188
+ const backurl = decodeURIComponent(this.backurl);
189
+ if (this.linkType === "switchTab") {
190
+ mpx.switchTab({ url: backurl });
191
+ } else if (this.linkType === "navigateTo") {
192
+ mpx.navigateTo({ url: backurl });
193
+ } else if (this.linkType === "redirectTo") {
194
+ mpx.redirectTo({ url: backurl });
195
+ } else {
196
+ mpx.reLaunch({ url: backurl });
197
+ }
198
+ });
199
+ } else {
200
+ mpx.showToast({
201
+ title: "您已取消授权",
202
+ icon: "none",
203
+ duration: 2000,
204
+ });
205
+ }
206
+ }
207
+ }
208
+ })
209
+ </script>
210
+
211
+ <style lang="scss">
212
+ @use "../../styles/index.scss" as *;
213
+
214
+ $primary: #07c160;
215
+ $primary-dark: #06ad56;
216
+ $text-1: #111111;
217
+ $text-2: #555555;
218
+ $text-3: #888888;
219
+ $border: #d0d0d0;
220
+ $bg-page: #f2f2f2;
221
+ $bg-card: #ffffff;
222
+
223
+ .login_box {
224
+ padding: 13% 3% 4%;
225
+ display: flex;
226
+ flex-direction: column;
227
+ align-items: center;
228
+
229
+ .login_btn {
230
+ background-color: $blue-color;
231
+ color: $white-color;
232
+ padding: 16px 0;
233
+ width: $width;
234
+ font-size: $font-size;
235
+ }
236
+
237
+ .protocol_agree {
238
+ color: $font-color-grey-opacity;
239
+ font-size: $font-size;
240
+ margin-top: 20px;
241
+
242
+ text {
243
+ color: $blue-color;
244
+ }
245
+ }
246
+
247
+ .avatar-section {
248
+ display: flex;
249
+ flex-direction: column;
250
+ align-items: center;
251
+ margin-bottom: 32rpx;
252
+
253
+ .avatar-wrapper {
254
+ position: relative;
255
+ margin: 0;
256
+ padding: 0;
257
+ background: none;
258
+ border: none;
259
+ line-height: 1;
260
+
261
+ .avatar-img {
262
+ width: 120rpx;
263
+ height: 120rpx;
264
+ border-radius: 50%;
265
+ border: 4rpx solid $border;
266
+ display: block;
267
+ }
268
+
269
+ .avatar-badge {
270
+ position: absolute;
271
+ right: 0;
272
+ bottom: 0;
273
+ width: 36rpx;
274
+ height: 36rpx;
275
+ background: $primary;
276
+ border-radius: 50%;
277
+ border: 3rpx solid $bg-card;
278
+ display: flex;
279
+ align-items: center;
280
+ justify-content: center;
281
+
282
+ .badge-icon {
283
+ font-size: 16rpx;
284
+ color: #fff;
285
+ }
286
+ }
287
+ }
288
+
289
+ .avatar-tip {
290
+ margin-top: 16rpx;
291
+ font-size: 20rpx;
292
+ color: $text-3;
293
+ }
294
+ }
295
+
296
+ .name-section {
297
+ width: 100%;
298
+ margin-bottom: 32rpx;
299
+
300
+ .name-field {
301
+ display: flex;
302
+ align-items: center;
303
+ background: $bg-page;
304
+ border-radius: 20rpx;
305
+ padding: 0 28rpx;
306
+ height: 88rpx;
307
+ border: 2rpx solid transparent;
308
+ transition: border-color 0.25s, background-color 0.25s;
309
+
310
+ .field-icon {
311
+ font-size: 32rpx;
312
+ margin-right: 16rpx;
313
+ flex-shrink: 0;
314
+ }
315
+
316
+ .name-input {
317
+ flex: 1;
318
+ min-width: 0;
319
+ font-size: 28rpx;
320
+ color: $text-1;
321
+ background: transparent;
322
+ border: none;
323
+ outline: none;
324
+ height: 80rpx;
325
+ line-height: 80rpx;
326
+ padding: 0;
327
+ }
328
+
329
+ .name-input::placeholder {
330
+ font-size: 28rpx;
331
+ color: $text-3;
332
+ }
333
+ }
334
+
335
+ .name-field:focus-within {
336
+ border-color: $primary;
337
+ background: $bg-card;
338
+ }
339
+ }
340
+ }
341
+ </style>
342
+
343
+ <script type="application/json">
344
+ {
345
+ "component": true,
346
+ "usingComponents": {}
347
+ }
348
+ </script>