diff --git a/src/hooks/useFullscreen.ts b/src/hooks/useFullscreen.ts new file mode 100644 index 0000000..a70b2da --- /dev/null +++ b/src/hooks/useFullscreen.ts @@ -0,0 +1,123 @@ +/** + * @description 方法用来切换元素 进入全屏 + * @vueuse/core 提供了 useFullscreen 方法,因此项目中采用 useFullscreen,目的是为了减少代码量 + * 它原理原理实现如下: + */ + +import { ElMessage } from "element-plus"; +import {onMounted} from "vue"; + +export const useFullscreen = () => { + /** + * @description: 是否支持全屏+判断浏览器前缀 + */ + const isFullscreen = ()=> { + let prefixName = ""; // 浏览器前缀 + let fullscreenEnabled = false; + // 判断浏览器前缀 + if (document.fullscreenEnabled) { + fullscreenEnabled = document.fullscreenEnabled; + // webkit + } else if (document.webkitFullscreenEnabled) { + fullscreenEnabled = document.webkitFullscreenEnabled; + prefixName = "webkit"; + // moz + } else if (document.mozFullScreenEnabled) { + fullscreenEnabled = document.mozFullScreenEnabled; + prefixName = "moz"; + // ms + } else if (document.msFullscreenEnabled) { + fullscreenEnabled = document.msFullscreenEnabled; + prefixName = "ms"; + } + return { + fullscreenEnabled, + prefixName + } + } + + + /** + * @description: 检测有没有元素处于全屏状态 + * @return 布尔值 + */ + const isElementFullScreen = ()=> { + const fullscreenElement = + document.fullscreenElement || + document.msFullscreenElement || + document.mozFullScreenElement || + document.webkitFullscreenElement; + if (fullscreenElement === null) { + return false; // 当前没有元素在全屏状态 + } else { + return true; // 有元素在全屏状态 + } + } + + /** + * @description: 将传进来的元素全屏 + * @param {String} domName 要全屏的dom名称 + */ + const Fullscreen = (target)=> { + const targetRef = target || (document == null ? void 0 : document.querySelector("html")); + const {prefixName} = isFullscreen() + const methodName = + prefixName === "" + ? "requestFullscreen" + : `${prefixName}RequestFullScreen`; + targetRef[methodName](); + } + + // 退出全屏 + const exitFullscreen =()=> { + const {prefixName} = isFullscreen() + const methodName = + prefixName === "" + ? "exitFullscreen" + : `${prefixName}ExitFullscreen`; + document[methodName](); + } + + /** + * @description: 浏览器无法进入全屏时触发,可能是技术原因,也可能是用户拒绝:比如全屏请求不是在事件处理函数中调用,会在这里拦截到错误 + * @param {Function} enterErrorFn 回调 + */ + const screenError = ()=> { + const {prefixName} = isFullscreen() + const methodName = `on${prefixName}fullscreenerror`; + document[methodName] = e => { + ElMessage.error('进入全屏失败') + }; + } + + /** + * @description: 监听进入/离开全屏 + * @param {Function} enter 进入全屏的回调 + * @param {Function} quit 离开全屏的回调 + */ + const screenChange = (enter, quit)=> { + const {fullscreenEnabled,prefixName} = isFullscreen() + if (!fullscreenEnabled) return; + const methodName = `on${prefixName}fullscreenchange`; + document[methodName] = e => { + if (isElementFullScreen()) { + enter && enter(e); // 进入全屏回调 + } else { + quit && quit(e); // 离开全屏的回调 + } + }; + } + + onMounted(()=>{ + screenError() + }) + + + return{ + isFullscreen, + isElementFullScreen, + Fullscreen, + exitFullscreen, + screenChange + } +} diff --git a/src/layout/components/Sidebar/components/Menu.vue b/src/layout/components/Sidebar/components/Menu.vue deleted file mode 100644 index 618c6ad..0000000 --- a/src/layout/components/Sidebar/components/Menu.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - diff --git a/src/layout/components/Sidebar/components/SubItem.vue b/src/layout/components/Sidebar/components/SubItem.vue deleted file mode 100644 index e61182d..0000000 --- a/src/layout/components/Sidebar/components/SubItem.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - diff --git a/src/layout/components/Sidebar/index.vue b/src/layout/components/Sidebar/index.vue index 33568f1..b1834cd 100644 --- a/src/layout/components/Sidebar/index.vue +++ b/src/layout/components/Sidebar/index.vue @@ -26,16 +26,15 @@ import Logo from './components/Logo.vue' import SubItem from '../SubMenu/SubItem.vue' import {useSettingStore} from "@/store/modules/setting" +import {usePermissionStore} from "@/store/modules/permission" import { computed } from 'vue' import { useRoute } from 'vue-router' -import {usePermissionStore} from "@/store/modules/permission" + // 在setup中获取store const route = useRoute() const PermissionStore = usePermissionStore() const SettingStore = useSettingStore() - - // 是否折叠 const isCollapse = computed(() => !SettingStore.isCollapse) // 设置 @@ -52,10 +51,6 @@ const activeMenu = computed(() => { } return path }) - - -// 横向 -const mode = computed(() => SettingStore.themeConfig.mode) diff --git a/src/views/form/appendForm/index.scss b/src/views/form/appendForm/index.scss new file mode 100644 index 0000000..d7f8d97 --- /dev/null +++ b/src/views/form/appendForm/index.scss @@ -0,0 +1,6 @@ +.app-container-inner{ + text-align: center; + .add{ + margin: 0 0 30px 0; + } +} diff --git a/src/views/form/appendForm/index.vue b/src/views/form/appendForm/index.vue new file mode 100644 index 0000000..70f8d5c --- /dev/null +++ b/src/views/form/appendForm/index.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/views/form/validateForm/index.vue b/src/views/form/validateForm/index.vue index 3762f86..c2c6ef8 100644 --- a/src/views/form/validateForm/index.vue +++ b/src/views/form/validateForm/index.vue @@ -71,7 +71,7 @@ - + +