- 与 notice 同形态:hash 路由 + TablePageAlovaNew 分页 + alova 信封分支 - API 层手写(文档端点仅容器网内可达,api:gen 无通路),键名对齐后端 operationId - 审计修复:outDir 回 dist 根(CI zip 根须含 html)、main.ts 显式引入 @/api 挂载全局 Apis、 保存失败重拉回滚、路由页补只读 timeout/bodyLimit 列、详情弹窗 backendCode 恒空说明
77 lines
2.1 KiB
Vue
77 lines
2.1 KiB
Vue
<template>
|
|
<Modal v-model="isModal" @on-visible-change="showChange" :title="title">
|
|
<Alert type="warning" class="mb-1" show-icon>
|
|
<template #icon>
|
|
<Icon type="ios-bulb-outline" :class="{ 'mt-5': !info }" slot="icon" :size="28"></Icon>
|
|
</template>
|
|
<div v-if="msg" :class="['message-box', info ? '' : 'mt-10 mb-10 ml-10']">{{ msg }}</div>
|
|
<template #desc v-if="info" slot="desc">{{ info }}</template>
|
|
</Alert>
|
|
<template #footer>
|
|
<Button type="primary" :loading="okLoading" @click="onOkClick">{{ confirmText }}</Button>
|
|
<Button :loading="cancleLoading" @click="onCancleClick">{{ closeText }}</Button>
|
|
</template>
|
|
</Modal>
|
|
</template>
|
|
|
|
<script lang="ts" setup>
|
|
import { ref, onMounted } from "vue";
|
|
import { Modal, Button, Alert, Icon } from "view-ui-plus";
|
|
|
|
const isModal = ref(false),
|
|
okLoading = ref(false),
|
|
cancleLoading = ref(false);
|
|
|
|
const props = withDefaults(
|
|
defineProps<{
|
|
title?: string;
|
|
msg: string;
|
|
info?: string;
|
|
isLoading?: boolean;
|
|
confirmText?: string;
|
|
closeText?: string;
|
|
confirmFn: any;
|
|
closeFn: any;
|
|
destroy: Function;
|
|
}>(),
|
|
{
|
|
title: "提示",
|
|
isLoading: true,
|
|
confirmText: "确认",
|
|
closeText: "取消",
|
|
}
|
|
);
|
|
|
|
onMounted(function () {
|
|
setTimeout(() => {
|
|
isModal.value = true;
|
|
}, 0);
|
|
});
|
|
|
|
const onOkClick = async () => {
|
|
if (!!props.isLoading) okLoading.value = true;
|
|
const { onOk, reslove } = props.confirmFn;
|
|
await Promise.resolve(onOk());
|
|
isModal.value = false;
|
|
okLoading.value = false;
|
|
reslove(true);
|
|
};
|
|
|
|
const onCancleClick = async () => {
|
|
if (!!props.isLoading) cancleLoading.value = true;
|
|
const { onCancel, reslove } = props.closeFn;
|
|
if (typeof onCancel !== "undefined") await Promise.resolve(onCancel());
|
|
cancleLoading.value = false;
|
|
isModal.value = false;
|
|
reslove(false);
|
|
};
|
|
|
|
const showChange = (state: boolean) => {
|
|
if (!state) {
|
|
props.destroy();
|
|
}
|
|
};
|
|
</script>
|
|
|
|
<style></style>
|