@uxda/appkit 4.2.82 → 4.2.84

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 (127) hide show
  1. package/.eslintrc.mjs +7 -7
  2. package/README.md +187 -187
  3. package/babel.config.js +12 -12
  4. package/dist/appkit.css +41 -3
  5. package/dist/index.js +994 -535
  6. package/package.json +81 -81
  7. package/project.config.json +15 -15
  8. package/project.tt.json +13 -13
  9. package/rollup.config.mjs +77 -77
  10. package/src/Appkit.ts +67 -67
  11. package/src/balance/api/endpoints.ts +133 -133
  12. package/src/balance/api/index.ts +112 -106
  13. package/src/balance/components/AccountView.vue +773 -773
  14. package/src/balance/components/BalanceCard.vue +210 -210
  15. package/src/balance/components/BalanceReminder.vue +84 -84
  16. package/src/balance/components/ConsumptionFilter.vue +218 -218
  17. package/src/balance/components/ConsumptionRules.vue +68 -68
  18. package/src/balance/components/DateFilter.vue +259 -259
  19. package/src/balance/components/DateRange.vue +111 -111
  20. package/src/balance/components/ListFilter.vue +62 -62
  21. package/src/balance/components/ListFilterPicker.vue +191 -191
  22. package/src/balance/components/PromoterCard.vue +310 -310
  23. package/src/balance/components/SecondBalance.vue +77 -77
  24. package/src/balance/components/Tip.vue +45 -45
  25. package/src/balance/components/index.ts +8 -8
  26. package/src/balance/types.ts +99 -99
  27. package/src/components/bt-cropper/index.vue +730 -730
  28. package/src/components/bt-cropper/utils/calcCropper.js +42 -42
  29. package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
  30. package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
  31. package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
  32. package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
  33. package/src/components/bt-cropper/utils/ratio.js +3 -3
  34. package/src/components/bt-cropper/utils/tools.js +25 -25
  35. package/src/components/dd-area/index.vue +225 -225
  36. package/src/components/dd-icon/doc.md +21 -21
  37. package/src/components/dd-icon/index.vue +23 -23
  38. package/src/components/dd-notice-bar/index.vue +78 -78
  39. package/src/components/dd-search/doc.md +34 -34
  40. package/src/components/dd-search/index.vue +168 -168
  41. package/src/components/dd-selector/index.vue +124 -124
  42. package/src/components/dd-skeleton/doc.md +19 -19
  43. package/src/components/dd-skeleton/index.vue +36 -36
  44. package/src/global.ts +6 -6
  45. package/src/index.ts +93 -93
  46. package/src/main.scss +1 -1
  47. package/src/notice/api/endpoints.ts +54 -17
  48. package/src/notice/api/index.ts +115 -106
  49. package/src/notice/components/NoticeBanner.vue +247 -247
  50. package/src/notice/components/NoticeEntry.vue +99 -99
  51. package/src/notice/components/NoticeList.vue +311 -311
  52. package/src/notice/components/NoticeList2.vue +243 -0
  53. package/src/notice/components/NoticePopup.vue +163 -163
  54. package/src/notice/components/index.ts +6 -5
  55. package/src/notice/components/useCommonList.ts +86 -86
  56. package/src/notice/components/useNotice.ts +35 -35
  57. package/src/notice/index.ts +1 -1
  58. package/src/notice/types.ts +25 -25
  59. package/src/payment/api/config.ts +7 -7
  60. package/src/payment/api/endpoints.ts +95 -95
  61. package/src/payment/api/index.ts +101 -101
  62. package/src/payment/components/AmountPicker.vue +90 -90
  63. package/src/payment/components/RechargeResult.vue +69 -69
  64. package/src/payment/components/RechargeView.vue +190 -190
  65. package/src/payment/components/RightsPicker.vue +105 -105
  66. package/src/payment/components/TradeView.vue +363 -363
  67. package/src/payment/components/UserAgreement.vue +234 -234
  68. package/src/payment/components/index.ts +22 -22
  69. package/src/payment/index.ts +5 -5
  70. package/src/payment/services/index.ts +16 -16
  71. package/src/payment/services/invoke-recharge.ts +25 -25
  72. package/src/payment/services/request-payment.ts +130 -130
  73. package/src/payment/types.ts +32 -32
  74. package/src/register/components/SelfRegistration.vue +233 -233
  75. package/src/register/components/index.ts +2 -2
  76. package/src/scenarios/components/SharePoster.vue +364 -364
  77. package/src/scenarios/components/index.ts +2 -2
  78. package/src/scenarios/components/poster-paste.vue +93 -93
  79. package/src/scenarios/components/share-poster.md +273 -273
  80. package/src/shared/components/AppDrawer.vue +53 -53
  81. package/src/shared/components/AppVerify.vue +128 -128
  82. package/src/shared/components/DeviceVersion.vue +78 -78
  83. package/src/shared/components/EmptyView.vue +33 -33
  84. package/src/shared/components/OcrBusinessLicense.vue +137 -137
  85. package/src/shared/components/OcrIcon.vue +229 -229
  86. package/src/shared/components/PageHeader.vue +84 -84
  87. package/src/shared/components/index.ts +8 -8
  88. package/src/shared/composables/index.ts +9 -9
  89. package/src/shared/composables/useAmount.ts +46 -46
  90. package/src/shared/composables/useCountdown.ts +46 -46
  91. package/src/shared/composables/useCrypto.ts +76 -76
  92. package/src/shared/composables/useDeviceEnv.ts +11 -11
  93. package/src/shared/composables/useDragBox.ts +97 -97
  94. package/src/shared/composables/useEncode.ts +43 -43
  95. package/src/shared/composables/useLogger.ts +131 -131
  96. package/src/shared/composables/useSafeArea.ts +46 -46
  97. package/src/shared/composables/useTabbar.ts +24 -24
  98. package/src/shared/composables/useUpload.ts +61 -61
  99. package/src/shared/composables/useValidator.ts +32 -32
  100. package/src/shared/composables/useWxAuth.ts +48 -48
  101. package/src/shared/http/Http.ts +148 -146
  102. package/src/shared/http/index.ts +1 -1
  103. package/src/shared/http/types.ts +163 -160
  104. package/src/shared/index.ts +8 -8
  105. package/src/shared/weixin/index.ts +9 -9
  106. package/src/shared/weixin/jssdk.ts +103 -103
  107. package/src/shared/weixin/payment.ts +38 -38
  108. package/src/styles/vars.scss +3 -3
  109. package/src/user/api/endpoints.ts +17 -17
  110. package/src/user/api/index.ts +117 -111
  111. package/src/user/components/LoginSetting.vue +114 -114
  112. package/src/user/components/UserAuth.vue +220 -220
  113. package/src/user/components/UserBinding.vue +277 -277
  114. package/src/user/components/UserBindingSuccess.vue +80 -80
  115. package/src/user/components/UserEntry.vue +139 -139
  116. package/src/user/components/UserFeedback.vue +427 -427
  117. package/src/user/components/UserFeedbackEntry.vue +175 -175
  118. package/src/user/components/UserHeadCrop.vue +65 -65
  119. package/src/user/components/UserInfo.vue +708 -708
  120. package/src/user/components/UserResourceEmpty.vue +75 -75
  121. package/src/user/components/index.ts +23 -23
  122. package/src/user/index.ts +1 -1
  123. package/src/utils/utils.ts +28 -28
  124. package/tsconfig.json +30 -30
  125. package/types/global.d.ts +22 -22
  126. package/types/vue.d.ts +10 -10
  127. /package/dist/assets/{asset-DcH8Kg-2 → asset-3B_CoPto} +0 -0
