create-tengits-app 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/PUBLISH.md +151 -0
- package/README.md +255 -0
- package/USAGE.md +154 -0
- package/bin/cli.js +195 -0
- package/eslint.config.mjs +33 -0
- package/global.d.ts +9 -0
- package/package.json +67 -0
- package/packages/main/.env +24 -0
- package/packages/main/.env.pre +3 -0
- package/packages/main/.env.test +4 -0
- package/packages/main/.eslintrc +9 -0
- package/packages/main/README.md +18 -0
- package/packages/main/dist/manifest.json +40 -0
- package/packages/main/index.html +80 -0
- package/packages/main/index.ts +12 -0
- package/packages/main/package.json +43 -0
- package/packages/main/postcss.config.js +7 -0
- package/packages/main/public/antd.dark.css +26419 -0
- package/packages/main/public/dark.css +32 -0
- package/packages/main/public/evaluation-template.csv +10 -0
- package/packages/main/rsbuild.config.ts +79 -0
- package/packages/main/src/App.tsx +108 -0
- package/packages/main/src/configSystemData.ts +27 -0
- package/packages/main/src/i18n.js +140 -0
- package/packages/main/src/index.jsx +22 -0
- package/packages/main/src/index.less +250 -0
- package/packages/main/src/menus.jsx +123 -0
- package/packages/main/src/pages/Home/index.tsx +102 -0
- package/packages/main/src/pages/Login/common.ts +26 -0
- package/packages/main/src/pages/Login/index.less +15 -0
- package/packages/main/src/pages/Login/index.tsx +238 -0
- package/packages/main/src/routes.tsx +75 -0
- package/packages/main/src/styles/index.css +38 -0
- package/packages/main/src/types/less.d.ts +4 -0
- package/packages/main/src/types/tengitsui.d.ts +7 -0
- package/packages/main/src/types/utils.d.ts +39 -0
- package/packages/main/src/utils/checkPermission.js +19 -0
- package/packages/main/src/utils/day.js +18 -0
- package/packages/main/src/utils/download.js +30 -0
- package/packages/main/src/utils/fileUtils.ts +45 -0
- package/packages/main/src/utils/guid.js +6 -0
- package/packages/main/src/utils/gzip.js +26 -0
- package/packages/main/src/utils/importFile.js +51 -0
- package/packages/main/src/utils/index.ts +9 -0
- package/packages/main/src/utils/request.js +40 -0
- package/packages/main/src/utils/uploadFileToCloud.js +102 -0
- package/packages/main/src/utils/utils.ts +331 -0
- package/packages/main/src/utils/uuid.js +13 -0
- package/packages/main/src/utils/version.js +158 -0
- package/packages/main/tailwind.config.js +27 -0
- package/packages/main/tsconfig.json +6 -0
- package/pnpm-workspace.yaml +16 -0
- package/tsconfig.json +23 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/* .ant-card {
|
|
2
|
+
color: rgba(255, 255, 255, 0.85);
|
|
3
|
+
background: #141414;
|
|
4
|
+
} */
|
|
5
|
+
.ant-card-head {
|
|
6
|
+
color: rgba(255, 255, 255, 0.85);
|
|
7
|
+
background: transparent;
|
|
8
|
+
border-bottom: 1px solid #303030;
|
|
9
|
+
border-radius: 2px 2px 0 0;
|
|
10
|
+
}
|
|
11
|
+
/* .ant-card-bordered {
|
|
12
|
+
border: 1px solid #303030;
|
|
13
|
+
} */
|
|
14
|
+
.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab{
|
|
15
|
+
color: rgba(255, 255, 255, 0.85);
|
|
16
|
+
background: #141414;
|
|
17
|
+
border: 1px solid #303030;
|
|
18
|
+
}
|
|
19
|
+
.ant-tabs.ant-tabs-card .ant-tabs-card-bar .ant-tabs-tab-active{
|
|
20
|
+
background: #141414;
|
|
21
|
+
border: 1px solid #1989FA;
|
|
22
|
+
color: #1989FA;
|
|
23
|
+
}
|
|
24
|
+
.ant-tabs-bar {
|
|
25
|
+
border-bottom: 1px solid #303030;
|
|
26
|
+
}
|
|
27
|
+
.ant-tabs-tab {
|
|
28
|
+
color: rgba(255, 255, 255, 0.5);
|
|
29
|
+
}
|
|
30
|
+
.ant-card-meta-title{
|
|
31
|
+
color: #FFF;
|
|
32
|
+
}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { defineConfig, loadEnv } from '@rsbuild/core';
|
|
3
|
+
import { pluginReact } from '@rsbuild/plugin-react';
|
|
4
|
+
import { pluginSvgr } from '@rsbuild/plugin-svgr';
|
|
5
|
+
|
|
6
|
+
export default defineConfig(({ env, envMode }) => {
|
|
7
|
+
const { publicVars, parsed } = loadEnv({ mode: envMode, prefixes: ['REACT_APP_', 'VITE_'] });
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
dev: {
|
|
11
|
+
lazyCompilation: true,
|
|
12
|
+
},
|
|
13
|
+
plugins: [
|
|
14
|
+
pluginReact(),
|
|
15
|
+
pluginSvgr(),
|
|
16
|
+
],
|
|
17
|
+
html: {
|
|
18
|
+
template: './index.html',
|
|
19
|
+
templateParameters: {
|
|
20
|
+
...parsed,
|
|
21
|
+
PROD: env === 'production',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
source: {
|
|
25
|
+
define: {
|
|
26
|
+
...publicVars,
|
|
27
|
+
'import.meta.env': Object.entries(parsed).reduce((acc, [key, value]) => {
|
|
28
|
+
acc[key] = JSON.stringify(value);
|
|
29
|
+
return acc;
|
|
30
|
+
}, {}),
|
|
31
|
+
'__APP_ENV__': JSON.stringify({ BASE_URL: '' }),
|
|
32
|
+
},
|
|
33
|
+
entry: {
|
|
34
|
+
index: './src/index.jsx',
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
resolve: {
|
|
38
|
+
alias: {
|
|
39
|
+
'@': path.resolve(__dirname, 'src'),
|
|
40
|
+
},
|
|
41
|
+
dedupe: ['react', 'react-dom', 'react-query'],
|
|
42
|
+
},
|
|
43
|
+
server: {
|
|
44
|
+
port: 3000,
|
|
45
|
+
proxy: [
|
|
46
|
+
// 添加你的代理配置
|
|
47
|
+
// {
|
|
48
|
+
// context: ['/api'],
|
|
49
|
+
// target: 'http://localhost:8080',
|
|
50
|
+
// changeOrigin: true,
|
|
51
|
+
// ws: true,
|
|
52
|
+
// }
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
output: {
|
|
56
|
+
legalComments: 'none',
|
|
57
|
+
manifest: true,
|
|
58
|
+
// 根据需要配置外部依赖
|
|
59
|
+
externals: {
|
|
60
|
+
'react': 'React',
|
|
61
|
+
'react-dom': 'ReactDOM',
|
|
62
|
+
'react-router-dom': 'ReactRouterDOM',
|
|
63
|
+
'dayjs': 'dayjs',
|
|
64
|
+
'antd': 'antd',
|
|
65
|
+
'tengits-ui5': 'tengitsui5'
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
performance: {
|
|
69
|
+
removeConsole: env === 'production' ? ['log'] : [],
|
|
70
|
+
buildCache: true,
|
|
71
|
+
chunkSplit: {
|
|
72
|
+
strategy: 'split-by-experience',
|
|
73
|
+
forceSplitting: {
|
|
74
|
+
// 根据需要配置代码分割
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
});
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import React, { Suspense, useEffect, useMemo, useRef, useState } from 'react';
|
|
2
|
+
import { getLocalStorageJSON, getMenusAndRoutes, LOCAL_STORAGE_KEY, rootRoute, TUIApp } from 'tengits-ui5';
|
|
3
|
+
import i18n from './i18n';
|
|
4
|
+
import { getMenus } from './menus';
|
|
5
|
+
import { customRoutes, otherRoutes } from './routes';
|
|
6
|
+
|
|
7
|
+
const { VITE_AI_APPLICATIONID } = import.meta.env;
|
|
8
|
+
|
|
9
|
+
interface MenuItem {
|
|
10
|
+
id: string | number;
|
|
11
|
+
menuOrder: number;
|
|
12
|
+
menuLevel: number;
|
|
13
|
+
iconType?: string;
|
|
14
|
+
menuName: string;
|
|
15
|
+
menuRoute: string;
|
|
16
|
+
menuAuth?: string[];
|
|
17
|
+
children?: MenuItem[];
|
|
18
|
+
}
|
|
19
|
+
type LocaleType = 'zh' | 'en' | 'fr' | 'de' | 'es';
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
function App() {
|
|
23
|
+
const [menus, setMenus] = useState();
|
|
24
|
+
const [routes, setRoutes] = useState(otherRoutes);
|
|
25
|
+
const [loading, setLoading] = useState(false);
|
|
26
|
+
const layoutRef = useRef<any>(null);
|
|
27
|
+
const themeConfig = useMemo(() => ({
|
|
28
|
+
sysMode: getLocalStorageJSON(LOCAL_STORAGE_KEY.THEMESTATUS, { sysMode: 'light' }).sysMode,
|
|
29
|
+
loginConfig: getLocalStorageJSON(LOCAL_STORAGE_KEY.LOGINCONFIG, { systemName: '', logo: '', shinkLogo: '' }),
|
|
30
|
+
}), []);
|
|
31
|
+
const { sysMode, loginConfig } = themeConfig || {};
|
|
32
|
+
const {logo } = loginConfig || {};
|
|
33
|
+
|
|
34
|
+
useEffect(() => {
|
|
35
|
+
const initializeMenus = () => {
|
|
36
|
+
const { menus, routes } = getMenusAndRoutes(
|
|
37
|
+
getMenus(),
|
|
38
|
+
(route: any, menu: MenuItem) => { route.menuAuth = menu.menuAuth || []; },
|
|
39
|
+
customRoutes(),
|
|
40
|
+
otherRoutes,
|
|
41
|
+
);
|
|
42
|
+
setMenus(menus);
|
|
43
|
+
setRoutes(routes);
|
|
44
|
+
setLoading(true);
|
|
45
|
+
};
|
|
46
|
+
if (i18n.isInitialized) {
|
|
47
|
+
initializeMenus();
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
i18n.on('initialized', initializeMenus);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return () => {
|
|
54
|
+
i18n.off('initialized', initializeMenus);
|
|
55
|
+
};
|
|
56
|
+
}, []);
|
|
57
|
+
|
|
58
|
+
const handleLanguageChange = (local) => {
|
|
59
|
+
i18n.changeLanguage(local);
|
|
60
|
+
localStorage.setItem('language', local);
|
|
61
|
+
// 强制刷新页面
|
|
62
|
+
window.location.reload();
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
const globalCommonStyle = {
|
|
67
|
+
'--TUI-ant-collapse-container-bg':
|
|
68
|
+
sysMode === 'dark' ? '#1E2127' : '#F0F0F0',
|
|
69
|
+
'--TUI-ant-collapse-card-bg': sysMode === 'dark' ? '#2E3138' : '#FFFFFF',
|
|
70
|
+
'--TUI-ant-collapse-header-bg':
|
|
71
|
+
sysMode === 'dark' ? 'rgba(255, 255, 255, 0.04)' : 'rgba(0, 0, 0, 0.02)',
|
|
72
|
+
'--TUI-canvas-bg': sysMode === 'dark' ? '#262626' : 'var(--color-gray-3, #f5f5f5)',
|
|
73
|
+
'height': '100%',
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
return (
|
|
78
|
+
<Suspense fallback={<div>加载中...</div>}>
|
|
79
|
+
{loading && (
|
|
80
|
+
<div style={{ ...globalCommonStyle }}>
|
|
81
|
+
<TUIApp
|
|
82
|
+
appConfigDefaultStatus={{
|
|
83
|
+
isNotJumpTongyi: true,
|
|
84
|
+
systemName: i18n.t('AIWorkbench'),
|
|
85
|
+
logoutProps: {
|
|
86
|
+
api: '/saas/user/logout',
|
|
87
|
+
},
|
|
88
|
+
locale: i18n.language as LocaleType,
|
|
89
|
+
headLogo: logo,
|
|
90
|
+
onLanguageChange: handleLanguageChange,
|
|
91
|
+
}}
|
|
92
|
+
themeDefaultStatus={{
|
|
93
|
+
defaultStyle: { height: '100%' },
|
|
94
|
+
layoutMode: 'ExpandMenu',
|
|
95
|
+
}}
|
|
96
|
+
layoutDefaultStatus={{ menus, routes }}
|
|
97
|
+
appProps={{
|
|
98
|
+
style: { height: '100%' },
|
|
99
|
+
}}
|
|
100
|
+
ref={layoutRef}
|
|
101
|
+
/>
|
|
102
|
+
</div>
|
|
103
|
+
)}
|
|
104
|
+
</Suspense>
|
|
105
|
+
);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export default App;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
const {
|
|
2
|
+
VITE_TENCENT_COS_APPID,
|
|
3
|
+
VITE_TENCENT_COS_BUCKET,
|
|
4
|
+
VITE_PRE_RELEASE,
|
|
5
|
+
VITE_TENCENT_COS_APPID_TEST,
|
|
6
|
+
VITE_TENCENT_COS_BUCKET_TEST,
|
|
7
|
+
VITE_TCAPTCHE_APPID,
|
|
8
|
+
} = import.meta.env;
|
|
9
|
+
|
|
10
|
+
export default function configSystemData() {
|
|
11
|
+
window.VITE_TCAPTCHE_APPID = VITE_TCAPTCHE_APPID;
|
|
12
|
+
// window.VITE_LGOIN_TITLE_BG = require('./assets/logoWithTitle.png');
|
|
13
|
+
|
|
14
|
+
window.dataConfig = {
|
|
15
|
+
TencentCos: {
|
|
16
|
+
appid: VITE_PRE_RELEASE
|
|
17
|
+
? VITE_TENCENT_COS_APPID_TEST
|
|
18
|
+
: VITE_TENCENT_COS_APPID,
|
|
19
|
+
bucket: VITE_PRE_RELEASE
|
|
20
|
+
? VITE_TENCENT_COS_BUCKET_TEST
|
|
21
|
+
: VITE_TENCENT_COS_BUCKET,
|
|
22
|
+
region: 'ap-guangzhou',
|
|
23
|
+
picregion: 'gz',
|
|
24
|
+
getCosCredentialUrl: '/ttos/thirdpartsdk/getCosCredential',
|
|
25
|
+
},
|
|
26
|
+
};
|
|
27
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import i18n from 'i18next';
|
|
2
|
+
import Backend from 'i18next-http-backend';
|
|
3
|
+
import { initReactI18next } from 'react-i18next';
|
|
4
|
+
|
|
5
|
+
// 获取存储的语言设置,如果没有则默认使用中文
|
|
6
|
+
// 根据浏览器语言自动检测并映射到支持的语言
|
|
7
|
+
function getBrowserLanguage() {
|
|
8
|
+
const browserLang = navigator.language.toLowerCase();
|
|
9
|
+
|
|
10
|
+
// 映射浏览器语言到支持的语言代码
|
|
11
|
+
if (browserLang.startsWith('zh')) {
|
|
12
|
+
return 'zh';
|
|
13
|
+
}
|
|
14
|
+
else if (browserLang.startsWith('en')) {
|
|
15
|
+
return 'en';
|
|
16
|
+
}
|
|
17
|
+
else if (browserLang.startsWith('fr')) {
|
|
18
|
+
return 'fr';
|
|
19
|
+
}
|
|
20
|
+
else if (browserLang.startsWith('de')) {
|
|
21
|
+
return 'de';
|
|
22
|
+
}
|
|
23
|
+
else if (browserLang.startsWith('es')) {
|
|
24
|
+
return 'es';
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// 默认返回中文
|
|
28
|
+
return 'zh';
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// 获取存储的语言设置,如果没有则使用浏览器语言检测
|
|
32
|
+
const savedLanguage = localStorage.getItem('language') || getBrowserLanguage();
|
|
33
|
+
|
|
34
|
+
const aiI18n = i18n.createInstance();
|
|
35
|
+
// 创建新的i18n实例,避免与其他实例冲突
|
|
36
|
+
|
|
37
|
+
const allNamespaces = ['AIWorkbench', 'bs', 'Common', 'flow'];
|
|
38
|
+
|
|
39
|
+
// 创建新的i18n实例,避免与其他实例冲突
|
|
40
|
+
const nsMap = {
|
|
41
|
+
// '/doc': ['ReportConfiguration', 'Common'],
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// 缓存已加载的翻译数据
|
|
45
|
+
const translationCache = new Map();
|
|
46
|
+
|
|
47
|
+
// 缓存进行中的请求,避免重复请求
|
|
48
|
+
const pendingRequests = new Map();
|
|
49
|
+
|
|
50
|
+
export const initializeAiI18n = async (options = {}) => {
|
|
51
|
+
// 使用Backend和initReactI18next插件
|
|
52
|
+
// 根据当前路由设置默认命名空间
|
|
53
|
+
const currentPath = window.location.pathname;
|
|
54
|
+
let defaultNS = 'AIWorkbench'; // 默认命名空间
|
|
55
|
+
|
|
56
|
+
// 根据路由路径设置对应的命名空间
|
|
57
|
+
// 使用nsMap来映射路径到命名空间
|
|
58
|
+
for (const [path, namespace] of Object.entries(nsMap)) {
|
|
59
|
+
if (currentPath.includes(path)) {
|
|
60
|
+
defaultNS = namespace;
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// 更新默认命名空间
|
|
66
|
+
if (options.defaultNS) {
|
|
67
|
+
defaultNS = options.defaultNS;
|
|
68
|
+
}
|
|
69
|
+
// 只加载必要的命名空间,而不是所有命名空间
|
|
70
|
+
const initialNamespaces = Array.isArray(defaultNS) ? defaultNS : [defaultNS]; // 只加载默认命名空间和回退命名空间
|
|
71
|
+
|
|
72
|
+
// 使用Backend和initReactI18next插件
|
|
73
|
+
|
|
74
|
+
return aiI18n.use(Backend)
|
|
75
|
+
.use(initReactI18next)
|
|
76
|
+
.init({
|
|
77
|
+
nsSeparator: '/',
|
|
78
|
+
partialBundledLanguages: true,
|
|
79
|
+
lng: savedLanguage,
|
|
80
|
+
fallbackLng: savedLanguage, // 明确设置 fallback 语言为中文
|
|
81
|
+
ns: allNamespaces, // 指定命名空间
|
|
82
|
+
// ns: initialNamespaces, // 只指定初始命名空间
|
|
83
|
+
defaultNS, // 默认命名空间
|
|
84
|
+
fallbackNS: 'AIWorkbench', // 回退命名空间
|
|
85
|
+
backend: {
|
|
86
|
+
loadPath: '/locales/{{lng}}/{{ns}}.json',
|
|
87
|
+
},
|
|
88
|
+
interpolation: {
|
|
89
|
+
escapeValue: false, // react already safes from xss
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* 修改命名空间的方法
|
|
96
|
+
* @param ns - 新的命名空间
|
|
97
|
+
*/
|
|
98
|
+
export const changeNamespace = (ns) => {
|
|
99
|
+
return new Promise((resolve, reject) => {
|
|
100
|
+
if (ns) {
|
|
101
|
+
aiI18n.loadNamespaces(ns)
|
|
102
|
+
.then(() => {
|
|
103
|
+
aiI18n.setDefaultNamespace(ns);
|
|
104
|
+
console.log('Current namespace:', aiI18n);
|
|
105
|
+
resolve();
|
|
106
|
+
})
|
|
107
|
+
.catch((error) => {
|
|
108
|
+
console.error('Failed to load namespace:', error);
|
|
109
|
+
reject(error);
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
resolve();
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* 多命名空间翻译方法 - 注意:含{{}}变量的key必须使用i18n.t而不是该t,否则会报错
|
|
120
|
+
* @param key - 翻译键值
|
|
121
|
+
* @param namespace - 命名空间,可选
|
|
122
|
+
* @returns 翻译后的文本
|
|
123
|
+
*/
|
|
124
|
+
export const t = (key, namespace) => {
|
|
125
|
+
if (namespace) {
|
|
126
|
+
return aiI18n.t(key, { ns: namespace });
|
|
127
|
+
}
|
|
128
|
+
const title = aiI18n.t(key);
|
|
129
|
+
return title;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
/**
|
|
133
|
+
* 预加载多个命名空间
|
|
134
|
+
* @param namespaces - 命名空间数组
|
|
135
|
+
*/
|
|
136
|
+
export const loadMultipleNamespaces = (namespaces) => {
|
|
137
|
+
return Promise.all(namespaces.map(ns => aiI18n.loadNamespaces(ns)));
|
|
138
|
+
};
|
|
139
|
+
|
|
140
|
+
export default aiI18n;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import React, { lazy, Suspense, useContext } from 'react';
|
|
2
|
+
import ReactDOM from 'react-dom/client';
|
|
3
|
+
import { initializeTUII18n } from 'tengits-ui5';
|
|
4
|
+
import App from './App';
|
|
5
|
+
import configSystemData from './configSystemData';
|
|
6
|
+
import { initializeAiI18n } from './i18n';
|
|
7
|
+
|
|
8
|
+
import './index.less';
|
|
9
|
+
|
|
10
|
+
window.systemId = '100';
|
|
11
|
+
// PlatformType 1- 平台端 2-租户端 3-客户端
|
|
12
|
+
window.tenantParams = {
|
|
13
|
+
platformType: 3,
|
|
14
|
+
};
|
|
15
|
+
configSystemData();
|
|
16
|
+
initializeAiI18n();
|
|
17
|
+
initializeTUII18n();
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
const container = document.getElementById('container');
|
|
21
|
+
const root = ReactDOM.createRoot(container);
|
|
22
|
+
root.render(<App />);
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
@tailwind base;
|
|
2
|
+
@tailwind components;
|
|
3
|
+
@tailwind utilities;
|
|
4
|
+
|
|
5
|
+
// .TUI-Layout-ExpandMenu .TUI-Side {
|
|
6
|
+
// background-color: #00474f;
|
|
7
|
+
// }
|
|
8
|
+
|
|
9
|
+
.TUI-LayoutWarp {
|
|
10
|
+
.ant-layout {
|
|
11
|
+
--TUI-Menu-Color-Primary: #00474f;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.customScrollbar {
|
|
16
|
+
&::-webkit-scrollbar {
|
|
17
|
+
/*滚动条整体样式*/
|
|
18
|
+
width: 8px;
|
|
19
|
+
/*高宽分别对应横竖滚动条的尺寸*/
|
|
20
|
+
height: 8px;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
&::-webkit-scrollbar-thumb {
|
|
24
|
+
/*滚动条里面小方块*/
|
|
25
|
+
border-radius: 4px;
|
|
26
|
+
// background-color: rgba(31, 64, 80, 0.2);
|
|
27
|
+
background-color: #c8c9cc;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
&::-webkit-scrollbar-track {
|
|
31
|
+
/*滚动条里面轨道*/
|
|
32
|
+
// box-shadow: inset 0 0 5px #fff;
|
|
33
|
+
background: transparent;
|
|
34
|
+
// background-color: red;
|
|
35
|
+
border-radius: 4px;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
// 移动端不适用滚动条定义
|
|
40
|
+
@media (min-device-width: 768px) {
|
|
41
|
+
* {
|
|
42
|
+
.customScrollbar();
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// 全局样式
|
|
47
|
+
.TUI-AdvancedCrud .ant-table-wrapper {
|
|
48
|
+
margin-top: 0px;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
.TUI-TableEditor {
|
|
52
|
+
.TUI-Crud {
|
|
53
|
+
padding: 0;
|
|
54
|
+
min-height: auto;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ant-input-number {
|
|
58
|
+
width: 100%;
|
|
59
|
+
height: 100%;
|
|
60
|
+
border: 0 none;
|
|
61
|
+
border-radius: 0;
|
|
62
|
+
|
|
63
|
+
.ant-input-number-handler-wrap {
|
|
64
|
+
display: none;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
.ant-input-number-input-wrap {
|
|
68
|
+
height: 100%;
|
|
69
|
+
|
|
70
|
+
.ant-input-number-input {
|
|
71
|
+
height: 100%;
|
|
72
|
+
text-align: center;
|
|
73
|
+
border: 0 none;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.ant-select-selection__choice {
|
|
79
|
+
border: 0 none;
|
|
80
|
+
background: none;
|
|
81
|
+
padding: 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.ant-select-selection__choice__remove {
|
|
85
|
+
display: none;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
.ant-table-thead > tr > th {
|
|
89
|
+
white-space: pre-wrap;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.ant-form-item + .TUI-Crud-Toolbox {
|
|
94
|
+
margin-left: 0px;
|
|
95
|
+
|
|
96
|
+
&::before {
|
|
97
|
+
content: '';
|
|
98
|
+
display: inline-block;
|
|
99
|
+
width: 0;
|
|
100
|
+
height: 24px;
|
|
101
|
+
border-right: 1px solid #ebedf0;
|
|
102
|
+
margin-left: 16px;
|
|
103
|
+
margin-right: 16px;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
.ant-checkbox-group {
|
|
108
|
+
.ant-checkbox-group-item:last-child {
|
|
109
|
+
.ant-checkbox + span {
|
|
110
|
+
padding-right: 0;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
.TUI-AdvancedFilter {
|
|
116
|
+
&:empty {
|
|
117
|
+
display: none;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
.ant-select-selection__placeholder {
|
|
121
|
+
position: unset;
|
|
122
|
+
height: unset;
|
|
123
|
+
margin-top: unset;
|
|
124
|
+
line-height: unset;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.TUI-AdvancedFilter-Short-Value .ant-input,
|
|
128
|
+
.TUI-AdvancedFilter-Short-Value .ant-select {
|
|
129
|
+
min-width: 120px;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.TUI-AdvancedFilter-Reset + .TUI-AdvancedFilter-AddOn {
|
|
133
|
+
margin-left: 16px !important;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
.TUI-FormField-Lable {
|
|
138
|
+
border-radius: var(--ant-border-radius) 0 0 var(--ant-border-radius) !important;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
.TUI-AdvancedCrud .TUI-AdvancedFilter .ant-select-selection {
|
|
142
|
+
border-top-right-radius: 2px !important;
|
|
143
|
+
border-bottom-right-radius: 2px !important;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.TUI-AdvancedCrud {
|
|
147
|
+
> .TUI-Table {
|
|
148
|
+
margin-top: 16px;
|
|
149
|
+
|
|
150
|
+
.ant-table-tbody > tr > td,
|
|
151
|
+
.ant-table-thead > tr > th {
|
|
152
|
+
font-size: 14px !important;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
.TUI-Crud-Toolbox:empty + .TUI-Table {
|
|
157
|
+
margin-top: 0px;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
@font-face {
|
|
162
|
+
font-family: 'iconfont';
|
|
163
|
+
/* Project id 3055426 */
|
|
164
|
+
src: url('//at.alicdn.com/t/c/font_3055426_u3wl3bch5gq.ttf?t=1710466840688') format('truetype');
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
@font-face {
|
|
168
|
+
font-family: D-DIN;
|
|
169
|
+
src: url('https://static-1255466169.cos.ap-guangzhou.myqcloud.com/assets/fonts/D-DIN.ttf');
|
|
170
|
+
}
|
|
171
|
+
@font-face {
|
|
172
|
+
font-family: SourceHanSerifCN-SemiBold;
|
|
173
|
+
src: url('https://static-1255466169.cos.ap-guangzhou.myqcloud.com/assets/fonts/SourceHanSerifCN-SemiBold.ttf');
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// .ant-modal .ant-form-item {
|
|
177
|
+
// display: flex;
|
|
178
|
+
// }
|
|
179
|
+
|
|
180
|
+
.TUI-Form {
|
|
181
|
+
.ant-radio-button-wrapper:first-child {
|
|
182
|
+
border-radius: 2px 0 0 2px;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.ant-radio-button-wrapper:last-child {
|
|
186
|
+
border-radius: 0 2px 2px 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.ant-form-item {
|
|
190
|
+
display: flex;
|
|
191
|
+
flex-direction: column;
|
|
192
|
+
margin: 0 0 12px;
|
|
193
|
+
|
|
194
|
+
.ant-form-item-label {
|
|
195
|
+
line-height: 1 !important;
|
|
196
|
+
margin-bottom: 4px;
|
|
197
|
+
// text-align: left;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
.TUI-TableEditor .ant-select-dropdown-menu-item-group-title {
|
|
203
|
+
white-space: nowrap;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
#container {
|
|
207
|
+
height: 100%;
|
|
208
|
+
width: 100%;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// #region 数据容器
|
|
212
|
+
|
|
213
|
+
.ant-table-thead {
|
|
214
|
+
.tableCell-t0 {
|
|
215
|
+
// background-color: #ebedf0 !important;
|
|
216
|
+
border-bottom: var(--ant-line-width) var(--ant-line-type) var(--ant-table-border-color) !important;
|
|
217
|
+
color: var(--ant-table-header-color, rgba(255, 255, 255, 0.85)) !important;
|
|
218
|
+
background-color: var(--ant-table-header-bg, #1d1d1d) !important;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
.tableCell-t1 {
|
|
222
|
+
color: var(--ant-geekblue-7) !important;
|
|
223
|
+
background-color: var(--ant-geekblue-1, #1d1d1d) !important;
|
|
224
|
+
border-bottom: var(--ant-line-width) var(--ant-line-type) var(--ant-geekblue-3) !important;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
.tableCell-t2 {
|
|
228
|
+
color: var(--ant-green-7) !important;
|
|
229
|
+
background-color: var(--ant-green-1, #1d1d1d) !important;
|
|
230
|
+
border-bottom: var(--ant-line-width) var(--ant-line-type) var(--ant-green-3) !important;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
.tableCell-t3 {
|
|
234
|
+
color: var(--ant-volcano-7) !important;
|
|
235
|
+
background-color: var(--ant-volcano-1, #1d1d1d) !important;
|
|
236
|
+
border-bottom: var(--ant-line-width) var(--ant-line-type) var(--ant-volcano-3) !important;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
// #endregion
|
|
241
|
+
|
|
242
|
+
#container {
|
|
243
|
+
> div {
|
|
244
|
+
height: 100%;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
html {
|
|
249
|
+
overflow: hidden;
|
|
250
|
+
}
|