前后端基本架构和完全excel表的解析及统计图表的生成以及excel表的到出

This commit is contained in:
2026-03-19 01:51:34 +08:00
parent c23b93bb70
commit 2f630695ff
194 changed files with 23354 additions and 174 deletions

140
frontend/vite.config.dev.ts Normal file
View File

@@ -0,0 +1,140 @@
import * as vite from 'vite';
import { defineConfig, loadConfigFromFile } from "vite";
import type { Plugin, ConfigEnv } from "vite";
import tailwindcss from "tailwindcss";
import autoprefixer from "autoprefixer";
import fs from "fs/promises";
import path from "path";
import {
makeTagger,
injectedGuiListenerPlugin,
injectOnErrorPlugin,
monitorPlugin
} from "miaoda-sc-plugin";
const env: ConfigEnv = { command: "serve", mode: "development" };
const configFile = path.resolve(__dirname, "vite.config.ts");
const result = await loadConfigFromFile(env, configFile);
const userConfig = result?.config;
const viteVersionInfo = {
version: vite.version,
rollupVersion: (vite as any).rollupVersion ?? null,
rolldownVersion: (vite as any).rolldownVersion ?? null,
isRolldownVite: 'rolldownVersion' in vite
};
export default defineConfig({
...userConfig,
define: {
__VITE_INFO__: JSON.stringify(viteVersionInfo),
...(userConfig?.define || {})
},
// 将 Vite 缓存目录设置为项目本地目录,避免在 /workspace/node_modules/ 下创建
cacheDir: path.resolve(__dirname, "node_modules/.vite"),
plugins: [
makeTagger(),
injectedGuiListenerPlugin({
path: 'https://resource-static.cdn.bcebos.com/common/v2/injected.js'
}),
injectOnErrorPlugin(),
...(userConfig?.plugins || []),
{
name: 'hmr-toggle',
configureServer(server) {
let hmrEnabled = true;
// 包装原来的 send 方法
const _send = server.ws.send;
server.ws.send = (payload) => {
if (hmrEnabled) {
return _send.call(server.ws, payload);
} else {
console.log('[HMR disabled] skipped payload:', payload.type);
}
};
// 提供接口切换 HMR
server.middlewares.use('/innerapi/v1/sourcecode/__hmr_off', (req, res) => {
hmrEnabled = false;
let body = {
status: 0,
msg: 'HMR disabled'
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(body));
});
server.middlewares.use('/innerapi/v1/sourcecode/__hmr_on', (req, res) => {
hmrEnabled = true;
let body = {
status: 0,
msg: 'HMR enabled'
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(body));
});
// 注册一个 HTTP API用来手动触发一次整体刷新
server.middlewares.use('/innerapi/v1/sourcecode/__hmr_reload', (req, res) => {
if (hmrEnabled) {
server.ws.send({
type: 'full-reload',
path: '*', // 整页刷新
});
}
res.statusCode = 200;
let body = {
status: 0,
msg: 'Manual full reload triggered'
};
res.setHeader('Content-Type', 'application/json');
res.end(JSON.stringify(body));
});
},
load(id) {
if (id === 'virtual:after-update') {
return `
if (import.meta.hot) {
import.meta.hot.on('vite:afterUpdate', () => {
window.postMessage(
{
type: 'editor-update'
},
'*'
);
});
}
`;
}
},
transformIndexHtml(html) {
return {
html,
tags: [
{
tag: 'script',
attrs: {
type: 'module',
src: '/@id/virtual:after-update'
},
injectTo: 'body'
}
]
};
}
},
,
monitorPlugin(
{
scriptSrc: 'https://resource-static.cdn.bcebos.com/sentry/browser.sentry.min.js',
sentryDsn: 'https://e3c07b90fcb5207f333d50ac24a99d3e@sentry.miaoda.cn/233',
environment: 'undefined',
appId: 'app-a6ww9j3ja3nl'
}
)
]
});