@@ -78,26 +78,30 @@ export default defineComponent({
\ No newline at end of file
+
diff --git a/web-vue/packages/core/layouts/views/desktop/analysis/index.vue b/web-vue/packages/core/layouts/views/desktop/analysis/index.vue
index 76e1ac37..f82e1ea3 100644
--- a/web-vue/packages/core/layouts/views/desktop/analysis/index.vue
+++ b/web-vue/packages/core/layouts/views/desktop/analysis/index.vue
@@ -4,13 +4,27 @@
-
-
@@ -20,16 +34,42 @@
import { ref, onMounted } from 'vue';
import { Card } from 'ant-design-vue';
import { PageWrapper } from '@jeesite/core/components/Page';
+import { useRouter } from 'vue-router';
import WorkbenchHeader from './components/WorkbenchHeader.vue';
import ProjectCard from './components/ProjectCard.vue';
import DynamicInfo from './components/DynamicInfo.vue';
import QuickLogin from './components/QuickLogin.vue';
import WarningAlert from './components/WarningAlert.vue';
+
+import { BizQuickLogin, bizQuickLoginListAll } from '@jeesite/biz/api/biz/quickLogin';
+
const loading = ref(true);
+const appList = ref
([]);
+
+const router = useRouter();
+
+const goToMorePage = (app : BizQuickLogin) => {
+ router.push(app.homepageUrl);
+};
+
+const fetchAppList = async () => {
+ try {
+ const params = {
+ isEnabled: '1',
+ systemType: '1'
+ };
+ const result = await bizQuickLoginListAll(params);
+ appList.value = result || [];
+ } catch (error) {
+ console.error('获取应用列表失败:', error);
+ appList.value = [];
+ }
+};
// 优化 loading 逻辑,避免闪屏
onMounted(() => {
const timer = setTimeout(() => {
+ fetchAppList();
loading.value = false;
clearTimeout(timer);
}, 800);
@@ -42,41 +82,50 @@ onMounted(() => {
}
.workbench-page {
- // 替代固定 100vh,兼容移动端动态视口
min-height: var(--vh);
- // 确保页面占满视口,同时支持内容溢出滚动
height: 100%;
box-sizing: border-box;
padding: 0;
margin: 0;
- // 初始化视口高度(解决移动端地址栏导致的 100vh 不准确)
&::before {
content: '';
display: block;
height: 0;
overflow: hidden;
- // 动态计算视口高度
@media (max-width: 768px) {
--vh: calc(100vh - env(safe-area-inset-top) - env(safe-area-inset-bottom));
}
}
}
+// 核心修改:大幅减小左右内边距
.workbench-container {
display: flex;
flex-direction: column;
- gap: 16px; // 替代 margin,更易维护
- height: calc(100% - 48px); // 预留头部空间
- padding: 0 16px;
- overflow: auto; // 内容溢出时滚动
+ gap: 8px;
+ height: calc(100% - 48px);
+ padding: 0 4px; // 从8px改为4px,减小左右边距
+ overflow: auto;
+
+ // 大屏适配 - 同步减小大屏边距
+ @media (min-width: 1024px) {
+ height: calc(100% - 64px);
+ gap: 16px; // 同步减小间距
+ padding: 0 8px; // 从24px改为8px,大幅减小大屏边距
+ }
+}
+
+// 新增内容包装器 - 保持原有4个组件布局
+.content-wrapper {
+ display: flex;
+ flex-direction: column;
+ gap: 8px; // 从16px改为8px,减小间距
+ flex: 1;
- // 大屏适配
@media (min-width: 1024px) {
flex-direction: row;
- height: calc(100% - 64px);
- gap: 24px;
- padding: 0 24px;
+ gap: 16px; // 从24px改为16px
}
}
@@ -84,27 +133,25 @@ onMounted(() => {
flex: 7;
display: flex;
flex-direction: column;
- gap: 16px; // 替代 !my-4
+ gap: 8px; // 从16px改为8px
}
.workbench-sidebar {
flex: 3;
display: flex;
- gap: 8px; /* 核心:设置两个组件间距为4px */
- width: 100%; /* 确保宽度自适应 */
+ gap: 8px;
+ width: 100%;
flex-direction: column;
}
.workbench-card {
width: 100%;
- flex-shrink: 0; // 防止卡片被压缩
+ flex-shrink: 0;
- // 中间卡片的间距(替代 !my-4)
&.workbench-card--middle {
- margin: 16px 0 !important;
+ margin: 8px 0 !important; // 从16px改为8px
}
- // loading 状态下保持布局稳定
&:has(.ant-skeleton) {
min-height: 200px;
}
@@ -115,10 +162,96 @@ onMounted(() => {
flex-shrink: 0;
}
-// 修复 enter-y 可能的布局问题(如果是自定义类)
.enter-y {
display: flex;
flex-direction: column;
height: 100%;
}
+
+// 常用应用Card样式 - 重点优化
+.common-app-card {
+ width: 100%;
+ margin: 4px 0;
+ border-radius: 8px;
+ flex-shrink: 0; // 确保不被压缩
+
+ // 移除Card默认的内边距,让内容更紧凑
+ :deep(.ant-card-body) {
+ padding: 8px 12px !important; // 减小卡片内部边距
+ }
+
+ // 应用列表容器 - 占满整行
+ .app-list {
+ display: flex;
+ flex-wrap: wrap; // 超出自动换行
+ gap: 8px; // 从12px改为8px
+ width: 100%;
+ padding: 4px 0; // 从8px改为4px
+
+ // 移除inline-flex,改用flex确保布局稳定
+ .app-item {
+ display: flex;
+ flex-direction: column;
+ align-items: center;
+ gap: 4px;
+ padding: 6px 10px; // 从8px 16px改为6px 10px
+ flex: 0 0 auto; // 固定宽度,不拉伸
+
+ // 按钮重置
+ .app-btn {
+ padding: 0;
+ height: auto;
+
+ &:hover,
+ &:focus {
+ background: transparent;
+ }
+ }
+
+ // 应用图标样式
+ .app-icon {
+ width: 40px;
+ height: 28px;
+ object-fit: contain;
+ border-radius: 8px;
+ border: 1px solid #b3d9f2;
+ padding: 2px;
+ transition: border-color 0.2s ease;
+ }
+
+ &:hover .app-icon {
+ border-color: #7cb9e8;
+ }
+
+ // 应用文字样式
+ .app-text {
+ font-size: 12px;
+ color: #333;
+ white-space: nowrap;
+ font-weight: 500;
+ text-align: center;
+ }
+ }
+ }
+}
+
+// 响应式适配
+@media (max-width: 768px) {
+ .common-app-card .app-list {
+ gap: 6px;
+
+ .app-item {
+ padding: 4px 8px;
+
+ .app-icon {
+ width: 36px;
+ height: 24px;
+ }
+
+ .app-text {
+ font-size: 11px;
+ }
+ }
+ }
+}
diff --git a/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue b/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue
index 77c48343..6634df69 100644
--- a/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue
+++ b/web-vue/packages/core/layouts/views/desktop/workbench/components/MySchedule.vue
@@ -1,38 +1,40 @@
-