v3.10.0【新增】全屏模式Modal等终极解决方案;【新增】生成环境去掉跨域;【优化】其他一些小细节

This commit is contained in:
zhuoda 2024-11-18 20:31:47 +08:00
parent 69fa9088f5
commit b350918501
25 changed files with 77 additions and 148 deletions

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.base.config;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@ -17,6 +18,7 @@ import org.springframework.web.filter.CorsFilter;
* @Copyright <a href="https://1024lab.net">1024创新实验室</a> * @Copyright <a href="https://1024lab.net">1024创新实验室</a>
*/ */
@Configuration @Configuration
@Conditional(SystemEnvironmentConfig.class)
public class CorsFilterConfig { public class CorsFilterConfig {
@Value("${access-control-allow-origin}") @Value("${access-control-allow-origin}")

View File

@ -96,8 +96,8 @@ public class AddFormVariableService extends CodeGenerateBaseVariableService {
if (Boolean.TRUE.equals(field.getRequiredFlag())) { if (Boolean.TRUE.equals(field.getRequiredFlag())) {
String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull"; String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull";
finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")"); finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")");
packageList.add("String".equals(codeField.getJavaType()) ? "import javax.validation.constraints.NotBlank;" packageList.add("String".equals(codeField.getJavaType()) ? "import jakarta.validation.constraints.NotBlank;"
: "import javax.validation.constraints.NotNull;"); : "import jakarta.validation.constraints.NotNull;");
} }
} }

View File

@ -111,7 +111,7 @@ public class UpdateFormVariableService extends CodeGenerateBaseVariableService {
if (Boolean.TRUE.equals(field.getRequiredFlag())) { if (Boolean.TRUE.equals(field.getRequiredFlag())) {
String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull"; String notEmptyPrefix = "String".equals(codeField.getJavaType()) ? "@NotBlank" : "@NotNull";
finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")"); finalFieldMap.put("notEmpty", "\n " + notEmptyPrefix + "(message = \"" + codeField.getLabel() + " 不能为空\")");
packageList.add("String".equals(codeField.getJavaType()) ? "import javax.validation.constraints.NotBlank;" : "import javax.validation.constraints.NotNull;"); packageList.add("String".equals(codeField.getJavaType()) ? "import jakarta.validation.constraints.NotBlank;" : "import jakarta.validation.constraints.NotNull;");
} }
} }

View File

@ -172,7 +172,7 @@ public class DictService {
* @return * @return
*/ */
public List<DictKeyVO> queryAllKey() { public List<DictKeyVO> queryAllKey() {
return SmartBeanUtil.copyList(dictKeyDao.selectList(null), DictKeyVO.class); return SmartBeanUtil.copyList(dictKeyDao.selectByDeletedFlag(false), DictKeyVO.class);
} }
/** /**

View File

@ -37,14 +37,14 @@ public interface ${name.upperCamel}Dao extends BaseMapper<${name.upperCamel}Enti
/** /**
* 更新删除状态 * 更新删除状态
*/ */
long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("${deletedFlag}")boolean deletedFlag); long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("deletedFlag")boolean deletedFlag);
#end #end
#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch")
/** /**
* 批量更新删除状态 * 批量更新删除状态
*/ */
void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("${deletedFlag}")boolean deletedFlag); void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("deletedFlag")boolean deletedFlag);
#end #end
#end #end

View File

@ -40,7 +40,7 @@ spring:
host: smtp.163.com host: smtp.163.com
port: 465 port: 465
username: lab1024@163.com username: lab1024@163.com
password: LAB1024LAB password: ROIMSIQCEXHTQFTA
properties: properties:
mail: mail:
smtp: smtp:

View File

