@wapri/ghooks 0.2.19 → 1.0.0
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/LICENSE +21 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.js +0 -1
- package/dist/useLandscape/demo/basic.vue +29 -29
- package/dist/useLandscape/demo/lock.vue +29 -29
- package/dist/useLottie/demo/basic.vue +150 -150
- package/dist/useLottie/index.js +2 -2
- package/package.json +13 -14
- package/dist/useTicket/index.d.ts +0 -20
- package/dist/useTicket/index.js +0 -75
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 wapri contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<p>
|
|
4
|
-
当前屏幕方向:
|
|
5
|
-
<strong>{{ isLandscape ? '横屏' : '竖屏' }}</strong>
|
|
6
|
-
</p>
|
|
7
|
-
<p>当前视口尺寸:{{ width }} × {{ height }}</p>
|
|
8
|
-
<p style="color: #999">调整窗口宽度(宽>高即为横屏)可实时观察状态变化</p>
|
|
9
|
-
</div>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script setup lang="ts">
|
|
13
|
-
import { ref, onUnmounted } from 'vue'
|
|
14
|
-
import { useLandscape } from '@wapri/ghooks'
|
|
15
|
-
|
|
16
|
-
const isLandscape = useLandscape()
|
|
17
|
-
const width = ref(window.innerWidth)
|
|
18
|
-
const height = ref(window.innerHeight)
|
|
19
|
-
|
|
20
|
-
const updateSize = () => {
|
|
21
|
-
width.value = window.innerWidth
|
|
22
|
-
height.value = window.innerHeight
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
window.addEventListener('resize', updateSize)
|
|
26
|
-
onUnmounted(() => {
|
|
27
|
-
window.removeEventListener('resize', updateSize)
|
|
28
|
-
})
|
|
29
|
-
</script>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<p>
|
|
4
|
+
当前屏幕方向:
|
|
5
|
+
<strong>{{ isLandscape ? '横屏' : '竖屏' }}</strong>
|
|
6
|
+
</p>
|
|
7
|
+
<p>当前视口尺寸:{{ width }} × {{ height }}</p>
|
|
8
|
+
<p style="color: #999">调整窗口宽度(宽>高即为横屏)可实时观察状态变化</p>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup lang="ts">
|
|
13
|
+
import { ref, onUnmounted } from 'vue'
|
|
14
|
+
import { useLandscape } from '@wapri/ghooks'
|
|
15
|
+
|
|
16
|
+
const isLandscape = useLandscape()
|
|
17
|
+
const width = ref(window.innerWidth)
|
|
18
|
+
const height = ref(window.innerHeight)
|
|
19
|
+
|
|
20
|
+
const updateSize = () => {
|
|
21
|
+
width.value = window.innerWidth
|
|
22
|
+
height.value = window.innerHeight
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
window.addEventListener('resize', updateSize)
|
|
26
|
+
onUnmounted(() => {
|
|
27
|
+
window.removeEventListener('resize', updateSize)
|
|
28
|
+
})
|
|
29
|
+
</script>
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
<template>
|
|
2
|
-
<div>
|
|
3
|
-
<p>
|
|
4
|
-
当前屏幕方向:
|
|
5
|
-
<strong>{{ isLandscape ? '横屏' : '竖屏' }}</strong>
|
|
6
|
-
</p>
|
|
7
|
-
<p style="color: #999">将窗口拉宽至横屏(宽>高),页面立即被遮罩覆盖并提示旋转屏幕;恢复竖屏后遮罩自动消失</p>
|
|
8
|
-
<div class="content-box">业务内容区域(仅在竖屏时可见)</div>
|
|
9
|
-
</div>
|
|
10
|
-
</template>
|
|
11
|
-
|
|
12
|
-
<script setup lang="ts">
|
|
13
|
-
import { useLandscape } from '@wapri/ghooks'
|
|
14
|
-
import { os } from '@wapri/gbase'
|
|
15
|
-
|
|
16
|
-
const isLandscape = useLandscape({
|
|
17
|
-
lock: !os.isIpad() && !os.isPC(),
|
|
18
|
-
tip: '请旋转您的屏幕,切换至竖屏模式',
|
|
19
|
-
})
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<style scoped>
|
|
23
|
-
.content-box {
|
|
24
|
-
padding: 24px;
|
|
25
|
-
border: 1px dashed #ccc;
|
|
26
|
-
border-radius: 4px;
|
|
27
|
-
color: #666;
|
|
28
|
-
}
|
|
29
|
-
</style>
|
|
1
|
+
<template>
|
|
2
|
+
<div>
|
|
3
|
+
<p>
|
|
4
|
+
当前屏幕方向:
|
|
5
|
+
<strong>{{ isLandscape ? '横屏' : '竖屏' }}</strong>
|
|
6
|
+
</p>
|
|
7
|
+
<p style="color: #999">将窗口拉宽至横屏(宽>高),页面立即被遮罩覆盖并提示旋转屏幕;恢复竖屏后遮罩自动消失</p>
|
|
8
|
+
<div class="content-box">业务内容区域(仅在竖屏时可见)</div>
|
|
9
|
+
</div>
|
|
10
|
+
</template>
|
|
11
|
+
|
|
12
|
+
<script setup lang="ts">
|
|
13
|
+
import { useLandscape } from '@wapri/ghooks'
|
|
14
|
+
import { os } from '@wapri/gbase'
|
|
15
|
+
|
|
16
|
+
const isLandscape = useLandscape({
|
|
17
|
+
lock: !os.isIpad() && !os.isPC(),
|
|
18
|
+
tip: '请旋转您的屏幕,切换至竖屏模式',
|
|
19
|
+
})
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<style scoped>
|
|
23
|
+
.content-box {
|
|
24
|
+
padding: 24px;
|
|
25
|
+
border: 1px dashed #ccc;
|
|
26
|
+
border-radius: 4px;
|
|
27
|
+
color: #666;
|
|
28
|
+
}
|
|
29
|
+
</style>
|
|
@@ -1,150 +1,150 @@
|
|
|
1
|
-
<script setup lang="ts">
|
|
2
|
-
import { ref } from 'vue'
|
|
3
|
-
import { useLottie } from '@wapri/ghooks'
|
|
4
|
-
import animationData from './包邮.json'
|
|
5
|
-
|
|
6
|
-
const container = ref<HTMLElement>()
|
|
7
|
-
const status = ref('等待加载')
|
|
8
|
-
|
|
9
|
-
const { instance, play, pause, stop, playSegments, playAnimation, setLoop, getDuration } = useLottie(
|
|
10
|
-
container,
|
|
11
|
-
animationData,
|
|
12
|
-
{
|
|
13
|
-
loop: true,
|
|
14
|
-
onReady: (item) => {
|
|
15
|
-
status.value = `加载完成,共 ${item.totalFrames} 帧`
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
/** 一次播放两段区间 */
|
|
21
|
-
const handleSegmentPlay = () => {
|
|
22
|
-
setLoop(true)
|
|
23
|
-
status.value = '区间播放:[0,24] + [24,72]'
|
|
24
|
-
playSegments([
|
|
25
|
-
[0, 24],
|
|
26
|
-
[24, 72],
|
|
27
|
-
])
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/** 关闭循环后按顺序异步播放两段,每段结束才进入下一段 */
|
|
31
|
-
const handleAsyncPlay = async () => {
|
|
32
|
-
setLoop(false)
|
|
33
|
-
status.value = '第一段开始'
|
|
34
|
-
await playAnimation([[0, 24]], true)
|
|
35
|
-
status.value = '第一段结束'
|
|
36
|
-
await new Promise((resolve) => setTimeout(resolve, 600))
|
|
37
|
-
status.value = '第二段开始'
|
|
38
|
-
await playAnimation([24, 72])
|
|
39
|
-
status.value = '第二段结束'
|
|
40
|
-
}
|
|
41
|
-
</script>
|
|
42
|
-
|
|
43
|
-
<template>
|
|
44
|
-
<div class="lottie-demo">
|
|
45
|
-
<div
|
|
46
|
-
ref="container"
|
|
47
|
-
class="lottie-demo__stage"
|
|
48
|
-
/>
|
|
49
|
-
|
|
50
|
-
<div class="lottie-demo__panel">
|
|
51
|
-
<div class="lottie-demo__actions">
|
|
52
|
-
<button
|
|
53
|
-
type="button"
|
|
54
|
-
@click="play"
|
|
55
|
-
>
|
|
56
|
-
播放
|
|
57
|
-
</button>
|
|
58
|
-
<button
|
|
59
|
-
type="button"
|
|
60
|
-
@click="pause"
|
|
61
|
-
>
|
|
62
|
-
暂停
|
|
63
|
-
</button>
|
|
64
|
-
<button
|
|
65
|
-
type="button"
|
|
66
|
-
@click="stop"
|
|
67
|
-
>
|
|
68
|
-
停止
|
|
69
|
-
</button>
|
|
70
|
-
<button
|
|
71
|
-
type="button"
|
|
72
|
-
@click="handleSegmentPlay"
|
|
73
|
-
>
|
|
74
|
-
帧播放
|
|
75
|
-
</button>
|
|
76
|
-
<button
|
|
77
|
-
type="button"
|
|
78
|
-
@click="handleAsyncPlay"
|
|
79
|
-
>
|
|
80
|
-
异步多段动画
|
|
81
|
-
</button>
|
|
82
|
-
</div>
|
|
83
|
-
|
|
84
|
-
<p class="lottie-demo__status">{{ status }}</p>
|
|
85
|
-
<p class="lottie-demo__status">
|
|
86
|
-
{{ instance ? `实例已就绪,总时长 ${getDuration(false).toFixed(2)}s` : '实例加载中…' }}
|
|
87
|
-
</p>
|
|
88
|
-
</div>
|
|
89
|
-
</div>
|
|
90
|
-
</template>
|
|
91
|
-
|
|
92
|
-
<style scoped>
|
|
93
|
-
.lottie-demo {
|
|
94
|
-
display: flex;
|
|
95
|
-
max-width: 760px;
|
|
96
|
-
flex-wrap: wrap;
|
|
97
|
-
align-items: center;
|
|
98
|
-
gap: 20px;
|
|
99
|
-
padding: 20px;
|
|
100
|
-
border: 1px solid #e5e7eb;
|
|
101
|
-
border-radius: 8px;
|
|
102
|
-
color: #1f2937;
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
.lottie-demo__stage {
|
|
106
|
-
width: 240px;
|
|
107
|
-
height: 240px;
|
|
108
|
-
flex: 0 0 auto;
|
|
109
|
-
border-radius: 8px;
|
|
110
|
-
background: #f8fafc;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
.lottie-demo__panel {
|
|
114
|
-
flex: 1;
|
|
115
|
-
min-width: 260px;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
.lottie-demo__actions {
|
|
119
|
-
display: flex;
|
|
120
|
-
flex-wrap: wrap;
|
|
121
|
-
gap: 8px;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
.lottie-demo__actions button {
|
|
125
|
-
height: 32px;
|
|
126
|
-
padding: 0 14px;
|
|
127
|
-
border: 1px solid #d1d5db;
|
|
128
|
-
border-radius: 4px;
|
|
129
|
-
background: #fff;
|
|
130
|
-
color: inherit;
|
|
131
|
-
font: inherit;
|
|
132
|
-
font-size: 14px;
|
|
133
|
-
cursor: pointer;
|
|
134
|
-
transition:
|
|
135
|
-
border-color 0.2s,
|
|
136
|
-
color 0.2s;
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
.lottie-demo__actions button:hover {
|
|
140
|
-
border-color: #f97316;
|
|
141
|
-
color: #ea580c;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
.lottie-demo__status {
|
|
145
|
-
margin: 14px 0 0;
|
|
146
|
-
color: #6b7280;
|
|
147
|
-
font-size: 13px;
|
|
148
|
-
line-height: 1.8;
|
|
149
|
-
}
|
|
150
|
-
</style>
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { ref } from 'vue'
|
|
3
|
+
import { useLottie } from '@wapri/ghooks'
|
|
4
|
+
import animationData from './包邮.json'
|
|
5
|
+
|
|
6
|
+
const container = ref<HTMLElement>()
|
|
7
|
+
const status = ref('等待加载')
|
|
8
|
+
|
|
9
|
+
const { instance, play, pause, stop, playSegments, playAnimation, setLoop, getDuration } = useLottie(
|
|
10
|
+
container,
|
|
11
|
+
animationData,
|
|
12
|
+
{
|
|
13
|
+
loop: true,
|
|
14
|
+
onReady: (item) => {
|
|
15
|
+
status.value = `加载完成,共 ${item.totalFrames} 帧`
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
/** 一次播放两段区间 */
|
|
21
|
+
const handleSegmentPlay = () => {
|
|
22
|
+
setLoop(true)
|
|
23
|
+
status.value = '区间播放:[0,24] + [24,72]'
|
|
24
|
+
playSegments([
|
|
25
|
+
[0, 24],
|
|
26
|
+
[24, 72],
|
|
27
|
+
])
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/** 关闭循环后按顺序异步播放两段,每段结束才进入下一段 */
|
|
31
|
+
const handleAsyncPlay = async () => {
|
|
32
|
+
setLoop(false)
|
|
33
|
+
status.value = '第一段开始'
|
|
34
|
+
await playAnimation([[0, 24]], true)
|
|
35
|
+
status.value = '第一段结束'
|
|
36
|
+
await new Promise((resolve) => setTimeout(resolve, 600))
|
|
37
|
+
status.value = '第二段开始'
|
|
38
|
+
await playAnimation([24, 72])
|
|
39
|
+
status.value = '第二段结束'
|
|
40
|
+
}
|
|
41
|
+
</script>
|
|
42
|
+
|
|
43
|
+
<template>
|
|
44
|
+
<div class="lottie-demo">
|
|
45
|
+
<div
|
|
46
|
+
ref="container"
|
|
47
|
+
class="lottie-demo__stage"
|
|
48
|
+
/>
|
|
49
|
+
|
|
50
|
+
<div class="lottie-demo__panel">
|
|
51
|
+
<div class="lottie-demo__actions">
|
|
52
|
+
<button
|
|
53
|
+
type="button"
|
|
54
|
+
@click="play"
|
|
55
|
+
>
|
|
56
|
+
播放
|
|
57
|
+
</button>
|
|
58
|
+
<button
|
|
59
|
+
type="button"
|
|
60
|
+
@click="pause"
|
|
61
|
+
>
|
|
62
|
+
暂停
|
|
63
|
+
</button>
|
|
64
|
+
<button
|
|
65
|
+
type="button"
|
|
66
|
+
@click="stop"
|
|
67
|
+
>
|
|
68
|
+
停止
|
|
69
|
+
</button>
|
|
70
|
+
<button
|
|
71
|
+
type="button"
|
|
72
|
+
@click="handleSegmentPlay"
|
|
73
|
+
>
|
|
74
|
+
帧播放
|
|
75
|
+
</button>
|
|
76
|
+
<button
|
|
77
|
+
type="button"
|
|
78
|
+
@click="handleAsyncPlay"
|
|
79
|
+
>
|
|
80
|
+
异步多段动画
|
|
81
|
+
</button>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<p class="lottie-demo__status">{{ status }}</p>
|
|
85
|
+
<p class="lottie-demo__status">
|
|
86
|
+
{{ instance ? `实例已就绪,总时长 ${getDuration(false).toFixed(2)}s` : '实例加载中…' }}
|
|
87
|
+
</p>
|
|
88
|
+
</div>
|
|
89
|
+
</div>
|
|
90
|
+
</template>
|
|
91
|
+
|
|
92
|
+
<style scoped>
|
|
93
|
+
.lottie-demo {
|
|
94
|
+
display: flex;
|
|
95
|
+
max-width: 760px;
|
|
96
|
+
flex-wrap: wrap;
|
|
97
|
+
align-items: center;
|
|
98
|
+
gap: 20px;
|
|
99
|
+
padding: 20px;
|
|
100
|
+
border: 1px solid #e5e7eb;
|
|
101
|
+
border-radius: 8px;
|
|
102
|
+
color: #1f2937;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.lottie-demo__stage {
|
|
106
|
+
width: 240px;
|
|
107
|
+
height: 240px;
|
|
108
|
+
flex: 0 0 auto;
|
|
109
|
+
border-radius: 8px;
|
|
110
|
+
background: #f8fafc;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
.lottie-demo__panel {
|
|
114
|
+
flex: 1;
|
|
115
|
+
min-width: 260px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.lottie-demo__actions {
|
|
119
|
+
display: flex;
|
|
120
|
+
flex-wrap: wrap;
|
|
121
|
+
gap: 8px;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
.lottie-demo__actions button {
|
|
125
|
+
height: 32px;
|
|
126
|
+
padding: 0 14px;
|
|
127
|
+
border: 1px solid #d1d5db;
|
|
128
|
+
border-radius: 4px;
|
|
129
|
+
background: #fff;
|
|
130
|
+
color: inherit;
|
|
131
|
+
font: inherit;
|
|
132
|
+
font-size: 14px;
|
|
133
|
+
cursor: pointer;
|
|
134
|
+
transition:
|
|
135
|
+
border-color 0.2s,
|
|
136
|
+
color 0.2s;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.lottie-demo__actions button:hover {
|
|
140
|
+
border-color: #f97316;
|
|
141
|
+
color: #ea580c;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
.lottie-demo__status {
|
|
145
|
+
margin: 14px 0 0;
|
|
146
|
+
color: #6b7280;
|
|
147
|
+
font-size: 13px;
|
|
148
|
+
line-height: 1.8;
|
|
149
|
+
}
|
|
150
|
+
</style>
|
package/dist/useLottie/index.js
CHANGED
|
@@ -17,8 +17,8 @@ var resolveContainer = function resolveContainer(target) {
|
|
|
17
17
|
return element instanceof Element ? element : null;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
/**
|
|
21
|
-
* lottie-web 常用能力封装,组件卸载时自动 destroy。
|
|
20
|
+
/**
|
|
21
|
+
* lottie-web 常用能力封装,组件卸载时自动 destroy。
|
|
22
22
|
*/
|
|
23
23
|
export var useLottie = function useLottie(target, animationData) {
|
|
24
24
|
var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
|
package/package.json
CHANGED
|
@@ -1,30 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wapri/ghooks",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Vue 3 Hooks 工具库",
|
|
5
5
|
"keywords": [],
|
|
6
|
-
"license": "
|
|
7
|
-
"author": "
|
|
8
|
-
"sideEffects": false,
|
|
9
|
-
"module": "dist/index.js",
|
|
10
|
-
"types": "dist/index.d.ts",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"author": "wapri contributors",
|
|
11
8
|
"files": [
|
|
12
9
|
"dist"
|
|
13
10
|
],
|
|
11
|
+
"sideEffects": false,
|
|
12
|
+
"module": "dist/index.js",
|
|
13
|
+
"types": "dist/index.d.ts",
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public",
|
|
16
|
+
"registry": "https://registry.npmjs.org/"
|
|
17
|
+
},
|
|
14
18
|
"dependencies": {
|
|
15
19
|
"lottie-api": "^1.0.3",
|
|
16
20
|
"lottie-web": "^5.13.0",
|
|
17
21
|
"vue-hooks-plus": "^2.4.3",
|
|
18
|
-
"@wapri/gbase": "^
|
|
19
|
-
"@wapri/ghermes": "^3.0.0"
|
|
20
|
-
},
|
|
21
|
-
"publishConfig": {
|
|
22
|
-
"access": "public",
|
|
23
|
-
"registry": "https://registry.npmjs.org/"
|
|
22
|
+
"@wapri/gbase": "^2.0.0"
|
|
24
23
|
},
|
|
25
24
|
"peerDependenciesMeta": {},
|
|
26
25
|
"scripts": {
|
|
27
|
-
"build": "father build",
|
|
26
|
+
"build": "node ../../scripts/clean-dist.mjs && father build",
|
|
28
27
|
"dev": "father dev"
|
|
29
28
|
}
|
|
30
29
|
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Hermes } from '@wapri/ghermes';
|
|
2
|
-
import { type Ref } from 'vue';
|
|
3
|
-
export type TicketStatus = 'pending' | 'success' | 'fail';
|
|
4
|
-
export type UseTicketOptions = {
|
|
5
|
-
hermes: Hermes;
|
|
6
|
-
};
|
|
7
|
-
export type UseTicketReturn = {
|
|
8
|
-
/** URL 存在 ticket 且换取令牌尚未完成时为 true */
|
|
9
|
-
loading: Ref<boolean>;
|
|
10
|
-
/** 换取状态;未携带 ticket 时保持 success */
|
|
11
|
-
status: Ref<TicketStatus>;
|
|
12
|
-
/** 换取失败时的可展示错误文案 */
|
|
13
|
-
errorMessage: Ref<string>;
|
|
14
|
-
};
|
|
15
|
-
/**
|
|
16
|
-
* 在组件首次挂载前,用 URL ticket 换取并保存访问令牌。
|
|
17
|
-
*
|
|
18
|
-
* 仅可传入使用网关根 `/api` 的 Hermes 实例,不能与业务中心 `module` 混用。
|
|
19
|
-
*/
|
|
20
|
-
export declare const useTicket: ({ hermes }: UseTicketOptions) => UseTicketReturn;
|
package/dist/useTicket/index.js
DELETED
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
2
|
-
function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap; var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw new Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw new Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw new Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }
|
|
3
|
-
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
4
|
-
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
5
|
-
import { getUrlParam, removeUrlParams, setToken } from '@wapri/gbase';
|
|
6
|
-
import { onBeforeMount, ref } from 'vue';
|
|
7
|
-
var resolveTicketErrorMessage = function resolveTicketErrorMessage(error) {
|
|
8
|
-
if (error instanceof Error && error.message) return error.message;
|
|
9
|
-
return 'Ticket 登录失败';
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* 在组件首次挂载前,用 URL ticket 换取并保存访问令牌。
|
|
14
|
-
*
|
|
15
|
-
* 仅可传入使用网关根 `/api` 的 Hermes 实例,不能与业务中心 `module` 混用。
|
|
16
|
-
*/
|
|
17
|
-
export var useTicket = function useTicket(_ref) {
|
|
18
|
-
var hermes = _ref.hermes;
|
|
19
|
-
var loading = ref(false);
|
|
20
|
-
var status = ref('pending');
|
|
21
|
-
var errorMessage = ref('');
|
|
22
|
-
onBeforeMount( /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
|
|
23
|
-
var ticket, data, accessToken;
|
|
24
|
-
return _regeneratorRuntime().wrap(function _callee$(_context) {
|
|
25
|
-
while (1) switch (_context.prev = _context.next) {
|
|
26
|
-
case 0:
|
|
27
|
-
ticket = getUrlParam('ticket');
|
|
28
|
-
if (ticket) {
|
|
29
|
-
_context.next = 3;
|
|
30
|
-
break;
|
|
31
|
-
}
|
|
32
|
-
return _context.abrupt("return");
|
|
33
|
-
case 3:
|
|
34
|
-
loading.value = true;
|
|
35
|
-
status.value = 'pending';
|
|
36
|
-
_context.prev = 5;
|
|
37
|
-
_context.next = 8;
|
|
38
|
-
return hermes.modules.auth.ticketGetToken({
|
|
39
|
-
ticket: ticket
|
|
40
|
-
});
|
|
41
|
-
case 8:
|
|
42
|
-
data = _context.sent;
|
|
43
|
-
accessToken = data === null || data === void 0 ? void 0 : data.accessToken;
|
|
44
|
-
if (accessToken) {
|
|
45
|
-
_context.next = 12;
|
|
46
|
-
break;
|
|
47
|
-
}
|
|
48
|
-
throw new Error('登录已失效,请返回并重新打开');
|
|
49
|
-
case 12:
|
|
50
|
-
setToken(accessToken);
|
|
51
|
-
removeUrlParams(['ticket']);
|
|
52
|
-
status.value = 'success';
|
|
53
|
-
_context.next = 21;
|
|
54
|
-
break;
|
|
55
|
-
case 17:
|
|
56
|
-
_context.prev = 17;
|
|
57
|
-
_context.t0 = _context["catch"](5);
|
|
58
|
-
status.value = 'fail';
|
|
59
|
-
errorMessage.value = resolveTicketErrorMessage(_context.t0);
|
|
60
|
-
case 21:
|
|
61
|
-
_context.prev = 21;
|
|
62
|
-
loading.value = false;
|
|
63
|
-
return _context.finish(21);
|
|
64
|
-
case 24:
|
|
65
|
-
case "end":
|
|
66
|
-
return _context.stop();
|
|
67
|
-
}
|
|
68
|
-
}, _callee, null, [[5, 17, 21, 24]]);
|
|
69
|
-
})));
|
|
70
|
-
return {
|
|
71
|
-
loading: loading,
|
|
72
|
-
status: status,
|
|
73
|
-
errorMessage: errorMessage
|
|
74
|
-
};
|
|
75
|
-
};
|