@uxda/appkit 4.2.12 → 4.2.16

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 (118) 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 +6 -7
  5. package/dist/index.js +1086 -1172
  6. package/package.json +79 -79
  7. package/project.config.json +15 -15
  8. package/project.tt.json +13 -13
  9. package/rollup.config.mjs +67 -67
  10. package/src/Appkit.ts +66 -66
  11. package/src/balance/api/endpoints.ts +133 -133
  12. package/src/balance/api/index.ts +106 -106
  13. package/src/balance/components/AccountView.vue +750 -750
  14. package/src/balance/components/BalanceCard.vue +215 -215
  15. package/src/balance/components/BalanceReminder.vue +85 -85
  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 +250 -250
  19. package/src/balance/components/DateRange.vue +80 -80
  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 +237 -237
  23. package/src/balance/components/SecondBalance.vue +71 -71
  24. package/src/balance/components/Tip.vue +45 -45
  25. package/src/balance/components/index.ts +8 -8
  26. package/src/balance/types.ts +97 -97
  27. package/src/components/bt-cropper/index.vue +774 -774
  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 +89 -89
  46. package/src/main.scss +1 -1
  47. package/src/notice/api/endpoints.ts +17 -17
  48. package/src/notice/api/index.ts +106 -106
  49. package/src/notice/components/NoticeBanner.vue +243 -243
  50. package/src/notice/components/NoticeEntry.vue +99 -99
  51. package/src/notice/components/NoticeList.vue +315 -315
  52. package/src/notice/components/NoticePopup.vue +162 -162
  53. package/src/notice/components/index.ts +5 -5
  54. package/src/notice/components/useCommonList.ts +86 -86
  55. package/src/notice/components/useNotice.ts +35 -35
  56. package/src/notice/index.ts +1 -1
  57. package/src/notice/types.ts +25 -25
  58. package/src/payment/api/config.ts +7 -7
  59. package/src/payment/api/endpoints.ts +103 -103
  60. package/src/payment/api/index.ts +100 -100
  61. package/src/payment/components/AmountPicker.vue +90 -90
  62. package/src/payment/components/RechargeResult.vue +69 -69
  63. package/src/payment/components/RechargeView.vue +155 -155
  64. package/src/payment/components/RightsPicker.vue +105 -105
  65. package/src/payment/components/TradeView.vue +317 -317
  66. package/src/payment/components/UserAgreement.vue +234 -234
  67. package/src/payment/components/index.ts +22 -22
  68. package/src/payment/index.ts +5 -5
  69. package/src/payment/services/index.ts +16 -16
  70. package/src/payment/services/invoke-recharge.ts +25 -25
  71. package/src/payment/services/request-payment.ts +58 -58
  72. package/src/payment/types.ts +28 -28
  73. package/src/register/components/SelfRegistration.vue +233 -233
  74. package/src/register/components/index.ts +2 -2
  75. package/src/shared/components/AppDrawer.vue +54 -58
  76. package/src/shared/components/AppVerify.vue +128 -128
  77. package/src/shared/components/DeviceVersion.vue +68 -68
  78. package/src/shared/components/EmptyView.vue +33 -33
  79. package/src/shared/components/OcrBusinessLicense.vue +130 -130
  80. package/src/shared/components/OcrIcon.vue +202 -202
  81. package/src/shared/components/PageHeader.vue +79 -79
  82. package/src/shared/components/index.ts +8 -8
  83. package/src/shared/composables/index.ts +8 -8
  84. package/src/shared/composables/useAmount.ts +46 -46
  85. package/src/shared/composables/useCountdown.ts +46 -46
  86. package/src/shared/composables/useCrypto.ts +76 -76
  87. package/src/shared/composables/useDragBox.ts +97 -97
  88. package/src/shared/composables/useEncode.ts +43 -43
  89. package/src/shared/composables/useLogger.ts +123 -123
  90. package/src/shared/composables/useSafeArea.ts +46 -46
  91. package/src/shared/composables/useTabbar.ts +24 -24
  92. package/src/shared/composables/useUpload.ts +54 -54
  93. package/src/shared/composables/useValidator.ts +32 -32
  94. package/src/shared/http/Http.ts +136 -136
  95. package/src/shared/http/index.ts +1 -1
  96. package/src/shared/http/types.ts +157 -157
  97. package/src/shared/index.ts +3 -3
  98. package/src/shared/weixin/payment.ts +38 -38
  99. package/src/styles/vars.scss +3 -3
  100. package/src/user/api/endpoints.ts +17 -17
  101. package/src/user/api/index.ts +111 -111
  102. package/src/user/components/LoginSetting.vue +114 -114
  103. package/src/user/components/UserAuth.vue +257 -257
  104. package/src/user/components/UserBinding.vue +307 -307
  105. package/src/user/components/UserBindingSuccess.vue +80 -80
  106. package/src/user/components/UserEntry.vue +133 -133
  107. package/src/user/components/UserFeedback.vue +431 -431
  108. package/src/user/components/UserFeedbackEntry.vue +192 -192
  109. package/src/user/components/UserHeadCrop.vue +65 -65
  110. package/src/user/components/UserInfo.vue +826 -820
  111. package/src/user/components/UserResourceEmpty.vue +75 -75
  112. package/src/user/components/index.ts +23 -23
  113. package/src/user/index.ts +1 -1
  114. package/tsconfig.json +30 -30
  115. package/types/global.d.ts +21 -21
  116. package/types/vue.d.ts +10 -10
  117. package/dist/assets/asset-3B_CoPto +0 -1
  118. package/stats.html +0 -4842