@ -21,7 +21,6 @@ spring:
pointcut: net.lab1024.sa..*Service.* pointcut: net.lab1024.sa..*Service.*
# redis 连接池配置信息 # redis 连接池配置信息
data:
redis: redis:
database: 1 database: 1
host: 127.0.0.1 host: 127.0.0.1
@ -30,17 +29,16 @@ spring:
timeout: 10000ms timeout: 10000ms
lettuce: lettuce:
pool: pool:
max-active: 5 max-active: 100
min-idle: 1 min-idle: 10
max-idle: 3 max-idle: 50
max-wait: 30000ms max-wait: 30000ms
# 邮件置以SSL的方式发送, 这个需要使用这种方式并且端口是465 # 邮件置以SSL的方式发送, 这个需要使用这种方式并且端口是465
mail: mail:
host: smtp.163.com host: smtp.163.com
port: 465 port: 465
username: lab1024@163.com username: lab1024@163.com
password: LAB1024LAB password: 1024lab
properties: properties:
mail: mail:
smtp: smtp:
@ -119,9 +117,6 @@ http:
write-timeout: 50000 write-timeout: 50000
keep-alive: 300000 keep-alive: 300000
# 跨域配置
access-control-allow-origin: 'https://preview.smartadmin.vip'
# 心跳配置 # 心跳配置
heart-beat: heart-beat:
interval-seconds: 60 interval-seconds: 60

View File

@ -2,6 +2,7 @@ package net.lab1024.sa.base.config;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
@ -17,6 +18,7 @@ import org.springframework.web.filter.CorsFilter;
* @Copyright <a href="https://1024lab.net">1024创新实验室</a> * @Copyright <a href="https://1024lab.net">1024创新实验室</a>
*/ */
@Configuration @Configuration
@Conditional(SystemEnvironmentConfig.class)
public class CorsFilterConfig { public class CorsFilterConfig {
@Value("${access-control-allow-origin}") @Value("${access-control-allow-origin}")

View File

@ -172,7 +172,7 @@ public class DictService {
* @return * @return
*/ */
public List<DictKeyVO> queryAllKey() { public List<DictKeyVO> queryAllKey() {
return SmartBeanUtil.copyList(dictKeyDao.selectList(null), DictKeyVO.class); return SmartBeanUtil.copyList(dictKeyDao.selectByDeletedFlag(false), DictKeyVO.class);
} }
/** /**

View File

@ -37,14 +37,14 @@ public interface ${name.upperCamel}Dao extends BaseMapper<${name.upperCamel}Enti
/** /**
* 更新删除状态 * 更新删除状态
*/ */
long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("${deletedFlag}")boolean deletedFlag); long updateDeleted(@Param("${primaryKeyFieldName}")${primaryKeyJavaType} ${primaryKeyFieldName},@Param("deletedFlag")boolean deletedFlag);
#end #end
#if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch") #if($deleteInfo.deleteEnum == "Batch" || $deleteInfo.deleteEnum == "SingleAndBatch")
/** /**
* 批量更新删除状态 * 批量更新删除状态
*/ */
void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("${deletedFlag}")boolean deletedFlag); void batchUpdateDeleted(@Param("idList")List<${primaryKeyJavaType}> idList,@Param("deletedFlag")boolean deletedFlag);
#end #end
#end #end

View File

@ -38,7 +38,7 @@ spring:
host: smtp.163.com host: smtp.163.com
port: 465 port: 465
username: lab1024@163.com username: lab1024@163.com
password: LAB1024LAB password: 1024lab
properties: properties:
mail: mail:
smtp: smtp:
@ -117,9 +117,6 @@ http:
write-timeout: 50000 write-timeout: 50000
keep-alive: 300000 keep-alive: 300000
# 跨域配置
access-control-allow-origin: 'https://preview.smartadmin.vip'
# 心跳配置 # 心跳配置
heart-beat: heart-beat:
interval-seconds: 60 interval-seconds: 60

View File

View File

View File

@ -19,20 +19,6 @@
</head> </head>
<body> <body>
<div id="app"></div> <div id="app"></div>
<script>
let url = window.location.href;
if(url.indexOf("1024lab") > -1){
location.href = "https://preview.smartadmin.vip";
}
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?5e12fadc47eb3aac662d848fd39ec07a";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<script type="module" src="/src/main.js"></script> <script type="module" src="/src/main.js"></script>
</body> </body>
</html> </html>

View File

@ -32,7 +32,6 @@
}, },
}, },
}" }"
:getPopupContainer="getPopupContainer"
> >
<!---全局loading---> <!---全局loading--->
<a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large"> <a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large">
@ -50,8 +49,6 @@
import { useSpinStore } from '/@/store/modules/system/spin'; import { useSpinStore } from '/@/store/modules/system/spin';
import { theme } from 'ant-design-vue'; import { theme } from 'ant-design-vue';
import { themeColors } from '/@/theme/color.js'; import { themeColors } from '/@/theme/color.js';
import { SmartLoading } from '/@/components/framework/smart-loading/index.js';
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale); const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale);
const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale); const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale);
@ -70,31 +67,4 @@
const borderRadius = computed(() => { const borderRadius = computed(() => {
return useAppConfigStore().borderRadius; return useAppConfigStore().borderRadius;
}); });
function getPopupContainer(node, dialogContext) {
let fullScreenFlag = useAppConfigStore().$state.fullScreenFlag;
if(fullScreenFlag){
return getFullScreenContainer(node, dialogContext);
}else{
return getNotFullScreenContainer(node, dialogContext);
}
}
function getFullScreenContainer(node, dialogContext) {
if (node === document.body) {
return document.getElementById(LAYOUT_ELEMENT_IDS.content);
}else if (node) {
return node.parentNode;
} else {
return document.getElementById(LAYOUT_ELEMENT_IDS.content);
}
}
function getNotFullScreenContainer(node, dialogContext) {
if (node) {
return node.parentNode;
} else {
return document.body;
}
}
</script> </script>

