From 5d54ac1cd4038fdb73ed1f45f569ab425b38076b Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Fri, 2 Jan 2026 15:50:20 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=96=E8=AF=91=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../packages/bidding/package.json | 6 +- .../packages/bidding/pnpm-lock.yaml | 91 ++++++++- .../packages/bidding/public/logo.jpg | Bin 0 -> 33240 bytes urbanLifelineWeb/packages/bidding/src/App.vue | 21 ++ .../layouts/SidebarLayout/SidebarLayout.scss | 191 ++++++++++++++++++ .../src/layouts/SidebarLayout/index.ts | 1 - .../packages/bidding/src/layouts/index.ts | 3 +- urbanLifelineWeb/packages/bidding/src/main.ts | 79 ++++++++ .../packages/bidding/vite.config.ts | 1 + .../components/ChatHistory/ChatHistory.vue | 10 + .../packages/platform/vite.config.ts | 1 + .../packages/shared/pnpm-lock.yaml | 56 ++++- .../workcase/localSharedImportMap.js | 2 +- .../src/views/admin/overview/OverviewView.vue | 20 +- .../packages/workcase/vite.config.ts | 1 + 15 files changed, 456 insertions(+), 27 deletions(-) create mode 100644 urbanLifelineWeb/packages/bidding/public/logo.jpg create mode 100644 urbanLifelineWeb/packages/bidding/src/App.vue create mode 100644 urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/SidebarLayout.scss delete mode 100644 urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/index.ts create mode 100644 urbanLifelineWeb/packages/bidding/src/main.ts diff --git a/urbanLifelineWeb/packages/bidding/package.json b/urbanLifelineWeb/packages/bidding/package.json index 9035ebcc..1bfcd3c0 100644 --- a/urbanLifelineWeb/packages/bidding/package.json +++ b/urbanLifelineWeb/packages/bidding/package.json @@ -15,10 +15,12 @@ "element-plus": "^2.12.0", "@element-plus/icons-vue": "^2.3.2", "@vueuse/core": "^11.3.0", - "axios": "^1.7.9" + "axios": "^1.7.9", + "lucide-vue-next": "^0.561.0" }, "devDependencies": { - "@types/node": "^22.0.0", + "@module-federation/vite": "^1.9.3", + "@types/node": "^20.10.0", "@vitejs/plugin-vue": "^5.2.1", "@vitejs/plugin-vue-jsx": "^4.1.1", "typescript": "^5.7.2", diff --git a/urbanLifelineWeb/packages/bidding/pnpm-lock.yaml b/urbanLifelineWeb/packages/bidding/pnpm-lock.yaml index 6b03b240..4ea2b16c 100644 --- a/urbanLifelineWeb/packages/bidding/pnpm-lock.yaml +++ b/urbanLifelineWeb/packages/bidding/pnpm-lock.yaml @@ -17,6 +17,9 @@ dependencies: element-plus: specifier: ^2.12.0 version: 2.12.0(vue@3.5.25) + lucide-vue-next: + specifier: ^0.561.0 + version: 0.561.0(vue@3.5.25) pinia: specifier: ^2.2.8 version: 2.3.1(typescript@5.9.3)(vue@3.5.25) @@ -28,9 +31,12 @@ dependencies: version: 4.6.3(vue@3.5.25) devDependencies: + '@module-federation/vite': + specifier: ^1.9.3 + version: 1.9.4 '@types/node': - specifier: ^22.0.0 - version: 22.19.1 + specifier: ^20.10.0 + version: 20.19.27 '@vitejs/plugin-vue': specifier: ^5.2.1 version: 5.2.4(vite@6.4.1)(vue@3.5.25) @@ -42,7 +48,7 @@ devDependencies: version: 5.9.3 vite: specifier: ^6.0.3 - version: 6.4.1(@types/node@22.19.1) + version: 6.4.1(@types/node@20.19.27) vue-tsc: specifier: ^2.2.0 version: 2.2.12(typescript@5.9.3) @@ -596,10 +602,61 @@ packages: '@jridgewell/sourcemap-codec': 1.5.5 dev: true + /@module-federation/error-codes@0.21.6: + resolution: {integrity: sha512-MLJUCQ05KnoVl8xd6xs9a5g2/8U+eWmVxg7xiBMeR0+7OjdWUbHwcwgVFatRIwSZvFgKHfWEiI7wsU1q1XbTRQ==} + dev: true + + /@module-federation/runtime-core@0.21.6: + resolution: {integrity: sha512-5Hd1Y5qp5lU/aTiK66lidMlM/4ji2gr3EXAtJdreJzkY+bKcI5+21GRcliZ4RAkICmvdxQU5PHPL71XmNc7Lsw==} + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/sdk': 0.21.6 + dev: true + + /@module-federation/runtime@0.21.6: + resolution: {integrity: sha512-+caXwaQqwTNh+CQqyb4mZmXq7iEemRDrTZQGD+zyeH454JAYnJ3s/3oDFizdH6245pk+NiqDyOOkHzzFQorKhQ==} + dependencies: + '@module-federation/error-codes': 0.21.6 + '@module-federation/runtime-core': 0.21.6 + '@module-federation/sdk': 0.21.6 + dev: true + + /@module-federation/sdk@0.21.6: + resolution: {integrity: sha512-x6hARETb8iqHVhEsQBysuWpznNZViUh84qV2yE7AD+g7uIzHKiYdoWqj10posbo5XKf/147qgWDzKZoKoEP2dw==} + dev: true + + /@module-federation/vite@1.9.4: + resolution: {integrity: sha512-7UckjGCqpN6mCRs8J9+T/we0s4msl4SFJERG1uVQslIQJvomuOeu/+keIAbK6M4vjgRwXxkHKyWPhr95uhdulg==} + dependencies: + '@module-federation/runtime': 0.21.6 + '@module-federation/sdk': 0.21.6 + '@rollup/pluginutils': 5.3.0 + defu: 6.1.4 + estree-walker: 2.0.2 + magic-string: 0.30.21 + pathe: 1.1.2 + transitivePeerDependencies: + - rollup + dev: true + /@rolldown/pluginutils@1.0.0-beta.53: resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} dev: true + /@rollup/pluginutils@5.3.0: + resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.3 + dev: true + /@rollup/rollup-android-arm-eabi@4.53.3: resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] @@ -805,8 +862,8 @@ packages: resolution: {integrity: sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==} dev: false - /@types/node@22.19.1: - resolution: {integrity: sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==} + /@types/node@20.19.27: + resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} dependencies: undici-types: 6.21.0 dev: true @@ -830,7 +887,7 @@ packages: '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@rolldown/pluginutils': 1.0.0-beta.53 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.5) - vite: 6.4.1(@types/node@22.19.1) + vite: 6.4.1(@types/node@20.19.27) vue: 3.5.25(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -843,7 +900,7 @@ packages: vite: ^5.0.0 || ^6.0.0 vue: ^3.2.25 dependencies: - vite: 6.4.1(@types/node@22.19.1) + vite: 6.4.1(@types/node@20.19.27) vue: 3.5.25(typescript@5.9.3) dev: true @@ -1146,6 +1203,10 @@ packages: ms: 2.1.3 dev: true + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + dev: true + /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -1406,6 +1467,14 @@ packages: yallist: 3.1.1 dev: true + /lucide-vue-next@0.561.0(vue@3.5.25): + resolution: {integrity: sha512-c5HUckO0qHklVSOf/0vaSR3pEb8fYImRDCRDLde56uqS9js0D/e3RAvq0/YFWjkmyOBKCb0/IdskdoHZQEkT5g==} + peerDependencies: + vue: '>=3.0.1' + dependencies: + vue: 3.5.25(typescript@5.9.3) + dev: false + /magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} dependencies: @@ -1464,6 +1533,10 @@ packages: resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} dev: true + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + dev: true + /picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -1570,7 +1643,7 @@ packages: picocolors: 1.1.1 dev: true - /vite@6.4.1(@types/node@22.19.1): + /vite@6.4.1(@types/node@20.19.27): resolution: {integrity: sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==} engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true @@ -1610,7 +1683,7 @@ packages: yaml: optional: true dependencies: - '@types/node': 22.19.1 + '@types/node': 20.19.27 esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 diff --git a/urbanLifelineWeb/packages/bidding/public/logo.jpg b/urbanLifelineWeb/packages/bidding/public/logo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..18b5da66cc063dfe01fb3d76330d033153403f40 GIT binary patch literal 33240 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 + + + + + + diff --git a/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/SidebarLayout.scss b/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/SidebarLayout.scss new file mode 100644 index 00000000..c089e29c --- /dev/null +++ b/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/SidebarLayout.scss @@ -0,0 +1,191 @@ +// ==================== 品牌色变量 ==================== +$brand-color: #0055AA; +$brand-color-light: #EBF5FF; +$brand-color-hover: #004488; + +.sidebar-layout { + display: flex; + width: 100%; + height: 100vh; + overflow: hidden; + background: #fff; + font-family: 'Inter', 'Noto Sans SC', sans-serif; +} + +// ==================== 侧边栏 ==================== +.sidebar { + width: 256px; + height: 100%; + background: #fff; + display: flex; + flex-direction: column; + color: #333; + flex-shrink: 0; + transition: width 0.3s ease; + border-right: 1px solid #f1f5f9; + z-index: 50; + + &.collapsed { + width: 80px; + overflow: visible; + + .sidebar-header { + padding: 16px 0; + justify-content: center; + } + + .nav-item { + justify-content: center; + padding: 12px; + border-radius: 8px; + margin: 0 12px; + + span { + display: none; + } + } + + .user-section { + justify-content: center; + padding: 16px; + + .user-name { + display: none; + } + } + } +} + +.sidebar-header { + height: 64px; + padding: 0 16px; + margin-bottom: 8px; + display: flex; + align-items: center; + justify-content: space-between; + user-select: none; +} + +.collapse-btn { + width: 32px; + height: 32px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + cursor: pointer; + color: #94a3b8; + background: transparent; + border: none; + transition: all 0.2s; + flex-shrink: 0; + + &:hover { + background: #f1f5f9; + color: #64748b; + } +} + +.logo { + display: flex; + align-items: center; + gap: 8px; + + .logo-img { + height: 32px; + width: auto; + border-radius: 8px; + object-fit: contain; + } + + .logo-text { + font-size: 16px; + font-weight: 600; + color: #1e293b; + letter-spacing: -0.02em; + } +} + +// 导航菜单 +.nav-menu { + flex: 1; + padding: 8px 12px; +} + +.nav-section { + padding: 0; +} + +.nav-item { + position: relative; + display: flex; + align-items: center; + gap: 12px; + padding: 12px 16px; + margin-bottom: 2px; + border-radius: 8px; + cursor: pointer; + transition: all 0.2s ease; + color: #64748b; + font-size: 14px; + font-weight: 500; + + &:hover { + background: $brand-color-light; + color: $brand-color; + } + + &.active { + background: $brand-color; + color: #fff; + box-shadow: 0 4px 12px rgba($brand-color, 0.25); + } + + span { + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// 用户信息 +.user-section { + padding: 16px; + border-top: 1px solid #f1f5f9; + background: #f8fafc; + cursor: pointer; + transition: background 0.2s; + + &:hover { + background: #f1f5f9; + } + + .user-info-wrapper { + display: flex; + align-items: center; + gap: 12px; + } + + .user-avatar { + position: relative; + flex-shrink: 0; + } + + .user-name { + font-size: 14px; + font-weight: 500; + color: #374151; + white-space: nowrap; + overflow: hidden; + text-overflow: ellipsis; + } +} + +// ==================== 主内容区 ==================== +.main-content { + flex: 1; + height: 100%; + overflow: hidden; + background: #f8fafc; + position: relative; +} diff --git a/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/index.ts b/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/index.ts deleted file mode 100644 index 972caa46..00000000 --- a/urbanLifelineWeb/packages/bidding/src/layouts/SidebarLayout/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { default as SidebarLayout } from './SidebarLayout.vue' diff --git a/urbanLifelineWeb/packages/bidding/src/layouts/index.ts b/urbanLifelineWeb/packages/bidding/src/layouts/index.ts index cbbe43a3..8f619aeb 100644 --- a/urbanLifelineWeb/packages/bidding/src/layouts/index.ts +++ b/urbanLifelineWeb/packages/bidding/src/layouts/index.ts @@ -1,3 +1,2 @@ export { default as SidebarLayout } from './SidebarLayout/SidebarLayout.vue' -// BlankLayout、SubSidebarLayout 从 shared 导入 -export { BlankLayout, SubSidebarLayout } from 'shared/layouts' +export { BlankLayout, SubSidebarLayout } from 'shared/layouts'; \ No newline at end of file diff --git a/urbanLifelineWeb/packages/bidding/src/main.ts b/urbanLifelineWeb/packages/bidding/src/main.ts new file mode 100644 index 00000000..8377e148 --- /dev/null +++ b/urbanLifelineWeb/packages/bidding/src/main.ts @@ -0,0 +1,79 @@ +import { createApp } from 'vue' +import { createPinia } from 'pinia' +import ElementPlus from 'element-plus' +import 'element-plus/dist/index.css' + +import App from './App.vue' +import router from './router/' +import { AES_SECRET_KEY } from './config' + +// 导入需要的 Lucide 图标 +import { + LayoutGrid, + FileText, + Users, + User, + Settings, + Home, + ChevronDown, + ChevronRight, + ChevronLeft, + PanelLeftClose, + PanelLeftOpen, + RefreshCw, + LogOut, + Plus, + Trash2, + Search, + Menu +} from 'lucide-vue-next' + +// Lucide 图标映射 +const lucideIcons = { + LayoutGrid, + FileText, + Users, + User, + Settings, + Home, + ChevronDown, + ChevronRight, + ChevronLeft, + PanelLeftClose, + PanelLeftOpen, + RefreshCw, + LogOut, + Plus, + Trash2, + Search, + Menu +} + +// 异步初始化应用 +async function initApp() { + // 创建 Vue 应用 + const app = createApp(App) + + // 注册 Pinia + const pinia = createPinia() + app.use(pinia) + + // 注册 Element Plus + app.use(ElementPlus) + + // 注册 Lucide 图标 + for (const [name, component] of Object.entries(lucideIcons)) { + app.component(name, component) + } + + // 注册路由 + app.use(router) + + // 挂载应用 + app.mount('#app') + + console.log('✅ Bidding 应用启动成功') +} + +// 启动应用 +initApp() diff --git a/urbanLifelineWeb/packages/bidding/vite.config.ts b/urbanLifelineWeb/packages/bidding/vite.config.ts index 0f8e97b3..5f8c2dbb 100644 --- a/urbanLifelineWeb/packages/bidding/vite.config.ts +++ b/urbanLifelineWeb/packages/bidding/vite.config.ts @@ -88,6 +88,7 @@ export default defineConfig(({ mode }) => { }, build: { + target: 'esnext', outDir: 'dist', sourcemap: true, rollupOptions: { diff --git a/urbanLifelineWeb/packages/platform/src/views/public/Chat/components/ChatHistory/ChatHistory.vue b/urbanLifelineWeb/packages/platform/src/views/public/Chat/components/ChatHistory/ChatHistory.vue index e69de29b..2b0f0a77 100644 --- a/urbanLifelineWeb/packages/platform/src/views/public/Chat/components/ChatHistory/ChatHistory.vue +++ b/urbanLifelineWeb/packages/platform/src/views/public/Chat/components/ChatHistory/ChatHistory.vue @@ -0,0 +1,10 @@ + + + \ No newline at end of file diff --git a/urbanLifelineWeb/packages/platform/vite.config.ts b/urbanLifelineWeb/packages/platform/vite.config.ts index 6f8a00bc..82b62c2a 100644 --- a/urbanLifelineWeb/packages/platform/vite.config.ts +++ b/urbanLifelineWeb/packages/platform/vite.config.ts @@ -88,6 +88,7 @@ export default defineConfig(({ mode }) => { }, build: { + target: 'esnext', outDir: 'dist', sourcemap: true, rollupOptions: { diff --git a/urbanLifelineWeb/packages/shared/pnpm-lock.yaml b/urbanLifelineWeb/packages/shared/pnpm-lock.yaml index 20c4b1cd..0b4a5cbc 100644 --- a/urbanLifelineWeb/packages/shared/pnpm-lock.yaml +++ b/urbanLifelineWeb/packages/shared/pnpm-lock.yaml @@ -11,6 +11,9 @@ dependencies: '@stomp/stompjs': specifier: ^7.2.1 version: 7.2.1 + axios: + specifier: ^1.7.0 + version: 1.13.2 cors: specifier: ^2.8.5 version: 2.8.5 @@ -1253,6 +1256,10 @@ packages: resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} dev: false + /asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + dev: false + /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} @@ -1260,6 +1267,16 @@ packages: possible-typed-array-names: 1.1.0 dev: true + /axios@1.13.2: + resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==} + dependencies: + follow-redirects: 1.15.11 + form-data: 4.0.5 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + dev: false + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true @@ -1384,6 +1401,13 @@ packages: resolution: {integrity: sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==} dev: true + /combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: 1.0.0 + dev: false + /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true @@ -1522,6 +1546,11 @@ packages: resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true + /delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + /depd@2.0.0: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} @@ -1686,7 +1715,6 @@ packages: get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 - dev: true /es-to-primitive@1.3.0: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} @@ -1840,6 +1868,16 @@ packages: - supports-color dev: false + /follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + /for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} engines: {node: '>= 0.4'} @@ -1847,6 +1885,17 @@ packages: is-callable: 1.2.7 dev: true + /form-data@4.0.5: + resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==} + engines: {node: '>= 6'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + dev: false + /forwarded@0.2.0: resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} engines: {node: '>= 0.6'} @@ -1978,7 +2027,6 @@ packages: engines: {node: '>= 0.4'} dependencies: has-symbols: 1.1.0 - dev: true /hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} @@ -2574,6 +2622,10 @@ packages: ipaddr.js: 1.9.1 dev: false + /proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + /qs@6.14.0: resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} engines: {node: '>=0.6'} diff --git a/urbanLifelineWeb/packages/workcase/.__mf__temp/workcase/localSharedImportMap.js b/urbanLifelineWeb/packages/workcase/.__mf__temp/workcase/localSharedImportMap.js index adb405c6..595be568 100644 --- a/urbanLifelineWeb/packages/workcase/.__mf__temp/workcase/localSharedImportMap.js +++ b/urbanLifelineWeb/packages/workcase/.__mf__temp/workcase/localSharedImportMap.js @@ -118,7 +118,7 @@ entryGlobalName: "shared", name: "shared", type: "module", - entry: "https://org.xyzh.yslg/shared/remoteEntry.js", + entry: "/shared/mf-manifest.json", shareScope: "default", } diff --git a/urbanLifelineWeb/packages/workcase/src/views/admin/overview/OverviewView.vue b/urbanLifelineWeb/packages/workcase/src/views/admin/overview/OverviewView.vue index b2841ab3..fe4aaced 100644 --- a/urbanLifelineWeb/packages/workcase/src/views/admin/overview/OverviewView.vue +++ b/urbanLifelineWeb/packages/workcase/src/views/admin/overview/OverviewView.vue @@ -209,13 +209,13 @@ const loadDashboardData = async () => { const timeRanges = getYesterdayRange() const yesterdayResult = await workcaseChatAPI.countChatRooms({ - startTime: timeRanges.yesterday.start, - endTime: timeRanges.yesterday.end + startTime: timeRanges.yesterday.start.toISOString(), + endTime: timeRanges.yesterday.end.toISOString() } as TbChatRoomDTO) const dayBeforeResult = await workcaseChatAPI.countChatRooms({ - startTime: timeRanges.dayBeforeYesterday.start, - endTime: timeRanges.dayBeforeYesterday.end + startTime: timeRanges.dayBeforeYesterday.start.toISOString(), + endTime: timeRanges.dayBeforeYesterday.end.toISOString() } as TbChatRoomDTO) if (yesterdayResult.success && dayBeforeResult.success) { @@ -261,18 +261,18 @@ const loadQuestionStats = async () => { const { startTime, endTime } = getTimeRange(questionStatPeriod.value) const result = await workcaseAPI.countWorkcasesByType({ - startTime, - endTime + startTime: startTime.toISOString(), + endTime: endTime.toISOString() } as TbWorkcaseDTO) if (result.success && result.data) { const data = Array.isArray(result.data) ? result.data : [result.data] // 计算总数 - const total = data.reduce((sum, item) => sum + (item.count || 0), 0) + const total = data.reduce((sum: number, item: any) => sum + (item.count || 0), 0) // 转换数据格式并计算百分比 - questionCategories.value = data.map((item, index) => ({ + questionCategories.value = data.map((item: any, index: number) => ({ name: item.type || '未分类', count: Number(item.count || 0), percent: total > 0 ? Math.round((Number(item.count || 0) / total) * 100) : 0, @@ -296,10 +296,10 @@ const loadWordCloud = async () => { const data = Array.isArray(result.data) ? result.data : [result.data] // 找出最大词频用于归一化 - const maxFreq = Math.max(...data.map(item => Number(item.frequency || 0))) + const maxFreq = Math.max(...data.map((item: any) => Number(item.frequency || 0))) // 转换数据格式 - productCloudData.value = data.map((item, index) => { + productCloudData.value = data.map((item: any, index: number) => { const freq = Number(item.frequency || 0) const weight = maxFreq > 0 ? freq / maxFreq : 0 diff --git a/urbanLifelineWeb/packages/workcase/vite.config.ts b/urbanLifelineWeb/packages/workcase/vite.config.ts index d246badb..71d8cbe4 100644 --- a/urbanLifelineWeb/packages/workcase/vite.config.ts +++ b/urbanLifelineWeb/packages/workcase/vite.config.ts @@ -90,6 +90,7 @@ export default defineConfig(({ mode }) => { }, build: { + target: 'esnext', outDir: 'dist', sourcemap: true, rollupOptions: {