This commit is contained in:
2026-04-17 14:45:33 +08:00
14 changed files with 186 additions and 14 deletions

View File

@@ -74,6 +74,14 @@ export const dataUpdateFileApi = (params: any, onProgress?: any, options?: any)
return upload(`${PREFIX}data/updateFile`, params, onProgress, options);
};
export const prepareUpdateFileInfoApi = (params: any) => {
return post(`${PREFIX}data/prepareUpdateFileInfo`, params);
};
export const updateFileCallbackApi = (params: any) => {
return post(`${PREFIX}data/updateFileCallback`, params);
};
export const fileSearchApi = (params: any) => {
return post(`${PREFIX}data/fileSearch`, params);
};

View File

@@ -89,3 +89,12 @@ export const stopHpcJobAdapterApi = (params: any) => {
export const delHpcJobsAdapterApi = (params: any) => {
return post(`${PREFIX}pbs/delHpcJobsAdapter`, params);
};
/**
* mockSubmit-中车hpc提交
* @param params
* @returns
*/
export const mockSubmitApi = (params: any) => {
return post(`${PREFIX}pbs/mockSubmit`, params);
};

View File

@@ -238,3 +238,12 @@ export const togglePinProjectApi = (params: any) => {
export const getTaskAchieveStatisticsByDisciplineApi = (params: any) => {
return post(`${PREFIX}node/getTaskAchieveStatisticsByDiscipline`, params);
};
// 删除团队成员
export const deleteNodeMemberApi = (params: any) => {
return post(`${PREFIX}node/deleteNodeMember`, params);
};
// 新增团队成员
export const addNodeMemberApi = (params: any) => {
return post(`${PREFIX}node/addNodeMember`, params);
};

View File

@@ -62,7 +62,11 @@ import { ref, onMounted, watch } from 'vue';
import { Upload, Delete } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus';
import { formatFileSize } from '@/utils/file';
import { chunkUploadToMinioApi, chunkUploadCallbackApi } from '@/api/data/data';
import {
chunkUploadToMinioApi,
chunkUploadCallbackApi,
updateFileCallbackApi,
} from '@/api/data/data';
import emitter from '@/utils/eventBus';
import { chunkUploadToLocalApi } from '@/api/pbs/pbs';
@@ -278,7 +282,7 @@ const callBackFun = (data: any) => {
2: chunkUploadCallbackApi, // 知识库后处理
4: chunkUploadCallbackApi, // 交付物后处理
5: chunkUploadCallbackApi, // 项目文件接口后处理
6: chunkUploadCallbackApi, // 知识库编辑接口后处理
6: updateFileCallbackApi, // 知识库编辑接口后处理
};
if (taskType) {

View File

@@ -28,7 +28,9 @@
>
<el-button
type="primary"
v-else-if="flowNodeParamData.nodeTypeValue === '3'"
v-else-if="
flowNodeParamData.nodeTypeValue === '3' || flowNodeParamData.label === '动力学计算'
"
@click="flowClickFun('startOtherNodeFun')"
>计算</el-button
>

View File

@@ -7,7 +7,12 @@
<el-button type="primary" icon="finished" @click="openAddApproveUserFun">
{{ $t('工况库.提交评审') }}
</el-button>
<el-button type="danger" icon="delete" @click="openDelPoolFun">
<el-button
v-if="!enableConfigByTenant([TENANT_ENUM.LYRIC])"
type="danger"
icon="delete"
@click="openDelPoolFun"
>
{{ $t('工况库.删除库') }}
</el-button>
<div class="pool-select select-form">
@@ -68,6 +73,7 @@
</div>
</el-tooltip>
<el-tooltip
v-if="!enableConfigByTenant([TENANT_ENUM.LYRIC])"
:content="$t('工况库.切换至一维表格视图')"
placement="top"
:disabled="currentTableType !== TableViewType.CARD"
@@ -153,7 +159,10 @@
</div>
</el-tooltip>
<el-tooltip
v-if="currentTableType === TableViewType.TREE"
v-if="
currentTableType === TableViewType.TREE &&
!enableConfigByTenant([TENANT_ENUM.LYRIC])
"
:content="$t('工况库.切换至一维表格视图')"
placement="top"
ref="switchFromTreeToListTooltipRef"
@@ -330,6 +339,7 @@ import { TABLE_NAME } from '@/utils/enum/tableName';
import { CommonStore } from '@/stores/common';
import { useTaskStore } from '@/stores/taskPool';
import { jumpPage } from '@/utils/common';
import { enableConfigByTenant, TENANT_ENUM } from '@/tenants/tenant';
const commonStore = CommonStore();
const taskStore = useTaskStore();
@@ -822,6 +832,7 @@ const createTaskPoolFun = async (formData: any) => {
approvePreviewInfo: {
isCreate: true,
isUpdate: false,
currentVersion: '',
columns,
finalFullData: fullData,
originalFullData: null,
@@ -884,6 +895,7 @@ const updateTaskPoolFun = async (formData: any) => {
approvePreviewInfo: {
isCreate: false,
isUpdate: true,
currentVersion: currentPoolBriefVersion.value?.poolVersion || '',
columns,
originalFullData: cloneDeep(originalSnapshot),
finalFullData: cloneDeep(fullData),

View File

@@ -377,13 +377,14 @@ const lang = {
},
: {
: 'Project Detail',
: 'Project Team Member',
: 'Project Team Member(Project Execution Participants)',
: 'Basic Information',
: 'Scheme Maintenance',
: 'Batch Information',
线: 'Production Line Information',
: 'Project User',
: 'Project User(From EP)',
: 'Workspace Time',
: 'Participants (Temporary Project Participants)',
},
仿: {
仿: 'Simulation Plan',

View File

@@ -372,13 +372,14 @@ const lang = {
},
: {
: '项目详情',
: '团队成员',
: '团队成员(参与项目执行的人员)',
: '基本信息',
: '方案维护',
: '批次信息',
线: '产线信息',
: '项目参与人员',
: '项目参与人员从EP拉取的项目参与人员',
: '工位时间维护',
: '参与人员(临时新增的项目参与人员)',
},
仿: {
仿: '仿真策划',

View File

@@ -609,6 +609,7 @@ const createTaskPoolFun = async (formData: any) => {
approvePreviewInfo: {
isCreate: true,
isUpdate: false,
currentVersion: '',
columns,
finalFullData: fullData,
originalFullData: null,
@@ -666,6 +667,7 @@ const updateTaskPoolFun = async (formData: any) => {
approvePreviewInfo: {
isCreate: false,
isUpdate: true,
currentVersion: currentPoolBriefVersion.value?.poolVersion || '',
columns,
originalFullData: cloneDeep(originalSnapshot),
finalFullData: cloneDeep(fullData),

View File

@@ -4,7 +4,7 @@
<div class="label">
<span v-if="isCreatePool">{{ $t('工况库.新增') }}</span
><span v-else>{{ $t('工况库.编辑') }}</span
>{{ $t('工况库.仿真地图库') }}
>{{ poolName === STANDARD_SCENE_POOL_NAME ? STANDARD_SCENE_POOL_NAME : '仿真地图库' }}
</div>
<div class="content">
<span size="large" type="success" v-if="isCreatePool"> {{ poolName }}</span>
@@ -25,6 +25,10 @@
</div>
</div>
</div>
<div v-if="!isCreatePool && currentVersionText" class="preview-desc">
基于{{ poolName === STANDARD_SCENE_POOL_NAME ? STANDARD_SCENE_POOL_NAME : '仿真地图库' }}版本
{{ currentVersionText }} 修改内容如下
</div>
<div class="body">
<loadCaseTable
:editMode="false"
@@ -46,6 +50,7 @@ import { nextTick, onMounted, ref, watchEffect } from 'vue';
import loadCaseTable from '@/components/common/treeCaseTable/loadCaseTable.vue';
import type { VxeTablePropTypes } from 'vxe-table';
import { TABLE_NAME } from '@/utils/enum/tableName';
import { STANDARD_SCENE_POOL_NAME } from '@/utils/node';
interface Props {
data: any;
@@ -62,6 +67,7 @@ enum PreviewAction {
}
const poolName = ref();
const currentVersionText = ref('');
const approveContents = ref<any>(null);
const mergedPreviewTree = ref<any>([]);
@@ -228,6 +234,7 @@ const initPreviewData = () => {
mergedPreviewTree.value = previewData;
poolName.value = approveContents.value?.poolBrief?.poolName;
currentVersionText.value = approvePreviewInfo.currentVersion || '';
isCreatePool.value = Boolean(approvePreviewInfo.isCreate);
expandAllFun();
};
@@ -259,6 +266,12 @@ watchEffect(() => {
flex-direction: column;
}
.preview-desc {
padding: 12px 0;
font-size: 14px;
color: #303133;
}
.header {
height: 20px;
display: flex;

View File

@@ -435,6 +435,7 @@ import analysisResult from './runPagecomponent/analysisResult.vue';
import vehicleStabilityAnalysis_Demo from './runPagecomponent/vehicleStabilityAnalysis_Demo.vue';
import rollingWheelForceAnalysis_Demo from './runPagecomponent/rollingWheelForceAnalysis_Demo.vue';
import vibrationSignalAnalysis_Demo from './runPagecomponent/vibrationSignalAnalysis_Demo.vue';
import { mockSubmitApi } from '@/api/pbs/pbs';
const props = defineProps({
runInfo: {
@@ -838,6 +839,26 @@ const continueStartRunJobFun = async () => {
taskDefinitionKey: flowNodeData.value.nodeId,
flowelementType: flowNodeData.value.nodeDetailInfo.type,
});
if (flowNodeData.value.nodeName === '动力学计算') {
await skipCurrentNodeFlowFun();
await mockSubmitApi({
runId: props.runInfo.uuid,
uuid: 'd03cb60715b1ee61c585b3e31405e7de',
type: 'single',
softwareId: flowNodeData.value.nodeId,
software: flowNodeData.value.nodeName,
jobName: '测试单一任务0326',
coreNum: 4,
jobDesc: 'HPC任务单独提交',
hpcGroup: 'HPC_PACK',
params: {
licience: 'test',
},
});
}
if (res && res.code === 200) {
refreshFlowPage();
}
@@ -1313,6 +1334,11 @@ const getDictionaryDataFun = async () => {
};
const skipCurrentNodeFlowFun = async () => {
await updateFlowNodeDataInfoFun();
if (!flowNodeData.value?.nodeDetailInfo.asyncTaskId) {
return;
}
const params = {
asyncTaskId: flowNodeData.value?.nodeDetailInfo.asyncTaskId,
resultJson: 'success',

View File

@@ -8,7 +8,9 @@
<div class="app-icon app-text" v-else>{{ appProperty?.name.split('')[0] }}</div>
<div class="app-info">
<div class="app-name" :title="appProperty.name">{{ appProperty.name }}</div>
<div class="app-tag">{{ appProperty.type }}</div>
<div class="app-tag">
{{ appProperty.name === '动力学计算' ? '计算节点' : appProperty.type }}
</div>
</div>
<div class="app-status">
<div class="round" :style="{ background: getStyleFun(appProperty.status).color }"></div>

View File

@@ -3,9 +3,14 @@
ref="tableRef"
showIndex
table-name="NODE_TASK_TEAM"
:params="{ projectNodeId: nodeLevel1Uuid }"
:params="queryParams"
:api="getProjectMemberListApi"
:actionList="type === 'temporary-add' && isMember ? actionList : []"
:show-setting="type !== 'temporary-add'"
>
<template #leftOptions v-if="type === 'temporary-add' && isMember">
<el-button type="primary" @click="diaVisible = true">新增</el-button>
</template>
<template #nickname="{ row }">
{{ row.userInfo.nickname || '--' }}
</template>
@@ -31,6 +36,19 @@
{{ row.userInfo.sex || '--' }}
</template>
</BaseTable>
<Dialog v-model="diaVisible" diaTitle="新增人员" :width="400" @close="closeFun">
<div>
<TableForm ref="tableFormRef" tableName="ADD_USER_FORM" v-model:data="formData" />
</div>
<template #footer>
<div>
<el-button @click="closeFun">{{ $t('通用.取消') }}</el-button>
<el-button type="primary" :disabled="!formData.addNodeMemberIdList" @click="submitFun">{{
$t('通用.确定')
}}</el-button>
</div>
</template>
</Dialog>
<!-- <div class="organization">
<div class="level">
<div class="node">
@@ -77,15 +95,71 @@
</div> -->
</template>
<script lang="ts" setup>
import { getProjectMemberListApi } from '@/api/project/node';
import { getProjectMemberListApi, deleteNodeMemberApi, addNodeMemberApi } from '@/api/project/node';
import BaseTable from '@/components/common/table/baseTable.vue';
import { ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { ElMessage } from 'element-plus';
import Dialog from '@/components/common/dialog/index.vue';
import TableForm from '@/components/common/table/tableForm.vue';
defineProps<{
const { t } = useI18n();
const props = defineProps<{
nodeLevel1Uuid: string;
type?: string;
isMember?: boolean;
}>();
const queryParams = ref<any>({
projectNodeId: props.nodeLevel1Uuid,
type: props.type,
});
const actionList = ref<any>([
{
title: t('通用.删除'),
type: 'danger',
needConfirm: true,
confirmTip: t('通用.确认删除吗'),
click: (row: any) => delUserFun(row),
},
]);
const tableRef = ref();
const delUserFun = async (row: any) => {
const params = {
projectId: props.nodeLevel1Uuid,
deleteNodeMemberIdList: [row.userId],
};
deleteNodeMemberApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('删除成功');
tableRef.value.resetFun();
} else {
ElMessage.error('删除失败');
}
});
};
const formData = ref<any>({});
const diaVisible = ref(false);
const closeFun = () => {
formData.value.addNodeMemberIdList = '';
diaVisible.value = false;
};
const submitFun = () => {
const params = {
projectId: props.nodeLevel1Uuid,
addNodeMemberIdList: formData.value.addNodeMemberIdList
? formData.value.addNodeMemberIdList.split(',')
: [],
};
addNodeMemberApi(params).then((res: any) => {
if (res.code === 200) {
ElMessage.success('添加成功');
tableRef.value.resetFun();
closeFun();
}
});
};
// const getProjectMemberListFun = async () => {
// const res:any = await getProjectMemberListApi({

View File

@@ -89,6 +89,15 @@
<teamMember v-if="projectUuid" :nodeLevel1Uuid="projectUuid" />
</div>
<template v-if="enableConfigByTenant([TENANT_ENUM.LYRIC])">
<!-- <div class="section-block">
<div class="section-title">{{ $t('项目详情页.参与人员') }}</div>
<teamMember
v-if="projectUuid"
type="temporary-add"
:isMember="isMember"
:nodeLevel1Uuid="projectUuid"
/>
</div> -->
<div class="section-block">
<div class="section-title">{{ $t('项目详情页.方案维护') }}</div>
<SchemeMaintain ref="schemeMaintainRef" :nodeId="projectUuid" />