From b4fa80ba8216ab7bcdd8413bfa0d41d2354474ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=AE=8F=E5=BB=BA?= <912342168@qq.com> Date: Tue, 10 Mar 2026 15:33:36 +0800 Subject: [PATCH] =?UTF-8?q?feat(home):=20=E5=AE=9E=E7=8E=B0=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E6=B6=88=E6=81=AF=E3=80=81=E6=B5=81=E7=A8=8B=E5=92=8C?= =?UTF-8?q?=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 MessageDetail 和 MessageList 组件用于消息管理 - 添加 WorkflowDetail 和 WorkflowList 组件用于流程管理 - 添加 ProjectDetail 和 ProjectList 组件用于项目管理 - 实现 FunctionNav 导航组件支持功能切换 - 创建 FeatureList 组件展示不同功能列表 - 开发 OperationSpace 组件提供操作空间详情展示 - 集成所有组件到 Home 主页面布局 - 添加 lucide 图标样式类定义 - 实现 useHome 组合式 API 提供数据管理和状态控制 --- src/assets/main.css | 6 +- src/components/common/MessageDetail.vue | 38 +++++++ src/components/common/MessageList.vue | 36 ++++++ src/components/common/ProjectDetail.vue | 58 ++++++++++ src/components/common/ProjectList.vue | 47 ++++++++ src/components/common/WorkflowDetail.vue | 54 +++++++++ src/components/common/WorkflowList.vue | 43 +++++++ src/components/home/FeatureList.vue | 49 ++++++++ src/components/home/FunctionNav.vue | 32 ++++++ src/components/home/OperationSpace.vue | 59 ++++++++++ src/components/home/index.vue | 72 ++++++++++++ src/composables/useHome.ts | 137 +++++++++++++++++++++++ src/pages/index.vue | 39 +------ 13 files changed, 632 insertions(+), 38 deletions(-) create mode 100644 src/components/common/MessageDetail.vue create mode 100644 src/components/common/MessageList.vue create mode 100644 src/components/common/ProjectDetail.vue create mode 100644 src/components/common/ProjectList.vue create mode 100644 src/components/common/WorkflowDetail.vue create mode 100644 src/components/common/WorkflowList.vue create mode 100644 src/components/home/FeatureList.vue create mode 100644 src/components/home/FunctionNav.vue create mode 100644 src/components/home/OperationSpace.vue create mode 100644 src/components/home/index.vue create mode 100644 src/composables/useHome.ts diff --git a/src/assets/main.css b/src/assets/main.css index 49544cc..9edbecf 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -4,4 +4,8 @@ @utility input { @apply w-full outline-none ; -} \ No newline at end of file +} + +.lucide { + @apply my-1.5 size-4; +} diff --git a/src/components/common/MessageDetail.vue b/src/components/common/MessageDetail.vue new file mode 100644 index 0000000..3ecbe07 --- /dev/null +++ b/src/components/common/MessageDetail.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/components/common/MessageList.vue b/src/components/common/MessageList.vue new file mode 100644 index 0000000..19d6d2e --- /dev/null +++ b/src/components/common/MessageList.vue @@ -0,0 +1,36 @@ + + + diff --git a/src/components/common/ProjectDetail.vue b/src/components/common/ProjectDetail.vue new file mode 100644 index 0000000..d2d4e7e --- /dev/null +++ b/src/components/common/ProjectDetail.vue @@ -0,0 +1,58 @@ + + + diff --git a/src/components/common/ProjectList.vue b/src/components/common/ProjectList.vue new file mode 100644 index 0000000..b645e6d --- /dev/null +++ b/src/components/common/ProjectList.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/common/WorkflowDetail.vue b/src/components/common/WorkflowDetail.vue new file mode 100644 index 0000000..ce765e3 --- /dev/null +++ b/src/components/common/WorkflowDetail.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/common/WorkflowList.vue b/src/components/common/WorkflowList.vue new file mode 100644 index 0000000..f6c4129 --- /dev/null +++ b/src/components/common/WorkflowList.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/home/FeatureList.vue b/src/components/home/FeatureList.vue new file mode 100644 index 0000000..cb262a2 --- /dev/null +++ b/src/components/home/FeatureList.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/home/FunctionNav.vue b/src/components/home/FunctionNav.vue new file mode 100644 index 0000000..e15ca8a --- /dev/null +++ b/src/components/home/FunctionNav.vue @@ -0,0 +1,32 @@ + + + diff --git a/src/components/home/OperationSpace.vue b/src/components/home/OperationSpace.vue new file mode 100644 index 0000000..e23d6de --- /dev/null +++ b/src/components/home/OperationSpace.vue @@ -0,0 +1,59 @@ + + + diff --git a/src/components/home/index.vue b/src/components/home/index.vue new file mode 100644 index 0000000..d08a699 --- /dev/null +++ b/src/components/home/index.vue @@ -0,0 +1,72 @@ + + + diff --git a/src/composables/useHome.ts b/src/composables/useHome.ts new file mode 100644 index 0000000..5bb90a0 --- /dev/null +++ b/src/composables/useHome.ts @@ -0,0 +1,137 @@ +import { ref, computed } from 'vue' + +export type FunctionType = 'message' | 'workflow' | 'project' + +export interface Message { + id: number + title: string + content: string + time: string + unread?: boolean +} + +export interface Workflow { + id: number + name: string + status: '进行中' | '已完成' | '草稿' | '已暂停' + creator: string + createTime: string +} + +export interface Project { + id: number + name: string + status: '进行中' | '规划中' | '已完成' | '已暂停' + progress: number + manager: string +} + +export function useHome() { + const currentFunction = ref('message') + const selectedMessageId = ref(null) + const selectedWorkflowId = ref(null) + const selectedProjectId = ref(null) + + // 模拟数据 + const messages= ref([ + { id: 1, title: '系统通知', content: '欢迎使用角色管理系统,祝您工作顺利!', time: '2026-03-10 10:00', unread: true }, + { id: 2, title: '任务提醒', content: '您有一个待处理的任务需要在今天完成。', time: '2026-03-10 11:30', unread: true }, + { id: 3, title: '审批请求', content: '新的流程审批等待您的处理,请及时查看。', time: '2026-03-10 14:20', unread: false }, + { id: 4, title: '会议通知', content: '明天上午 10 点召开项目进度会议,请准时参加。', time: '2026-03-10 15:00', unread: false }, + ]) + + const workflows = ref([ + { id: 1, name: '请假审批流程', status: '进行中', creator: '张三', createTime: '2026-03-09' }, + { id: 2, name: '采购申请流程', status: '已完成', creator: '李四', createTime: '2026-03-08' }, + { id: 3, name: '项目立项流程', status: '草稿', creator: '王五', createTime: '2026-03-10' }, + { id: 4, name: '费用报销流程', status: '进行中', creator: '赵六', createTime: '2026-03-07' }, + ]) + + const projects = ref([ + { id: 1, name: 'ERP 系统升级', status: '进行中', progress: 65, manager: '张三' }, + { id: 2, name: 'CRM 客户管理系统', status: '规划中', progress: 20, manager: '李四' }, + { id: 3, name: '数据分析平台', status: '已完成', progress: 100, manager: '王五' }, + { id: 4, name: '移动办公 APP', status: '进行中', progress: 45, manager: '赵六' }, + ]) + + // 计算属性:获取当前选中的项目 + const selectedMessage = computed(() => + messages.value.find(m => m.id === selectedMessageId.value) + ) + + const selectedWorkflow = computed(() => + workflows.value.find(w => w.id === selectedWorkflowId.value) + ) + + const selectedProject = computed(() => + projects.value.find(p => p.id === selectedProjectId.value) + ) + + // 切换功能 + const selectFunction = (func: FunctionType) => { + currentFunction.value = func + // 清空其他选中项 + selectedMessageId.value = null + selectedWorkflowId.value = null + selectedProjectId.value = null + } + + // 选择列表项 + const selectMessage = (id: number) => { + selectedMessageId.value = id + // 标记为已读 + const msg = messages.value.find(m => m.id === id) + if (msg) msg.unread = false + } + + const selectWorkflow = (id: number) => { + selectedWorkflowId.value = id + } + + const selectProject = (id: number) => { + selectedProjectId.value = id + } + + // 操作处理函数 + const handleMessageAction = (action: string, messageId: number) => { + console.log(`处理消息 ${messageId}: ${action}`) + // TODO: 实现具体业务逻辑 + } + + const handleWorkflowAction = (action: string, workflowId: number) => { + console.log(`处理流程 ${workflowId}: ${action}`) + // TODO: 实现具体业务逻辑 + } + + const handleProjectAction = (action: string, projectId: number) => { + console.log(`处理项目 ${projectId}: ${action}`) + // TODO: 实现具体业务逻辑 + } + + return { + // 状态 + currentFunction, + selectedMessageId, + selectedWorkflowId, + selectedProjectId, + + // 数据 + messages, + workflows, + projects, + + // 计算属性 + selectedMessage, + selectedWorkflow, + selectedProject, + + // 方法 + selectFunction, + selectMessage, + selectWorkflow, + selectProject, + handleMessageAction, + handleWorkflowAction, + handleProjectAction, + } +} diff --git a/src/pages/index.vue b/src/pages/index.vue index b8a72e0..1950f07 100644 --- a/src/pages/index.vue +++ b/src/pages/index.vue @@ -1,42 +1,7 @@ - -