提交 93a7d351 authored 作者: kxjia's avatar kxjia

Merge branch 'master' of http://47.97.51.208/root/zrch-risk-39

...@@ -7,9 +7,8 @@ ...@@ -7,9 +7,8 @@
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { watch, ref } from 'vue'; import { ref, watchEffect } from 'vue';
import { theme } from 'ant-design-vue'; import { ConfigProvider, theme as antdTheme } from 'ant-design-vue';
import { ConfigProvider } from 'ant-design-vue';
import { AppProvider } from '/@/components/Application'; import { AppProvider } from '/@/components/Application';
import { useTitle } from '/@/hooks/web/useTitle'; import { useTitle } from '/@/hooks/web/useTitle';
import { useLocale } from '/@/locales/useLocale'; import { useLocale } from '/@/locales/useLocale';
...@@ -18,87 +17,72 @@ ...@@ -18,87 +17,72 @@
import { ThemeEnum } from '/@/enums/appEnum'; import { ThemeEnum } from '/@/enums/appEnum';
import { changeTheme } from '/@/logics/theme/index'; import { changeTheme } from '/@/logics/theme/index';
const appStore = useAppStore();
// 解决日期时间国际化问题 // 解决日期时间国际化问题
import 'dayjs/locale/zh-cn'; import 'dayjs/locale/zh-cn';
// support Multi-language
const appStore = useAppStore();
const { getAntdLocale } = useLocale(); const { getAntdLocale } = useLocale();
const { getDarkMode } = useRootSetting();
useTitle(); useTitle();
/**
* 2024-04-07
* liaozhiyang
* 暗黑模式下默认文字白色,白天模式默认文字 #333
* */
const modeAction = (data) => {
if (data.token) {
if (getDarkMode.value === ThemeEnum.DARK) {
Object.assign(data.token, { colorTextBase: 'fff' });
} else {
Object.assign(data.token, { colorTextBase: '#333' });
}
// 定义主题色 css 变量 // 主题配置(响应式)
if (data.token.colorPrimary) { const appTheme = ref<any>({});
document.documentElement.style.setProperty('--j-global-primary-color', data.token.colorPrimary);
} // 统一主题构建函数
const buildTheme = () => {
const darkMode = getDarkMode.value;
const projectConfig = appStore.getProjectConfig;
const primary = projectConfig.themeColor;
// 基础 token(亮色模式默认)
const token = {
colorPrimary: primary,
colorInfo: primary,
wireframe: true, // 关闭线框模式,更现代(可按需配置)
fontSize: 14,
colorTextBase: '#333', // 亮色模式文字颜色
colorSuccess: '#55D187',
colorWarning: '#EFBD47',
colorError: '#ED6F6F',
borderRadius: 4,
sizeStep: 4,
sizeUnit: 4,
fontFamily:
'-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol',
};
// 暗黑模式覆盖
if (darkMode === ThemeEnum.DARK) {
token.colorTextBase = '#fff'; // 暗黑模式文字颜色
}
// 算法(暗黑模式需要)
const algorithm = darkMode === ThemeEnum.DARK ? antdTheme.darkAlgorithm : undefined;
const theme = {
algorithm,
token,
};
// 更新响应式数据
appTheme.value = theme;
// 设置 CSS 变量供全局使用
document.documentElement.style.setProperty('--j-global-primary-color', primary);
// 调用原有主题变更逻辑(如需要)
if (import.meta.env.PROD) {
changeTheme(primary);
} }
}; };
// 代码逻辑说明: 【QQYUN-6366】升级到antd4.x
const appTheme: any = ref({});
const { getDarkMode } = useRootSetting();
watch(
() => getDarkMode.value,
(newValue) => {
delete appTheme.value.algorithm;
if (newValue === ThemeEnum.DARK) {
appTheme.value.algorithm = theme.darkAlgorithm;
}
// 代码逻辑说明: 【QQYUN-8570】生产环境暗黑模式下主题色不生效
if (import.meta.env.PROD) {
changeTheme(appStore.getProjectConfig.themeColor);
}
modeAction(appTheme.value);
appTheme.value = {
...appTheme.value,
};
},
{ immediate: true }
);
watch(
appStore.getProjectConfig,
(newValue) => {
const primary = newValue.themeColor;
const result = {
...appTheme.value,
...{
token: {
colorPrimary: primary,
wireframe: true,
fontSize: 14,
colorTextBase: '#333',
colorSuccess: '#55D187',
colorInfo: primary,
borderRadius: 4,
sizeStep: 4,
sizeUnit: 4,
colorWarning: '#EFBD47',
colorError: '#ED6F6F',
fontFamily:
'-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol',
},
},
};
appTheme.value = result;
modeAction(result);
},
{ immediate: true }
);
setTimeout(() => {
appStore.getProjectConfig?.themeColor && changeTheme(appStore.getProjectConfig.themeColor);
}, 300);
// 监听主题相关变化,自动重建主题
watchEffect(() => {
buildTheme();
});
</script> </script>
<style lang="less"> <style lang="less">
// 代码逻辑说明: 【QQYUN-5839】windi会影响到html2canvas绘制的图片样式 // 代码逻辑说明: 【QQYUN-5839】windi会影响到html2canvas绘制的图片样式
img { img {
......
html {
--header-bg-color: #394664;
--header-bg-hover-color: #273352;
--header-active-menu-bg-color: #273352;
--sider-dark-bg-color: #273352;
--sider-dark-darken-bg-color: #273352;
--sider-dark-lighten-bg-color: #273352;
--sider-logo-bg-color: linear-gradient(180deg, #000000, #021d37);
--layout-bg: #f0f2f5;
--card-bg: #ffffff;
--card-radius: 8px;
--page-padding: 24px;
--content-max-width: 1400px;
--header-height: 64px;
--text-primary: rgba(0, 0, 0, 0.85);
--text-secondary: rgba(0, 0, 0, 0.65);
--text-disabled: rgba(0, 0, 0, 0.25);
--text-border: #e5e7eb;
--border-color: #e5e7eb;
--border-radius-base: 4px;
}
[data-theme='dark'] {
--layout-bg: #141414;
--card-bg: #1f1f1f;
--text-primary: rgba(255, 255, 255, 0.85);
--text-secondary: rgba(255, 255, 255, 0.65);
--text-disabled: rgba(255, 255, 255, 0.25);
--border-color: #434343;
}
...@@ -8,63 +8,72 @@ html { ...@@ -8,63 +8,72 @@ html {
--sider-dark-bg-color: #273352; --sider-dark-bg-color: #273352;
--sider-dark-darken-bg-color: #273352; --sider-dark-darken-bg-color: #273352;
--sider-dark-lighten-bg-color: #273352; --sider-dark-lighten-bg-color: #273352;
--sider-logo-bg-color:linear-gradient(180deg, #000000, #021d37); --sider-logo-bg-color: linear-gradient(180deg, #000000, #021d37);
// 新增通用布局变量
--layout-bg: #f0f2f5;
--card-bg: #ffffff;
--card-radius: 8px;
--page-padding: 24px;
--content-max-width: 1400px;
--header-height: 64px;
// 文字颜色
--text-primary: rgba(0, 0, 0, 0.85);
--text-secondary: rgba(0, 0, 0, 0.65);
--text-disabled: rgba(0, 0, 0, 0.25);
--text-border: #e5e7eb;
// 边框
--border-color: #e5e7eb;
--border-radius-base: 4px;
} }
@white: #fff; // 暗黑模式变量覆盖(由主题切换逻辑动态设置,此处保留变量定义)
[data-theme='dark'] {
--layout-bg: #141414;
--card-bg: #1f1f1f;
--text-primary: rgba(255, 255, 255, 0.85);
--text-secondary: rgba(255, 255, 255, 0.65);
--text-disabled: rgba(255, 255, 255, 0.25);
--border-color: #434343;
}
@white: #fff;
@content-bg: #f4f7f9; @content-bg: #f4f7f9;
// :export { // 保持原有 Less 变量
// name: "less";
// mainColor: @mainColor;
// fontSize: @fontSize;
// }
@iconify-bg-color: #5551; @iconify-bg-color: #5551;
// ================================= // primary color
// ==============border-color======= @primary-color: #1890ff;
// =================================
// Dark-dark // status colors
@border-color-dark: #b6b7b9; @success-color: #52c41a;
@warning-color: #faad14;
@error-color: #ff4d4f;
// Dark-light // border-color
@border-color-base: #d9d9d9;
@border-color-dark: #b6b7b9;
@border-color-shallow-dark: #cececd; @border-color-shallow-dark: #cececd;
// Light-dark
@border-color-light: @border-color-base; @border-color-light: @border-color-base;
// ================================= // message 背景色
// ==============message==============
// =================================
// success-bg-color
@success-background-color: #f1f9ec; @success-background-color: #f1f9ec;
// info-bg-color
@info-background-color: #e8eff8; @info-background-color: #e8eff8;
// warn-bg-color
@warning-background-color: #fdf6ed; @warning-background-color: #fdf6ed;
// danger-bg-color
@danger-background-color: #fef0f0; @danger-background-color: #fef0f0;
// ================================= // Header
// ==============Header=============
// =================================
@header-dark-bg-color: var(--header-bg-color); @header-dark-bg-color: var(--header-bg-color);
@header-dark-bg-hover-color: var(--header-bg-hover-color); @header-dark-bg-hover-color: var(--header-bg-hover-color);
@header-light-bg-hover-color: #f6f6f6; @header-light-bg-hover-color: #f6f6f6;
@header-light-desc-color: #7c8087; @header-light-desc-color: #7c8087;
@header-light-bottom-border-color: #eee; @header-light-bottom-border-color: #eee;
// top-menu
@top-menu-active-bg-color: var(--header-active-menu-bg-color); @top-menu-active-bg-color: var(--header-active-menu-bg-color);
// ================================= // Menu
// ==============Menu============
// =================================
// let -menu
@sider-logo-bg-color: var(--sider-logo-bg-color); @sider-logo-bg-color: var(--sider-logo-bg-color);
@sider-dark-bg-color: var(--sider-dark-bg-color); @sider-dark-bg-color: var(--sider-dark-bg-color);
@sider-dark-darken-bg-color: var(--sider-dark-darken-bg-color); @sider-dark-darken-bg-color: var(--sider-dark-darken-bg-color);
...@@ -74,41 +83,24 @@ html { ...@@ -74,41 +83,24 @@ html {
@trigger-dark-hover-bg-color: rgba(255, 255, 255, 0.2); @trigger-dark-hover-bg-color: rgba(255, 255, 255, 0.2);
@trigger-dark-bg-color: rgba(255, 255, 255, 0.1); @trigger-dark-bg-color: rgba(255, 255, 255, 0.1);
// ================================= // tree
// ==============tree============
// =================================
// tree item hover background
@tree-hover-background-color: #f5f7fa; @tree-hover-background-color: #f5f7fa;
// tree item hover font color
@tree-hover-font-color: #f5f7fa; @tree-hover-font-color: #f5f7fa;
// ================================= // link
// ==============link============
// =================================
@link-hover-color: @primary-color; @link-hover-color: @primary-color;
@link-active-color: darken(@primary-color, 10%); @link-active-color: darken(@primary-color, 10%);
// ================================= // text color
// ==============Text color-============= @text-color: rgba(0, 0, 0, 0.85);
// =================================
// Main text color
@text-color-base: @text-color; @text-color-base: @text-color;
// Label color
@text-color-call-out: #606266; @text-color-call-out: #606266;
// Auxiliary information color-dark
@text-color-help-dark: #909399; @text-color-help-dark: #909399;
// ================================= // breadcrumb
// ==============breadcrumb=========
// =================================
@breadcrumb-item-normal-color: #999; @breadcrumb-item-normal-color: #999;
// =================================
// ==============button=============
// =================================
// button
@button-primary-color: @primary-color; @button-primary-color: @primary-color;
@button-primary-hover-color: lighten(@primary-color, 5%); @button-primary-hover-color: lighten(@primary-color, 5%);
@button-primary-active-color: darken(@primary-color, 5%); @button-primary-active-color: darken(@primary-color, 5%);
...@@ -133,8 +125,6 @@ html { ...@@ -133,8 +125,6 @@ html {
@button-cancel-color: @text-color-call-out; @button-cancel-color: @text-color-call-out;
@button-cancel-bg-color: @white; @button-cancel-bg-color: @white;
@button-cancel-border-color: @border-color-shallow-dark; @button-cancel-border-color: @border-color-shallow-dark;
// Mouse over
@button-cancel-hover-color: @primary-color; @button-cancel-hover-color: @primary-color;
@button-cancel-hover-bg-color: @white; @button-cancel-hover-bg-color: @white;
@button-cancel-hover-border-color: @primary-color; @button-cancel-hover-border-color: @primary-color;
...@@ -22,9 +22,8 @@ html, ...@@ -22,9 +22,8 @@ html,
body { body {
width: 100%; width: 100%;
height: 100%; height: 100%;
// body添加行高保持跟3.x一致
line-height: 1.5715; line-height: 1.5715;
&.color-weak { &.color-weak {
filter: invert(80%); filter: invert(80%);
} }
...@@ -35,7 +34,6 @@ body { ...@@ -35,7 +34,6 @@ body {
} }
} }
/* 【LOWCOD-2300】【vue3】online--online表单开发,下拉框位置靠下时,点开下拉框,整屏跳 */
body { body {
overflow: visible; overflow: visible;
overflow-x: hidden; overflow-x: hidden;
...@@ -50,25 +48,21 @@ span { ...@@ -50,25 +48,21 @@ span {
outline: none !important; outline: none !important;
} }
// 保持 和 windi 一样的全局样式,减少升级带来的影响
ul { ul {
list-style: none; list-style: none;
margin: 0; margin: 0;
padding: 0; padding: 0;
} }
img, video { img,
video {
max-width: 100%; max-width: 100%;
height: auto; height: auto;
} }
// 保持 和 windi 一样的全局样式,减少升级带来的影响
// update-begin--author:liaozhiyang---date:20230925---for:【issues/5407】字段信息校验是多行提示会被遮挡 // vxe-table 样式调整(保留,若无需可删除)
.vxe-cell--valid-error-msg { .vxe-cell--valid-error-msg {
white-space: nowrap; white-space: nowrap;
} }
// update-end--author:liaozhiyang---date:20230925---for:【issues/5407】字段信息校验是多行提示会被遮挡
// update-begin--author:liaozhiyang---date:20231013---for:【QQYUN-5133】升级之后提示样式跟之前一致
.vxe-table .vxe-body--row:last-child .vxe-cell--valid-error-hint { .vxe-table .vxe-body--row:last-child .vxe-cell--valid-error-hint {
margin-top: auto; margin-top: auto;
} }
...@@ -81,25 +75,15 @@ img, video { ...@@ -81,25 +75,15 @@ img, video {
padding: 8px 12px !important; padding: 8px 12px !important;
color: #fff !important; color: #fff !important;
background-color: #f56c6c !important; background-color: #f56c6c !important;
} }
// update-end--author:liaozhiyang---date:20231013---for:【QQYUN-5133】升级之后提示样式跟之前一致
// update-begin--author:liaozhiyang---date:20231116---for:【QQYUN-7011】online表单多了一个蓝色的边框
// .vxe-table.vxe-table--render-default .vxe-body--column.col--selected {
// box-shadow: none;
// }
// update-end--author:liaozhiyang---date:20231116---for:【QQYUN-7011】online表单多了一个蓝色的边框
// update-begin--author:liaozhiyang---date:20240424---for:【issues/1175】解决vxetable鼠标hover之后title显示不对的问题
.vxe-cell { .vxe-cell {
pointer-events: none; pointer-events: none;
> * { > * {
pointer-events: auto; pointer-events: auto;
} }
} }
// update-end--author:liaozhiyang---date:20240424---for:【issues/1175】解决vxetable鼠标hover之后title显示不对的问题
// update-begin--author:liaozhiyang---date:20240429---for:【QQYUN-9023】引导样式调整 // intro.js 引导样式
.introjs-tooltipReferenceLayer { .introjs-tooltipReferenceLayer {
.introjs-tooltip-title { .introjs-tooltip-title {
font-size: 15px; font-size: 15px;
...@@ -124,18 +108,16 @@ img, video { ...@@ -124,18 +108,16 @@ img, video {
height: 4px; height: 4px;
} }
.introjs-button { .introjs-button {
padding: .2rem 0.5rem; padding: 0.2rem 0.5rem;
font-size: 13px; font-size: 13px;
} }
} }
// update-end--author:liaozhiyang---date:20240429---for:【QQYUN-9023】引导样式调整
// update-begin--author:liaozhiyang---date:20240605---for:【TV360X-857】online代码生成详情样式调整
// 详情表单效果(保留)
html[data-theme='light'] { html[data-theme='light'] {
.jeecg-form-detail-effect { .jeecg-form-detail-effect {
*:not(.ant-select-selection-placeholder){ *:not(.ant-select-selection-placeholder) {
color: #606266!important; color: #606266 !important;
} }
.ant-row label { .ant-row label {
color: #797c81 !important; color: #797c81 !important;
...@@ -146,38 +128,34 @@ html[data-theme='light'] { ...@@ -146,38 +128,34 @@ html[data-theme='light'] {
.ant-input-affix-wrapper, .ant-input-affix-wrapper,
.ant-picker, .ant-picker,
.ant-input-number { .ant-input-number {
// border: none !important; color: #606266 !important;
// color: rgba(51, 51, 51, 0.25) !important;
color: #606266!important;
background-color: #f9f9fa !important; background-color: #f9f9fa !important;
} }
a, a,
.anticon { .anticon {
pointer-events: none; pointer-events: none;
cursor: text; cursor: text;
color: #606266!important; color: #606266 !important;
&:hover { &:hover {
background: transparent; background: transparent;
} }
} }
.ant-select.ant-select-disabled .ant-select-selection-item .ant-select-selection-item-content { .ant-select.ant-select-disabled .ant-select-selection-item .ant-select-selection-item-content {
color: #606266!important; color: #606266 !important;
} }
.ant-select-selection-item { .ant-select-selection-item {
color: #606266!important; color: #606266 !important;
} }
:where(.css-dev-only-do-not-override-dvamda).ant-picker .ant-picker-input > input-disabled,
:where(.css-dev-only-do-not-override-dvamda).ant-picker .ant-picker-input >input-disabled, :where(.css-dev-only-do-not-override-dvamda).ant-picker .ant-picker-input >input[disabled] { :where(.css-dev-only-do-not-override-dvamda).ant-picker .ant-picker-input > input[disabled] {
color: #606266!important; color: #606266 !important;
} }
.ant-select-selection-item { .ant-select-selection-item {
border-color: #eee !important; border-color: #eee !important;
background-color: transparent !important; background-color: transparent !important;
} }
//【QQYUN-13754】switch在禁用的方式下效果有问题:字体为黑色 .ant-switch-disabled .ant-switch-inner-checked,
.ant-switch-disabled .ant-switch-inner-checked,.ant-switch-inner-unchecked{ .ant-switch-inner-unchecked {
color: #fff !important; color: #fff !important;
} }
} }
...@@ -187,8 +165,9 @@ html[data-theme='dark'] { ...@@ -187,8 +165,9 @@ html[data-theme='dark'] {
* { * {
color: #606266; color: #606266;
} }
.ant-upload-text-icon, a { .ant-upload-text-icon,
color:rgba(255, 255, 255, 0.25) ; a {
color: rgba(255, 255, 255, 0.25);
} }
.ant-select-selector, .ant-select-selector,
.ant-btn, .ant-btn,
...@@ -198,13 +177,12 @@ html[data-theme='dark'] { ...@@ -198,13 +177,12 @@ html[data-theme='dark'] {
.ant-input-number { .ant-input-number {
background-color: transparent !important; background-color: transparent !important;
} }
.ant-select-selection-item { .ant-select-selection-item {
background-color: transparent !important; background-color: transparent !important;
} }
// 暗黑模式下输入框等icon隐藏 .ant-picker-suffix,
.ant-picker-suffix,.ant-select-arrow { .ant-select-arrow {
content:" "; content: ' ';
display: none; display: none;
} }
} }
...@@ -235,7 +213,8 @@ html[data-theme='dark'] { ...@@ -235,7 +213,8 @@ html[data-theme='dark'] {
input { input {
border: none !important; border: none !important;
} }
input, textarea { input,
textarea {
user-select: auto; user-select: auto;
cursor: text !important; cursor: text !important;
} }
...@@ -274,8 +253,9 @@ html[data-theme='dark'] { ...@@ -274,8 +253,9 @@ html[data-theme='dark'] {
.ant-upload { .ant-upload {
pointer-events: none; pointer-events: none;
cursor: not-allowed; cursor: not-allowed;
.ant-upload-text,.anticon { .ant-upload-text,
display: none; .anticon {
display: none;
} }
} }
.ant-upload-list-item-done { .ant-upload-list-item-done {
...@@ -289,22 +269,19 @@ html[data-theme='dark'] { ...@@ -289,22 +269,19 @@ html[data-theme='dark'] {
} }
} }
} }
// update-end--author:liaozhiyang---date:20240605---for:【TV360X-857】online代码生成详情样式调整
// update-begin--author:wangshuai---date:20240611---for:【TV360X-1070】一对多内嵌,为什么多这一块,不从头对齐 // 一对多内嵌表格样式调整
.ant-table-wrapper .ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table{ .ant-table-wrapper .ant-table.ant-table-middle .ant-table-tbody .ant-table-wrapper:only-child .ant-table {
margin-block: 0; margin-block: 0;
margin-inline: 0; margin-inline: 0;
} }
// update-end--author:wangshuai---date:20240611---for:【TV360X-1070】一对多内嵌,为什么多这一块,不从头对齐
// 单行文本溢出省略号 // 通用省略号
.ellipsis { .ellipsis {
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
} }
// 两行省略
.ellipsis-2 { .ellipsis-2 {
display: -webkit-box; display: -webkit-box;
overflow: hidden; overflow: hidden;
...@@ -313,7 +290,6 @@ html[data-theme='dark'] { ...@@ -313,7 +290,6 @@ html[data-theme='dark'] {
-webkit-box-orient: vertical; -webkit-box-orient: vertical;
word-break: break-all; word-break: break-all;
} }
// 三行省略
.ellipsis-3 { .ellipsis-3 {
display: -webkit-box; display: -webkit-box;
overflow: hidden; overflow: hidden;
......
#app {
width: 100%;
height: 100%;
}
.page-container {
padding: var(--page-padding, 24px);
background: var(--layout-bg, #f0f2f5);
min-height: calc(100vh - var(--header-height, 64px));
}
.search-section {
background: var(--card-bg, #ffffff);
padding: 20px 24px;
border-radius: var(--card-radius, 8px);
margin-bottom: 16px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
}
.action-section {
background: var(--card-bg, #ffffff);
padding: 16px 24px;
border-radius: var(--card-radius, 8px);
margin-bottom: 16px;
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
.table-card {
background: var(--card-bg, #ffffff);
padding: 0 24px 24px 24px;
border-radius: var(--card-radius, 8px);
}
.action-section .ant-btn {
margin-right: 12px;
}
.action-section .ant-btn:last-child {
margin-right: 0;
}
.search-section .ant-form-item {
margin-bottom: 0;
}
.search-section .ant-btn {
margin-right: 12px;
}
::-webkit-scrollbar {
width: 7px;
height: 8px;
}
::-webkit-scrollbar-track {
background-color: rgba(0, 0, 0, 0.05);
}
::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3);
border-radius: 2px;
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
}
::-webkit-scrollbar-thumb:hover {
background-color: rgba(144, 147, 153, 0.5);
}
[data-theme='dark'] ::-webkit-scrollbar-thumb:hover {
background-color: #5e6063;
}
#nprogress {
pointer-events: none;
}
#nprogress .bar {
position: fixed;
top: 0;
left: 0;
z-index: 99999;
width: 100%;
height: 2px;
background-color: #1890ff;
opacity: 0.75;
}
.j-table-operator .ant-btn {
margin: 0 8px 8px 0;
transition: margin 0s;
}
.j-table-operator > .ant-btn:last-of-type {
margin: 0 0 8px 0;
}
.j-table-operator .ant-btn-group .ant-btn,
.j-table-operator.ant-btn-group .ant-btn {
margin: 0;
transition: margin 0s;
}
.j-table-operator .ant-btn-group > .ant-btn:last-of-type,
.j-table-operator.ant-btn-group > .ant-btn:last-of-type {
margin: 0 8px 8px 0;
}
.j-box-bottom-button {
height: 28px;
}
.j-box-bottom-button-float {
position: absolute;
left: 0;
right: 0;
bottom: 0;
border-top: 1px solid #e8e8e8;
padding: 10px 16px;
text-align: right;
background: #fff;
border-radius: 0 0 2px 2px;
}
.j-box-bottom-button-float .ant-btn {
margin-left: 8px;
}
.j-box-bottom-button.offset-20 .j-box-bottom-button-float {
left: -20px;
right: -20px;
bottom: -20px;
}
.ant-modal-body {
padding: 24px !important;
}
.ant-modal-footer {
padding: 16px 24px !important;
text-align: right;
border-top: 1px solid var(--border-color, #e5e7eb);
}
@primary-color: #1890ff;
#app { #app {
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
// ================================= // =================================
// ==============scrollbar========== // 通用页面布局类
// ================================= // =================================
.page-container {
padding: var(--page-padding, 24px);
background: var(--layout-bg, #f0f2f5);
min-height: calc(100vh - var(--header-height, 64px));
}
.search-section {
background: var(--card-bg, #ffffff);
padding: 20px 24px;
border-radius: var(--card-radius, 8px);
margin-bottom: 16px;
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.03);
}
.action-section {
background: var(--card-bg, #ffffff);
padding: 16px 24px;
border-radius: var(--card-radius, 8px);
margin-bottom: 16px;
display: flex;
gap: 12px;
align-items: center;
flex-wrap: wrap;
}
.table-card {
background: var(--card-bg, #ffffff);
padding: 0 24px 24px 24px;
border-radius: var(--card-radius, 8px);
}
// 按钮间距(操作区域内)
.action-section .ant-btn {
margin-right: 12px;
&:last-child {
margin-right: 0;
}
}
// 查询表单样式
.search-section {
.ant-form-item {
margin-bottom: 0;
}
.ant-btn {
margin-right: 12px;
}
}
// =================================
// ==============scrollbar==========
// =================================
::-webkit-scrollbar { ::-webkit-scrollbar {
width: 7px; width: 7px;
height: 8px; height: 8px;
} }
// ::-webkit-scrollbar-track {
// background: transparent;
// }
::-webkit-scrollbar-track { ::-webkit-scrollbar-track {
background-color: rgba(0, 0, 0, 0.05); background-color: rgba(0, 0, 0, 0.05);
} }
::-webkit-scrollbar-thumb { ::-webkit-scrollbar-thumb {
// background: rgba(0, 0, 0, 0.6);
background-color: rgba(144, 147, 153, 0.3); background-color: rgba(144, 147, 153, 0.3);
// background-color: rgba(144, 147, 153, 0.3);
border-radius: 2px; border-radius: 2px;
box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2); box-shadow: inset 0 0 6px rgba(0, 0, 0, 0.2);
} }
::-webkit-scrollbar-thumb:hover { ::-webkit-scrollbar-thumb:hover {
background-color: @border-color-dark; background-color: rgba(144, 147, 153, 0.5);
} }
[data-theme='dark'] { [data-theme='dark'] {
...@@ -56,11 +103,10 @@ ...@@ -56,11 +103,10 @@
} }
} }
// ======================================= // ========================================
// ============ [sjl] 按钮组样式 ========== // ============ 按钮组样式(保留原有类) ==========
// ======================================= // ========================================
.j-table-operator { .j-table-operator {
// Button按钮间距
.ant-btn { .ant-btn {
margin: 0 8px 8px 0; margin: 0 8px 8px 0;
transition: margin 0s; transition: margin 0s;
...@@ -84,7 +130,7 @@ ...@@ -84,7 +130,7 @@
} }
// ======================================== // ========================================
// ============ [sjl] 底部按钮样式 ========== // ============ 底部按钮样式 ==========
// ======================================== // ========================================
.j-box-bottom-button { .j-box-bottom-button {
height: 28px; height: 28px;
...@@ -111,3 +157,14 @@ ...@@ -111,3 +157,14 @@
bottom: -20px; bottom: -20px;
} }
} }
// 弹窗内容区统一内边距
.ant-modal-body {
padding: 24px !important;
}
// 弹窗底部按钮区域,增加右边距和下边距
.ant-modal-footer {
padding: 16px 24px !important;
text-align: right;
border-top: 1px solid var(--border-color, #e5e7eb);
}
.bg-white {
background-color: #ffffff !important;
}
html[data-theme='light'] body {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
}
html[data-theme='light'] .text-secondary {
color: var(--text-secondary, rgba(0, 0, 0, 0.45));
}
html[data-theme='light'] .ant-table {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
}
html[data-theme='light'] .ant-table .ant-table-tbody > tr:hover > td {
background-color: #fafafa;
}
html[data-theme='light'] .ant-table .ant-table-thead > tr > th {
background-color: #fafafa;
font-weight: 500;
}
html[data-theme='light'] .ant-select-multiple .ant-select-selection-item-content {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
}
html[data-theme='light'] .ant-input-affix-wrapper > input.ant-input:not([disabled]) {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
}
html[data-theme='light'] .ant-select-single.ant-select-show-arrow .ant-select-selection-item,
html[data-theme='light'] .ant-select-single.ant-select-show-arrow {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
}
html[data-theme='light'] .ant-alert-success {
background-color: #f6ffed;
border: 1px solid #b7eb8f;
}
html[data-theme='light'] .ant-alert-error {
background-color: #fff2f0;
border: 1px solid #ffccc7;
}
html[data-theme='light'] .ant-alert-warning {
background-color: #fffbe6;
border: 1px solid #ffe58f;
}
html[data-theme='light'] :not(:root):fullscreen::backdrop {
background-color: #ffffff !important;
}
[data-theme='dark'] body {
color: var(--text-primary, rgba(255, 255, 255, 0.85));
}
[data-theme='dark'] .text-secondary {
color: var(--text-secondary, #8b949e);
}
[data-theme='dark'] .ant-list .ant-list-item {
color: var(--text-primary, rgba(255, 255, 255, 0.85));
}
[data-theme='dark'] .ant-card-grid-hoverable:hover {
box-shadow: 0 3px 6px -4px rgba(0, 0, 0, 0.48), 0 6px 16px 0 rgba(0, 0, 0, 0.32), 0 9px 28px 8px rgba(0, 0, 0, 0.2);
}
[data-theme='dark'] .ant-card-grid {
box-shadow: 1px 0 0 0 #434343, 0 1px 0 0 #434343, 1px 1px 0 0 #434343, 1px 0 0 0 #434343 inset, 0 1px 0 0 #434343 inset;
}
[data-theme='dark'] .ant-calendar-selected-day .ant-calendar-date {
color: rgba(0, 0, 0, 0.8);
}
[data-theme='dark'] .ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {
color: rgba(0, 0, 0, 0.9);
}
.bg-white { .bg-white {
background-color: @component-background !important; background-color: #ffffff !important;
} }
html[data-theme='light'] { html[data-theme='light'] {
// update-begin--author:liaozhiyang---date:20240407---for:【QQYUN-8774】给body加上打底的字体颜色 body {
body{ color: var(--text-primary, rgba(0, 0, 0, 0.65));
color: rgba(0, 0, 0, 0.65);
} }
// update-end--author:liaozhiyang---date:20240407---for:【QQYUN-8774】给body加上打底的字体颜色
.text-secondary { .text-secondary {
color: rgba(0, 0, 0, 0.45); color: var(--text-secondary, rgba(0, 0, 0, 0.45));
} }
/*【美化】自定义table字体颜色*/
.ant-table { .ant-table {
color: rgba(0, 0, 0, 0.65); color: var(--text-primary, rgba(0, 0, 0, 0.65));
.ant-table-tbody > tr:hover > td {
background-color: #fafafa;
}
.ant-table-thead > tr > th {
background-color: #fafafa;
font-weight: 500;
}
} }
/*【美化】自定义table字体颜色*/
/*【美化】自定义form字体颜色*/
.ant-select-multiple .ant-select-selection-item-content { .ant-select-multiple .ant-select-selection-item-content {
color: rgba(0, 0, 0, 0.65); color: var(--text-primary, rgba(0, 0, 0, 0.65));
} }
.ant-input-affix-wrapper > input.ant-input { .ant-input-affix-wrapper > input.ant-input:not([disabled]) {
// update-begin--author:liaozhiyang---date:20240605---for:【TV360X-189】统一只读样式 color: var(--text-primary, rgba(0, 0, 0, 0.65));
&:not([disabled]) {
color: rgba(0, 0, 0, 0.65);
}
// update-end--author:liaozhiyang---date:20240605---for:【TV360X-189】统一只读样式
} }
.ant-select-single.ant-select-show-arrow .ant-select-selection-item, .ant-select-single.ant-select-show-arrow { .ant-select-single.ant-select-show-arrow .ant-select-selection-item,
color: rgba(0, 0, 0, 0.65); .ant-select-single.ant-select-show-arrow {
color: var(--text-primary, rgba(0, 0, 0, 0.65));
} }
/*【美化】自定义form字体颜色*/
.ant-alert-success { .ant-alert-success {
background-color: #f6ffed; background-color: #f6ffed;
border: 1px solid #b7eb8f; border: 1px solid #b7eb8f;
} }
.ant-alert-error { .ant-alert-error {
background-color: #fff2f0; background-color: #fff2f0;
border: 1px solid #ffccc7; border: 1px solid #ffccc7;
} }
.ant-alert-warning { .ant-alert-warning {
background-color: #fffbe6; background-color: #fffbe6;
border: 1px solid #ffe58f; border: 1px solid #ffe58f;
} }
:not(:root):fullscreen::backdrop { :not(:root):fullscreen::backdrop {
background-color: @layout-body-background !important; background-color: #ffffff !important;
} }
} }
[data-theme='dark'] { [data-theme='dark'] {
// update-begin--author:liaozhiyang---date:20240407---for:【QQYUN-8774】给body加上打底的字体颜色 body {
body{ color: var(--text-primary, rgba(255, 255, 255, 0.85));
color: rgba(255, 255, 255, 0.85);
}
// update-end--author:liaozhiyang---date:20240407---for:【QQYUN-8774】给body加上打底的字体颜色
// update-begin--author:liaozhiyang---date:20240407---for:【QQYUN-8641】黑色主题-流程办理
.ant-list .ant-list-item {
color: rgba(255, 255, 255, 0.85);
} }
// update-end--author:liaozhiyang---date:20240407---for:【QQYUN-8641】黑色主题-流程办理
.text-secondary { .text-secondary {
color: #8b949e; color: var(--text-secondary, #8b949e);
}
.ant-list .ant-list-item {
color: var(--text-primary, rgba(255, 255, 255, 0.85));
} }
.ant-card-grid-hoverable:hover { .ant-card-grid-hoverable:hover {
box-shadow: 0 3px 6px -4px rgb(0 0 0 / 48%), 0 6px 16px 0 rgb(0 0 0 / 32%), 0 9px 28px 8px rgb(0 0 0 / 20%); box-shadow:
0 3px 6px -4px rgb(0 0 0 / 48%),
0 6px 16px 0 rgb(0 0 0 / 32%),
0 9px 28px 8px rgb(0 0 0 / 20%);
} }
.ant-card-grid { .ant-card-grid {
box-shadow: 1px 0 0 0 #434343, 0 1px 0 0 #434343, 1px 1px 0 0 #434343, 1px 0 0 0 #434343 inset, 0 1px 0 0 #434343 inset; box-shadow:
1px 0 0 0 #434343,
0 1px 0 0 #434343,
1px 1px 0 0 #434343,
1px 0 0 0 #434343 inset,
0 1px 0 0 #434343 inset;
} }
.ant-calendar-selected-day .ant-calendar-date { .ant-calendar-selected-day .ant-calendar-date {
color: rgba(0, 0, 0, 0.8); color: rgba(0, 0, 0, 0.8);
} }
.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { .ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected {
color: rgba(0, 0, 0, 0.9); color: rgba(0, 0, 0, 0.9);
} }
......
import type { MainAppProps } from "#/main"; import type { MainAppProps } from '#/main';
import 'uno.css'; import 'uno.css';
import '/@/design/index.less'; import '/@/design/index.less';
import 'ant-design-vue/dist/reset.css'; import 'ant-design-vue/dist/reset.css';
...@@ -14,14 +14,14 @@ import { setupRouterGuard } from '/@/router/guard'; ...@@ -14,14 +14,14 @@ import { setupRouterGuard } from '/@/router/guard';
import { setupStore } from '/@/store'; import { setupStore } from '/@/store';
import { setupGlobDirectives } from '/@/directives'; import { setupGlobDirectives } from '/@/directives';
import { setupI18n } from '/@/locales/setupI18n'; import { setupI18n } from '/@/locales/setupI18n';
import { setupElectron } from "@/electron"; import { setupElectron } from '@/electron';
import { registerGlobComp } from '/@/components/registerGlobComp'; import { registerGlobComp } from '/@/components/registerGlobComp';
import { registerThirdComp } from '/@/settings/registerThirdComp'; import { registerThirdComp } from '/@/settings/registerThirdComp';
import { registerSuper } from '/@/views/super/registerSuper'; import { registerSuper } from '/@/views/super/registerSuper';
import { useSso } from '/@/hooks/web/useSso'; import { useSso } from '/@/hooks/web/useSso';
import { checkIsQiankunMicro } from "/@/qiankun/micro"; import { checkIsQiankunMicro } from '/@/qiankun/micro';
import { autoUseQiankunMicro } from "/@/qiankun/micro/qiankunMicro"; import { autoUseQiankunMicro } from '/@/qiankun/micro/qiankunMicro';
import { useAppStoreWithOut } from "@/store/modules/app"; import { useAppStoreWithOut } from '@/store/modules/app';
// 注册online模块lib // 注册online模块lib
import { registerPackages } from '/@/utils/monorepo/registerPackages'; import { registerPackages } from '/@/utils/monorepo/registerPackages';
...@@ -29,14 +29,11 @@ import { registerPackages } from '/@/utils/monorepo/registerPackages'; ...@@ -29,14 +29,11 @@ import { registerPackages } from '/@/utils/monorepo/registerPackages';
// 程序入口 // 程序入口
async function main() { async function main() {
if (checkIsQiankunMicro()) { if (checkIsQiankunMicro()) {
// 【JEECG作为乾坤子应用】以乾坤子应用模式启动 // 乾坤子应用模式
// await autoUseQiankunMicro(bootstrap) await autoUseQiankunMicro(bootstrap);
await autoUseQiankunMicro(bootstrap)
} else { } else {
// 获取参数
const props = getMainAppProps(); const props = getMainAppProps();
// 普通启动 await bootstrap(props);
await bootstrap(props)
} }
} }
...@@ -45,7 +42,6 @@ main(); ...@@ -45,7 +42,6 @@ main();
async function bootstrap(props?: MainAppProps) { async function bootstrap(props?: MainAppProps) {
// 创建应用实例 // 创建应用实例
const app = createApp(App); const app = createApp(App);
// 【QQYUN-6329】
window['JAppRootInstance'] = app; window['JAppRootInstance'] = app;
// 创建路由 // 创建路由
...@@ -54,27 +50,27 @@ async function bootstrap(props?: MainAppProps) { ...@@ -54,27 +50,27 @@ async function bootstrap(props?: MainAppProps) {
// 配置存储 // 配置存储
setupStore(app); setupStore(app);
// 配置参数 // 配置主应用参数
setupProps(props); setupProps(props);
// 多语言配置,异步情况:语言文件可以从服务器端获得 // 多语言配置
await setupI18n(app); await setupI18n(app);
// 初始化内部系统配置 // 初始化内部系统配置
initAppConfigStore(); initAppConfigStore();
// 注册外部模块路由(注册online模块lib) // 注册外部模块路由
registerPackages(app); registerPackages(app);
// 注册全局组件 // 注册全局组件
registerGlobComp(app); registerGlobComp(app);
//CAS单点登录 // CAS单点登录
await useSso().ssoLogin(); await useSso().ssoLogin();
// 注册super应用路由 // 注册super应用路由
await registerSuper(app); await registerSuper(app);
// 配置路由 // 配置路由
setupRouter(app); setupRouter(app);
...@@ -91,17 +87,20 @@ async function bootstrap(props?: MainAppProps) { ...@@ -91,17 +87,20 @@ async function bootstrap(props?: MainAppProps) {
await registerThirdComp(app); await registerThirdComp(app);
// 配置electron // 配置electron
setupElectron(app) setupElectron(app);
// 当路由准备好时再执行挂载( https://next.router.vuejs.org/api/#isready) // 等待路由就绪
await router.isReady(); await router.isReady();
// 挂载应用 // 挂载应用
app.mount(getMountContainer(props), true); app.mount(getMountContainer(props), true);
console.log(" vue3 app 加载完成!") // 生产环境可移除此日志,或保留用于调试
if (import.meta.env.DEV) {
console.log('vue3 app 加载完成!');
}
return app return app;
} }
// 获取应用挂载容器 // 获取应用挂载容器
...@@ -113,29 +112,19 @@ function getMountContainer(props?: MainAppProps) { ...@@ -113,29 +112,19 @@ function getMountContainer(props?: MainAppProps) {
return props.container.querySelector(id) ?? id; return props.container.querySelector(id) ?? id;
} }
// 获取主应用参数 // 获取主应用参数(从 URL query 中读取)
function getMainAppProps(): MainAppProps { function getMainAppProps(): MainAppProps {
// 从 queryString 中获取
const searchParams = new URLSearchParams(window.location.search); const searchParams = new URLSearchParams(window.location.search);
// 隐藏侧边栏(菜单)
let hideSider = searchParams.get('hideSider') === 'true';
// 隐藏顶部
let hideHeader = searchParams.get('hideHeader') === 'true';
// 隐藏 多Tab 切换
let hideMultiTabs = searchParams.get('hideMultiTabs') === 'true';
return { return {
hideSider, hideSider: searchParams.get('hideSider') === 'true',
hideHeader, hideHeader: searchParams.get('hideHeader') === 'true',
hideMultiTabs hideMultiTabs: searchParams.get('hideMultiTabs') === 'true',
} };
} }
// 配置主应用参数 // 配置主应用参数
function setupProps(props?: MainAppProps) { function setupProps(props?: MainAppProps) {
if (!props) { if (!props) return;
return
}
const appStore = useAppStoreWithOut(); const appStore = useAppStoreWithOut();
appStore.setMainAppProps(props); appStore.setMainAppProps(props);
} }
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论