@uxda/appkit 4.2.24 → 4.2.28
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.
- package/.eslintrc.mjs +7 -7
- package/README.md +187 -187
- package/babel.config.js +12 -12
- package/dist/appkit.css +3 -3
- package/dist/index.js +13 -13
- package/package.json +79 -79
- package/project.config.json +15 -15
- package/project.tt.json +13 -13
- package/rollup.config.mjs +67 -67
- package/src/Appkit.ts +66 -66
- package/src/balance/api/endpoints.ts +133 -133
- package/src/balance/api/index.ts +106 -106
- package/src/balance/components/AccountView.vue +760 -760
- package/src/balance/components/BalanceCard.vue +215 -215
- package/src/balance/components/BalanceReminder.vue +85 -85
- package/src/balance/components/ConsumptionFilter.vue +218 -218
- package/src/balance/components/ConsumptionRules.vue +68 -68
- package/src/balance/components/DateFilter.vue +250 -250
- package/src/balance/components/DateRange.vue +80 -80
- package/src/balance/components/ListFilter.vue +62 -62
- package/src/balance/components/ListFilterPicker.vue +191 -191
- package/src/balance/components/PromoterCard.vue +237 -237
- package/src/balance/components/SecondBalance.vue +71 -71
- package/src/balance/components/Tip.vue +45 -45
- package/src/balance/components/index.ts +8 -8
- package/src/balance/types.ts +97 -97
- package/src/components/bt-cropper/index.vue +730 -774
- package/src/components/bt-cropper/utils/calcCropper.js +42 -42
- package/src/components/bt-cropper/utils/calcImagePosition.js +23 -23
- package/src/components/bt-cropper/utils/calcImageSize.js +37 -37
- package/src/components/bt-cropper/utils/calcPointDistance.js +12 -12
- package/src/components/bt-cropper/utils/calcRightAndBottom.js +7 -7
- package/src/components/bt-cropper/utils/ratio.js +3 -3
- package/src/components/bt-cropper/utils/tools.js +25 -25
- package/src/components/dd-area/index.vue +225 -225
- package/src/components/dd-icon/doc.md +21 -21
- package/src/components/dd-icon/index.vue +23 -23
- package/src/components/dd-notice-bar/index.vue +78 -78
- package/src/components/dd-search/doc.md +34 -34
- package/src/components/dd-search/index.vue +168 -168
- package/src/components/dd-selector/index.vue +124 -124
- package/src/components/dd-skeleton/doc.md +19 -19
- package/src/components/dd-skeleton/index.vue +36 -36
- package/src/global.ts +6 -6
- package/src/index.ts +89 -89
- package/src/main.scss +1 -1
- package/src/notice/api/endpoints.ts +17 -17
- package/src/notice/api/index.ts +106 -106
- package/src/notice/components/NoticeBanner.vue +243 -243
- package/src/notice/components/NoticeEntry.vue +99 -99
- package/src/notice/components/NoticeList.vue +315 -315
- package/src/notice/components/NoticePopup.vue +162 -162
- package/src/notice/components/index.ts +5 -5
- package/src/notice/components/useCommonList.ts +86 -86
- package/src/notice/components/useNotice.ts +35 -35
- package/src/notice/index.ts +1 -1
- package/src/notice/types.ts +25 -25
- package/src/payment/api/config.ts +7 -7
- package/src/payment/api/endpoints.ts +103 -103
- package/src/payment/api/index.ts +100 -100
- package/src/payment/components/AmountPicker.vue +90 -90
- package/src/payment/components/RechargeResult.vue +69 -69
- package/src/payment/components/RechargeView.vue +155 -155
- package/src/payment/components/RightsPicker.vue +105 -105
- package/src/payment/components/TradeView.vue +317 -317
- package/src/payment/components/UserAgreement.vue +234 -234
- package/src/payment/components/index.ts +22 -22
- package/src/payment/index.ts +5 -5
- package/src/payment/services/index.ts +16 -16
- package/src/payment/services/invoke-recharge.ts +25 -25
- package/src/payment/services/request-payment.ts +58 -58
- package/src/payment/types.ts +28 -28
- package/src/register/components/SelfRegistration.vue +233 -233
- package/src/register/components/index.ts +2 -2
- package/src/shared/components/AppDrawer.vue +54 -54
- package/src/shared/components/AppVerify.vue +128 -128
- package/src/shared/components/DeviceVersion.vue +63 -68
- package/src/shared/components/EmptyView.vue +33 -33
- package/src/shared/components/OcrBusinessLicense.vue +130 -130
- package/src/shared/components/OcrIcon.vue +202 -202
- package/src/shared/components/PageHeader.vue +84 -84
- package/src/shared/components/index.ts +8 -8
- package/src/shared/composables/index.ts +8 -8
- package/src/shared/composables/useAmount.ts +46 -46
- package/src/shared/composables/useCountdown.ts +46 -46
- package/src/shared/composables/useCrypto.ts +76 -76
- package/src/shared/composables/useDragBox.ts +97 -97
- package/src/shared/composables/useEncode.ts +43 -43
- package/src/shared/composables/useLogger.ts +124 -124
- package/src/shared/composables/useSafeArea.ts +46 -46
- package/src/shared/composables/useTabbar.ts +24 -24
- package/src/shared/composables/useUpload.ts +54 -54
- package/src/shared/composables/useValidator.ts +32 -32
- package/src/shared/http/Http.ts +136 -136
- package/src/shared/http/index.ts +1 -1
- package/src/shared/http/types.ts +157 -157
- package/src/shared/index.ts +3 -3
- package/src/shared/weixin/payment.ts +38 -38
- package/src/styles/vars.scss +3 -3
- package/src/user/api/endpoints.ts +17 -17
- package/src/user/api/index.ts +111 -111
- package/src/user/components/LoginSetting.vue +114 -114
- package/src/user/components/UserAuth.vue +257 -257
- package/src/user/components/UserBinding.vue +307 -307
- package/src/user/components/UserBindingSuccess.vue +80 -80
- package/src/user/components/UserEntry.vue +133 -133
- package/src/user/components/UserFeedback.vue +431 -431
- package/src/user/components/UserFeedbackEntry.vue +175 -192
- package/src/user/components/UserHeadCrop.vue +65 -65
- package/src/user/components/UserInfo.vue +826 -826
- package/src/user/components/UserResourceEmpty.vue +75 -75
- package/src/user/components/index.ts +23 -23
- package/src/user/index.ts +1 -1
- package/tsconfig.json +30 -30
- package/types/global.d.ts +21 -21
- package/types/vue.d.ts +10 -10
|
@@ -1,162 +1,162 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<nut-popup
|
|
3
|
-
pop-class="notice-popup"
|
|
4
|
-
:close-on-click-overlay="false"
|
|
5
|
-
v-model:visible="showPopup"
|
|
6
|
-
round
|
|
7
|
-
>
|
|
8
|
-
<div class="notice-popup-hd">
|
|
9
|
-
<img
|
|
10
|
-
class="notice-popup-hd-icon"
|
|
11
|
-
src="https://cdn.ddjf.com/static/images/customer-center/system-notice-1.png"
|
|
12
|
-
alt=""
|
|
13
|
-
/>系统公告
|
|
14
|
-
</div>
|
|
15
|
-
<div class="notice-popup-bd">
|
|
16
|
-
<div style="white-space: pre-wrap">{{ message.context.replace('【系统公告】 ', '') }}</div>
|
|
17
|
-
<div
|
|
18
|
-
v-if="message.jumpUrl || message.link"
|
|
19
|
-
class="notice-popup-bd-link"
|
|
20
|
-
@click="toViewAttachment"
|
|
21
|
-
>
|
|
22
|
-
点击查看附件
|
|
23
|
-
</div>
|
|
24
|
-
</div>
|
|
25
|
-
<div class="notice-popup-ft">
|
|
26
|
-
<div class="notice-popup-ft-btn" @click="onClose">我知道了</div>
|
|
27
|
-
</div>
|
|
28
|
-
</nut-popup>
|
|
29
|
-
</template>
|
|
30
|
-
|
|
31
|
-
<script lang="ts" setup>
|
|
32
|
-
import { onMounted, ref } from 'vue'
|
|
33
|
-
import { useHttp } from '../api'
|
|
34
|
-
|
|
35
|
-
const props = withDefaults(
|
|
36
|
-
defineProps<{
|
|
37
|
-
message: any
|
|
38
|
-
}>(),
|
|
39
|
-
{
|
|
40
|
-
message: {},
|
|
41
|
-
}
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
const showPopup = ref(true)
|
|
45
|
-
|
|
46
|
-
onMounted(() => {})
|
|
47
|
-
|
|
48
|
-
// 关闭
|
|
49
|
-
function onCancel() {
|
|
50
|
-
showPopup.value = false
|
|
51
|
-
|
|
52
|
-
emits('close')
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// 查看附件
|
|
56
|
-
function toViewAttachment() {
|
|
57
|
-
onClose()
|
|
58
|
-
|
|
59
|
-
emits('view', props.message.jumpUrl || props.message.link)
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// 关闭弹框
|
|
63
|
-
async function onClose() {
|
|
64
|
-
const $http = useHttp()
|
|
65
|
-
|
|
66
|
-
$http
|
|
67
|
-
.post('/cas/msg/setMsgStatus', {
|
|
68
|
-
device: 'MINI',
|
|
69
|
-
noticeStatus: 0,
|
|
70
|
-
receiveId: props.message.id,
|
|
71
|
-
})
|
|
72
|
-
.then(() => {
|
|
73
|
-
// if (props.message.isRead === 0) {
|
|
74
|
-
// toReadFun([props.message.id])
|
|
75
|
-
// }
|
|
76
|
-
onCancel()
|
|
77
|
-
})
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const emits = defineEmits(['close', 'view'])
|
|
81
|
-
</script>
|
|
82
|
-
|
|
83
|
-
<style lang="scss">
|
|
84
|
-
.notice-popup {
|
|
85
|
-
width: 280px;
|
|
86
|
-
padding: 20px 15px;
|
|
87
|
-
border-radius: 10px !important;
|
|
88
|
-
background: linear-gradient(136.72deg, #d0fdfe 6.02%, #a2b9ff 59.97%, #6593ff 108.78%);
|
|
89
|
-
&::after {
|
|
90
|
-
content: '';
|
|
91
|
-
position: absolute;
|
|
92
|
-
width: 100%;
|
|
93
|
-
height: 100%;
|
|
94
|
-
left: 0;
|
|
95
|
-
top: 0;
|
|
96
|
-
background: linear-gradient(360deg, #ffffff 4.73%, rgba(255, 255, 255, 0) 85.82%);
|
|
97
|
-
z-index: 1;
|
|
98
|
-
border-radius: 10px;
|
|
99
|
-
}
|
|
100
|
-
&::before {
|
|
101
|
-
content: '';
|
|
102
|
-
width: 236px;
|
|
103
|
-
height: 241px;
|
|
104
|
-
position: absolute;
|
|
105
|
-
top: 0;
|
|
106
|
-
right: 40px;
|
|
107
|
-
background: url('https://cdn.ddjf.com/static/images/customer-center/notice-modal-bg.png');
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
.nutui-popup__content-wrapper {
|
|
111
|
-
position: relative;
|
|
112
|
-
z-index: 2;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
&-hd {
|
|
116
|
-
color: #0a2668;
|
|
117
|
-
font-size: 17px;
|
|
118
|
-
display: flex;
|
|
119
|
-
align-items: center;
|
|
120
|
-
margin-bottom: 20px;
|
|
121
|
-
font-weight: 600;
|
|
122
|
-
&-icon {
|
|
123
|
-
width: 20px;
|
|
124
|
-
height: 20px;
|
|
125
|
-
margin-right: 4px;
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
&-bd {
|
|
129
|
-
color: #353535;
|
|
130
|
-
box-shadow: 0px 2px 8px 0px #ffffff33 inset, 0px 1px 1px 0px #ffffff80 inset,
|
|
131
|
-
0px 0px 1px 0px #ffffffb2;
|
|
132
|
-
border-radius: 3px;
|
|
133
|
-
background: rgba(255, 255, 255, 0.6);
|
|
134
|
-
min-height: 160px;
|
|
135
|
-
margin-bottom: 20px;
|
|
136
|
-
padding: 15px 10px;
|
|
137
|
-
box-sizing: border-box;
|
|
138
|
-
font-size: 10px;
|
|
139
|
-
&-link {
|
|
140
|
-
color: #007fff;
|
|
141
|
-
margin-top: 2px;
|
|
142
|
-
font-weight: 600;
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
&-ft {
|
|
146
|
-
display: flex;
|
|
147
|
-
align-items: center;
|
|
148
|
-
justify-content: center;
|
|
149
|
-
&-btn {
|
|
150
|
-
background: #007fff;
|
|
151
|
-
color: #fff;
|
|
152
|
-
width: 128px;
|
|
153
|
-
height: 30px;
|
|
154
|
-
display: flex;
|
|
155
|
-
align-items: center;
|
|
156
|
-
justify-content: center;
|
|
157
|
-
border-radius: 15px;
|
|
158
|
-
z-index: 10;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<nut-popup
|
|
3
|
+
pop-class="notice-popup"
|
|
4
|
+
:close-on-click-overlay="false"
|
|
5
|
+
v-model:visible="showPopup"
|
|
6
|
+
round
|
|
7
|
+
>
|
|
8
|
+
<div class="notice-popup-hd">
|
|
9
|
+
<img
|
|
10
|
+
class="notice-popup-hd-icon"
|
|
11
|
+
src="https://cdn.ddjf.com/static/images/customer-center/system-notice-1.png"
|
|
12
|
+
alt=""
|
|
13
|
+
/>系统公告
|
|
14
|
+
</div>
|
|
15
|
+
<div class="notice-popup-bd">
|
|
16
|
+
<div style="white-space: pre-wrap">{{ message.context.replace('【系统公告】 ', '') }}</div>
|
|
17
|
+
<div
|
|
18
|
+
v-if="message.jumpUrl || message.link"
|
|
19
|
+
class="notice-popup-bd-link"
|
|
20
|
+
@click="toViewAttachment"
|
|
21
|
+
>
|
|
22
|
+
点击查看附件
|
|
23
|
+
</div>
|
|
24
|
+
</div>
|
|
25
|
+
<div class="notice-popup-ft">
|
|
26
|
+
<div class="notice-popup-ft-btn" @click="onClose">我知道了</div>
|
|
27
|
+
</div>
|
|
28
|
+
</nut-popup>
|
|
29
|
+
</template>
|
|
30
|
+
|
|
31
|
+
<script lang="ts" setup>
|
|
32
|
+
import { onMounted, ref } from 'vue'
|
|
33
|
+
import { useHttp } from '../api'
|
|
34
|
+
|
|
35
|
+
const props = withDefaults(
|
|
36
|
+
defineProps<{
|
|
37
|
+
message: any
|
|
38
|
+
}>(),
|
|
39
|
+
{
|
|
40
|
+
message: {},
|
|
41
|
+
}
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
const showPopup = ref(true)
|
|
45
|
+
|
|
46
|
+
onMounted(() => {})
|
|
47
|
+
|
|
48
|
+
// 关闭
|
|
49
|
+
function onCancel() {
|
|
50
|
+
showPopup.value = false
|
|
51
|
+
|
|
52
|
+
emits('close')
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// 查看附件
|
|
56
|
+
function toViewAttachment() {
|
|
57
|
+
onClose()
|
|
58
|
+
|
|
59
|
+
emits('view', props.message.jumpUrl || props.message.link)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
// 关闭弹框
|
|
63
|
+
async function onClose() {
|
|
64
|
+
const $http = useHttp()
|
|
65
|
+
|
|
66
|
+
$http
|
|
67
|
+
.post('/cas/msg/setMsgStatus', {
|
|
68
|
+
device: 'MINI',
|
|
69
|
+
noticeStatus: 0,
|
|
70
|
+
receiveId: props.message.id,
|
|
71
|
+
})
|
|
72
|
+
.then(() => {
|
|
73
|
+
// if (props.message.isRead === 0) {
|
|
74
|
+
// toReadFun([props.message.id])
|
|
75
|
+
// }
|
|
76
|
+
onCancel()
|
|
77
|
+
})
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const emits = defineEmits(['close', 'view'])
|
|
81
|
+
</script>
|
|
82
|
+
|
|
83
|
+
<style lang="scss">
|
|
84
|
+
.notice-popup {
|
|
85
|
+
width: 280px;
|
|
86
|
+
padding: 20px 15px;
|
|
87
|
+
border-radius: 10px !important;
|
|
88
|
+
background: linear-gradient(136.72deg, #d0fdfe 6.02%, #a2b9ff 59.97%, #6593ff 108.78%);
|
|
89
|
+
&::after {
|
|
90
|
+
content: '';
|
|
91
|
+
position: absolute;
|
|
92
|
+
width: 100%;
|
|
93
|
+
height: 100%;
|
|
94
|
+
left: 0;
|
|
95
|
+
top: 0;
|
|
96
|
+
background: linear-gradient(360deg, #ffffff 4.73%, rgba(255, 255, 255, 0) 85.82%);
|
|
97
|
+
z-index: 1;
|
|
98
|
+
border-radius: 10px;
|
|
99
|
+
}
|
|
100
|
+
&::before {
|
|
101
|
+
content: '';
|
|
102
|
+
width: 236px;
|
|
103
|
+
height: 241px;
|
|
104
|
+
position: absolute;
|
|
105
|
+
top: 0;
|
|
106
|
+
right: 40px;
|
|
107
|
+
background: url('https://cdn.ddjf.com/static/images/customer-center/notice-modal-bg.png');
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
.nutui-popup__content-wrapper {
|
|
111
|
+
position: relative;
|
|
112
|
+
z-index: 2;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
&-hd {
|
|
116
|
+
color: #0a2668;
|
|
117
|
+
font-size: 17px;
|
|
118
|
+
display: flex;
|
|
119
|
+
align-items: center;
|
|
120
|
+
margin-bottom: 20px;
|
|
121
|
+
font-weight: 600;
|
|
122
|
+
&-icon {
|
|
123
|
+
width: 20px;
|
|
124
|
+
height: 20px;
|
|
125
|
+
margin-right: 4px;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
&-bd {
|
|
129
|
+
color: #353535;
|
|
130
|
+
box-shadow: 0px 2px 8px 0px #ffffff33 inset, 0px 1px 1px 0px #ffffff80 inset,
|
|
131
|
+
0px 0px 1px 0px #ffffffb2;
|
|
132
|
+
border-radius: 3px;
|
|
133
|
+
background: rgba(255, 255, 255, 0.6);
|
|
134
|
+
min-height: 160px;
|
|
135
|
+
margin-bottom: 20px;
|
|
136
|
+
padding: 15px 10px;
|
|
137
|
+
box-sizing: border-box;
|
|
138
|
+
font-size: 10px;
|
|
139
|
+
&-link {
|
|
140
|
+
color: #007fff;
|
|
141
|
+
margin-top: 2px;
|
|
142
|
+
font-weight: 600;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
&-ft {
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: center;
|
|
148
|
+
justify-content: center;
|
|
149
|
+
&-btn {
|
|
150
|
+
background: #007fff;
|
|
151
|
+
color: #fff;
|
|
152
|
+
width: 128px;
|
|
153
|
+
height: 30px;
|
|
154
|
+
display: flex;
|
|
155
|
+
align-items: center;
|
|
156
|
+
justify-content: center;
|
|
157
|
+
border-radius: 15px;
|
|
158
|
+
z-index: 10;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
</style>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import NoticeBanner from './NoticeBanner.vue'
|
|
2
|
-
import NoticeEntry from './NoticeEntry.vue'
|
|
3
|
-
import NoticeList from './NoticeList.vue'
|
|
4
|
-
|
|
5
|
-
export { NoticeBanner, NoticeEntry, NoticeList }
|
|
1
|
+
import NoticeBanner from './NoticeBanner.vue'
|
|
2
|
+
import NoticeEntry from './NoticeEntry.vue'
|
|
3
|
+
import NoticeList from './NoticeList.vue'
|
|
4
|
+
|
|
5
|
+
export { NoticeBanner, NoticeEntry, NoticeList }
|
|
@@ -1,86 +1,86 @@
|
|
|
1
|
-
import Taro from '@tarojs/taro'
|
|
2
|
-
import { Ref, ref, unref } from 'vue'
|
|
3
|
-
import { useHttp } from '../api'
|
|
4
|
-
|
|
5
|
-
interface ListResponseType<T> {
|
|
6
|
-
total: number
|
|
7
|
-
pageNum: number
|
|
8
|
-
pageSize: number
|
|
9
|
-
list: Array<T>
|
|
10
|
-
[prop: string]: unknown
|
|
11
|
-
}
|
|
12
|
-
interface QueryLimit {
|
|
13
|
-
pageNum: number
|
|
14
|
-
pageSize: number
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export function useCommonList<R, Q extends QueryLimit>(
|
|
18
|
-
api: string,
|
|
19
|
-
query: Ref<Q>,
|
|
20
|
-
showLoading = true,
|
|
21
|
-
method = 'GET'
|
|
22
|
-
) {
|
|
23
|
-
const isLast = ref(false)
|
|
24
|
-
const list = ref<R[]>([]) as Ref<R[]>
|
|
25
|
-
const firstLoading = ref(true) // 是否第一次加载
|
|
26
|
-
const total = ref(0)
|
|
27
|
-
const isLoading = ref(false)
|
|
28
|
-
|
|
29
|
-
async function fetchData(loading) {
|
|
30
|
-
loading &&
|
|
31
|
-
Taro.showLoading({
|
|
32
|
-
title: '加载中...',
|
|
33
|
-
})
|
|
34
|
-
isLoading.value = true
|
|
35
|
-
|
|
36
|
-
const $http = useHttp()
|
|
37
|
-
const res = await $http[method === 'GET' ? 'get' : 'post']<ListResponseType<R>>(api, {
|
|
38
|
-
...unref(query),
|
|
39
|
-
})
|
|
40
|
-
|
|
41
|
-
isLoading.value = false
|
|
42
|
-
loading && Taro.hideLoading()
|
|
43
|
-
if (res) {
|
|
44
|
-
const pages = Math.ceil(res.total / res.pageSize)
|
|
45
|
-
isLast.value = res.pageNum >= pages
|
|
46
|
-
total.value = res.total
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
return (res || {}).list || []
|
|
50
|
-
}
|
|
51
|
-
async function runNext() {
|
|
52
|
-
if (isLast.value) return
|
|
53
|
-
if (isLoading.value) return
|
|
54
|
-
query.value.pageNum += 1
|
|
55
|
-
const data = await fetchData(true)
|
|
56
|
-
list.value.push(...data)
|
|
57
|
-
}
|
|
58
|
-
async function runRefresh() {
|
|
59
|
-
query.value.pageNum = 1
|
|
60
|
-
isLast.value = false
|
|
61
|
-
const data = await fetchData(true)
|
|
62
|
-
if (data.length === 0) {
|
|
63
|
-
list.value = []
|
|
64
|
-
} else {
|
|
65
|
-
list.value = data // 直接替换,避免白屏
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async function init(pageNum?: number) {
|
|
70
|
-
query.value.pageNum = pageNum || 1
|
|
71
|
-
isLast.value = false
|
|
72
|
-
const data = await fetchData(showLoading)
|
|
73
|
-
list.value = data || []
|
|
74
|
-
firstLoading.value = false
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
return {
|
|
78
|
-
total,
|
|
79
|
-
isLast,
|
|
80
|
-
firstLoading,
|
|
81
|
-
list,
|
|
82
|
-
init,
|
|
83
|
-
runNext,
|
|
84
|
-
runRefresh,
|
|
85
|
-
}
|
|
86
|
-
}
|
|
1
|
+
import Taro from '@tarojs/taro'
|
|
2
|
+
import { Ref, ref, unref } from 'vue'
|
|
3
|
+
import { useHttp } from '../api'
|
|
4
|
+
|
|
5
|
+
interface ListResponseType<T> {
|
|
6
|
+
total: number
|
|
7
|
+
pageNum: number
|
|
8
|
+
pageSize: number
|
|
9
|
+
list: Array<T>
|
|
10
|
+
[prop: string]: unknown
|
|
11
|
+
}
|
|
12
|
+
interface QueryLimit {
|
|
13
|
+
pageNum: number
|
|
14
|
+
pageSize: number
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export function useCommonList<R, Q extends QueryLimit>(
|
|
18
|
+
api: string,
|
|
19
|
+
query: Ref<Q>,
|
|
20
|
+
showLoading = true,
|
|
21
|
+
method = 'GET'
|
|
22
|
+
) {
|
|
23
|
+
const isLast = ref(false)
|
|
24
|
+
const list = ref<R[]>([]) as Ref<R[]>
|
|
25
|
+
const firstLoading = ref(true) // 是否第一次加载
|
|
26
|
+
const total = ref(0)
|
|
27
|
+
const isLoading = ref(false)
|
|
28
|
+
|
|
29
|
+
async function fetchData(loading) {
|
|
30
|
+
loading &&
|
|
31
|
+
Taro.showLoading({
|
|
32
|
+
title: '加载中...',
|
|
33
|
+
})
|
|
34
|
+
isLoading.value = true
|
|
35
|
+
|
|
36
|
+
const $http = useHttp()
|
|
37
|
+
const res = await $http[method === 'GET' ? 'get' : 'post']<ListResponseType<R>>(api, {
|
|
38
|
+
...unref(query),
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
isLoading.value = false
|
|
42
|
+
loading && Taro.hideLoading()
|
|
43
|
+
if (res) {
|
|
44
|
+
const pages = Math.ceil(res.total / res.pageSize)
|
|
45
|
+
isLast.value = res.pageNum >= pages
|
|
46
|
+
total.value = res.total
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return (res || {}).list || []
|
|
50
|
+
}
|
|
51
|
+
async function runNext() {
|
|
52
|
+
if (isLast.value) return
|
|
53
|
+
if (isLoading.value) return
|
|
54
|
+
query.value.pageNum += 1
|
|
55
|
+
const data = await fetchData(true)
|
|
56
|
+
list.value.push(...data)
|
|
57
|
+
}
|
|
58
|
+
async function runRefresh() {
|
|
59
|
+
query.value.pageNum = 1
|
|
60
|
+
isLast.value = false
|
|
61
|
+
const data = await fetchData(true)
|
|
62
|
+
if (data.length === 0) {
|
|
63
|
+
list.value = []
|
|
64
|
+
} else {
|
|
65
|
+
list.value = data // 直接替换,避免白屏
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async function init(pageNum?: number) {
|
|
70
|
+
query.value.pageNum = pageNum || 1
|
|
71
|
+
isLast.value = false
|
|
72
|
+
const data = await fetchData(showLoading)
|
|
73
|
+
list.value = data || []
|
|
74
|
+
firstLoading.value = false
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return {
|
|
78
|
+
total,
|
|
79
|
+
isLast,
|
|
80
|
+
firstLoading,
|
|
81
|
+
list,
|
|
82
|
+
init,
|
|
83
|
+
runNext,
|
|
84
|
+
runRefresh,
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -1,35 +1,35 @@
|
|
|
1
|
-
import { useHttp } from '../api'
|
|
2
|
-
|
|
3
|
-
export function useNotice() {
|
|
4
|
-
// 点击消息时
|
|
5
|
-
async function noticeClick(item: any, cb?: Function) {
|
|
6
|
-
if (item.isRead === 0) {
|
|
7
|
-
await toReadFun([item.id || item.msgId])
|
|
8
|
-
}
|
|
9
|
-
if (item.link) {
|
|
10
|
-
cb && cb(item.link)
|
|
11
|
-
}
|
|
12
|
-
return true
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
// 请求-标记消息已读
|
|
16
|
-
async function toReadFun(msgIds: number[]) {
|
|
17
|
-
const $http = useHttp()
|
|
18
|
-
|
|
19
|
-
return new Promise<boolean>((resolve) => {
|
|
20
|
-
$http
|
|
21
|
-
.post('/cas/msg/read', msgIds)
|
|
22
|
-
.then(() => {
|
|
23
|
-
resolve(true)
|
|
24
|
-
})
|
|
25
|
-
.catch(() => {
|
|
26
|
-
resolve(false)
|
|
27
|
-
})
|
|
28
|
-
})
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
return {
|
|
32
|
-
noticeClick,
|
|
33
|
-
toReadFun,
|
|
34
|
-
}
|
|
35
|
-
}
|
|
1
|
+
import { useHttp } from '../api'
|
|
2
|
+
|
|
3
|
+
export function useNotice() {
|
|
4
|
+
// 点击消息时
|
|
5
|
+
async function noticeClick(item: any, cb?: Function) {
|
|
6
|
+
if (item.isRead === 0) {
|
|
7
|
+
await toReadFun([item.id || item.msgId])
|
|
8
|
+
}
|
|
9
|
+
if (item.link) {
|
|
10
|
+
cb && cb(item.link)
|
|
11
|
+
}
|
|
12
|
+
return true
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// 请求-标记消息已读
|
|
16
|
+
async function toReadFun(msgIds: number[]) {
|
|
17
|
+
const $http = useHttp()
|
|
18
|
+
|
|
19
|
+
return new Promise<boolean>((resolve) => {
|
|
20
|
+
$http
|
|
21
|
+
.post('/cas/msg/read', msgIds)
|
|
22
|
+
.then(() => {
|
|
23
|
+
resolve(true)
|
|
24
|
+
})
|
|
25
|
+
.catch(() => {
|
|
26
|
+
resolve(false)
|
|
27
|
+
})
|
|
28
|
+
})
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return {
|
|
32
|
+
noticeClick,
|
|
33
|
+
toReadFun,
|
|
34
|
+
}
|
|
35
|
+
}
|
package/src/notice/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from './components'
|
|
1
|
+
export * from './components'
|
package/src/notice/types.ts
CHANGED
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
// 消息
|
|
2
|
-
export interface NoticeListQueryTypes {
|
|
3
|
-
pageNum: number
|
|
4
|
-
pageSize: number
|
|
5
|
-
searchStr: string
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
// 消息内容
|
|
9
|
-
export interface Notice {
|
|
10
|
-
applyNo: string // 消息关联订单编号 string
|
|
11
|
-
customerId: string // 消息关联客户编号 string
|
|
12
|
-
id: number // id integer(int64)
|
|
13
|
-
isRead: string // 是否已读(0:未读;1:已读) string
|
|
14
|
-
msg: string // 消息内容 string
|
|
15
|
-
msgType: string // 消息主体类型(order:订单;customer:客户) string
|
|
16
|
-
sendTime: string // 消息发送时间
|
|
17
|
-
[props: string]: any
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// 消息列表
|
|
21
|
-
export interface NoticeListTypes {
|
|
22
|
-
list: Notice[]
|
|
23
|
-
total: number | string
|
|
24
|
-
[props: string]: any
|
|
25
|
-
}
|
|
1
|
+
// 消息
|
|
2
|
+
export interface NoticeListQueryTypes {
|
|
3
|
+
pageNum: number
|
|
4
|
+
pageSize: number
|
|
5
|
+
searchStr: string
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
// 消息内容
|
|
9
|
+
export interface Notice {
|
|
10
|
+
applyNo: string // 消息关联订单编号 string
|
|
11
|
+
customerId: string // 消息关联客户编号 string
|
|
12
|
+
id: number // id integer(int64)
|
|
13
|
+
isRead: string // 是否已读(0:未读;1:已读) string
|
|
14
|
+
msg: string // 消息内容 string
|
|
15
|
+
msgType: string // 消息主体类型(order:订单;customer:客户) string
|
|
16
|
+
sendTime: string // 消息发送时间
|
|
17
|
+
[props: string]: any
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// 消息列表
|
|
21
|
+
export interface NoticeListTypes {
|
|
22
|
+
list: Notice[]
|
|
23
|
+
total: number | string
|
|
24
|
+
[props: string]: any
|
|
25
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { HttpClientConfig } from '../../shared/http'
|
|
2
|
-
|
|
3
|
-
const clientConfig: HttpClientConfig = {
|
|
4
|
-
baseUrl: 'http://ytech.dev.ddjf.info',
|
|
5
|
-
|
|
6
|
-
}
|
|
7
|
-
|
|
1
|
+
import type { HttpClientConfig } from '../../shared/http'
|
|
2
|
+
|
|
3
|
+
const clientConfig: HttpClientConfig = {
|
|
4
|
+
baseUrl: 'http://ytech.dev.ddjf.info',
|
|
5
|
+
|
|
6
|
+
}
|
|
7
|
+
|
|
8
8
|
export default clientConfig
|