@@ -1,237 +1,237 @@
1
- <template>
2
- <div class="promoter-card" v-if="applyRecord.distributorFlag === 'Y' || applyRecord.accessCheckStatus === 'Y'">
3
- <img class="arrow"
4
- src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMjkiIHZpZXdCb3g9IjAgMCAxNyAyOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1LjM4MTQgMTIuMzIwN0MxNi43NjI4IDEzLjUxNyAxNi43NjI4IDE1LjY1OTkgMTUuMzgxNCAxNi44NTYyTDEuNjU0NjUgMjguNzQzOUMxLjAwNzAxIDI5LjMwNDggLTEuMzA0NTZlLTA2IDI4Ljg0NDggLTEuMjY3MTFlLTA2IDI3Ljk4OEwtOS41Njc5OGUtMDggMS4xODg5Qy01LjgyM2UtMDggMC4zMzIxNDYgMS4wMDcwMSAtMC4xMjc5MDUgMS42NTQ2NSAwLjQzMjk3MUwxNS4zODE0IDEyLjMyMDdaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAyN185OTYpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTAyN185OTYiIHgxPSI0NiIgeTE9IjE1IiB4Mj0iLTUuNSIgeTI9IjE1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNFRjlENTciLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZENDUwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg=="
5
- alt="">
6
- <div class="promoter-card-tab" v-if="useCase === 'company' && isAdmin">
7
- <div class="promoter-card-tab-item" @click="onTabChange('person')" :class="{ focus: tab === 'person' }">个人</div>
8
- <div class="promoter-card-tab-item" @click="onTabChange('company')" :class="{ focus: tab === 'company' }">企业</div>
9
- </div>
10
- <div class="promoter-card-hd" @click="emits('blance', tab)"
11
- v-if="applyRecord.distributorFlag === 'Y' || applyRecord.accessCheckStatus === 'Y'">
12
- <div class="promoter-card-hd-info">可提现余额(元)</div>
13
- <div class="promoter-card-hd-num number">{{ formatAmount(promoter.balance || 0) }}
14
- <img class="arrow-img" style="margin-left: 12px;" src="https://cdn.ddjf.com/static/images/appkit/arrow.png"
15
- alt="">
16
- </div>
17
- </div>
18
- <div class="promoter-card-ft">
19
- <div class="promoter-card-ft-item" v-if="applyRecord.accessCheckStatus === 'Y'">
20
- <div class="promoter-card-ft-info">销售累计收益(元)
21
- <IconFont class="icon" name="ask" @click="onHelpClick('profits')" />
22
- </div>
23
- <div class="promoter-card-ft-num number" @click="emits('profits', tab)">
24
- {{ formatAmount(promoter.totalIncome || 0) }}
25
- <img class="arrow-img" src="https://cdn.ddjf.com/static/images/appkit/arrow.png" alt="">
26
- </div>
27
- </div>
28
- <div class="promoter-card-ft-line"
29
- v-if="applyRecord.accessCheckStatus === 'Y' && applyRecord.distributorFlag === 'Y'">
30
- </div>
31
- <div class="promoter-card-ft-item" v-if="applyRecord.distributorFlag === 'Y'">
32
- <div class="promoter-card-ft-info">返佣累计收益(元)
33
- <IconFont class="icon" name="ask" @click="onHelpClick('rebate')" />
34
- </div>
35
- <div class="promoter-card-ft-num number" @click="emits('rebate', tab)">
36
- {{ formatAmount(promoter.totalRebateIncome || 0) }}
37
- <img class="arrow-img" src="https://cdn.ddjf.com/static/images/appkit/arrow.png" alt="">
38
- </div>
39
- </div>
40
- </div>
41
- </div>
42
- </template>
43
-
44
- <script setup lang="ts">
45
- import { ref, watch } from 'vue'
46
- import { endpoints, useHttp } from '../api'
47
- import { Promoter } from '../types'
48
- import Taro, { useDidShow } from '@tarojs/taro'
49
- import { useAmount } from '../../shared/composables/useAmount'
50
- import { IconFont } from '@nutui/icons-vue-taro'
51
-
52
- type PromoterCardProps = {
53
- useCase: string
54
- applyRecord: any
55
- isAdmin?: boolean
56
- }
57
- const props = withDefaults(defineProps<PromoterCardProps>(), {
58
- useCase: '',
59
- applyRecord: {},
60
- isAdmin: false
61
- })
62
-
63
- const { formatAmount } = useAmount()
64
- const tab = ref('person')
65
-
66
- const promoter = ref<Promoter>({
67
- balance: 0,
68
- totalIncome: 0,
69
- totalRebateIncome: 0,
70
- })
71
-
72
- function onTabChange(type: string) {
73
- tab.value = type
74
- loadPromoter()
75
- }
76
-
77
- async function loadPromoter() {
78
- const $http = useHttp()
79
- $http
80
- .get<Promoter>(endpoints.获取推广方账户信息, {
81
- useCase: tab.value,
82
- })
83
- .then((data) => {
84
- promoter.value.balance = data?.balance || 0
85
- promoter.value.totalIncome = data?.totalIncome || 0
86
- promoter.value.totalRebateIncome = data?.totalRebateIncome || 0
87
- })
88
- }
89
-
90
- const emits = defineEmits([
91
- /**
92
- * 跳可提现余额
93
- */
94
- 'blance',
95
- /**
96
- * 跳收益页面
97
- */
98
- 'profits',
99
- /**
100
- * 跳返佣统计页面
101
- */
102
- 'rebate',
103
- ])
104
-
105
- useDidShow(() => {
106
- Object.keys(props.applyRecord)?.length && loadPromoter()
107
- })
108
- watch(() => props.applyRecord, () => {
109
- Object.keys(props.applyRecord)?.length && loadPromoter()
110
- })
111
-
112
- defineExpose({
113
- reload: loadPromoter,
114
- })
115
-
116
- const toastMap = {
117
- profits: '推广北斗星报告获取,每笔报告销售收益= 客户查询价 - 我的成本价',
118
- rebate: '推荐朋友使用北斗星、企明星获取,返佣收益= 返佣基数 * 返佣比例',
119
- }
120
- function onHelpClick(type: string) {
121
- Taro.showModal({
122
- content: toastMap[type],
123
- showCancel: false,
124
- confirmText: '知道了',
125
- })
126
- }
127
- </script>
128
-
129
- <style lang="scss">
130
- .promoter-card {
131
- position: relative;
132
- padding: 20px;
133
- background: #fff;
134
- box-sizing: border-box;
135
- margin: 0 auto;
136
- border-radius: 15px;
137
-
138
- .icon {
139
- font-size: 10px;
140
- color: rgba(53, 53, 53, 0.3);
141
- }
142
-
143
- .arrow {
144
- position: absolute;
145
- left: 0;
146
- top: 22px;
147
- width: 9px;
148
- height: 16px;
149
- }
150
-
151
- &-hd {
152
- display: flex;
153
- flex-direction: column;
154
- align-items: flex-start;
155
- color: #353535;
156
- margin-bottom: 12px;
157
-
158
- &-num {
159
- font-size: 26px;
160
- font-weight: bold;
161
- margin-top: 8px;
162
- display: flex;
163
- align-items: center;
164
- }
165
-
166
- &-info {
167
- font-size: 14px;
168
- }
169
-
170
-
171
- }
172
-
173
- &-ft {
174
- display: flex;
175
- align-items: center;
176
-
177
- &-item {
178
- flex: 1;
179
- }
180
-
181
- &-info {
182
- font-size: 12px;
183
- color: #434242;
184
- margin-bottom: 5px;
185
- display: flex;
186
- align-items: center;
187
- }
188
-
189
- &-num {
190
- display: flex;
191
- align-items: center;
192
- font-size: 20px;
193
- color: #353535;
194
- }
195
-
196
- &-line {
197
- width: 1px;
198
- height: 19px;
199
- background: rgba(53, 53, 53, 0.2);
200
- margin-right: 30px;
201
- }
202
- }
203
-
204
- &-tab {
205
- position: absolute;
206
- top: 10px;
207
- right: 13px;
208
- border-radius: 4px;
209
- overflow: hidden;
210
- background: rgba(204, 204, 204, 0.2);
211
-
212
- &-item {
213
- display: inline-flex;
214
- align-items: center;
215
- justify-content: center;
216
- height: 29px;
217
- width: 90px;
218
- box-sizing: border-box;
219
- padding: 0 10px;
220
- font-size: 13px;
221
- color: #353535;
222
-
223
- &.focus {
224
- background: linear-gradient(90deg, #FFEBC1 0%, #FFF9ED 100%);
225
- font-weight: bold;
226
- border-radius: 4px;
227
- }
228
- }
229
- }
230
-
231
- .arrow-img {
232
- width: 16px;
233
- height: 12px;
234
- margin-left: 5px;
235
- }
236
- }
237
- </style>
1
+ <template>
2
+ <div class="promoter-card" v-if="applyRecord.distributorFlag === 'Y' || applyRecord.accessCheckStatus === 'Y'">
3
+ <img class="arrow"
4
+ src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTciIGhlaWdodD0iMjkiIHZpZXdCb3g9IjAgMCAxNyAyOSIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE1LjM4MTQgMTIuMzIwN0MxNi43NjI4IDEzLjUxNyAxNi43NjI4IDE1LjY1OTkgMTUuMzgxNCAxNi44NTYyTDEuNjU0NjUgMjguNzQzOUMxLjAwNzAxIDI5LjMwNDggLTEuMzA0NTZlLTA2IDI4Ljg0NDggLTEuMjY3MTFlLTA2IDI3Ljk4OEwtOS41Njc5OGUtMDggMS4xODg5Qy01LjgyM2UtMDggMC4zMzIxNDYgMS4wMDcwMSAtMC4xMjc5MDUgMS42NTQ2NSAwLjQzMjk3MUwxNS4zODE0IDEyLjMyMDdaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTAyN185OTYpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMTAyN185OTYiIHgxPSI0NiIgeTE9IjE1IiB4Mj0iLTUuNSIgeTI9IjE1IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiNFRjlENTciLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjRkZENDUwIi8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg=="
5
+ alt="">
6
+ <div class="promoter-card-tab" v-if="useCase === 'company' && isAdmin">
7
+ <div class="promoter-card-tab-item" @click="onTabChange('person')" :class="{ focus: tab === 'person' }">个人</div>
8
+ <div class="promoter-card-tab-item" @click="onTabChange('company')" :class="{ focus: tab === 'company' }">企业</div>
9
+ </div>
10
+ <div class="promoter-card-hd" @click="emits('blance', tab)"
11
+ v-if="applyRecord.distributorFlag === 'Y' || applyRecord.accessCheckStatus === 'Y'">
12
+ <div class="promoter-card-hd-info">可提现余额(元)</div>
13
+ <div class="promoter-card-hd-num number">{{ formatAmount(promoter.balance || 0) }}
14
+ <img class="arrow-img" style="margin-left: 12px;" src="https://cdn.ddjf.com/static/images/appkit/arrow.png"
15
+ alt="">
16
+ </div>
17
+ </div>
18
+ <div class="promoter-card-ft">
19
+ <div class="promoter-card-ft-item" v-if="applyRecord.accessCheckStatus === 'Y'">
20
+ <div class="promoter-card-ft-info">销售累计收益(元)
21
+ <IconFont class="icon" name="ask" @click="onHelpClick('profits')" />
22
+ </div>
23
+ <div class="promoter-card-ft-num number" @click="emits('profits', tab)">
24
+ {{ formatAmount(promoter.totalIncome || 0) }}
25
+ <img class="arrow-img" src="https://cdn.ddjf.com/static/images/appkit/arrow.png" alt="">
26
+ </div>
27
+ </div>
28
+ <div class="promoter-card-ft-line"
29
+ v-if="applyRecord.accessCheckStatus === 'Y' && applyRecord.distributorFlag === 'Y'">
30
+ </div>
31
+ <div class="promoter-card-ft-item" v-if="applyRecord.distributorFlag === 'Y'">
32
+ <div class="promoter-card-ft-info">返佣累计收益(元)
33
+ <IconFont class="icon" name="ask" @click="onHelpClick('rebate')" />
34
+ </div>
35
+ <div class="promoter-card-ft-num number" @click="emits('rebate', tab)">
36
+ {{ formatAmount(promoter.totalRebateIncome || 0) }}
37
+ <img class="arrow-img" src="https://cdn.ddjf.com/static/images/appkit/arrow.png" alt="">
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </template>
43
+
44
+ <script setup lang="ts">
45
+ import { ref, watch } from 'vue'
46
+ import { endpoints, useHttp } from '../api'
47
+ import { Promoter } from '../types'
48
+ import Taro, { useDidShow } from '@tarojs/taro'
49
+ import { useAmount } from '../../shared/composables/useAmount'
50
+ import { IconFont } from '@nutui/icons-vue-taro'
51
+
52
+ type PromoterCardProps = {
53
+ useCase: string
54
+ applyRecord: any
55
+ isAdmin?: boolean
56
+ }
57
+ const props = withDefaults(defineProps<PromoterCardProps>(), {
58
+ useCase: '',
59
+ applyRecord: {},
60
+ isAdmin: false
61
+ })
62
+
63
+ const { formatAmount } = useAmount()
64
+ const tab = ref('person')
65
+
66
+ const promoter = ref<Promoter>({
67
+ balance: 0,
68
+ totalIncome: 0,
69
+ totalRebateIncome: 0,
70
+ })
71
+
72
+ function onTabChange(type: string) {
73
+ tab.value = type
74
+ loadPromoter()
75
+ }
76
+
77
+ async function loadPromoter() {
78
+ const $http = useHttp()
79
+ $http
80
+ .get<Promoter>(endpoints.获取推广方账户信息, {
81
+ useCase: tab.value,
82
+ })
83
+ .then((data) => {
84
+ promoter.value.balance = data?.balance || 0
85
+ promoter.value.totalIncome = data?.totalIncome || 0
86
+ promoter.value.totalRebateIncome = data?.totalRebateIncome || 0
87
+ })
88
+ }
89
+
90
+ const emits = defineEmits([
91
+ /**
92
+ * 跳可提现余额
93
+ */
94
+ 'blance',
95
+ /**
96
+ * 跳收益页面
97
+ */
98
+ 'profits',
99
+ /**
100
+ * 跳返佣统计页面
101
+ */
102
+ 'rebate',
103
+ ])
104
+
105
+ useDidShow(() => {
106
+ Object.keys(props.applyRecord)?.length && loadPromoter()
107
+ })
108
+ watch(() => props.applyRecord, () => {
109
+ Object.keys(props.applyRecord)?.length && loadPromoter()
110
+ })
111
+
112
+ defineExpose({
113
+ reload: loadPromoter,
114
+ })
115
+
116
+ const toastMap = {
117
+ profits: '推广北斗星报告获取,每笔报告销售收益= 客户查询价 - 我的成本价',
118
+ rebate: '推荐朋友使用北斗星、企明星获取,返佣收益= 返佣基数 * 返佣比例',
119
+ }
120
+ function onHelpClick(type: string) {
121
+ Taro.showModal({
122
+ content: toastMap[type],
123
+ showCancel: false,
124
+ confirmText: '知道了',
125
+ })
126
+ }
127
+ </script>
128
+
129
+ <style lang="scss">
130
+ .promoter-card {
131
+ position: relative;
132
+ padding: 20px;
133
+ background: #fff;
134
+ box-sizing: border-box;
135
+ margin: 0 auto;
136
+ border-radius: 15px;
137
+
138
+ .icon {
139
+ font-size: 10px;
140
+ color: rgba(53, 53, 53, 0.3);
141
+ }
142
+
143
+ .arrow {
144
+ position: absolute;
145
+ left: 0;
146
+ top: 22px;
147
+ width: 9px;
148
+ height: 16px;
149
+ }
150
+
151
+ &-hd {
152
+ display: flex;
153
+ flex-direction: column;
154
+ align-items: flex-start;
155
+ color: #353535;
156
+ margin-bottom: 12px;
157
+
158
+ &-num {
159
+ font-size: 26px;
160
+ font-weight: bold;
161
+ margin-top: 8px;
162
+ display: flex;
163
+ align-items: center;
164
+ }
165
+
166
+ &-info {
167
+ font-size: 14px;
168
+ }
169
+
170
+
171
+ }
172
+
173
+ &-ft {
174
+ display: flex;
175
+ align-items: center;
176
+
177
+ &-item {
178
+ flex: 1;
179
+ }
180
+
181
+ &-info {
182
+ font-size: 12px;
183
+ color: #434242;
184
+ margin-bottom: 5px;
185
+ display: flex;
186
+ align-items: center;
187
+ }
188
+
189
+ &-num {
190
+ display: flex;
191
+ align-items: center;
192
+ font-size: 20px;
193
+ color: #353535;
194
+ }
195
+
196
+ &-line {
197
+ width: 1px;
198
+ height: 19px;
199
+ background: rgba(53, 53, 53, 0.2);
200
+ margin-right: 30px;
201
+ }
202
+ }
203
+
204
+ &-tab {
205
+ position: absolute;
206
+ top: 10px;
207
+ right: 13px;
208
+ border-radius: 4px;
209
+ overflow: hidden;
210
+ background: rgba(204, 204, 204, 0.2);
211
+
212
+ &-item {
213
+ display: inline-flex;
214
+ align-items: center;
215
+ justify-content: center;
216
+ height: 29px;
217
+ width: 90px;
218
+ box-sizing: border-box;
219
+ padding: 0 10px;
220
+ font-size: 13px;
221
+ color: #353535;
222
+
223
+ &.focus {
224
+ background: linear-gradient(90deg, #FFEBC1 0%, #FFF9ED 100%);
225
+ font-weight: bold;
226
+ border-radius: 4px;
227
+ }
228
+ }
229
+ }
230
+
231
+ .arrow-img {
232
+ width: 16px;
233
+ height: 12px;
234
+ margin-left: 5px;
235
+ }
236
+ }
237
+ </style>
@@ -1,71 +1,71 @@
1
- <template>
2
- <div class="second-balance">
3
- <page-header title="权益余额" />
4
- <div class="positions" v-if="data.length">
5
- <div class="position" v-for="(item, index) in data" :key="index">
6
- <div class="icon"></div>
7
- <label class="title">{{ item.title }}</label>
8
- <label class="number amount">{{ item.count }}{{ item.unit }}</label>
9
- </div>
10
- </div>
11
- <empty-view v-else />
12
- </div>
13
- </template>
14
-
15
- <script lang="ts" setup>
16
- import { Privilege } from "../types";
17
- import EmptyView from "../../shared/components/EmptyView.vue";
18
-
19
- // 权益余额
20
- // 由账户页 AccountView 使用 AppDrawer 弹出
21
- type SecondBalanceProps = {
22
- data: Privilege[];
23
- };
24
-
25
- withDefaults(defineProps<SecondBalanceProps>(), {
26
- data: () => [],
27
- });
28
- </script>
29
-
30
- <style lang="scss">
31
- .second-balance {
32
- width: 100vw;
33
- .positions {
34
- padding: 15px;
35
- .position {
36
- border-radius: 5px;
37
- background: #f7f8fa;
38
- height: 54px;
39
- display: flex;
40
- align-items: center;
41
- justify-content: space-around;
42
- margin-bottom: 10px;
43
- padding: 0 10px;
44
- gap: 10px;
45
- .icon {
46
- width: 30px;
47
- height: 30px;
48
- background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIHZpZXdCb3g9IjAgMCA2MCA2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE3LjIyODUgMzcuMjY0M0wxMy43OTk5IDQyLjc1QzEzLjYyODUgNDMuMDkyOSAxMy43OTk5IDQzLjUyMTQgMTQuMjI4NSA0My41MjE0TDE4Ljg1NzEgNDMuNzc4NkMxOS4wMjg1IDQzLjc3ODYgMTkuMTE0MiA0My44NjQzIDE5LjE5OTkgNDMuOTVMMjIuMDI4NSA0Ny43MjE0QzIyLjI4NTcgNDcuOTc4NiAyMi43MTQyIDQ3Ljk3ODYgMjIuODg1NyA0Ny43MjE0TDI2LjE0MjggNDIuMzIxNEMyNi4zMTQyIDQyLjA2NDMgMjYuMjI4NSA0MS44MDcxIDI1Ljk3MTQgNDEuNjM1N0wxNy45MTQyIDM3LjA5MjlDMTcuNjU3MSAzNy4wMDcxIDE3LjM5OTkgMzcuMDkyOSAxNy4yMjg1IDM3LjI2NDNaTTQyLjc3MTQgMzcuMTc4Nkw0Ni4xOTk5IDQyLjY2NDNDNDYuMzcxNCA0My4wMDcxIDQ2LjE5OTkgNDMuNDM1NyA0NS43NzE0IDQzLjQzNTdMNDEuMTQyOCA0My42OTI5QzQwLjk3MTQgNDMuNjkyOSA0MC44ODU3IDQzLjc3ODYgNDAuNzk5OSA0My44NjQzTDM3Ljk3MTQgNDcuNjM1N0MzNy43MTQyIDQ3Ljg5MjkgMzcuMjg1NyA0Ny44OTI5IDM3LjExNDIgNDcuNjM1N0wzMy44NTcxIDQyLjIzNTdDMzMuNjg1NyA0MS45Nzg2IDMzLjc3MTQgNDEuNzIxNCAzNC4wMjg1IDQxLjU1TDQyLjA4NTcgMzcuMDA3MUM0Mi4zNDI4IDM2LjgzNTcgNDIuNTk5OSAzNi45MjE0IDQyLjc3MTQgMzcuMTc4NlpNNDIuMDg1NyAxOC40OTI5TDMxLjE5OTkgMTIuMzIxNEMzMC40Mjg1IDExLjg5MjkgMjkuMzk5OSAxMS44OTI5IDI4LjYyODUgMTIuMzIxNEwxNy44Mjg1IDE4LjQwNzFDMTcuMDU3MSAxOC44MzU3IDE2LjU0MjggMTkuNjkyOSAxNi41NDI4IDIwLjU1VjMyLjgwNzFDMTYuNTQyOCAzMy42NjQzIDE3LjA1NzEgMzQuNTIxNCAxNy44Mjg1IDM0Ljk1TDI4LjcxNDIgNDEuMTIxNEMyOS40ODU3IDQxLjU1IDMwLjUxNDIgNDEuNTUgMzEuMjg1NyA0MS4xMjE0TDQyLjA4NTcgMzUuMTIxNEM0Mi44NTcxIDM0LjY5MjkgNDMuMzcxNCAzMy44MzU3IDQzLjM3MTQgMzIuOTc4NlYyMC43MjE0QzQzLjM3MTQgMTkuNzc4NiA0Mi44NTcxIDE4LjkyMTQgNDIuMDg1NyAxOC40OTI5Wk0zNi45NDI4IDIzLjcyMTRMMzAuNTk5OSAzMi44OTI5QzMwLjQyODUgMzMuMTUgMzAuMDg1NyAzMy4zMjE0IDI5Ljc0MjggMzMuMzIxNEMyOS4zOTk5IDMzLjMyMTQgMjkuMDU3MSAzMy4xNSAyOC44ODU3IDMyLjg5MjlMMjIuNzk5OSAyMy43MjE0QzIyLjQ1NzEgMjMuMjkyOSAyMi42Mjg1IDIyLjYwNzEgMjMuMDU3MSAyMi4zNUMyMy40ODU3IDIyLjA5MjkgMjQuMTcxNCAyMi4xNzg2IDI0LjQyODUgMjIuNjA3MUwyOS42NTcxIDMwLjQ5MjlMMzUuMTQyOCAyMi41MjE0QzM1LjQ4NTcgMjIuMDkyOSAzNi4wODU3IDIxLjkyMTQgMzYuNTE0MiAyMi4yNjQzQzM3LjE5OTkgMjIuNjkyOSAzNy4yODU3IDIzLjI5MjkgMzYuOTQyOCAyMy43MjE0WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="),
49
- linear-gradient(100deg, #f4e2ce -67.2%, #debb9b 98.15%);
50
- background-repeat: no-repeat;
51
- border-radius: 15px;
52
- background-size: 30px;
53
- flex-basis: 30px;
54
- flex-grow: 0;
55
- }
56
- .title {
57
- flex-grow: 1;
58
- color: #353535;
59
- font-size: 14px;
60
- font-weight: 500;
61
- }
62
- .amount {
63
- flex-grow: 0;
64
- color: #9e7b5a;
65
- font-size: 14px;
66
- font-weight: 700;
67
- }
68
- }
69
- }
70
- }
71
- </style>
1
+ <template>
2
+ <div class="second-balance">
3
+ <page-header title="权益余额" />
4
+ <div class="positions" v-if="data.length">
5
+ <div class="position" v-for="(item, index) in data" :key="index">
6
+ <div class="icon"></div>
7
+ <label class="title">{{ item.title }}</label>
8
+ <label class="number amount">{{ item.count }}{{ item.unit }}</label>
9
+ </div>
10
+ </div>
11
+ <empty-view v-else />
12
+ </div>
13
+ </template>
14
+
15
+ <script lang="ts" setup>
16
+ import { Privilege } from "../types";
17
+ import EmptyView from "../../shared/components/EmptyView.vue";
18
+
19
+ // 权益余额
20
+ // 由账户页 AccountView 使用 AppDrawer 弹出
21
+ type SecondBalanceProps = {
22
+ data: Privilege[];
23
+ };
24
+
25
+ withDefaults(defineProps<SecondBalanceProps>(), {
26
+ data: () => [],
27
+ });
28
+ </script>
29
+
30
+ <style lang="scss">
31
+ .second-balance {
32
+ width: 100vw;
33
+ .positions {
34
+ padding: 15px;
35
+ .position {
36
+ border-radius: 5px;
37
+ background: #f7f8fa;
38
+ height: 54px;
39
+ display: flex;
40
+ align-items: center;
41
+ justify-content: space-around;
42
+ margin-bottom: 10px;
43
+ padding: 0 10px;
44
+ gap: 10px;
45
+ .icon {
46
+ width: 30px;
47
+ height: 30px;
48
+ background-image: url("data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNjAiIGhlaWdodD0iNjAiIHZpZXdCb3g9IjAgMCA2MCA2MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTE3LjIyODUgMzcuMjY0M0wxMy43OTk5IDQyLjc1QzEzLjYyODUgNDMuMDkyOSAxMy43OTk5IDQzLjUyMTQgMTQuMjI4NSA0My41MjE0TDE4Ljg1NzEgNDMuNzc4NkMxOS4wMjg1IDQzLjc3ODYgMTkuMTE0MiA0My44NjQzIDE5LjE5OTkgNDMuOTVMMjIuMDI4NSA0Ny43MjE0QzIyLjI4NTcgNDcuOTc4NiAyMi43MTQyIDQ3Ljk3ODYgMjIuODg1NyA0Ny43MjE0TDI2LjE0MjggNDIuMzIxNEMyNi4zMTQyIDQyLjA2NDMgMjYuMjI4NSA0MS44MDcxIDI1Ljk3MTQgNDEuNjM1N0wxNy45MTQyIDM3LjA5MjlDMTcuNjU3MSAzNy4wMDcxIDE3LjM5OTkgMzcuMDkyOSAxNy4yMjg1IDM3LjI2NDNaTTQyLjc3MTQgMzcuMTc4Nkw0Ni4xOTk5IDQyLjY2NDNDNDYuMzcxNCA0My4wMDcxIDQ2LjE5OTkgNDMuNDM1NyA0NS43NzE0IDQzLjQzNTdMNDEuMTQyOCA0My42OTI5QzQwLjk3MTQgNDMuNjkyOSA0MC44ODU3IDQzLjc3ODYgNDAuNzk5OSA0My44NjQzTDM3Ljk3MTQgNDcuNjM1N0MzNy43MTQyIDQ3Ljg5MjkgMzcuMjg1NyA0Ny44OTI5IDM3LjExNDIgNDcuNjM1N0wzMy44NTcxIDQyLjIzNTdDMzMuNjg1NyA0MS45Nzg2IDMzLjc3MTQgNDEuNzIxNCAzNC4wMjg1IDQxLjU1TDQyLjA4NTcgMzcuMDA3MUM0Mi4zNDI4IDM2LjgzNTcgNDIuNTk5OSAzNi45MjE0IDQyLjc3MTQgMzcuMTc4NlpNNDIuMDg1NyAxOC40OTI5TDMxLjE5OTkgMTIuMzIxNEMzMC40Mjg1IDExLjg5MjkgMjkuMzk5OSAxMS44OTI5IDI4LjYyODUgMTIuMzIxNEwxNy44Mjg1IDE4LjQwNzFDMTcuMDU3MSAxOC44MzU3IDE2LjU0MjggMTkuNjkyOSAxNi41NDI4IDIwLjU1VjMyLjgwNzFDMTYuNTQyOCAzMy42NjQzIDE3LjA1NzEgMzQuNTIxNCAxNy44Mjg1IDM0Ljk1TDI4LjcxNDIgNDEuMTIxNEMyOS40ODU3IDQxLjU1IDMwLjUxNDIgNDEuNTUgMzEuMjg1NyA0MS4xMjE0TDQyLjA4NTcgMzUuMTIxNEM0Mi44NTcxIDM0LjY5MjkgNDMuMzcxNCAzMy44MzU3IDQzLjM3MTQgMzIuOTc4NlYyMC43MjE0QzQzLjM3MTQgMTkuNzc4NiA0Mi44NTcxIDE4LjkyMTQgNDIuMDg1NyAxOC40OTI5Wk0zNi45NDI4IDIzLjcyMTRMMzAuNTk5OSAzMi44OTI5QzMwLjQyODUgMzMuMTUgMzAuMDg1NyAzMy4zMjE0IDI5Ljc0MjggMzMuMzIxNEMyOS4zOTk5IDMzLjMyMTQgMjkuMDU3MSAzMy4xNSAyOC44ODU3IDMyLjg5MjlMMjIuNzk5OSAyMy43MjE0QzIyLjQ1NzEgMjMuMjkyOSAyMi42Mjg1IDIyLjYwNzEgMjMuMDU3MSAyMi4zNUMyMy40ODU3IDIyLjA5MjkgMjQuMTcxNCAyMi4xNzg2IDI0LjQyODUgMjIuNjA3MUwyOS42NTcxIDMwLjQ5MjlMMzUuMTQyOCAyMi41MjE0QzM1LjQ4NTcgMjIuMDkyOSAzNi4wODU3IDIxLjkyMTQgMzYuNTE0MiAyMi4yNjQzQzM3LjE5OTkgMjIuNjkyOSAzNy4yODU3IDIzLjI5MjkgMzYuOTQyOCAyMy43MjE0WiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg=="),
49
+ linear-gradient(100deg, #f4e2ce -67.2%, #debb9b 98.15%);
50
+ background-repeat: no-repeat;
51
+ border-radius: 15px;
52
+ background-size: 30px;
53
+ flex-basis: 30px;
54
+ flex-grow: 0;
55
+ }
56
+ .title {
57
+ flex-grow: 1;
58
+ color: #353535;
59
+ font-size: 14px;
60
+ font-weight: 500;
61
+ }
62
+ .amount {
63
+ flex-grow: 0;
64
+ color: #9e7b5a;
65
+ font-size: 14px;
66
+ font-weight: 700;
67
+ }
68
+ }
69
+ }
70
+ }
71
+ </style>