73fd7db21a
New /kol-subscriptions page lists pending and active subscriptions, lets operators approve / revoke / manually bind packages to tenants, and links into the AppShell nav under 订阅包审批. Register Alert globally so the view's status banners render. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
91 lines
1.4 KiB
TypeScript
91 lines
1.4 KiB
TypeScript
import { QueryClient, VueQueryPlugin } from "@tanstack/vue-query";
|
|
import {
|
|
Alert,
|
|
App as AntApp,
|
|
Avatar,
|
|
Badge,
|
|
Button,
|
|
Card,
|
|
ConfigProvider,
|
|
DatePicker,
|
|
Descriptions,
|
|
Drawer,
|
|
Dropdown,
|
|
Empty,
|
|
Form,
|
|
Input,
|
|
Layout,
|
|
Menu,
|
|
Modal,
|
|
Pagination,
|
|
Popconfirm,
|
|
Result,
|
|
Select,
|
|
Space,
|
|
Spin,
|
|
Switch,
|
|
Table,
|
|
Tag,
|
|
Tooltip,
|
|
message,
|
|
} from "ant-design-vue";
|
|
import { createApp } from "vue";
|
|
|
|
import App from "./App.vue";
|
|
import { bindUnauthorizedHandler } from "@/lib/http";
|
|
import { router } from "@/router";
|
|
import { pinia } from "@/stores/pinia";
|
|
import "./styles.css";
|
|
import "ant-design-vue/dist/reset.css";
|
|
|
|
const queryClient = new QueryClient({
|
|
defaultOptions: {
|
|
queries: {
|
|
staleTime: 30000,
|
|
refetchOnWindowFocus: false,
|
|
retry: false,
|
|
},
|
|
},
|
|
});
|
|
|
|
const app = createApp(App);
|
|
|
|
bindUnauthorizedHandler(() => {
|
|
void router.replace({ name: "login" });
|
|
message.warning("登录已过期,请重新登录");
|
|
});
|
|
|
|
[
|
|
Alert,
|
|
AntApp,
|
|
Avatar,
|
|
Badge,
|
|
Button,
|
|
Card,
|
|
ConfigProvider,
|
|
DatePicker,
|
|
Descriptions,
|
|
Drawer,
|
|
Dropdown,
|
|
Empty,
|
|
Form,
|
|
Input,
|
|
Layout,
|
|
Menu,
|
|
Modal,
|
|
Pagination,
|
|
Popconfirm,
|
|
Result,
|
|
Select,
|
|
Space,
|
|
Spin,
|
|
Switch,
|
|
Table,
|
|
Tag,
|
|
Tooltip,
|
|
].forEach((component) => {
|
|
app.use(component);
|
|
});
|
|
|
|
app.use(pinia).use(router).use(VueQueryPlugin, { queryClient }).mount("#app");
|