@@ -1,277 +1,277 @@
1
- <template>
2
- <div class="user-binding">
3
- <div class="user-binding-layout">
4
- <img class="user-binding-img" :src="`https://cdn.ddjf.com/static/images/customer-center/user-${current === 1 ? 'binding' : 'auth'
5
- }.png`" />
6
- <nut-steps :current="current" class="user-binding-steps">
7
- <nut-step title="身份认证">1</nut-step>
8
- <nut-step title="换绑手机">2</nut-step>
9
- </nut-steps>
10
- </div>
11
-
12
- <div class="user-binding-layout user-binding-inputlayout" style="flex: 1" v-if="current === 1">
13
- <nut-form>
14
- <nut-form-item label="手机号码" label-align="left">
15
- <nut-input v-model="authState.mobile" placeholder="请输入手机号码" :max-length="11" readonly input-align="right" />
16
- </nut-form-item>
17
- <nut-form-item label="验证码" label-align="left">
18
- <nut-input v-model="authState.code" placeholder="请输入验证码" :max-length="6" input-align="right">
19
- <template #right>
20
- <nut-button :disabled="countdownActive" class="user-binding-codebtn" type="default" @click="onAuthCode">{{
21
- countdownText }}</nut-button>
22
- </template>
23
- </nut-input>
24
- </nut-form-item>
25
- </nut-form>
26
-
27
- <nut-button class="user-binding-btn" :disabled="!authState.code" block type="primary"
28
- @click="onAuth">提交</nut-button>
29
- </div>
30
-
31
- <div class="user-binding-layout user-binding-inputlayout" style="flex: 1" v-else>
32
- <nut-form>
33
- <nut-form-item label="手机号码" label-align="left">
34
- <nut-input v-model="bindingState.mobile" placeholder="请输入新手机号码" :max-length="11" input-align="right" />
35
- </nut-form-item>
36
- <nut-form-item label="验证码" label-align="left">
37
- <nut-input v-model="bindingState.code" placeholder="请输入验证码" :max-length="6" input-align="right">
38
- <template #right>
39
- <nut-button :disabled="countdownActive1" class="user-binding-codebtn" type="default"
40
- @click="onBindingCode">{{ countdownText1 }}</nut-button>
41
- </template>
42
- </nut-input>
43
- </nut-form-item>
44
- </nut-form>
45
-
46
- <nut-button class="user-binding-btn" :disabled="!bindingState.code || !bindingState.mobile" block type="primary"
47
- @click="onBinding">提交</nut-button>
48
- </div>
49
- </div>
50
- </template>
51
-
52
- <script lang="ts" setup>
53
- import { ref, reactive, onMounted } from 'vue'
54
- import { useCountdown } from '../../shared/composables/useCountdown'
55
- import { useValidator } from '../../shared/composables/useValidator'
56
- import Taro, { showToast } from '@tarojs/taro'
57
- import { useHttp } from '../api'
58
- import { useRouter } from '@tarojs/taro'
59
-
60
- const { params } = useRouter()
61
- const { countdownText, startCountdown, countdownActive } = useCountdown()
62
- const {
63
- countdownText: countdownText1,
64
- startCountdown: startCountdown1,
65
- countdownActive: countdownActive1,
66
- } = useCountdown()
67
- const { phoneValidator } = useValidator()
68
- const current = ref(1)
69
-
70
- onMounted(() => {
71
- if (!params.mobile) {
72
- return showToast({ title: '路径缺少mobile参数', icon: 'none' })
73
- }
74
- authState.mobile = params.mobile
75
- })
76
-
77
- /**
78
- * 身份认证
79
- */
80
- const authState = reactive({
81
- mobile: '',
82
- code: '',
83
- })
84
- function onAuth() {
85
- const $http = useHttp()
86
-
87
- // 向当前用户的手机中发送短信验证码
88
- $http.post('/cas/sysAccount/verify', { verifyCode: authState.code }).then((res) => {
89
- if (typeof res !== 'boolean') return
90
-
91
- showToast({ title: '身份认证成功', icon: 'success' })
92
- current.value++
93
- })
94
- }
95
- function onAuthCode() {
96
- const $http = useHttp()
97
-
98
- // 向当前用户的手机中发送短信验证码
99
- $http.get('/cas/sysAccount/getVerifyCodeToUserMobile').then((res) => {
100
- if (typeof res !== 'boolean') return
101
-
102
- showToast({ title: '短信发送成功,请注意查收', icon: 'none' })
103
- startCountdown()
104
- })
105
- }
106
-
107
- /**
108
- * 换绑手机
109
- */
110
- const bindingState = reactive({
111
- mobile: '',
112
- code: '',
113
- })
114
- function onBinding() {
115
- const msg = phoneValidator(bindingState.mobile)
116
- if (msg) {
117
- return showToast({ title: msg, icon: 'none' })
118
- }
119
-
120
- const $http = useHttp()
121
-
122
- $http
123
- .post(`/cas/sysAccount/verifyAndChangeMobile`, {
124
- mobile: bindingState.mobile,
125
- verifyCode: bindingState.code,
126
- })
127
- .then((res) => {
128
- if (typeof res !== 'boolean') return
129
-
130
- showToast({ title: '换绑成功', icon: 'success' })
131
- emits('success', bindingState.mobile)
132
- })
133
- }
134
- function onBindingCode() {
135
- const msg = phoneValidator(bindingState.mobile)
136
- if (msg) {
137
- return showToast({ title: msg, icon: 'none' })
138
- }
139
- if (params.mobile === bindingState.mobile) {
140
- return showToast({ title: '新手机号码不应与旧手机号码一致', icon: 'none' })
141
- }
142
-
143
- const $http = useHttp()
144
-
145
- // 向当前用户的手机中发送短信验证码
146
- $http.get(`/cas/sysAccount/getVerifyCodeToMobile/${bindingState.mobile}`).then((res) => {
147
- if (typeof res !== 'boolean') return
148
-
149
- showToast({ title: '短信发送成功,请注意查收', icon: 'none' })
150
- startCountdown1()
151
- })
152
- }
153
-
154
- // 父组件事件
155
- const emits = defineEmits(['success'])
156
- </script>
157
-
158
- <style lang="scss">
159
- .user-binding {
160
- height: 100vh;
161
- display: flex;
162
- flex-direction: column;
163
- box-sizing: border-box;
164
- padding: 10px 12px env(safe-area-inset-bottom, 0px);
165
- --nut-cell-padding: 0;
166
-
167
- &-img {
168
- width: 351px;
169
- height: 192px;
170
- }
171
-
172
- &-layout {
173
- position: relative;
174
- width: 351px;
175
- border-radius: 4px;
176
- background: #fff;
177
- overflow: hidden;
178
- margin-bottom: 10px;
179
- }
180
-
181
- &-inputlayout {
182
- padding: 0 10px;
183
- box-sizing: border-box;
184
-
185
- .nut-input {
186
- height: 40px;
187
- padding: 0;
188
- display: flex;
189
- align-items: center;
190
- font-size: 16px;
191
- padding-left: 3px;
192
- border-color: #f5f5f5;
193
-
194
- .input-text {
195
- width: 100%;
196
- }
197
- }
198
- }
199
-
200
- .nut-placeholder {
201
- color: #cccccc;
202
- }
203
-
204
- .user-binding-btn {
205
- position: absolute;
206
- bottom: 50px;
207
- left: 25px;
208
- width: calc(100% - 50px);
209
- font-size: 16px;
210
- background: var(--app-primary-color, #017fff);
211
- height: 40px;
212
- line-height: 38px;
213
- }
214
-
215
- .user-binding-codebtn {
216
- height: 30px;
217
- font-size: 12px;
218
- padding: 0;
219
- width: 90px;
220
- border: none;
221
- color: var(--app-primary-color, #017fff);
222
- background: #f2f2f2;
223
- }
224
-
225
- .user-binding-steps {
226
- margin-top: 15px;
227
-
228
- .nut-step-line {
229
- background: rgba(220, 220, 220, 1);
230
- left: 60%;
231
- right: -40%;
232
- }
233
-
234
- .nut-step-title {
235
- font-weight: bold;
236
- color: rgba(0, 0, 0, 0.4);
237
- }
238
-
239
- .nut-step.nut-step-wait .nut-step-icon {
240
- background: rgba(243, 243, 243, 1);
241
- border-color: rgba(243, 243, 243, 1);
242
- color: rgba(0, 0, 0, 0.4);
243
- }
244
-
245
- .nut-step.nut-step-process .nut-step-icon {
246
- background: var(--app-primary-color, #017fff);
247
- border-color: var(--app-primary-color, #017fff);
248
- }
249
-
250
- .nut-step.nut-step-process .nut-step-title {
251
- color: var(--app-primary-color, #017fff);
252
- }
253
-
254
- .nut-step-head {
255
- margin-bottom: 8px;
256
- }
257
-
258
- .nut-step.nut-step-finish .nut-step-title {
259
- color: rgba(0, 0, 0, 0.9);
260
- }
261
-
262
- .nut-step.nut-step-finish .nut-step-line {
263
- background: var(--app-primary-color, #017fff);
264
- }
265
-
266
- .nut-step.nut-step-finish .nut-step-head {
267
- color: var(--app-primary-color, #017fff);
268
- border-color: var(--app-primary-color, #017fff);
269
- }
270
-
271
- .nut-step-icon {
272
- width: 22px;
273
- height: 22px;
274
- }
275
- }
276
- }
277
- </style>
1
+ <template>
2
+ <div class="user-binding">
3
+ <div class="user-binding-layout">
4
+ <img class="user-binding-img" :src="`https://cdn.ddjf.com/static/images/customer-center/user-${current === 1 ? 'binding' : 'auth'
5
+ }.png`" />
6
+ <nut-steps :current="current" class="user-binding-steps">
7
+ <nut-step title="身份认证">1</nut-step>
8
+ <nut-step title="换绑手机">2</nut-step>
9
+ </nut-steps>
10
+ </div>
11
+
12
+ <div class="user-binding-layout user-binding-inputlayout" style="flex: 1" v-if="current === 1">
13
+ <nut-form>
14
+ <nut-form-item label="手机号码" label-align="left">
15
+ <nut-input v-model="authState.mobile" placeholder="请输入手机号码" :max-length="11" readonly input-align="right" />
16
+ </nut-form-item>
17
+ <nut-form-item label="验证码" label-align="left">
18
+ <nut-input v-model="authState.code" placeholder="请输入验证码" :max-length="6" input-align="right">
19
+ <template #right>
20
+ <nut-button :disabled="countdownActive" class="user-binding-codebtn" type="default" @click="onAuthCode">{{
21
+ countdownText }}</nut-button>
22
+ </template>
23
+ </nut-input>
24
+ </nut-form-item>
25
+ </nut-form>
26
+
27
+ <nut-button class="user-binding-btn" :disabled="!authState.code" block type="primary"
28
+ @click="onAuth">提交</nut-button>
29
+ </div>
30
+
31
+ <div class="user-binding-layout user-binding-inputlayout" style="flex: 1" v-else>
32
+ <nut-form>
33
+ <nut-form-item label="手机号码" label-align="left">
34
+ <nut-input v-model="bindingState.mobile" placeholder="请输入新手机号码" :max-length="11" input-align="right" />
35
+ </nut-form-item>
36
+ <nut-form-item label="验证码" label-align="left">
37
+ <nut-input v-model="bindingState.code" placeholder="请输入验证码" :max-length="6" input-align="right">
38
+ <template #right>
39
+ <nut-button :disabled="countdownActive1" class="user-binding-codebtn" type="default"
40
+ @click="onBindingCode">{{ countdownText1 }}</nut-button>
41
+ </template>
42
+ </nut-input>
43
+ </nut-form-item>
44
+ </nut-form>
45
+
46
+ <nut-button class="user-binding-btn" :disabled="!bindingState.code || !bindingState.mobile" block type="primary"
47
+ @click="onBinding">提交</nut-button>
48
+ </div>
49
+ </div>
50
+ </template>
51
+
52
+ <script lang="ts" setup>
53
+ import { ref, reactive, onMounted } from 'vue'
54
+ import { useCountdown } from '../../shared/composables/useCountdown'
55
+ import { useValidator } from '../../shared/composables/useValidator'
56
+ import Taro, { showToast } from '@tarojs/taro'
57
+ import { useHttp } from '../api'
58
+ import { useRouter } from '@tarojs/taro'
59
+
60
+ const { params } = useRouter()
61
+ const { countdownText, startCountdown, countdownActive } = useCountdown()
62
+ const {
63
+ countdownText: countdownText1,
64
+ startCountdown: startCountdown1,
65
+ countdownActive: countdownActive1,
66
+ } = useCountdown()
67
+ const { phoneValidator } = useValidator()
68
+ const current = ref(1)
69
+
70
+ onMounted(() => {
71
+ if (!params.mobile) {
72
+ return showToast({ title: '路径缺少mobile参数', icon: 'none' })
73
+ }
74
+ authState.mobile = params.mobile
75
+ })
76
+
77
+ /**
78
+ * 身份认证
79
+ */
80
+ const authState = reactive({
81
+ mobile: '',
82
+ code: '',
83
+ })
84
+ function onAuth() {
85
+ const $http = useHttp()
86
+
87
+ // 向当前用户的手机中发送短信验证码
88
+ $http.post('/cas/sysAccount/verify', { verifyCode: authState.code }).then((res) => {
89
+ if (typeof res !== 'boolean') return
90
+
91
+ showToast({ title: '身份认证成功', icon: 'success' })
92
+ current.value++
93
+ })
94
+ }
95
+ function onAuthCode() {
96
+ const $http = useHttp()
97
+
98
+ // 向当前用户的手机中发送短信验证码
99
+ $http.get('/cas/sysAccount/getVerifyCodeToUserMobile').then((res) => {
100
+ if (typeof res !== 'boolean') return
101
+
102
+ showToast({ title: '短信发送成功,请注意查收', icon: 'none' })
103
+ startCountdown()
104
+ })
105
+ }
106
+
107
+ /**
108
+ * 换绑手机
109
+ */
110
+ const bindingState = reactive({
111
+ mobile: '',
112
+ code: '',
113
+ })
114
+ function onBinding() {
115
+ const msg = phoneValidator(bindingState.mobile)
116
+ if (msg) {
117
+ return showToast({ title: msg, icon: 'none' })
118
+ }
119
+
120
+ const $http = useHttp()
121
+
122
+ $http
123
+ .post(`/cas/sysAccount/verifyAndChangeMobile`, {
124
+ mobile: bindingState.mobile,
125
+ verifyCode: bindingState.code,
126
+ })
127
+ .then((res) => {
128
+ if (typeof res !== 'boolean') return
129
+
130
+ showToast({ title: '换绑成功', icon: 'success' })
131
+ emits('success', bindingState.mobile)
132
+ })
133
+ }
134
+ function onBindingCode() {
135
+ const msg = phoneValidator(bindingState.mobile)
136
+ if (msg) {
137
+ return showToast({ title: msg, icon: 'none' })
138
+ }
139
+ if (params.mobile === bindingState.mobile) {
140
+ return showToast({ title: '新手机号码不应与旧手机号码一致', icon: 'none' })
141
+ }
142
+
143
+ const $http = useHttp()
144
+
145
+ // 向当前用户的手机中发送短信验证码
146
+ $http.get(`/cas/sysAccount/getVerifyCodeToMobile/${bindingState.mobile}`).then((res) => {
147
+ if (typeof res !== 'boolean') return
148
+
149
+ showToast({ title: '短信发送成功,请注意查收', icon: 'none' })
150
+ startCountdown1()
151
+ })
152
+ }
153
+
154
+ // 父组件事件
155
+ const emits = defineEmits(['success'])
156
+ </script>
157
+
158
+ <style lang="scss">
159
+ .user-binding {
160
+ height: 100vh;
161
+ display: flex;
162
+ flex-direction: column;
163
+ box-sizing: border-box;
164
+ padding: 10px 12px env(safe-area-inset-bottom, 0px);
165
+ --nut-cell-padding: 0;
166
+
167
+ &-img {
168
+ width: 351px;
169
+ height: 192px;
170
+ }
171
+
172
+ &-layout {
173
+ position: relative;
174
+ width: 351px;
175
+ border-radius: 4px;
176
+ background: #fff;
177
+ overflow: hidden;
178
+ margin-bottom: 10px;
179
+ }
180
+
181
+ &-inputlayout {
182
+ padding: 0 10px;
183
+ box-sizing: border-box;
184
+
185
+ .nut-input {
186
+ height: 40px;
187
+ padding: 0;
188
+ display: flex;
189
+ align-items: center;
190
+ font-size: 16px;
191
+ padding-left: 3px;
192
+ border-color: #f5f5f5;
193
+
194
+ .input-text {
195
+ width: 100%;
196
+ }
197
+ }
198
+ }
199
+
200
+ .nut-placeholder {
201
+ color: #cccccc;
202
+ }
203
+
204
+ .user-binding-btn {
205
+ position: absolute;
206
+ bottom: 50px;
207
+ left: 25px;
208
+ width: calc(100% - 50px);
209
+ font-size: 16px;
210
+ background: var(--app-primary-color, #017fff);
211
+ height: 40px;
212
+ line-height: 38px;
213
+ }
214
+
215
+ .user-binding-codebtn {
216
+ height: 30px;
217
+ font-size: 12px;
218
+ padding: 0;
219
+ width: 90px;
220
+ border: none;
221
+ color: var(--app-primary-color, #017fff);
222
+ background: #f2f2f2;
223
+ }
224
+
225
+ .user-binding-steps {
226
+ margin-top: 15px;
227
+
228
+ .nut-step-line {
229
+ background: rgba(220, 220, 220, 1);
230
+ left: 60%;
231
+ right: -40%;
232
+ }
233
+
234
+ .nut-step-title {
235
+ font-weight: bold;
236
+ color: rgba(0, 0, 0, 0.4);
237
+ }
238
+
239
+ .nut-step.nut-step-wait .nut-step-icon {
240
+ background: rgba(243, 243, 243, 1);
241
+ border-color: rgba(243, 243, 243, 1);
242
+ color: rgba(0, 0, 0, 0.4);
243
+ }
244
+
245
+ .nut-step.nut-step-process .nut-step-icon {
246
+ background: var(--app-primary-color, #017fff);
247
+ border-color: var(--app-primary-color, #017fff);
248
+ }
249
+
250
+ .nut-step.nut-step-process .nut-step-title {
251
+ color: var(--app-primary-color, #017fff);
252
+ }
253
+
254
+ .nut-step-head {
255
+ margin-bottom: 8px;
256
+ }
257
+
258
+ .nut-step.nut-step-finish .nut-step-title {
259
+ color: rgba(0, 0, 0, 0.9);
260
+ }
261
+
262
+ .nut-step.nut-step-finish .nut-step-line {
263
+ background: var(--app-primary-color, #017fff);
264
+ }
265
+
266
+ .nut-step.nut-step-finish .nut-step-head {
267
+ color: var(--app-primary-color, #017fff);
268
+ border-color: var(--app-primary-color, #017fff);
269
+ }
270
+
271
+ .nut-step-icon {
272
+ width: 22px;
273
+ height: 22px;
274
+ }
275
+ }
276
+ }
277
+ </style>