@uxda/appkit 4.1.54 → 4.1.60

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 (117) 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 +51 -11
  5. package/dist/index.js +515 -297
  6. package/package.json +77 -77
  7. package/project.config.json +15 -15
  8. package/project.tt.json +13 -13
  9. package/rollup.config.mjs +56 -56
  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 -749
  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 -63
  21. package/src/balance/components/ListFilterPicker.vue +191 -192
  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 -129
  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 +31 -31
  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 +216 -0
  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 +723 -637
  111. package/src/user/components/UserResourceEmpty.vue +75 -75
  112. package/src/user/components/index.ts +23 -21
  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
@@ -1,114 +1,114 @@
1
- <template>
2
- <div class="login-setting" :style="style" v-if="show && showLoginRule">
3
- <img
4
- class="login-setting-img"
5
- src="https://cdn.ddjf.com/static/images/nutshell/empty-permission.png"
6
- />
7
- <div class="login-setting-text">
8
- {{ loginRuleTip }}
9
- </div>
10
- </div>
11
- </template>
12
-
13
- <script lang="ts" setup>
14
- import { computed, ref, onMounted } from 'vue'
15
- import { useHttp } from '../api'
16
- import { useAppKitOptions } from '../../Appkit'
17
- import { useSafeArea } from '../../shared/composables'
18
- import { useDidShow } from '@tarojs/taro'
19
- import debounce from 'lodash/debounce'
20
-
21
- const props = withDefaults(
22
- defineProps<{
23
- app: string
24
- withTabbar?: boolean
25
- withNavbar?: boolean
26
- show?: boolean
27
- }>(),
28
- {
29
- app: '',
30
- withTabbar: false,
31
- withNavbar: false,
32
- show: true,
33
- }
34
- )
35
-
36
- const safeArea = useSafeArea()
37
- const showLoginRule = ref<boolean>(false)
38
- const loginRuleTip = ref('')
39
-
40
- const style = computed(() => {
41
- let str = ''
42
- if (props.withTabbar) {
43
- str += `bottom: ${safeArea.menuRect.bottom + 5}px;`
44
- }
45
- if (props.withNavbar) {
46
- str += `top: ${safeArea.nav + safeArea.status + 5}px;`
47
- }
48
- return str
49
- })
50
-
51
- onMounted(() => {
52
- checkLoginTimeRule()
53
- })
54
- useDidShow(() => {
55
- checkLoginTimeRule()
56
- })
57
-
58
- // 检验登录时间
59
- const checkLoginTimeRule = debounce(() => {
60
- const appkitOptions = useAppKitOptions()
61
-
62
- const $http = useHttp()
63
- $http
64
- .post('/cas/sysUser/checkLoginTimeRule', {
65
- appCode: props.app || appkitOptions.app(),
66
- tenantId: appkitOptions.tenant(),
67
- device: 'mini',
68
- })
69
- .then((result: any) => {
70
- if (result === true) {
71
- showLoginRule.value = false
72
- loginRuleTip.value = ''
73
- emits('show', loginRuleTip.value)
74
- return
75
- } else if (result.status) {
76
- showLoginRule.value = true
77
- loginRuleTip.value = result.message
78
- emits('show', loginRuleTip.value)
79
- }
80
- })
81
- }, 100)
82
-
83
- // 父组件事件
84
- const emits = defineEmits(['show'])
85
- </script>
86
-
87
- <style lang="scss">
88
- .login-setting {
89
- position: fixed;
90
- z-index: 4;
91
- left: 12px;
92
- top: 10px;
93
- bottom: 10px;
94
- align-items: center;
95
- width: calc(100% - 24px);
96
- background: #ffffff;
97
- border-radius: 5px;
98
- display: flex;
99
- flex-direction: column;
100
- &-img {
101
- margin-top: 50%;
102
- height: 111px;
103
- width: 198px;
104
- }
105
- &-text {
106
- margin-top: 10px;
107
- color: #353535;
108
- opacity: 0.4;
109
- font-size: 12px;
110
- padding: 0 30px;
111
- text-align: center;
112
- }
113
- }
114
- </style>
1
+ <template>
2
+ <div class="login-setting" :style="style" v-if="show && showLoginRule">
3
+ <img
4
+ class="login-setting-img"
5
+ src="https://cdn.ddjf.com/static/images/nutshell/empty-permission.png"
6
+ />
7
+ <div class="login-setting-text">
8
+ {{ loginRuleTip }}
9
+ </div>
10
+ </div>
11
+ </template>
12
+
13
+ <script lang="ts" setup>
14
+ import { computed, ref, onMounted } from 'vue'
15
+ import { useHttp } from '../api'
16
+ import { useAppKitOptions } from '../../Appkit'
17
+ import { useSafeArea } from '../../shared/composables'
18
+ import { useDidShow } from '@tarojs/taro'
19
+ import debounce from 'lodash/debounce'
20
+
21
+ const props = withDefaults(
22
+ defineProps<{
23
+ app: string
24
+ withTabbar?: boolean
25
+ withNavbar?: boolean
26
+ show?: boolean
27
+ }>(),
28
+ {
29
+ app: '',
30
+ withTabbar: false,
31
+ withNavbar: false,
32
+ show: true,
33
+ }
34
+ )
35
+
36
+ const safeArea = useSafeArea()
37
+ const showLoginRule = ref<boolean>(false)
38
+ const loginRuleTip = ref('')
39
+
40
+ const style = computed(() => {
41
+ let str = ''
42
+ if (props.withTabbar) {
43
+ str += `bottom: ${safeArea.menuRect.bottom + 5}px;`
44
+ }
45
+ if (props.withNavbar) {
46
+ str += `top: ${safeArea.nav + safeArea.status + 5}px;`
47
+ }
48
+ return str
49
+ })
50
+
51
+ onMounted(() => {
52
+ checkLoginTimeRule()
53
+ })
54
+ useDidShow(() => {
55
+ checkLoginTimeRule()
56
+ })
57
+
58
+ // 检验登录时间
59
+ const checkLoginTimeRule = debounce(() => {
60
+ const appkitOptions = useAppKitOptions()
61
+
62
+ const $http = useHttp()
63
+ $http
64
+ .post('/cas/sysUser/checkLoginTimeRule', {
65
+ appCode: props.app || appkitOptions.app(),
66
+ tenantId: appkitOptions.tenant(),
67
+ device: 'mini',
68
+ })
69
+ .then((result: any) => {
70
+ if (result === true) {
71
+ showLoginRule.value = false
72
+ loginRuleTip.value = ''
73
+ emits('show', loginRuleTip.value)
74
+ return
75
+ } else if (result.status) {
76
+ showLoginRule.value = true
77
+ loginRuleTip.value = result.message
78
+ emits('show', loginRuleTip.value)
79
+ }
80
+ })
81
+ }, 100)
82
+
83
+ // 父组件事件
84
+ const emits = defineEmits(['show'])
85
+ </script>
86
+
87
+ <style lang="scss">
88
+ .login-setting {
89
+ position: fixed;
90
+ z-index: 4;
91
+ left: 12px;
92
+ top: 10px;
93
+ bottom: 10px;
94
+ align-items: center;
95
+ width: calc(100% - 24px);
96
+ background: #ffffff;
97
+ border-radius: 5px;
98
+ display: flex;
99
+ flex-direction: column;
100
+ &-img {
101
+ margin-top: 50%;
102
+ height: 111px;
103
+ width: 198px;
104
+ }
105
+ &-text {
106
+ margin-top: 10px;
107
+ color: #353535;
108
+ opacity: 0.4;
109
+ font-size: 12px;
110
+ padding: 0 30px;
111
+ text-align: center;
112
+ }
113
+ }
114
+ </style>
@@ -0,0 +1,216 @@
1
+ <template>
2
+ <ns-page class="user-auth">
3
+ <ns-page-content>
4
+ <ns-card fill="#fff">
5
+ <ns-form ref="formRef" v-model="formData">
6
+ <ns-input
7
+ label="你的姓名"
8
+ name="姓名"
9
+ v-model="formData.姓名"
10
+ placeholder="请输入或拍照识别"
11
+ :maxlength="30"
12
+ :rules="['required']"
13
+ >
14
+ <template #append>
15
+ <ocr-icon @complete="onOcrComplete" />
16
+ </template>
17
+ </ns-input>
18
+ <ns-input
19
+ label="身份证号码"
20
+ name="身份证号码"
21
+ placeholder="请输入身份证号码"
22
+ :maxlength="30"
23
+ v-model="formData.身份证号码"
24
+ :rules="[
25
+ 'required',
26
+ {
27
+ name: 'function',
28
+ message: '请输入正确格式的证件号码',
29
+ method: (value: string) => isIdentityCard(value, 'zh-CN')
30
+ }
31
+ ]"
32
+ />
33
+ <ns-input
34
+ label="电话号码"
35
+ name="电话号码"
36
+ placeholder="请输入电话号码"
37
+ :maxlength="11"
38
+ v-model="formData.电话号码"
39
+ :rules="[
40
+ {
41
+ name: 'function',
42
+ message: '请输入正确格式的电话号码',
43
+ method: (value: string) => isMobilePhone(value, 'zh-CN')
44
+ }
45
+ ]"
46
+ />
47
+ </ns-form>
48
+ </ns-card>
49
+
50
+ <div class="user-auth-footer">
51
+ <div v-if="!已认证" class="checkbox-row">
52
+ <ns-checkbox style="font-size: 11px" v-model="formData.同意"
53
+ >我已阅读并同意</ns-checkbox
54
+ >
55
+ <span @click="showAgreement" class="book">《个人信息授权协议》</span>
56
+ </div>
57
+ <ns-button
58
+ v-if="!已认证"
59
+ class="btn"
60
+ color="primary"
61
+ type="primary"
62
+ @click="toSubmit"
63
+ >立即认证</ns-button
64
+ >
65
+ <ns-button
66
+ v-else
67
+ class="btn"
68
+ color="primary"
69
+ type="primary"
70
+ @click="toBack"
71
+ >返回</ns-button
72
+ >
73
+ </div>
74
+ </ns-page-content>
75
+ </ns-page>
76
+ </template>
77
+
78
+ <script lang="ts" setup>
79
+ import { reactive, ref } from "vue";
80
+ import {
81
+ NsForm,
82
+ NsInput,
83
+ NsCard,
84
+ NsPage,
85
+ NsPageContent,
86
+ NsButton,
87
+ NsCheckbox,
88
+ } from "@uxda/nutshell/taro";
89
+ import { OcrIcon } from "../../shared/components";
90
+ import Taro from "@tarojs/taro";
91
+ import { useNutshell } from "@uxda/nutshell/taro";
92
+ import { isIdentityCard, isMobilePhone } from "validator";
93
+ import { useHttp } from "../api";
94
+
95
+ const props = withDefaults(
96
+ defineProps<{
97
+ userId: string;
98
+ }>(),
99
+ {
100
+ userId: "",
101
+ }
102
+ );
103
+
104
+ const formRef = ref(),
105
+ $n = useNutshell();
106
+
107
+ const formData = reactive({
108
+ 姓名: "",
109
+ 身份证号码: "",
110
+ 电话号码: "",
111
+ 同意: false,
112
+ });
113
+
114
+ const 已认证 = ref(false);
115
+
116
+ const onOcrComplete = (result) => {
117
+ formData.姓名 = result?.faceInfo.name;
118
+ formData.身份证号码 = result?.faceInfo.certNo;
119
+ };
120
+
121
+ // 查看协议
122
+ function showAgreement() {
123
+ emits("toAgreement");
124
+ }
125
+
126
+ // 返回
127
+ function toBack() {
128
+ Taro.navigateBack();
129
+ }
130
+
131
+ // 认证
132
+ async function toSubmit() {
133
+ const res = await formRef.value.validate();
134
+ if (!res.valid) {
135
+ return $n.toast(res.errors[0].message, {});
136
+ }
137
+
138
+ if (!formData.同意) {
139
+ return $n.toast("请先阅读并同意协议", {});
140
+ }
141
+ const $http = useHttp();
142
+
143
+ $http
144
+ .post("/cas/sysAccount/verifyId3", {
145
+ // appCode:
146
+ idCard: formData.身份证号码,
147
+ mobile: formData.电话号码,
148
+ name: formData.姓名,
149
+ tenantId: props.userId,
150
+ })
151
+ .then(() => {
152
+ Taro.showToast({ title: "认证成功", icon: "none" });
153
+ // 提交认证信息,成功后返回
154
+ toBack();
155
+ })
156
+ .catch((err) => {
157
+ Taro.showToast({ title: err?.errMsg || "认证失败", icon: "none" });
158
+ });
159
+ }
160
+
161
+ const emits = defineEmits(["toAgreement"]);
162
+ </script>
163
+
164
+ <style lang="scss">
165
+ .user-auth {
166
+ height: 100vh;
167
+
168
+ &-footer {
169
+ position: fixed;
170
+ z-index: 10;
171
+ bottom: 0;
172
+ left: 0;
173
+ width: 100%;
174
+ min-height: 63px;
175
+ background: #ffffff;
176
+ box-shadow: 0 -3px 11px 0 rgba(224, 224, 224, 0.5);
177
+ padding: 10px 12px calc(8px + var(--safe-bottom-height));
178
+ display: flex;
179
+ justify-content: space-between;
180
+ box-sizing: border-box;
181
+
182
+ .btn {
183
+ width: 100%;
184
+ }
185
+
186
+ .checkbox-row {
187
+ --nut-primary-color: #017fff;
188
+ position: absolute;
189
+ top: -36px;
190
+ left: 50%;
191
+ transform: translateX(-50%);
192
+ white-space: nowrap;
193
+ display: flex;
194
+ align-items: center;
195
+
196
+ .nut-checkbox__label {
197
+ margin-left: 2px;
198
+ font-size: 11px;
199
+ }
200
+
201
+ .nut-icon-check-normal {
202
+ margin-top: 0 !important;
203
+ }
204
+
205
+ .nut-icon-checked {
206
+ font-size: 11px;
207
+ }
208
+
209
+ .book {
210
+ font-size: 11px;
211
+ color: #007aff;
212
+ }
213
+ }
214
+ }
215
+ }
216
+ </style>