Merge branch 'devlopment' of http://pms.dtyx.net:3000/wuxueyu/Industrial-image-management-system---web into devlopment
This commit is contained in:
commit
08ce05d9f4
|
@ -906,12 +906,61 @@ export const systemRoutes: RouteRecordRaw[] = [
|
|||
},
|
||||
],
|
||||
},
|
||||
|
||||
{
|
||||
path: '/construction-operation-platform',
|
||||
name: 'ConstructionOperationPlatform',
|
||||
component: Layout,
|
||||
redirect: '/construction-operation-platform/implementation-workflow/field-construction',
|
||||
meta: { title: '我的工作台', icon: 'tool', hidden: false, sort: 5 },
|
||||
children: [
|
||||
// {
|
||||
// path: '/construction-operation-platform/implementation-workflow',
|
||||
// name: 'ImplementationWorkflow',
|
||||
// component: () => import('@/components/ParentView/index.vue'),
|
||||
// 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',
|
||||
component: () => import('@/components/ParentView/index.vue'),
|
||||
redirect: '/construction-operation-platform/implementation-workflow/field-construction/project-list',
|
||||
meta: { title: '我的项目', icon: 'construction', hidden: false },
|
||||
children: [
|
||||
{
|
||||
path: '/project-management/projects/list',
|
||||
name: 'ProjectList',
|
||||
component: () => import('@/views/project-management/projects/list/index.vue'),
|
||||
meta: {
|
||||
title: '项目列表',
|
||||
icon: 'unordered-list',
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/construction-operation-platform/implementation-workflow/field-construction/technology',
|
||||
name: 'FieldConstructionTechnology',
|
||||
component: () => import('@/views/project-operation-platform/implementation-workflow/field-construction/project-list/index.vue'),
|
||||
meta: { title: '我的施工', icon: 'tool', hidden: false },
|
||||
},
|
||||
// start
|
||||
// 数据管理
|
||||
{
|
||||
path: '/data-management',
|
||||
name: 'DataManagement',
|
||||
component: Layout,
|
||||
redirect: '/data-management/project-management/project-template',
|
||||
meta: { title: '数据管理', icon: 'database', hidden: false, sort: 4 },
|
||||
children: [
|
||||
|
@ -1027,55 +1076,6 @@ export const systemRoutes: RouteRecordRaw[] = [
|
|||
],
|
||||
},
|
||||
// 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 },
|
||||
children: [
|
||||
// {
|
||||
// path: '/construction-operation-platform/implementation-workflow',
|
||||
// name: 'ImplementationWorkflow',
|
||||
// component: () => import('@/components/ParentView/index.vue'),
|
||||
// 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',
|
||||
component: () => import('@/components/ParentView/index.vue'),
|
||||
redirect: '/construction-operation-platform/implementation-workflow/field-construction/project-list',
|
||||
meta: { title: '我的项目', icon: 'construction', hidden: false },
|
||||
children: [
|
||||
{
|
||||
path: '/project-management/projects/list',
|
||||
name: 'ProjectList',
|
||||
component: () => import('@/views/project-management/projects/list/index.vue'),
|
||||
meta: {
|
||||
title: '项目列表',
|
||||
icon: 'unordered-list',
|
||||
hidden: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/construction-operation-platform/implementation-workflow/field-construction/technology',
|
||||
name: 'FieldConstructionTechnology',
|
||||
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/project-delivery',
|
||||
name: 'ProjectDelivery',
|
||||
|
|
|
@ -70,6 +70,6 @@ declare global {
|
|||
// for type re-export
|
||||
declare global {
|
||||
// @ts-ignore
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue'
|
||||
export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue'
|
||||
import('vue')
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ const emit = defineEmits<{
|
|||
|
||||
const turbine = computed({
|
||||
get: () => props.modelValue,
|
||||
set: v => emit('update:modelValue', v)
|
||||
set: (v) => emit('update:modelValue', v),
|
||||
})
|
||||
|
||||
/* 状态文字 & 颜色 */
|
||||
|
@ -47,8 +47,10 @@ function updateNo(val: string) {
|
|||
<WindTurbine />
|
||||
|
||||
<!-- 机组编号输入框 -->
|
||||
<a-input :model-value="turbine.turbineNo" @update:model-value="updateNo" size="small" class="turbine-input"
|
||||
placeholder="编号" />
|
||||
<a-input
|
||||
:model-value="turbine.turbineNo" size="small" class="turbine-input" placeholder="编号"
|
||||
@update:model-value="updateNo"
|
||||
/>
|
||||
|
||||
<!-- 地图选点按钮 -->
|
||||
<a-button size="mini" @click="$emit('map')">
|
||||
|
|
|
@ -347,6 +347,53 @@
|
|||
</a-upload>
|
||||
</div>
|
||||
</a-modal>
|
||||
|
||||
<!-- 详情弹窗 -->
|
||||
<a-modal
|
||||
v-model:visible="detailVisible"
|
||||
title="项目详情"
|
||||
width="900px"
|
||||
:footer="false"
|
||||
:mask-closable="false"
|
||||
>
|
||||
<a-spin :loading="detailLoading">
|
||||
<a-descriptions :column="2" bordered :label-style="{ width: '140px', fontWeight: 'bold' }">
|
||||
<a-descriptions-item label="项目名称" :span="2">{{ detailData.projectName || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="项目编号">{{ detailData.projectCode || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="状态">
|
||||
<a-tag v-if="detailData.status !== undefined" :color="getStatusColor(detailData.status)">
|
||||
{{ PROJECT_STATUS_MAP[detailData.status] || detailData.statusLabel || '-' }}
|
||||
</a-tag>
|
||||
</a-descriptions-item>
|
||||
<a-descriptions-item label="项目类型">{{ detailData.projectCategory || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="业主">{{ detailData.inspectionUnit || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="业主联系人">{{ detailData.inspectionContact || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="业主电话">{{ detailData.inspectionPhone || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="委托单位">{{ detailData.client || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="委托联系人">{{ detailData.clientContact || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="委托电话">{{ detailData.clientPhone || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="风场名称">{{ detailData.farmName || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="风场地址">{{ detailData.farmAddress || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="项目经理">{{ detailData.projectManagerName || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="项目规模">{{ detailData.scale || detailData.projectScale || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="风机型号">{{ detailData.turbineModel || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="开始时间">{{ detailData.startDate || '-' }}</a-descriptions-item>
|
||||
<a-descriptions-item label="结束时间">{{ detailData.endDate || '-' }}</a-descriptions-item>
|
||||
|
||||
<a-descriptions-item label="项目简介" :span="2">
|
||||
<a-typography-paragraph :ellipsis="{ rows: 3, expandable: true, collapseText: '收起', expandText: '展开' }">
|
||||
{{ detailData.projectIntro || '-' }}
|
||||
</a-typography-paragraph>
|
||||
</a-descriptions-item>
|
||||
</a-descriptions>
|
||||
</a-spin>
|
||||
</a-modal>
|
||||
|
||||
</GiPageLayout>
|
||||
</template>
|
||||
|
||||
|
@ -412,6 +459,12 @@ const dataList = ref<T.ProjectResp[]>([])
|
|||
const userLoading = ref(false)
|
||||
const userOptions = ref<{ label: string, value: string }[]>([])
|
||||
|
||||
|
||||
// 详情弹窗状态
|
||||
const detailVisible = ref(false)
|
||||
const detailLoading = ref(false)
|
||||
const detailData = ref<any>({})
|
||||
|
||||
const searchForm = reactive<Partial<ProjectPageQuery>>({
|
||||
projectName: '',
|
||||
status: undefined,
|
||||
|
@ -979,19 +1032,29 @@ const deleteItem = async (record: T.ProjectResp) => {
|
|||
}
|
||||
}
|
||||
|
||||
const viewDetail = (record: T.ProjectResp) => {
|
||||
const viewDetail = async (record: T.ProjectResp) => {
|
||||
const projectId = record.id || record.projectId
|
||||
if (!projectId) {
|
||||
Message.error('项目ID不存在')
|
||||
return
|
||||
}
|
||||
|
||||
router.push({
|
||||
name: 'ProjectDetail',
|
||||
params: {
|
||||
id: projectId.toString(),
|
||||
},
|
||||
})
|
||||
detailVisible.value = true
|
||||
detailLoading.value = true
|
||||
try {
|
||||
// /project/detail/{projectId}
|
||||
const res = await getProjectDetail(projectId)
|
||||
const data = (res as any).data || res || {}
|
||||
// 若后端返回status为数字,补充状态文案
|
||||
if (typeof data.status === 'number' && !data.statusLabel) {
|
||||
data.statusLabel = PROJECT_STATUS_MAP[data.status]
|
||||
}
|
||||
detailData.value = data
|
||||
} catch (e) {
|
||||
console.error('获取项目详情失败:', e)
|
||||
Message.error('获取项目详情失败')
|
||||
} finally {
|
||||
detailLoading.value = false
|
||||
}
|
||||
}
|
||||
|
||||
const openImportModal = () => {
|
||||
|
|
Loading…
Reference in New Issue