diff --git a/src/router/route.ts b/src/router/route.ts index 5a06e43..c7279f4 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -125,6 +125,58 @@ export const systemRoutes: RouteRecordRaw[] = [ // }, ], }, +/* 任务管理中心路由 */ +{ + path: '/task', + name: 'TaskManagement', + component: Layout, + redirect: '/task/publish', // 默认跳转至发布任务页面 + meta: { + title: '任务管理', + icon: 'quote', // 任务相关图标 + hidden: false, + sort: 3 // 排序值,控制菜单显示顺序 + }, + children: [ + { + path: '/task/publish', + name: 'TaskPublish', + component: () => import('@/views/task/task-publish/TaskPublish.vue'), + meta: { + title: '发布任务', + icon: 'plus-circle', // 发布相关图标 + hidden: false, + sort: 3.25 + } + }, + { + path: '/task/progress', + name: 'TaskProgress', + component: () => import('@/views/task/task-progress/TaskProgress.vue'), + meta: { + title: '任务跟踪', + icon: 'redo', // 进度相关图标 + hidden: false, + sort: 3.5 + } + } + , + { + path: '/task/approval', + name: 'TaskApproval', + component: () => import('@/views/task/task-approval/TaskApproval.vue'), + meta: { + title: '任务审批', + icon: 'plus-circle', // 发布相关图标 + hidden: false, + sort: 3.75 + } + }, + ] +}, + + + // { // path: '/organization', // name: 'Organization', @@ -831,7 +883,7 @@ export const systemRoutes: RouteRecordRaw[] = [ ], }, - //项目中控台 + // 项目中控台 { path: '/project-management/projects/personnel-dispatch', name: 'PersonnelDispatch', @@ -842,7 +894,6 @@ export const systemRoutes: RouteRecordRaw[] = [ hidden: false, }, }, - { path: '/project-management/personnel-dispatch/construction-personnel', name: 'ConstructionPersonnel', @@ -855,13 +906,133 @@ export const systemRoutes: RouteRecordRaw[] = [ }, ], }, + // start + // 数据管理 + { + path: '/data-management', + name: 'DataManagement', + component: Layout, + redirect: '/data-management/project-management/project-template', + meta: { title: '数据管理', icon: 'database', hidden: false, sort: 4 }, + children: [ + { + // path: '/construction-operation-platform/implementation-workflow/data-processing', + // name: 'DataProcessing', + // component: () => import('@/components/ParentView/index.vue'), + // redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', + // meta: { title: '我的业务数据', icon: 'filter', hidden: false }, + // children: [ + // { + // path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', + // name: 'DataStorage', + // component: () => import('@/components/ParentView/index.vue'), + // redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/raw-data', + // meta: { title: '原数据管理', icon: 'database', hidden: false }, + // children: [ + // { + path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/raw-data', + name: 'RawData', + component: () => import('@/views/operation-platform/data-processing/data-storage/index.vue'), + meta: { title: '原数据管理', icon: 'file', hidden: false }, + }, + // { + // path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/attachment', + // name: 'AttachmentManagement', + // component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/data-storage/index.vue'), + // meta: { title: '附件管理', icon: 'attachment', hidden: false }, + // }, + // { + // path: '/construction-operation-platform/implementation-workflow/data-processing/model-config', + // name: 'ModelConfig', + // component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/model-config/index.vue'), + // meta: { title: '模型配置', icon: 'robot', hidden: false }, + // }, + // ], + // }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data', + name: 'PreprocessedData', + component: () => import('@/components/ParentView/index.vue'), + redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', + meta: { title: '数据预处理', icon: 'filter', hidden: false }, + children: [ + { + path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data/ImageBatchUpload', + name: 'ImageBatchUpload', + component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/data-preprocessing/index.vue'), + meta: { title: '批量上传', icon: 'file', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data/ImageSorting', + name: 'ImageSorting', + component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/image-sorting/index.vue'), + meta: { title: '图像分拣', icon: 'attachment', hidden: false }, + }, + ], + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection', + name: 'IntelligentInspection', + component: () => import('@/components/ParentView/index.vue'), + redirect: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm', + meta: { title: '数据分析与图像检测', icon: 'scan', hidden: false }, + children: [ + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm', + name: 'DefectAlgorithm', + component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm/index.vue'), + meta: { title: '缺陷检测', icon: 'code', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/report-generation', + name: 'ReportGeneration', + component: () => import('@/views/project-operation-platform/data-processing/report-generation/index.vue'), + meta: { title: '报告生成', icon: 'file-add', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/standard-info', + name: 'StandardInfo', + component: () => import('@/views/project-operation-platform/data-processing/standard-info/index.vue'), + meta: { title: '标准信息库', icon: 'book', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/report-review', + name: 'ReportReview', + component: () => import('@/views/project-operation-platform/data-processing/report-review/index.vue'), + meta: { title: '报告修改审核', icon: 'audit', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/lifecycle-management', + name: 'LifecycleManagement', + component: () => import('@/views/project-operation-platform/lifecycle-management/index.vue'), + meta: { title: '全生命周期管理', icon: 'reload', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/drone-services', + name: 'DroneServices', + component: () => import('@/views/project-operation-platform/route-planning/index.vue'), + meta: { title: '无人机云服务', icon: 'cloud-server', hidden: false }, + }, + // { + // path: '/construction-operation-platform/implementation-workflow/airport-management', + // name: 'AirportManagement', + // component: () => import('@/views/construction-operation-platform/airport-management/index.vue'), + // meta: { title: '机场管理', icon: 'rocket', hidden: false }, + // }, + ], + // }, + // ], + }, + ], + }, + // end { path: '/construction-operation-platform', name: 'ConstructionOperationPlatform', component: Layout, redirect: '/construction-operation-platform/implementation-workflow/field-construction', - meta: { title: '施工操作台', icon: 'tool', hidden: false, sort: 5 }, + meta: { title: '我的工作台', icon: 'tool', hidden: false, sort: 5 }, children: [ // { // path: '/construction-operation-platform/implementation-workflow', @@ -870,6 +1041,18 @@ export const systemRoutes: RouteRecordRaw[] = [ // redirect: '/construction-operation-platform/implementation-workflow/field-construction', // meta: { title: '项目实施工作流程', icon: 'fork', hidden: false }, // children: [ + { + path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/attachment', + name: 'AttachmentManagement', + component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/data-storage/index.vue'), + meta: { title: '附件管理', icon: 'attachment', hidden: false }, + }, + { + path: '/construction-operation-platform/implementation-workflow/data-processing/model-config', + name: 'ModelConfig', + component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/model-config/index.vue'), + meta: { title: '模型配置', icon: 'robot', hidden: false }, + }, { path: '/construction-operation-platform/implementation-workflow/field-construction', name: 'FieldConstruction', @@ -893,115 +1076,6 @@ export const systemRoutes: RouteRecordRaw[] = [ component: () => import('@/views/project-operation-platform/implementation-workflow/field-construction/project-list/index.vue'), meta: { title: '我的施工', icon: 'tool', hidden: false }, }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing', - name: 'DataProcessing', - component: () => import('@/components/ParentView/index.vue'), - redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', - meta: { title: '我的业务数据', icon: 'filter', hidden: false }, - children: [ - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', - name: 'DataStorage', - component: () => import('@/components/ParentView/index.vue'), - redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/raw-data', - meta: { title: '原数据管理', icon: 'database', hidden: false }, - children: [ - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/raw-data', - name: 'RawData', - component: () => import('@/views/operation-platform/data-processing/data-storage/index.vue'), - meta: { title: '原数据管理', icon: 'file', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/attachment', - name: 'AttachmentManagement', - component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/data-storage/index.vue'), - meta: { title: '附件管理', icon: 'attachment', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/model-config', - name: 'ModelConfig', - component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/model-config/index.vue'), - meta: { title: '模型配置', icon: 'robot', hidden: false }, - }, - - ], - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data', - name: 'PreprocessedData', - component: () => import('@/components/ParentView/index.vue'), - redirect: '/construction-operation-platform/implementation-workflow/data-processing/data-storage', - meta: { title: '数据预处理', icon: 'filter', hidden: false }, - children: [ - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data/ImageBatchUpload', - name: 'ImageBatchUpload', - component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/data-preprocessing/index.vue'), - meta: { title: '批量上传', icon: 'file', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/data-storage/preprocessed-data/ImageSorting', - name: 'ImageSorting', - component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/image-sorting/index.vue'), - meta: { title: '图像分拣', icon: 'attachment', hidden: false }, - }, - ], - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection', - name: 'IntelligentInspection', - component: () => import('@/components/ParentView/index.vue'), - redirect: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm', - meta: { title: '数据分析与图像检测', icon: 'scan', hidden: false }, - children: [ - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm', - name: 'DefectAlgorithm', - component: () => import('@/views/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/defect-algorithm/index.vue'), - meta: { title: '缺陷检测', icon: 'code', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/report-generation', - name: 'ReportGeneration', - component: () => import('@/views/project-operation-platform/data-processing/report-generation/index.vue'), - meta: { title: '报告生成', icon: 'file-add', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/standard-info', - name: 'StandardInfo', - component: () => import('@/views/project-operation-platform/data-processing/standard-info/index.vue'), - meta: { title: '标准信息库', icon: 'book', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/report-review', - name: 'ReportReview', - component: () => import('@/views/project-operation-platform/data-processing/report-review/index.vue'), - meta: { title: '报告修改审核', icon: 'audit', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/lifecycle-management', - name: 'LifecycleManagement', - component: () => import('@/views/project-operation-platform/lifecycle-management/index.vue'), - meta: { title: '全生命周期管理', icon: 'reload', hidden: false }, - }, - { - path: '/construction-operation-platform/implementation-workflow/data-processing/intelligent-inspection/drone-services', - name: 'DroneServices', - component: () => import('@/views/project-operation-platform/route-planning/index.vue'), - meta: { title: '无人机云服务', icon: 'cloud-server', hidden: false }, - }, - // { - // path: '/construction-operation-platform/implementation-workflow/airport-management', - // name: 'AirportManagement', - // component: () => import('@/views/construction-operation-platform/airport-management/index.vue'), - // meta: { title: '机场管理', icon: 'rocket', hidden: false }, - // }, - ], - }, - ], - }, { path: '/construction-operation-platform/implementation-workflow/project-delivery', name: 'ProjectDelivery', diff --git a/src/types/components.d.ts b/src/types/components.d.ts index 81c6b77..a427ece 100644 --- a/src/types/components.d.ts +++ b/src/types/components.d.ts @@ -7,8 +7,70 @@ export {} declare module 'vue' { export interface GlobalComponents { + ApprovalAssistant: typeof import('./../components/ApprovalAssistant/index.vue')['default'] + ApprovalMessageItem: typeof import('./../components/NotificationCenter/ApprovalMessageItem.vue')['default'] + Avatar: typeof import('./../components/Avatar/index.vue')['default'] + Breadcrumb: typeof import('./../components/Breadcrumb/index.vue')['default'] + CellCopy: typeof import('./../components/CellCopy/index.vue')['default'] + Chart: typeof import('./../components/Chart/index.vue')['default'] CircularProgress: typeof import('./../components/CircularProgress/index.vue')['default'] + ColumnSetting: typeof import('./../components/GiTable/src/components/ColumnSetting.vue')['default'] + CronForm: typeof import('./../components/GenCron/CronForm/index.vue')['default'] + CronModal: typeof import('./../components/GenCron/CronModal/index.vue')['default'] + DateRangePicker: typeof import('./../components/DateRangePicker/index.vue')['default'] + DayForm: typeof import('./../components/GenCron/CronForm/component/day-form.vue')['default'] + FilePreview: typeof import('./../components/FilePreview/index.vue')['default'] + GiCellAvatar: typeof import('./../components/GiCell/GiCellAvatar.vue')['default'] + GiCellGender: typeof import('./../components/GiCell/GiCellGender.vue')['default'] + GiCellStatus: typeof import('./../components/GiCell/GiCellStatus.vue')['default'] + GiCellTag: typeof import('./../components/GiCell/GiCellTag.vue')['default'] + GiCellTags: typeof import('./../components/GiCell/GiCellTags.vue')['default'] + GiCodeView: typeof import('./../components/GiCodeView/index.vue')['default'] + GiDot: typeof import('./../components/GiDot/index.tsx')['default'] + GiEditTable: typeof import('./../components/GiEditTable/GiEditTable.vue')['default'] + GiFooter: typeof import('./../components/GiFooter/index.vue')['default'] + GiForm: typeof import('./../components/GiForm/src/GiForm.vue')['default'] + GiIconBox: typeof import('./../components/GiIconBox/index.vue')['default'] + GiIconSelector: typeof import('./../components/GiIconSelector/index.vue')['default'] + GiIframe: typeof import('./../components/GiIframe/index.vue')['default'] + GiOption: typeof import('./../components/GiOption/index.vue')['default'] + GiOptionItem: typeof import('./../components/GiOptionItem/index.vue')['default'] + GiPageLayout: typeof import('./../components/GiPageLayout/index.vue')['default'] + GiSpace: typeof import('./../components/GiSpace/index.vue')['default'] + GiSplitButton: typeof import('./../components/GiSplitButton/index.vue')['default'] + GiSplitPane: typeof import('./../components/GiSplitPane/index.vue')['default'] + GiSplitPaneFlexibleBox: typeof import('./../components/GiSplitPane/components/GiSplitPaneFlexibleBox.vue')['default'] + GiSvgIcon: typeof import('./../components/GiSvgIcon/index.vue')['default'] + GiTable: typeof import('./../components/GiTable/src/GiTable.vue')['default'] + GiTag: typeof import('./../components/GiTag/index.tsx')['default'] + GiThemeBtn: typeof import('./../components/GiThemeBtn/index.vue')['default'] + HourForm: typeof import('./../components/GenCron/CronForm/component/hour-form.vue')['default'] + Icon403: typeof import('./../components/icons/Icon403.vue')['default'] + Icon404: typeof import('./../components/icons/Icon404.vue')['default'] + Icon500: typeof import('./../components/icons/Icon500.vue')['default'] + IconBorders: typeof import('./../components/icons/IconBorders.vue')['default'] + IconTableSize: typeof import('./../components/icons/IconTableSize.vue')['default'] + IconTreeAdd: typeof import('./../components/icons/IconTreeAdd.vue')['default'] + IconTreeReduce: typeof import('./../components/icons/IconTreeReduce.vue')['default'] + ImageImport: typeof import('./../components/ImageImport/index.vue')['default'] + ImageImportWizard: typeof import('./../components/ImageImportWizard/index.vue')['default'] + IndustrialImageList: typeof import('./../components/IndustrialImageList/index.vue')['default'] + JsonPretty: typeof import('./../components/JsonPretty/index.vue')['default'] + MinuteForm: typeof import('./../components/GenCron/CronForm/component/minute-form.vue')['default'] + MonthForm: typeof import('./../components/GenCron/CronForm/component/month-form.vue')['default'] + NotificationCenter: typeof import('./../components/NotificationCenter/index.vue')['default'] + ParentView: typeof import('./../components/ParentView/index.vue')['default'] RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] + SecondForm: typeof import('./../components/GenCron/CronForm/component/second-form.vue')['default'] + SplitPanel: typeof import('./../components/SplitPanel/index.vue')['default'] + TextCopy: typeof import('./../components/TextCopy/index.vue')['default'] + TurbineGrid: typeof import('./../components/TurbineGrid/index.vue')['default'] + UserSelect: typeof import('./../components/UserSelect/index.vue')['default'] + Verify: typeof import('./../components/Verify/index.vue')['default'] + VerifyPoints: typeof import('./../components/Verify/Verify/VerifyPoints.vue')['default'] + VerifySlide: typeof import('./../components/Verify/Verify/VerifySlide.vue')['default'] + WeekForm: typeof import('./../components/GenCron/CronForm/component/week-form.vue')['default'] + YearForm: typeof import('./../components/GenCron/CronForm/component/year-form.vue')['default'] } } diff --git a/src/views/project-management/personnel-dispatch/index.vue b/src/views/project-management/personnel-dispatch/index.vue index 99bb392..2451c01 100644 --- a/src/views/project-management/personnel-dispatch/index.vue +++ b/src/views/project-management/personnel-dispatch/index.vue @@ -61,10 +61,10 @@
- +

{{ project.name }}

@@ -101,68 +101,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -172,10 +197,10 @@
- +

{{ project.name }}

@@ -212,68 +237,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -283,10 +333,10 @@
- +

{{ project.name }}

@@ -323,82 +373,106 @@
- -
-
- -

质量管理

+ +
+ +
+
+ +

进度管理

+
+
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
+
-
-
- 质量等级 - A级 + + +
+
+ +

质量管理

-
- 检查次数 - 12次 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- 合格率 - 98.5% +
+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
+
+ + +
+
+ +

现场管理

+
+
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 -
-
- 培训完成 - 100% -
-
- 安全检查 - 通过 -
-
-
- - -
-
- -

现场管理

-
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 -
-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 -
-
-
-
- +

{{ project.name }}

@@ -435,68 +509,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -506,10 +605,10 @@
- +

{{ project.name }}

@@ -546,68 +645,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -617,10 +741,10 @@
- +

{{ project.name }}

@@ -657,68 +781,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -728,10 +877,10 @@
- +

{{ project.name }}

@@ -768,68 +917,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -839,10 +1013,10 @@
- +

{{ project.name }}

@@ -879,68 +1053,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + 100% +
+
+ 实际进度 + 100% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -963,10 +1162,10 @@
- +

{{ project.name }}

@@ -1003,68 +1202,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1085,10 +1309,10 @@
- +

{{ project.name }}

@@ -1125,68 +1349,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1207,10 +1456,10 @@
- +

{{ project.name }}

@@ -1247,81 +1496,94 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

-
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

安全管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
-
- -
-
- - {{ alert.message }} + + +
+
+ +

现场管理

+
+
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
+
@@ -1341,10 +1603,10 @@
- +

{{ project.name }}

@@ -1381,68 +1643,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1463,10 +1750,10 @@
- +

{{ project.name }}

@@ -1503,68 +1790,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1585,10 +1897,10 @@
- +

{{ project.name }}

@@ -1625,68 +1937,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1707,10 +2044,10 @@
- +

{{ project.name }}

@@ -1747,68 +2084,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + {{ project.progress || 0 }}% +
+
+ 实际进度 + {{ project.progress || 0 }}% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1829,10 +2191,10 @@
- +

{{ project.name }}

@@ -1869,68 +2231,93 @@
- -
-
- -

质量管理

-
-
-
- 质量等级 - A级 + +
+ +
+
+ +

进度管理

-
- 检查次数 - 12次 -
-
- 合格率 - 98.5% +
+
+ 计划进度 + 100% +
+
+ 实际进度 + 100% +
+
+ 偏差 + 0% +
-
- - -
-
- -

安全管理

-
-
-
- 安全等级 - 优秀 + + +
+
+ +

质量管理

-
- 培训完成 - 100% -
-
- 安全检查 - 通过 +
+
+ 质量等级 + A级 +
+
+ 检查次数 + 12次 +
+
+ 合格率 + 98.5% +
-
- - -
-
- -

现场管理

+ + +
+
+ +

安全管理

+
+
+
+ 安全等级 + 优秀 +
+
+ 培训完成 + 100% +
+
+ 安全检查 + 通过 +
+
-
-
- 在线人数 - {{ project.teamSize || 0 }}人 + + +
+
+ +

现场管理

-
- 设备状态 - 正常 -
-
- 现场环境 - 良好 +
+
+ 在线人数 + {{ project.teamSize || 0 }}人 +
+
+ 设备状态 + 正常 +
+
+ 现场环境 + 良好 +
@@ -1945,7 +2332,7 @@ v-model:visible="projectDetailVisible" :title="selectedProject?.name || '项目详情'" width="800px" - :footer="null" + :footer="undefined" :destroy-on-close="true" >
@@ -4182,7 +4569,99 @@ onMounted(async () => { } -// 垂直布局项目卡片样式 +// 水平布局项目卡片样式 +.project-card-horizontal { + background: white; + border-radius: 16px; + padding: 24px; + box-shadow: 0 4px 16px rgba(0, 0, 0, 0.08); + border-left: 6px solid; + transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); + cursor: pointer; + position: relative; + overflow: hidden; + border: 1px solid rgba(0, 0, 0, 0.06); + width: 100%; + display: flex; + flex-direction: row; + gap: 24px; + align-items: stretch; + + // 左侧项目信息部分 + .project-info-section { + flex: 0 0 300px; + display: flex; + flex-direction: column; + justify-content: space-between; + } + + // 右侧管理类别部分 + .management-categories { + flex: 1; + display: grid; + grid-template-columns: repeat(2, 1fr); + gap: 16px; + align-items: start; + } + + &:hover { + transform: translateY(-4px) scale(1.01); + box-shadow: 0 12px 32px rgba(0, 0, 0, 0.15); + border-color: rgba(0, 0, 0, 0.1); + + &::before { + opacity: 1; + } + + .project-header .project-status { + transform: scale(1.05); + box-shadow: 0 6px 16px rgba(0, 0, 0, 0.25); + } + } + + // 不同状态的颜色主题 + &.pending { + border-left-color: #868e96; + .project-status { background: #868e96; } + } + + &.preparing { + border-left-color: #ff6b6b; + .project-status { background: #ff6b6b; } + } + + &.inProgress { + border-left-color: #51cf66; + .project-status { background: #51cf66; } + } + + &.suspended { + border-left-color: #ffa000; + .project-status { background: #ffa000; } + } + + &.completed { + border-left-color: #52c41a; + .project-status { background: #52c41a; } + } + + &.acceptance { + border-left-color: #1890ff; + .project-status { background: #1890ff; } + } + + &.collection { + border-left-color: #722ed1; + .project-status { background: #722ed1; } + } + + &.settled { + border-left-color: #13c2c2; + .project-status { background: #13c2c2; } + } +} + +// 垂直布局项目卡片样式(保留原有样式) .project-card-vertical { background: white; border-radius: 16px; @@ -4455,6 +4934,22 @@ onMounted(async () => { } } + // 进度管理部分 + &.progress-section { + &::before { + background: linear-gradient(135deg, #1890ff, #096dd9); + } + + .section-icon { + color: #1890ff; + } + + .progress-value { + background: rgba(24, 144, 255, 0.1); + color: #1890ff; + } + } + // 质量管理部分 &.quality-section { &::before { @@ -4506,6 +5001,22 @@ onMounted(async () => { // 响应式设计调整 @media (max-width: 768px) { + .project-card-horizontal { + flex-direction: column; + padding: 16px; + gap: 16px; + + .project-info-section { + flex: none; + width: 100%; + } + + .management-categories { + grid-template-columns: 1fr; + gap: 12px; + } + } + .project-card-vertical { padding: 16px; gap: 12px; @@ -4574,6 +5085,60 @@ onMounted(async () => { } @media (max-width: 480px) { + .project-card-horizontal { + padding: 12px; + gap: 12px; + + .project-info-section { + .project-header { + .project-name { + font-size: 15px; + } + + .project-status { + font-size: 10px; + padding: 3px 10px; + } + } + + .project-details { + .detail-item { + font-size: 12px; + padding: 5px 8px; + + .detail-icon { + font-size: 14px; + } + } + } + } + + .management-categories { + gap: 8px; + } + + .management-section { + padding: 10px; + + .section-header { + .section-icon { + font-size: 14px; + } + + h4 { + font-size: 11px; + } + } + + .section-content { + .metric-item { + font-size: 9px; + margin-bottom: 4px; + } + } + } + } + .project-card-vertical { padding: 12px; gap: 8px; diff --git a/src/views/task/task-approval/TaskApproval.vue b/src/views/task/task-approval/TaskApproval.vue new file mode 100644 index 0000000..c41d446 --- /dev/null +++ b/src/views/task/task-approval/TaskApproval.vue @@ -0,0 +1,350 @@ + + + \ No newline at end of file diff --git a/src/views/task/task-progress/TaskProgress.vue b/src/views/task/task-progress/TaskProgress.vue new file mode 100644 index 0000000..3ff1392 --- /dev/null +++ b/src/views/task/task-progress/TaskProgress.vue @@ -0,0 +1,38 @@ + + + + + \ No newline at end of file diff --git a/src/views/task/task-publish/TaskPublish.vue b/src/views/task/task-publish/TaskPublish.vue new file mode 100644 index 0000000..caf5def --- /dev/null +++ b/src/views/task/task-publish/TaskPublish.vue @@ -0,0 +1,790 @@ + + + + + \ No newline at end of file diff --git a/src/views/task/task-publish/components/AssigneeSelector.vue b/src/views/task/task-publish/components/AssigneeSelector.vue new file mode 100644 index 0000000..b3dc176 --- /dev/null +++ b/src/views/task/task-publish/components/AssigneeSelector.vue @@ -0,0 +1,134 @@ + + + + + \ No newline at end of file diff --git a/src/views/task/task-publish/components/TaskForm.vue b/src/views/task/task-publish/components/TaskForm.vue new file mode 100644 index 0000000..0ede8cc --- /dev/null +++ b/src/views/task/task-publish/components/TaskForm.vue @@ -0,0 +1,175 @@ + + + + + + \ No newline at end of file