u
This commit is contained in:
1 parent
d37d92996a
commit
a8f3e58a27
25 files changed
+1401
-399
No files matched your search
@@ -20,7 +20,7 @@ export default defineComponent({
|
||||
type: [String, Object, Function] as unknown as () => string | VNode | (() => VNode),
|
||||
required: false,
|
||||
},
|
||||
beforeConfirm: {
|
||||
onBeforeConfirm: {
|
||||
type: Function as PropType<
|
||||
(done: (ok: boolean) => void) => void | boolean | Promise<boolean>
|
||||
>,
|
||||
@@ -69,23 +69,37 @@ export default defineComponent({
|
||||
return val
|
||||
}
|
||||
|
||||
let promiseNumber = 0
|
||||
|
||||
const handleConfirm = async () => {
|
||||
const currentPromiseNumber = ++promiseNumber
|
||||
let allow = true
|
||||
|
||||
if (props.beforeConfirm) {
|
||||
if (props.onBeforeConfirm) {
|
||||
confirmLoading.value = true
|
||||
|
||||
try {
|
||||
allow = await new Promise<boolean>((resolve) => {
|
||||
const result = props.beforeConfirm!(ok => resolve(ok))
|
||||
let called = false
|
||||
|
||||
const done = (ok: boolean) => {
|
||||
if (!called) {
|
||||
called = true
|
||||
resolve(ok)
|
||||
}
|
||||
}
|
||||
|
||||
const result = props.onBeforeConfirm!(done)
|
||||
|
||||
if (typeof result === 'boolean') {
|
||||
resolve(result)
|
||||
done(result)
|
||||
}
|
||||
else if (result instanceof Promise) {
|
||||
result.then(ok => resolve(ok)).catch(() => resolve(false))
|
||||
result
|
||||
.then(ok => done(ok ?? true))
|
||||
.catch(() => done(false))
|
||||
}
|
||||
// 如果是用 done 回调,就等调用方触发 resolve
|
||||
// 如果使用 done 回调,resolve 会在调用方触发
|
||||
})
|
||||
}
|
||||
catch {
|
||||
@@ -93,12 +107,12 @@ export default defineComponent({
|
||||
}
|
||||
}
|
||||
|
||||
if (allow) {
|
||||
popVisible.value = false
|
||||
emit('confirm')
|
||||
if (currentPromiseNumber === promiseNumber) {
|
||||
if (allow) {
|
||||
emit('confirm')
|
||||
}
|
||||
confirmLoading.value = false
|
||||
}
|
||||
|
||||
confirmLoading.value = false
|
||||
}
|
||||
|
||||
const handleCancel = () => {
|
||||
|
||||
Reference in new issue
Block a user