|
@@ -0,0 +1,40 @@
|
|
|
+import sleep from "../utils/sleep";
|
|
|
+
|
|
|
+const loadingName: string = 'xc-loading'
|
|
|
+
|
|
|
+const VElBtn = {
|
|
|
+ // 这里有个 bug 如果使用了 v-loading 的话
|
|
|
+ created(el: HTMLHtmlElement, binding, vnode, prevVnode) {
|
|
|
+ el.addEventListener('click', async (ev: Event) => {
|
|
|
+ ev.stopPropagation();
|
|
|
+ let startTime: Date = new Date();
|
|
|
+ try {
|
|
|
+ vnode.ref.i.props.loading = true
|
|
|
+ el.setAttribute(loadingName, 'true')
|
|
|
+ if (binding.value.func) {
|
|
|
+ await binding.value.func(binding.value.value)
|
|
|
+ } else {
|
|
|
+ await binding.value();
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.error(e)
|
|
|
+ }
|
|
|
+ let endTime = new Date()
|
|
|
+ if (endTime.getTime() - startTime.getTime() < 1000) {
|
|
|
+ await sleep(500)
|
|
|
+ }
|
|
|
+ el.setAttribute(loadingName, 'false')
|
|
|
+ vnode.ref.i.props.loading = false
|
|
|
+ });
|
|
|
+ },
|
|
|
+ updated(el: HTMLHtmlElement, binding, vnode, prevVnode) {
|
|
|
+ let loading: string | boolean = el.getAttribute(loadingName)
|
|
|
+ if (loading) {
|
|
|
+ loading = loading === 'true'
|
|
|
+ vnode.ref.i.props.loading = loading
|
|
|
+ }
|
|
|
+ },
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+export default VElBtn
|