Merge branch 'main' of https://github.com/vbenjs/vue-vben-admin into dev
commit
8b89a32813
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/web-antd",
|
"name": "@vben/web-antd",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://vben.pro",
|
"homepage": "https://vben.pro",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/web-ele",
|
"name": "@vben/web-ele",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://vben.pro",
|
"homepage": "https://vben.pro",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/web-naive",
|
"name": "@vben/web-naive",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://vben.pro",
|
"homepage": "https://vben.pro",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/docs",
|
"name": "@vben/docs",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "vitepress build",
|
"build": "vitepress build",
|
||||||
|
|
|
@ -56,6 +56,15 @@ Modal 内的内容一般业务中,会比较复杂,所以我们可以将 moda
|
||||||
|
|
||||||
<DemoPreview dir="demos/vben-modal/shared-data" />
|
<DemoPreview dir="demos/vben-modal/shared-data" />
|
||||||
|
|
||||||
|
## 动画类型
|
||||||
|
|
||||||
|
通过 `animationType` 属性可以控制弹窗的动画效果:
|
||||||
|
|
||||||
|
- `slide`(默认):从顶部向下滑动进入/退出
|
||||||
|
- `scale`:缩放淡入/淡出效果
|
||||||
|
|
||||||
|
<DemoPreview dir="demos/vben-modal/animation-type" />
|
||||||
|
|
||||||
::: info 注意
|
::: info 注意
|
||||||
|
|
||||||
- `VbenModal` 组件对与参数的处理优先级是 `slot` > `props` > `state`(通过api更新的状态以及useVbenModal参数)。如果你已经传入了 `slot` 或者 `props`,那么 `setState` 将不会生效,这种情况下你可以通过 `slot` 或者 `props` 来更新状态。
|
- `VbenModal` 组件对与参数的处理优先级是 `slot` > `props` > `state`(通过api更新的状态以及useVbenModal参数)。如果你已经传入了 `slot` 或者 `props`,那么 `setState` 将不会生效,这种情况下你可以通过 `slot` 或者 `props` 来更新状态。
|
||||||
|
@ -112,6 +121,7 @@ const [Modal, modalApi] = useVbenModal({
|
||||||
| bordered | 是否显示border | `boolean` | `false` |
|
| bordered | 是否显示border | `boolean` | `false` |
|
||||||
| zIndex | 弹窗的ZIndex层级 | `number` | `1000` |
|
| zIndex | 弹窗的ZIndex层级 | `number` | `1000` |
|
||||||
| overlayBlur | 遮罩模糊度 | `number` | - |
|
| overlayBlur | 遮罩模糊度 | `number` | - |
|
||||||
|
| animationType | 动画类型 | `'slide' \| 'scale'` | `'slide'` |
|
||||||
| submitting | 标记为提交中,锁定弹窗当前状态 | `boolean` | `false` |
|
| submitting | 标记为提交中,锁定弹窗当前状态 | `boolean` | `false` |
|
||||||
|
|
||||||
::: info appendToMain
|
::: info appendToMain
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<script lang="ts" setup>
|
||||||
|
import { useVbenModal, VbenButton } from '@vben/common-ui';
|
||||||
|
|
||||||
|
const [SlideModal, slideModalApi] = useVbenModal({
|
||||||
|
animationType: 'slide',
|
||||||
|
});
|
||||||
|
|
||||||
|
const [ScaleModal, scaleModalApi] = useVbenModal({
|
||||||
|
animationType: 'scale',
|
||||||
|
});
|
||||||
|
|
||||||
|
function openSlideModal() {
|
||||||
|
slideModalApi.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
function openScaleModal() {
|
||||||
|
scaleModalApi.open();
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div class="space-y-4">
|
||||||
|
<div class="flex gap-4">
|
||||||
|
<VbenButton @click="openSlideModal">滑动动画</VbenButton>
|
||||||
|
<VbenButton @click="openScaleModal">缩放动画</VbenButton>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<SlideModal title="滑动动画示例" class="w-[500px]">
|
||||||
|
<p>这是使用滑动动画的弹窗,从顶部向下滑动进入。</p>
|
||||||
|
</SlideModal>
|
||||||
|
|
||||||
|
<ScaleModal title="缩放动画示例" class="w-[500px]">
|
||||||
|
<p>这是使用缩放动画的弹窗,以缩放淡入淡出的方式显示。</p>
|
||||||
|
</ScaleModal>
|
||||||
|
</div>
|
||||||
|
</template>
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/commitlint-config",
|
"name": "@vben/commitlint-config",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/stylelint-config",
|
"name": "@vben/stylelint-config",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/node-utils",
|
"name": "@vben/node-utils",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/tailwind-config",
|
"name": "@vben/tailwind-config",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/tsconfig",
|
"name": "@vben/tsconfig",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/vite-config",
|
"name": "@vben/vite-config",
|
||||||
"version": "5.5.6",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "vben-admin-monorepo",
|
"name": "vben-admin-monorepo",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"monorepo",
|
"monorepo",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/design",
|
"name": "@vben-core/design",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/icons",
|
"name": "@vben-core/icons",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/shared",
|
"name": "@vben-core/shared",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
import { beforeEach, describe, expect, it } from 'vitest';
|
||||||
|
|
||||||
|
import { loadScript } from '../resources';
|
||||||
|
|
||||||
|
const testJsPath =
|
||||||
|
'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js';
|
||||||
|
|
||||||
|
describe('loadScript', () => {
|
||||||
|
beforeEach(() => {
|
||||||
|
// 每个测试前清空 head,保证环境干净
|
||||||
|
document.head.innerHTML = '';
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should resolve when the script loads successfully', async () => {
|
||||||
|
const promise = loadScript(testJsPath);
|
||||||
|
|
||||||
|
// 此时脚本元素已被创建并插入
|
||||||
|
const script = document.querySelector(
|
||||||
|
`script[src="${testJsPath}"]`,
|
||||||
|
) as HTMLScriptElement;
|
||||||
|
expect(script).toBeTruthy();
|
||||||
|
|
||||||
|
// 模拟加载成功
|
||||||
|
script.dispatchEvent(new Event('load'));
|
||||||
|
|
||||||
|
// 等待 promise resolve
|
||||||
|
await expect(promise).resolves.toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should not insert duplicate script and resolve immediately if already loaded', async () => {
|
||||||
|
// 先手动插入一个相同 src 的 script
|
||||||
|
const existing = document.createElement('script');
|
||||||
|
existing.src = 'bar.js';
|
||||||
|
document.head.append(existing);
|
||||||
|
|
||||||
|
// 再次调用
|
||||||
|
const promise = loadScript('bar.js');
|
||||||
|
|
||||||
|
// 立即 resolve
|
||||||
|
await expect(promise).resolves.toBeUndefined();
|
||||||
|
|
||||||
|
// head 中只保留一个
|
||||||
|
const scripts = document.head.querySelectorAll('script[src="bar.js"]');
|
||||||
|
expect(scripts).toHaveLength(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should reject when the script fails to load', async () => {
|
||||||
|
const promise = loadScript('error.js');
|
||||||
|
|
||||||
|
const script = document.querySelector(
|
||||||
|
'script[src="error.js"]',
|
||||||
|
) as HTMLScriptElement;
|
||||||
|
expect(script).toBeTruthy();
|
||||||
|
|
||||||
|
// 模拟加载失败
|
||||||
|
script.dispatchEvent(new Event('error'));
|
||||||
|
|
||||||
|
await expect(promise).rejects.toThrow('Failed to load script: error.js');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle multiple concurrent calls and only insert one script tag', async () => {
|
||||||
|
const p1 = loadScript(testJsPath);
|
||||||
|
const p2 = loadScript(testJsPath);
|
||||||
|
|
||||||
|
const script = document.querySelector(
|
||||||
|
`script[src="${testJsPath}"]`,
|
||||||
|
) as HTMLScriptElement;
|
||||||
|
expect(script).toBeTruthy();
|
||||||
|
|
||||||
|
// 触发一次 load,两个 promise 都应该 resolve
|
||||||
|
script.dispatchEvent(new Event('load'));
|
||||||
|
|
||||||
|
await expect(p1).resolves.toBeUndefined();
|
||||||
|
await expect(p2).resolves.toBeUndefined();
|
||||||
|
|
||||||
|
// 只插入一次
|
||||||
|
const scripts = document.head.querySelectorAll(
|
||||||
|
`script[src="${testJsPath}"]`,
|
||||||
|
);
|
||||||
|
expect(scripts).toHaveLength(1);
|
||||||
|
});
|
||||||
|
});
|
|
@ -8,6 +8,7 @@ export * from './inference';
|
||||||
export * from './letter';
|
export * from './letter';
|
||||||
export * from './merge';
|
export * from './merge';
|
||||||
export * from './nprogress';
|
export * from './nprogress';
|
||||||
|
export * from './resources';
|
||||||
export * from './state-handler';
|
export * from './state-handler';
|
||||||
export * from './time';
|
export * from './time';
|
||||||
export * from './to';
|
export * from './to';
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
/**
|
||||||
|
* 加载js文件
|
||||||
|
* @param src js文件地址
|
||||||
|
*/
|
||||||
|
function loadScript(src: string) {
|
||||||
|
return new Promise<void>((resolve, reject) => {
|
||||||
|
if (document.querySelector(`script[src="${src}"]`)) {
|
||||||
|
// 如果已经加载过,直接 resolve
|
||||||
|
return resolve();
|
||||||
|
}
|
||||||
|
const script = document.createElement('script');
|
||||||
|
script.src = src;
|
||||||
|
script.addEventListener('load', () => resolve());
|
||||||
|
script.addEventListener('error', () =>
|
||||||
|
reject(new Error(`Failed to load script: ${src}`)),
|
||||||
|
);
|
||||||
|
document.head.append(script);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export { loadScript };
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/typings",
|
"name": "@vben-core/typings",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/composables",
|
"name": "@vben-core/composables",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/preferences",
|
"name": "@vben-core/preferences",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/form-ui",
|
"name": "@vben-core/form-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/layout-ui",
|
"name": "@vben-core/layout-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/menu-ui",
|
"name": "@vben-core/menu-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -59,6 +59,7 @@ export class ModalApi {
|
||||||
showCancelButton: true,
|
showCancelButton: true,
|
||||||
showConfirmButton: true,
|
showConfirmButton: true,
|
||||||
title: '',
|
title: '',
|
||||||
|
animationType: 'slide',
|
||||||
};
|
};
|
||||||
|
|
||||||
this.store = new Store<ModalState>(
|
this.store = new Store<ModalState>(
|
||||||
|
|
|
@ -5,6 +5,11 @@ import type { MaybePromise } from '@vben-core/typings';
|
||||||
import type { ModalApi } from './modal-api';
|
import type { ModalApi } from './modal-api';
|
||||||
|
|
||||||
export interface ModalProps {
|
export interface ModalProps {
|
||||||
|
/**
|
||||||
|
* 动画类型
|
||||||
|
* @default 'slide'
|
||||||
|
*/
|
||||||
|
animationType?: 'scale' | 'slide';
|
||||||
/**
|
/**
|
||||||
* 是否要挂载到内容区域
|
* 是否要挂载到内容区域
|
||||||
* @default false
|
* @default false
|
||||||
|
|
|
@ -94,12 +94,11 @@ const {
|
||||||
submitting,
|
submitting,
|
||||||
title,
|
title,
|
||||||
titleTooltip,
|
titleTooltip,
|
||||||
|
animationType,
|
||||||
zIndex,
|
zIndex,
|
||||||
} = usePriorityValues(props, state);
|
} = usePriorityValues(props, state);
|
||||||
|
|
||||||
const shouldFullscreen = computed(
|
const shouldFullscreen = computed(() => fullscreen.value || isMobile.value);
|
||||||
() => (fullscreen.value && header.value) || isMobile.value,
|
|
||||||
);
|
|
||||||
|
|
||||||
const shouldDraggable = computed(
|
const shouldDraggable = computed(
|
||||||
() => draggable.value && !shouldFullscreen.value && header.value,
|
() => draggable.value && !shouldFullscreen.value && header.value,
|
||||||
|
@ -244,6 +243,7 @@ function handleClosed() {
|
||||||
:modal="modal"
|
:modal="modal"
|
||||||
:open="state?.isOpen"
|
:open="state?.isOpen"
|
||||||
:show-close="closable"
|
:show-close="closable"
|
||||||
|
:animation-type="animationType"
|
||||||
:z-index="zIndex"
|
:z-index="zIndex"
|
||||||
:overlay-blur="overlayBlur"
|
:overlay-blur="overlayBlur"
|
||||||
close-class="top-3"
|
close-class="top-3"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/shadcn-ui",
|
"name": "@vben-core/shadcn-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"#main": "./dist/index.mjs",
|
"#main": "./dist/index.mjs",
|
||||||
"#module": "./dist/index.mjs",
|
"#module": "./dist/index.mjs",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
|
|
|
@ -20,6 +20,7 @@ import DialogOverlay from './DialogOverlay.vue';
|
||||||
const props = withDefaults(
|
const props = withDefaults(
|
||||||
defineProps<
|
defineProps<
|
||||||
DialogContentProps & {
|
DialogContentProps & {
|
||||||
|
animationType?: 'scale' | 'slide';
|
||||||
appendTo?: HTMLElement | string;
|
appendTo?: HTMLElement | string;
|
||||||
class?: ClassType;
|
class?: ClassType;
|
||||||
closeClass?: ClassType;
|
closeClass?: ClassType;
|
||||||
|
@ -31,7 +32,12 @@ const props = withDefaults(
|
||||||
zIndex?: number;
|
zIndex?: number;
|
||||||
}
|
}
|
||||||
>(),
|
>(),
|
||||||
{ appendTo: 'body', closeDisabled: false, showClose: true },
|
{
|
||||||
|
appendTo: 'body',
|
||||||
|
animationType: 'slide',
|
||||||
|
closeDisabled: false,
|
||||||
|
showClose: true,
|
||||||
|
},
|
||||||
);
|
);
|
||||||
const emits = defineEmits<
|
const emits = defineEmits<
|
||||||
DialogContentEmits & { close: []; closed: []; opened: [] }
|
DialogContentEmits & { close: []; closed: []; opened: [] }
|
||||||
|
@ -43,6 +49,7 @@ const delegatedProps = computed(() => {
|
||||||
modal: _modal,
|
modal: _modal,
|
||||||
open: _open,
|
open: _open,
|
||||||
showClose: __,
|
showClose: __,
|
||||||
|
animationType: ___,
|
||||||
...delegated
|
...delegated
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
|
@ -100,7 +107,11 @@ defineExpose({
|
||||||
v-bind="forwarded"
|
v-bind="forwarded"
|
||||||
:class="
|
:class="
|
||||||
cn(
|
cn(
|
||||||
'z-popup bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%] w-full p-6 shadow-lg outline-none sm:rounded-xl',
|
'z-popup bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 w-full p-6 shadow-lg outline-none sm:rounded-xl',
|
||||||
|
{
|
||||||
|
'data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-top-[48%]':
|
||||||
|
animationType === 'slide',
|
||||||
|
},
|
||||||
props.class,
|
props.class,
|
||||||
)
|
)
|
||||||
"
|
"
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben-core/tabs-ui",
|
"name": "@vben-core/tabs-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/constants",
|
"name": "@vben/constants",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/access",
|
"name": "@vben/access",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/common-ui",
|
"name": "@vben/common-ui",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -0,0 +1,113 @@
|
||||||
|
<script setup lang="ts">
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
|
import { RiDingding } from '@vben/icons';
|
||||||
|
import { $t } from '@vben/locales';
|
||||||
|
|
||||||
|
import { alert, useVbenModal } from '@vben-core/popup-ui';
|
||||||
|
import { VbenIconButton } from '@vben-core/shadcn-ui';
|
||||||
|
import { loadScript } from '@vben-core/shared/utils';
|
||||||
|
|
||||||
|
interface Props {
|
||||||
|
clientId: string;
|
||||||
|
corpId: string;
|
||||||
|
// 登录回调地址
|
||||||
|
redirectUri?: string;
|
||||||
|
// 是否内嵌二维码登录
|
||||||
|
isQrCode?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
const props = defineProps<Props>();
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
const [Modal, modalApi] = useVbenModal({
|
||||||
|
header: false,
|
||||||
|
footer: false,
|
||||||
|
fullscreenButton: false,
|
||||||
|
class: 'w-[302px] h-[302px] dingding-qrcode-login-modal',
|
||||||
|
onOpened() {
|
||||||
|
handleQrCodeLogin();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
const getRedirectUri = () => {
|
||||||
|
const { redirectUri } = props;
|
||||||
|
if (redirectUri) {
|
||||||
|
return redirectUri;
|
||||||
|
}
|
||||||
|
return window.location.origin + route.fullPath;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 内嵌二维码登录
|
||||||
|
*/
|
||||||
|
const handleQrCodeLogin = async () => {
|
||||||
|
const { clientId, corpId } = props;
|
||||||
|
if (!(window as any).DTFrameLogin) {
|
||||||
|
// 二维码登录 加载资源
|
||||||
|
await loadScript(
|
||||||
|
'https://g.alicdn.com/dingding/h5-dingtalk-login/0.21.0/ddlogin.js',
|
||||||
|
);
|
||||||
|
}
|
||||||
|
(window as any).DTFrameLogin(
|
||||||
|
{
|
||||||
|
id: 'dingding_qrcode_login_element',
|
||||||
|
width: 300,
|
||||||
|
height: 300,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
// 注意:redirect_uri 需为完整URL,扫码后钉钉会带code跳转到这里
|
||||||
|
redirect_uri: encodeURIComponent(getRedirectUri()),
|
||||||
|
client_id: clientId,
|
||||||
|
scope: 'openid corpid',
|
||||||
|
response_type: 'code',
|
||||||
|
state: '1',
|
||||||
|
prompt: 'consent',
|
||||||
|
corpId,
|
||||||
|
},
|
||||||
|
(loginResult: any) => {
|
||||||
|
const { redirectUrl } = loginResult;
|
||||||
|
// 这里可以直接进行重定向
|
||||||
|
window.location.href = redirectUrl;
|
||||||
|
},
|
||||||
|
(errorMsg: string) => {
|
||||||
|
// 这里一般需要展示登录失败的具体原因
|
||||||
|
alert(`Login Error: ${errorMsg}`);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
const handleLogin = () => {
|
||||||
|
const { clientId, corpId, isQrCode } = props;
|
||||||
|
if (isQrCode) {
|
||||||
|
// 内嵌二维码登录
|
||||||
|
modalApi.open();
|
||||||
|
} else {
|
||||||
|
window.location.href = `https://login.dingtalk.com/oauth2/auth?redirect_uri=${encodeURIComponent(getRedirectUri())}&response_type=code&client_id=${clientId}&scope=openid&corpid=${corpId}&prompt=consent`;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<div>
|
||||||
|
<VbenIconButton
|
||||||
|
@click="handleLogin"
|
||||||
|
:tooltip="$t('authentication.dingdingLogin')"
|
||||||
|
tooltip-side="top"
|
||||||
|
>
|
||||||
|
<RiDingding />
|
||||||
|
</VbenIconButton>
|
||||||
|
<Modal>
|
||||||
|
<div id="dingding_qrcode_login_element"></div>
|
||||||
|
</Modal>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style>
|
||||||
|
.dingding-qrcode-login-modal {
|
||||||
|
.relative {
|
||||||
|
padding: 0 !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,5 +1,5 @@
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { AntdDingTalk, MdiGithub, MdiQqchat, MdiWechat } from '@vben/icons';
|
import { MdiGithub, MdiQqchat, MdiWechat, RiDingding } from '@vben/icons';
|
||||||
import { $t } from '@vben/locales';
|
import { $t } from '@vben/locales';
|
||||||
|
|
||||||
import { VbenIconButton } from '@vben-core/shadcn-ui';
|
import { VbenIconButton } from '@vben-core/shadcn-ui';
|
||||||
|
@ -37,7 +37,7 @@ function handleThirdLogin(type: number) {
|
||||||
<MdiWechat />
|
<MdiWechat />
|
||||||
</VbenIconButton>
|
</VbenIconButton>
|
||||||
<VbenIconButton class="mb-3" @click="handleThirdLogin(20)">
|
<VbenIconButton class="mb-3" @click="handleThirdLogin(20)">
|
||||||
<AntdDingTalk />
|
<RiDingding />
|
||||||
</VbenIconButton>
|
</VbenIconButton>
|
||||||
<VbenIconButton class="mb-3" @click="handleThirdLogin(0)">
|
<VbenIconButton class="mb-3" @click="handleThirdLogin(0)">
|
||||||
<MdiQqchat />
|
<MdiQqchat />
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/hooks",
|
"name": "@vben/hooks",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -15,11 +15,24 @@ export function useAppConfig(
|
||||||
? window._VBEN_ADMIN_PRO_APP_CONF_
|
? window._VBEN_ADMIN_PRO_APP_CONF_
|
||||||
: (env as VbenAdminProAppConfigRaw);
|
: (env as VbenAdminProAppConfigRaw);
|
||||||
|
|
||||||
const { VITE_GLOB_API_URL } = config;
|
const {
|
||||||
|
VITE_GLOB_API_URL,
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CORP_ID,
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CLIENT_ID,
|
||||||
|
} = config;
|
||||||
|
|
||||||
return {
|
const applicationConfig: ApplicationConfig = {
|
||||||
apiURL: VITE_GLOB_API_URL,
|
apiURL: VITE_GLOB_API_URL,
|
||||||
|
auth: {},
|
||||||
};
|
};
|
||||||
|
if (VITE_GLOB_AUTH_DINGDING_CORP_ID && VITE_GLOB_AUTH_DINGDING_CLIENT_ID) {
|
||||||
|
applicationConfig.auth.dingding = {
|
||||||
|
clientId: VITE_GLOB_AUTH_DINGDING_CLIENT_ID,
|
||||||
|
corpId: VITE_GLOB_AUTH_DINGDING_CORP_ID,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return applicationConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function isTenantEnable(): boolean {
|
export function isTenantEnable(): boolean {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/layouts",
|
"name": "@vben/layouts",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,9 +1,11 @@
|
||||||
<script lang="ts" setup>
|
<script lang="ts" setup>
|
||||||
import type { SetupContext } from 'vue';
|
import type { SetupContext } from 'vue';
|
||||||
|
import type { RouteLocationNormalizedLoaded } from 'vue-router';
|
||||||
|
|
||||||
import type { MenuRecordRaw } from '@vben/types';
|
import type { MenuRecordRaw } from '@vben/types';
|
||||||
|
|
||||||
import { computed, useSlots, watch } from 'vue';
|
import { computed, onMounted, useSlots, watch } from 'vue';
|
||||||
|
import { useRoute } from 'vue-router';
|
||||||
|
|
||||||
import { useRefresh } from '@vben/hooks';
|
import { useRefresh } from '@vben/hooks';
|
||||||
import { $t, i18n } from '@vben/locales';
|
import { $t, i18n } from '@vben/locales';
|
||||||
|
@ -153,6 +155,23 @@ function clickLogo() {
|
||||||
emit('clickLogo');
|
emit('clickLogo');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function autoCollapseMenuByRouteMeta(route: RouteLocationNormalizedLoaded) {
|
||||||
|
// 只在双列模式下生效
|
||||||
|
if (
|
||||||
|
preferences.app.layout === 'sidebar-mixed-nav' &&
|
||||||
|
route.meta &&
|
||||||
|
route.meta.hideInMenu
|
||||||
|
) {
|
||||||
|
sidebarExtraVisible.value = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const route = useRoute();
|
||||||
|
|
||||||
|
onMounted(() => {
|
||||||
|
autoCollapseMenuByRouteMeta(route);
|
||||||
|
});
|
||||||
|
|
||||||
watch(
|
watch(
|
||||||
() => preferences.app.layout,
|
() => preferences.app.layout,
|
||||||
async (val) => {
|
async (val) => {
|
||||||
|
|
|
@ -32,6 +32,10 @@ function useNavigation() {
|
||||||
return route?.meta?.openInNewWindow ?? false;
|
return route?.meta?.openInNewWindow ?? false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const resolveHref = (path: string): string => {
|
||||||
|
return router.resolve(path).href;
|
||||||
|
};
|
||||||
|
|
||||||
const navigation = async (path: string) => {
|
const navigation = async (path: string) => {
|
||||||
try {
|
try {
|
||||||
const route = routeMetaMap.get(path);
|
const route = routeMetaMap.get(path);
|
||||||
|
@ -40,7 +44,7 @@ function useNavigation() {
|
||||||
if (isHttpUrl(path)) {
|
if (isHttpUrl(path)) {
|
||||||
openWindow(path, { target: '_blank' });
|
openWindow(path, { target: '_blank' });
|
||||||
} else if (openInNewWindow) {
|
} else if (openInNewWindow) {
|
||||||
openRouteInNewWindow(path);
|
openRouteInNewWindow(resolveHref(path));
|
||||||
} else {
|
} else {
|
||||||
await router.push({
|
await router.push({
|
||||||
path,
|
path,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/plugins",
|
"name": "@vben/plugins",
|
||||||
"version": "5.5.6",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/request",
|
"name": "@vben/request",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/icons",
|
"name": "@vben/icons",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -20,8 +20,7 @@ export const MsRefresh = createIconifyIcon('material-symbols:refresh-rounded');
|
||||||
|
|
||||||
export const TMinimize = createIconifyIcon('tabler:arrows-minimize');
|
export const TMinimize = createIconifyIcon('tabler:arrows-minimize');
|
||||||
|
|
||||||
export const AntdDingTalk = createIconifyIcon('ant-design:dingtalk');
|
|
||||||
|
|
||||||
export const AntdProfileOutlined = createIconifyIcon(
|
export const AntdProfileOutlined = createIconifyIcon(
|
||||||
'ant-design:profile-outlined',
|
'ant-design:profile-outlined',
|
||||||
);
|
);
|
||||||
|
export const RiDingding = createIconifyIcon('ri:dingding-fill');
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/locales",
|
"name": "@vben/locales",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -41,6 +41,11 @@
|
||||||
"qrcodeSubtitle": "Scan the QR code with your phone to login",
|
"qrcodeSubtitle": "Scan the QR code with your phone to login",
|
||||||
"qrcodePrompt": "Click 'Confirm' after scanning to complete login",
|
"qrcodePrompt": "Click 'Confirm' after scanning to complete login",
|
||||||
"qrcodeLogin": "QR Code Login",
|
"qrcodeLogin": "QR Code Login",
|
||||||
|
"wechatLogin": "Wechat Login",
|
||||||
|
"qqLogin": "QQ Login",
|
||||||
|
"githubLogin": "Github Login",
|
||||||
|
"googleLogin": "Google Login",
|
||||||
|
"dingdingLogin": "Dingding Login",
|
||||||
"codeSubtitle": "Enter your phone number to start managing your project",
|
"codeSubtitle": "Enter your phone number to start managing your project",
|
||||||
"code": "Security code",
|
"code": "Security code",
|
||||||
"codeTip": "Security code required {0} characters",
|
"codeTip": "Security code required {0} characters",
|
||||||
|
|
|
@ -41,6 +41,11 @@
|
||||||
"qrcodeSubtitle": "请用手机扫描二维码登录",
|
"qrcodeSubtitle": "请用手机扫描二维码登录",
|
||||||
"qrcodePrompt": "扫码后点击 '确认',即可完成登录",
|
"qrcodePrompt": "扫码后点击 '确认',即可完成登录",
|
||||||
"qrcodeLogin": "扫码登录",
|
"qrcodeLogin": "扫码登录",
|
||||||
|
"wechatLogin": "微信登录",
|
||||||
|
"qqLogin": "QQ登录",
|
||||||
|
"githubLogin": "Github登录",
|
||||||
|
"googleLogin": "Google登录",
|
||||||
|
"dingdingLogin": "钉钉登录",
|
||||||
"codeSubtitle": "请输入您的手机号码以开始管理您的项目",
|
"codeSubtitle": "请输入您的手机号码以开始管理您的项目",
|
||||||
"code": "验证码",
|
"code": "验证码",
|
||||||
"codeTip": "请输入{0}位验证码",
|
"codeTip": "请输入{0}位验证码",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/preferences",
|
"name": "@vben/preferences",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/stores",
|
"name": "@vben/stores",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/styles",
|
"name": "@vben/styles",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -9,10 +9,20 @@ declare module 'vue-router' {
|
||||||
|
|
||||||
export interface VbenAdminProAppConfigRaw {
|
export interface VbenAdminProAppConfigRaw {
|
||||||
VITE_GLOB_API_URL: string;
|
VITE_GLOB_API_URL: string;
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CLIENT_ID: string;
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CORP_ID: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AuthConfig {
|
||||||
|
dingding?: {
|
||||||
|
clientId: string;
|
||||||
|
corpId: string;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ApplicationConfig {
|
export interface ApplicationConfig {
|
||||||
apiURL: string;
|
apiURL: string;
|
||||||
|
auth: AuthConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare global {
|
declare global {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/types",
|
"name": "@vben/types",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/utils",
|
"name": "@vben/utils",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
"homepage": "https://github.com/vbenjs/vue-vben-admin",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -14,3 +14,7 @@ VITE_DEVTOOLS=false
|
||||||
|
|
||||||
# 是否注入全局loading
|
# 是否注入全局loading
|
||||||
VITE_INJECT_APP_LOADING=true
|
VITE_INJECT_APP_LOADING=true
|
||||||
|
|
||||||
|
# 钉钉登录配置
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CLIENT_ID=应用的clientId
|
||||||
|
VITE_GLOB_AUTH_DINGDING_CORP_ID=应用的corpId
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/playground",
|
"name": "@vben/playground",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"homepage": "https://vben.pro",
|
"homepage": "https://vben.pro",
|
||||||
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
"bugs": "https://github.com/vbenjs/vue-vben-admin/issues",
|
||||||
"repository": {
|
"repository": {
|
||||||
|
|
|
@ -151,7 +151,7 @@ function onCreate() {
|
||||||
</script>
|
</script>
|
||||||
<template>
|
<template>
|
||||||
<Page auto-content-height>
|
<Page auto-content-height>
|
||||||
<FormDrawer />
|
<FormDrawer @success="onRefresh" />
|
||||||
<Grid :table-title="$t('system.role.list')">
|
<Grid :table-title="$t('system.role.list')">
|
||||||
<template #toolbar-tools>
|
<template #toolbar-tools>
|
||||||
<Button type="primary" @click="onCreate">
|
<Button type="primary" @click="onCreate">
|
||||||
|
|
|
@ -566,7 +566,7 @@ catalogs:
|
||||||
version: 0.2.4
|
version: 0.2.4
|
||||||
vxe-pc-ui:
|
vxe-pc-ui:
|
||||||
specifier: ^4.7.12
|
specifier: ^4.7.12
|
||||||
version: 4.7.15
|
version: 4.7.16
|
||||||
vxe-table:
|
vxe-table:
|
||||||
specifier: ^4.14.4
|
specifier: ^4.14.4
|
||||||
version: 4.14.4
|
version: 4.14.4
|
||||||
|
@ -1862,7 +1862,7 @@ importers:
|
||||||
version: 3.5.17(typescript@5.8.3)
|
version: 3.5.17(typescript@5.8.3)
|
||||||
vxe-pc-ui:
|
vxe-pc-ui:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.7.15(vue@3.5.17(typescript@5.8.3))
|
version: 4.7.16(vue@3.5.17(typescript@5.8.3))
|
||||||
vxe-table:
|
vxe-table:
|
||||||
specifier: 'catalog:'
|
specifier: 'catalog:'
|
||||||
version: 4.14.4(vue@3.5.17(typescript@5.8.3))
|
version: 4.14.4(vue@3.5.17(typescript@5.8.3))
|
||||||
|
@ -11430,8 +11430,8 @@ packages:
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
vue: ^3.5.17
|
vue: ^3.5.17
|
||||||
|
|
||||||
vxe-pc-ui@4.7.15:
|
vxe-pc-ui@4.7.16:
|
||||||
resolution: {integrity: sha512-kaCiBl9BdKGihVXsL69WMEILtEQVut3ogVEzExYUJaCS5NGWsVkRQo2wQB/sgJxbNjlK7zq5kmgdmxbxNUyVcg==}
|
resolution: {integrity: sha512-t+E+x25FvRIax9HQJygO2wQA+2lxmNCkW4RY3m01c+bem4rs1FqM7UmxtUMBMM8OVH15mD42qwU4BtX7Ylf+EA==}
|
||||||
|
|
||||||
vxe-table@4.14.4:
|
vxe-table@4.14.4:
|
||||||
resolution: {integrity: sha512-h4KDw8DHZz037kNULSJD2lEiNifAtHNw5XvXSH0Ropk60WK5My1zj9Kb2rX+uU1oGfh75dmv71JzR6V2iWoSUw==}
|
resolution: {integrity: sha512-h4KDw8DHZz037kNULSJD2lEiNifAtHNw5XvXSH0Ropk60WK5My1zj9Kb2rX+uU1oGfh75dmv71JzR6V2iWoSUw==}
|
||||||
|
@ -11612,9 +11612,6 @@ packages:
|
||||||
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
|
resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
|
||||||
xe-utils@3.7.6:
|
|
||||||
resolution: {integrity: sha512-QxASuZUcjEaQ+QQj4DGBupOBvym1F5U0akd3+2gnKrSfk0w9OlLnHslmI4MO4N4jP+8zHcTV5KdKpIBf66hvcg==}
|
|
||||||
|
|
||||||
xe-utils@3.7.8:
|
xe-utils@3.7.8:
|
||||||
resolution: {integrity: sha512-V/k6B/ASYir6yLYhp62DnM17po9u1N9mou/rn4if5WoFCsAO49JpCiVpkDpwCv4zxGfWmhWgzmz4FytWF+pDVw==}
|
resolution: {integrity: sha512-V/k6B/ASYir6yLYhp62DnM17po9u1N9mou/rn4if5WoFCsAO49JpCiVpkDpwCv4zxGfWmhWgzmz4FytWF+pDVw==}
|
||||||
|
|
||||||
|
@ -21961,7 +21958,7 @@ snapshots:
|
||||||
'@rollup/pluginutils': 5.2.0(rollup@4.44.2)
|
'@rollup/pluginutils': 5.2.0(rollup@4.44.2)
|
||||||
es-module-lexer: 1.7.0
|
es-module-lexer: 1.7.0
|
||||||
rollup: 4.44.2
|
rollup: 4.44.2
|
||||||
xe-utils: 3.7.6
|
xe-utils: 3.7.8
|
||||||
|
|
||||||
vite-plugin-pwa@1.0.1(vite@5.4.19(@types/node@24.0.10)(less@4.3.0)(sass@1.89.2)(terser@5.43.1))(workbox-build@7.3.0)(workbox-window@7.3.0):
|
vite-plugin-pwa@1.0.1(vite@5.4.19(@types/node@24.0.10)(less@4.3.0)(sass@1.89.2)(terser@5.43.1))(workbox-build@7.3.0)(workbox-window@7.3.0):
|
||||||
dependencies:
|
dependencies:
|
||||||
|
@ -22303,7 +22300,7 @@ snapshots:
|
||||||
vooks: 0.2.12(vue@3.5.17(typescript@5.8.3))
|
vooks: 0.2.12(vue@3.5.17(typescript@5.8.3))
|
||||||
vue: 3.5.17(typescript@5.8.3)
|
vue: 3.5.17(typescript@5.8.3)
|
||||||
|
|
||||||
vxe-pc-ui@4.7.15(vue@3.5.17(typescript@5.8.3)):
|
vxe-pc-ui@4.7.16(vue@3.5.17(typescript@5.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@vxe-ui/core': 4.2.5(vue@3.5.17(typescript@5.8.3))
|
'@vxe-ui/core': 4.2.5(vue@3.5.17(typescript@5.8.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
@ -22311,7 +22308,7 @@ snapshots:
|
||||||
|
|
||||||
vxe-table@4.14.4(vue@3.5.17(typescript@5.8.3)):
|
vxe-table@4.14.4(vue@3.5.17(typescript@5.8.3)):
|
||||||
dependencies:
|
dependencies:
|
||||||
vxe-pc-ui: 4.7.15(vue@3.5.17(typescript@5.8.3))
|
vxe-pc-ui: 4.7.16(vue@3.5.17(typescript@5.8.3))
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- vue
|
- vue
|
||||||
|
|
||||||
|
@ -22591,8 +22588,6 @@ snapshots:
|
||||||
|
|
||||||
xdg-basedir@5.1.0: {}
|
xdg-basedir@5.1.0: {}
|
||||||
|
|
||||||
xe-utils@3.7.6: {}
|
|
||||||
|
|
||||||
xe-utils@3.7.8: {}
|
xe-utils@3.7.8: {}
|
||||||
|
|
||||||
xml-name-validator@4.0.0: {}
|
xml-name-validator@4.0.0: {}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/turbo-run",
|
"name": "@vben/turbo-run",
|
||||||
"version": "5.5.7",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "@vben/vsh",
|
"name": "@vben/vsh",
|
||||||
"version": "5.5.6",
|
"version": "5.5.8",
|
||||||
"private": true,
|
"private": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
Loading…
Reference in New Issue