12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- <template>
- <!-- FIXED: 从 vue 3.1.5 升级到 3.2.1 时这里出错了,slot也要有key -->
- <a-button v-bind="newAttrs" :loading="inInterval" @click="insideClick">
- <template v-for="(_, slot) of $slots" v-slot:[slot]="scope">
- <slot :name="asAny(slot)" v-bind="asAny(scope)" :key="slot" />
- </template>
- <!-- <slot name="default" /> -->
- </a-button>
- </template>
- <script lang="ts">
- import { reactive, ref } from "vue";
- // 默认loading一秒,以免重复点击
- export default {
- name: "QmButton",
- inheritAttrs: false,
- props: {
- clickTimeout: { type: Number, required: false, default: 1000 },
- },
- // @ts-ignore
- setup(props, { attrs }) {
- let newAttrs = reactive({});
- Object.assign(newAttrs, attrs);
- let parentOnClick = attrs.onClick;
- // @ts-ignore
- delete newAttrs["onClick"];
- let inInterval = ref(false);
- const insideClick = (e: MouseEvent) => {
- inInterval.value = true;
- setTimeout(() => (inInterval.value = false), props.clickTimeout);
- parentOnClick(e);
- };
- // newAttrs.onClick = insideClick;
- function asAny(input: any): any {
- return input as any;
- }
- return { newAttrs, inInterval, insideClick, asAny };
- },
- };
- </script>
|