View File

@ -38,13 +38,13 @@
<script setup> <script setup>
import _ from 'lodash'; import _ from 'lodash';
import { tableColumnApi } from '/@/api/support/table-column-api'; import { tableColumnApi } from '/@/api/support/table-column-api';
import { onMounted, reactive, ref, watch } from 'vue'; import { onMounted, ref, watch } from 'vue';
import SmartTableColumnModal from './smart-table-column-modal.vue'; import SmartTableColumnModal from './smart-table-column-modal.vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { mergeColumn } from './smart-table-column-merge'; import { mergeColumn } from './smart-table-column-merge';
import { smartSentry } from '/@/lib/smart-sentry'; import { smartSentry } from '/@/lib/smart-sentry';
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
import { useAppConfigStore } from '/@/store/modules/system/app-config.js'; import { useAppConfigStore } from '/@/store/modules/system/app-config.js';
const props = defineProps({ const props = defineProps({
// //
modelValue: { modelValue: {
@ -89,7 +89,6 @@
} catch (e) { } catch (e) {
smartSentry.captureError(e); smartSentry.captureError(e);
} }
updateColumn(userTableColumnArray); updateColumn(userTableColumnArray);
} }
@ -100,24 +99,16 @@
if (fullScreenFlag.value) { if (fullScreenFlag.value) {
// 退 // 退
handleExitFullScreen(); handleExitFullScreen();
exitElementFullscreen(document.getElementById(LAYOUT_ELEMENT_IDS.content)); exitElementFullscreen(document.body);
} else { } else {
//
message.config({
getContainer: () => document.getElementById(LAYOUT_ELEMENT_IDS.content),
});
fullScreenFlag.value = true; fullScreenFlag.value = true;
useAppConfigStore().startFullScreen(); useAppConfigStore().startFullScreen();
launchElementFullScreen(document.getElementById(LAYOUT_ELEMENT_IDS.content)); launchElementFullScreen(document.body);
} }
} }
// 退 // 退
function handleExitFullScreen() { function handleExitFullScreen() {
//
message.config({
getContainer: () => document.body,
});
fullScreenFlag.value = false; fullScreenFlag.value = false;
useAppConfigStore().exitFullScreen(); useAppConfigStore().exitFullScreen();
document.removeEventListener('fullscreenchange', handleFullscreenChange); document.removeEventListener('fullscreenchange', handleFullscreenChange);

View File

@ -10,7 +10,7 @@
<template> <template>
<a-layout class="admin-layout" style="min-height: 100%"> <a-layout class="admin-layout" style="min-height: 100%">
<!-- 侧边菜单 side-menu --> <!-- 侧边菜单 side-menu -->
<a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" :theme="theme" class="side-menu" :collapsed="collapsed" :trigger="null"> <a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" :theme="theme" class="side-menu" :collapsed="collapsed" :trigger="null" v-show="!fullScreenFlag">
<!-- 左侧菜单 --> <!-- 左侧菜单 -->
<SideExpandMenu :collapsed="collapsed" /> <SideExpandMenu :collapsed="collapsed" />
</a-layout-sider> </a-layout-sider>
@ -18,7 +18,7 @@
<!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;--> <!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;-->
<a-layout class="admin-layout-main" :style="`height: ${windowHeight}px`" :id="LAYOUT_ELEMENT_IDS.main"> <a-layout class="admin-layout-main" :style="`height: ${windowHeight}px`" :id="LAYOUT_ELEMENT_IDS.main">
<!-- 顶部头部信息 --> <!-- 顶部头部信息 -->
<a-layout-header class="smart-layout-header" :id="LAYOUT_ELEMENT_IDS.header"> <a-layout-header class="smart-layout-header" :id="LAYOUT_ELEMENT_IDS.header" v-show="!fullScreenFlag">
<a-row justify="space-between" class="smart-layout-header-user"> <a-row justify="space-between" class="smart-layout-header-user">
<a-col class="smart-layout-header-left"> <a-col class="smart-layout-header-left">
<span class="collapsed-button"> <span class="collapsed-button">
@ -101,7 +101,8 @@
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js'; import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const windowHeight = ref(window.innerHeight); const windowHeight = ref(window.innerHeight);
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const theme = computed(() => useAppConfigStore().$state.sideMenuTheme); const theme = computed(() => useAppConfigStore().$state.sideMenuTheme);
// //

View File

@ -1,7 +1,7 @@
<template> <template>
<a-layout class="admin-layout" style="min-height: 100%"> <a-layout class="admin-layout" style="min-height: 100%">
<!-- 侧边菜单 side-menu --> <!-- 侧边菜单 side-menu -->
<a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" class="side-menu" :width="sideMenuWidth" :collapsed="collapsed" :theme="theme"> <a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" class="side-menu" :width="sideMenuWidth" :collapsed="collapsed" :theme="theme" v-show="!fullScreenFlag">
<!-- 左侧菜单 --> <!-- 左侧菜单 -->
<SideMenu :collapsed="collapsed" /> <SideMenu :collapsed="collapsed" />
</a-layout-sider> </a-layout-sider>
@ -9,7 +9,7 @@
<!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;--> <!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;-->
<a-layout :id="LAYOUT_ELEMENT_IDS.main" :style="`height: ${windowHeight}px`" class="admin-layout-main"> <a-layout :id="LAYOUT_ELEMENT_IDS.main" :style="`height: ${windowHeight}px`" class="admin-layout-main">
<!-- 顶部头部信息 --> <!-- 顶部头部信息 -->
<a-layout-header class="layout-header" :id="LAYOUT_ELEMENT_IDS.header"> <a-layout-header class="layout-header" :id="LAYOUT_ELEMENT_IDS.header" v-show="!fullScreenFlag">
<a-row class="layout-header-user" justify="space-between"> <a-row class="layout-header-user" justify="space-between">
<a-col class="layout-header-left"> <a-col class="layout-header-left">
<span class="collapsed-button"> <span class="collapsed-button">
@ -96,6 +96,8 @@
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js'; import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const windowHeight = ref(window.innerHeight); const windowHeight = ref(window.innerHeight);
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const sideMenuWidth = computed(() => useAppConfigStore().$state.sideMenuWidth); const sideMenuWidth = computed(() => useAppConfigStore().$state.sideMenuWidth);
// //

View File

@ -1,14 +1,14 @@
<template> <template>
<a-layout class="admin-layout"> <a-layout class="admin-layout">
<!-- 顶部菜单 --> <!-- 顶部菜单 -->
<a-layout-header class="top-menu" :theme="theme" :id="LAYOUT_ELEMENT_IDS.menu"> <a-layout-header class="top-menu" :theme="theme" :id="LAYOUT_ELEMENT_IDS.menu" v-if="!fullScreenFlag">
<TopMenu /> <TopMenu />
</a-layout-header> </a-layout-header>
<!--中间内容--> <!--中间内容-->
<a-layout-content :id="LAYOUT_ELEMENT_IDS.content" class="admin-layout-content"> <a-layout-content :id="LAYOUT_ELEMENT_IDS.content" class="admin-layout-content">
<!---标签页--> <!---标签页-->
<div class="page-tag-div" v-show="pageTagFlag" :id="LAYOUT_ELEMENT_IDS.header"> <div class="page-tag-div" v-show="pageTagFlag && !fullScreenFlag" :id="LAYOUT_ELEMENT_IDS.header">
<PageTag /> <PageTag />
</div> </div>
@ -68,6 +68,8 @@
}; };
}); });
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const pageTagFlag = computed(() => useAppConfigStore().$state.pageTagFlag); const pageTagFlag = computed(() => useAppConfigStore().$state.pageTagFlag);
// //
@ -78,6 +80,10 @@
const pageWidth = computed(() => useAppConfigStore().$state.pageWidth); const pageWidth = computed(() => useAppConfigStore().$state.pageWidth);
// //
const dueHeight = computed(() => { const dueHeight = computed(() => {
if (fullScreenFlag.value) {
return '0';
}
let due = '45px'; let due = '45px';
if (useAppConfigStore().$state.pageTagFlag) { if (useAppConfigStore().$state.pageTagFlag) {
due = '85px'; due = '85px';

View File

View File

@ -32,7 +32,6 @@
}, },
}, },
}" }"
:getPopupContainer="getPopupContainer"
> >
<!---全局loading---> <!---全局loading--->
<a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large"> <a-spin :spinning="spinning" tip="稍等片刻,我在拼命加载中..." size="large">
@ -50,8 +49,6 @@
import { useSpinStore } from '/@/store/modules/system/spin'; import { useSpinStore } from '/@/store/modules/system/spin';
import { theme } from 'ant-design-vue'; import { theme } from 'ant-design-vue';
import { themeColors } from '/@/theme/color.js'; import { themeColors } from '/@/theme/color.js';
import { SmartLoading } from '/@/components/framework/smart-loading/index.js';
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale); const antdLocale = computed(() => messages[useAppConfigStore().language].antdLocale);
const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale); const dayjsLocale = computed(() => messages[useAppConfigStore().language].dayjsLocale);
@ -70,31 +67,4 @@
const borderRadius = computed(() => { const borderRadius = computed(() => {
return useAppConfigStore().borderRadius; return useAppConfigStore().borderRadius;
}); });
function getPopupContainer(node, dialogContext) {
let fullScreenFlag = useAppConfigStore().$state.fullScreenFlag;
if(fullScreenFlag){
return getFullScreenContainer(node, dialogContext);
}else{
return getNotFullScreenContainer(node, dialogContext);
}
}
function getFullScreenContainer(node, dialogContext) {
if (node === document.body) {
return document.getElementById(LAYOUT_ELEMENT_IDS.content);
}else if (node) {
return node.parentNode;
} else {
return document.getElementById(LAYOUT_ELEMENT_IDS.content);
}
}
function getNotFullScreenContainer(node, dialogContext) {
if (node) {
return node.parentNode;
} else {
return document.body;
}
}
</script> </script>

View File

@ -38,13 +38,13 @@
<script setup lang="ts"> <script setup lang="ts">
import _ from 'lodash'; import _ from 'lodash';
import { tableColumnApi } from '/@/api/support/table-column-api'; import { tableColumnApi } from '/@/api/support/table-column-api';
import { onMounted, reactive, ref, watch } from 'vue'; import { onMounted, ref, watch } from 'vue';
import SmartTableColumnModal from './smart-table-column-modal.vue'; import SmartTableColumnModal from './smart-table-column-modal.vue';
import { message } from 'ant-design-vue'; import { message } from 'ant-design-vue';
import { mergeColumn } from './smart-table-column-merge'; import { mergeColumn } from './smart-table-column-merge';
import { smartSentry } from '/@/lib/smart-sentry'; import { smartSentry } from '/@/lib/smart-sentry';
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
import { useAppConfigStore } from '/@/store/modules/system/app-config.js'; import { useAppConfigStore } from '/@/store/modules/system/app-config.js';
const props = defineProps({ const props = defineProps({
// //
modelValue: { modelValue: {
@ -89,7 +89,6 @@
} catch (e) { } catch (e) {
smartSentry.captureError(e); smartSentry.captureError(e);
} }
updateColumn(userTableColumnArray); updateColumn(userTableColumnArray);
} }
@ -100,24 +99,16 @@
if (fullScreenFlag.value) { if (fullScreenFlag.value) {
// 退 // 退
handleExitFullScreen(); handleExitFullScreen();
exitElementFullscreen(document.getElementById(LAYOUT_ELEMENT_IDS.content)); exitElementFullscreen(document.body);
} else { } else {
//
message.config({
getContainer: () => document.getElementById(LAYOUT_ELEMENT_IDS.content),
});
fullScreenFlag.value = true; fullScreenFlag.value = true;
useAppConfigStore().startFullScreen(); useAppConfigStore().startFullScreen();
launchElementFullScreen(document.getElementById(LAYOUT_ELEMENT_IDS.content)); launchElementFullScreen(document.body);
} }
} }
// 退 // 退
function handleExitFullScreen() { function handleExitFullScreen() {
//
message.config({
getContainer: () => document.body,
});
fullScreenFlag.value = false; fullScreenFlag.value = false;
useAppConfigStore().exitFullScreen(); useAppConfigStore().exitFullScreen();
document.removeEventListener('fullscreenchange', handleFullscreenChange); document.removeEventListener('fullscreenchange', handleFullscreenChange);

View File

@ -10,7 +10,7 @@
<template> <template>
<a-layout class="admin-layout" style="min-height: 100%"> <a-layout class="admin-layout" style="min-height: 100%">
<!-- 侧边菜单 side-menu --> <!-- 侧边菜单 side-menu -->
<a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" :theme="theme" class="side-menu" :collapsed="collapsed" :trigger="null"> <a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" :theme="theme" class="side-menu" :collapsed="collapsed" :trigger="null" v-show="!fullScreenFlag">
<!-- 左侧菜单 --> <!-- 左侧菜单 -->
<SideExpandMenu :collapsed="collapsed" /> <SideExpandMenu :collapsed="collapsed" />
</a-layout-sider> </a-layout-sider>
@ -18,7 +18,7 @@
<!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;--> <!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;-->
<a-layout class="admin-layout-main" :style="`height: ${windowHeight}px`" :id="LAYOUT_ELEMENT_IDS.main"> <a-layout class="admin-layout-main" :style="`height: ${windowHeight}px`" :id="LAYOUT_ELEMENT_IDS.main">
<!-- 顶部头部信息 --> <!-- 顶部头部信息 -->
<a-layout-header class="smart-layout-header" :id="LAYOUT_ELEMENT_IDS.header"> <a-layout-header class="smart-layout-header" :id="LAYOUT_ELEMENT_IDS.header" v-show="!fullScreenFlag">
<a-row justify="space-between" class="smart-layout-header-user"> <a-row justify="space-between" class="smart-layout-header-user">
<a-col class="smart-layout-header-left"> <a-col class="smart-layout-header-left">
<span class="collapsed-button"> <span class="collapsed-button">
@ -101,7 +101,8 @@
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js'; import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const windowHeight = ref(window.innerHeight); const windowHeight = ref(window.innerHeight);
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const theme = computed(() => useAppConfigStore().$state.sideMenuTheme); const theme = computed(() => useAppConfigStore().$state.sideMenuTheme);
// //

View File

@ -1,7 +1,14 @@
<template> <template>
<a-layout class="admin-layout" style="min-height: 100%"> <a-layout class="admin-layout" style="min-height: 100%">
<!-- 侧边菜单 side-menu --> <!-- 侧边菜单 side-menu -->
<a-layout-sider :id="LAYOUT_ELEMENT_IDS.menu" class="side-menu" :width="sideMenuWidth" :collapsed="collapsed" :theme="theme"> <a-layout-sider
:id="LAYOUT_ELEMENT_IDS.menu"
class="side-menu"
:width="sideMenuWidth"
:collapsed="collapsed"
:theme="theme"
v-show="!fullScreenFlag"
>
<!-- 左侧菜单 --> <!-- 左侧菜单 -->
<SideMenu :collapsed="collapsed" /> <SideMenu :collapsed="collapsed" />
</a-layout-sider> </a-layout-sider>
@ -9,7 +16,7 @@
<!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;--> <!--中间内容一共三部分1顶部;2中间内容区域;3底部一般是公司版权信息;-->
<a-layout :id="LAYOUT_ELEMENT_IDS.main" :style="`height: ${windowHeight}px`" class="admin-layout-main"> <a-layout :id="LAYOUT_ELEMENT_IDS.main" :style="`height: ${windowHeight}px`" class="admin-layout-main">
<!-- 顶部头部信息 --> <!-- 顶部头部信息 -->
<a-layout-header class="layout-header" :id="LAYOUT_ELEMENT_IDS.header"> <a-layout-header class="layout-header" :id="LAYOUT_ELEMENT_IDS.header" v-show="!fullScreenFlag">
<a-row class="layout-header-user" justify="space-between"> <a-row class="layout-header-user" justify="space-between">
<a-col class="layout-header-left"> <a-col class="layout-header-left">
<span class="collapsed-button"> <span class="collapsed-button">
@ -96,6 +103,8 @@
import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js'; import { LAYOUT_ELEMENT_IDS } from '/@/layout/layout-const.js';
const windowHeight = ref(window.innerHeight); const windowHeight = ref(window.innerHeight);
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const sideMenuWidth = computed(() => useAppConfigStore().$state.sideMenuWidth); const sideMenuWidth = computed(() => useAppConfigStore().$state.sideMenuWidth);
// //

View File

@ -1,14 +1,14 @@
<template> <template>
<a-layout class="admin-layout"> <a-layout class="admin-layout">
<!-- 顶部菜单 --> <!-- 顶部菜单 -->
<a-layout-header class="top-menu" :theme="theme" :id="LAYOUT_ELEMENT_IDS.menu"> <a-layout-header class="top-menu" :theme="theme" :id="LAYOUT_ELEMENT_IDS.menu" v-if="!fullScreenFlag">
<TopMenu /> <TopMenu />
</a-layout-header> </a-layout-header>
<!--中间内容--> <!--中间内容-->
<a-layout-content :id="LAYOUT_ELEMENT_IDS.content" class="admin-layout-content"> <a-layout-content :id="LAYOUT_ELEMENT_IDS.content" class="admin-layout-content">
<!---标签页--> <!---标签页-->
<div class="page-tag-div" v-show="pageTagFlag" :id="LAYOUT_ELEMENT_IDS.header"> <div class="page-tag-div" v-show="pageTagFlag && !fullScreenFlag" :id="LAYOUT_ELEMENT_IDS.header">
<PageTag /> <PageTag />
</div> </div>
@ -68,6 +68,8 @@
}; };
}); });
//
const fullScreenFlag = computed(() => useAppConfigStore().$state.fullScreenFlag);
// //
const pageTagFlag = computed(() => useAppConfigStore().$state.pageTagFlag); const pageTagFlag = computed(() => useAppConfigStore().$state.pageTagFlag);
// //
@ -78,6 +80,10 @@
const pageWidth = computed(() => useAppConfigStore().$state.pageWidth); const pageWidth = computed(() => useAppConfigStore().$state.pageWidth);
// //
const dueHeight = computed(() => { const dueHeight = computed(() => {
if (fullScreenFlag.value) {
return '0';
}
let due = '45px'; let due = '45px';
if (useAppConfigStore().$state.pageTagFlag) { if (useAppConfigStore().$state.pageTagFlag) {
due = '85px'; due = '85px';