Compare commits

3 Commits
main ... dev

Author SHA1 Message Date
ca3e53cdfd 项目列表拆分 2026-02-13 09:08:48 +08:00
978e622bba merge 2026-02-12 17:33:59 +08:00
6301841be2 项目列表拆分 2026-02-12 17:32:22 +08:00
24 changed files with 136 additions and 146 deletions

View File

@@ -17,8 +17,8 @@ VITE_API_STATIC_FILE=http://192.168.65.161:3000/static
VITE_API_IMAGE_PREVIEW_URL=http://192.168.65.161:3000/imagePreview
# 文件预览地址
VITE_API_FILE_PREVIEW_URL=http://192.168.65.161:3000/preview/onlinePreview
# 文件下载地址
VITE_API_DOWNLOAD_URL=http://192.168.65.161:9000
# 文件下载地址(暂未使用)
VITE_API_FILE_URL=http://192.168.65.161:7104
# onlyOffice服务
VITE_API_ONLYOFFICE_URL=http://192.168.65.161:18888
# onlyOffice回调服务

View File

@@ -1,40 +0,0 @@
# 测试环境
NODE_ENV=test
VITE_APP_ENV=test
# 租户
VITE_API_TENANT_NAME = eontec
# http请求的baseUrl/api为代理字段
VITE_API_BASE_URL=/api/simulation
# 本地环境http地址线上通过nginx转发/api到指定服务地址
VITE_API_HTTP_URL=http://192.168.65.161:7100
# ws请求的baseUrl/wsApi为代理字段
VITE_API_WS_BASE_URL=/wsApi/simulation
# 本地环境ws地址线上通过nginx转发/wsApi到指定服务地址
VITE_API_WS_URL=ws://192.168.65.161:7100
# 静态资源/usr/local/nginx/html/static
VITE_API_STATIC_FILE=http://192.168.65.161:3000/static
# 图片预览地址
VITE_API_IMAGE_PREVIEW_URL=http://cidweb.eon.com.cn:3000/imagePreview
# 文件预览地址
VITE_API_FILE_PREVIEW_URL=http://cidweb.eon.com.cn:3000/preview/onlinePreview
# 文件下载地址
VITE_API_DOWNLOAD_URL=http://cidweb.eon.com.cn:3000
# onlyOffice服务
VITE_API_ONLYOFFICE_URL=http://192.168.65.161:18888
# onlyOffice回调服务
VITE_API_ONLYOFFICE_CALLBACK=http://192.168.65.161:3000/api/simulation/data/data/onlyOfficeCallback
# 基线地址用于onlyOffice预览
VITE_API_SPDM_URL=http://192.168.65.161:3000/spdm
# CID地址
VITE_API_CID_URL=http://192.168.65.161:3001
VITE_API_PREFIX_APPROVE=/approve/
VITE_API_PREFIX_CAPABILITY=/capability/
VITE_API_PREFIX_DATA=/data/
VITE_API_PREFIX_PBS=/pbs/
VITE_API_PREFIX_PERFORMANCE=/performance/
VITE_API_PREFIX_PROJECT=/project/
VITE_API_PREFIX_SYSTEM=/system/
VITE_API_PREFIX_TASK=/task/
VITE_API_PREFIX_APPLICATION=/application/
VITE_API_PREFIX_FLOWABLE=/flowable/

View File

@@ -17,8 +17,8 @@ VITE_API_STATIC_FILE=http://192.168.30.147:7115/static
VITE_API_IMAGE_PREVIEW_URL=http://192.168.30.147:7115/imagePreview
# 文件预览地址
VITE_API_FILE_PREVIEW_URL=http://192.168.30.147:7115/preview/onlinePreview
# 文件下载地址
VITE_API_DOWNLOAD_URL=http://192.168.30.146:9000
# 文件下载地址(暂未使用)
VITE_API_FILE_URL=http://192.168.30.148:7104
# onlyOffice服务
VITE_API_ONLYOFFICE_URL=http://192.168.30.148:18888
# onlyOffice回调服务

View File

@@ -17,8 +17,8 @@ VITE_API_STATIC_FILE=http://192.168.190.161:3000/static
VITE_API_IMAGE_PREVIEW_URL=http://192.168.190.161:3000/imagePreview
# 文件预览地址
VITE_API_FILE_PREVIEW_URL=http://192.168.190.161:3000/preview/onlinePreview
# 文件下载地址
VITE_API_DOWNLOAD_URL=http://192.168.190.161:9000
# 文件下载地址(暂未使用)
VITE_API_FILE_URL=http://192.168.190.161:7104
# onlyOffice服务
VITE_API_ONLYOFFICE_URL=http://192.168.65.161:18888
# onlyOffice回调服务

View File

@@ -17,8 +17,8 @@ VITE_API_STATIC_FILE=http://192.168.65.161:3000/static
VITE_API_IMAGE_PREVIEW_URL=http://192.168.65.161:3000/imagePreview
# 文件预览地址
VITE_API_FILE_PREVIEW_URL=http://192.168.65.161:3000/preview/onlinePreview
# 文件下载地址
VITE_API_DOWNLOAD_URL=http://192.168.65.161:9000
# 文件下载地址(暂未使用)
VITE_API_FILE_URL=http://192.168.65.161:7104
# onlyOffice服务
VITE_API_ONLYOFFICE_URL=http://192.168.65.161:18888
# onlyOffice回调服务

View File

@@ -10,7 +10,6 @@
"dev": "vite --mode development",
"build:dev": "vite build --mode development",
"build:lyric": "vite build --mode lyric",
"build:eontec": "vite build --mode eontec",
"build:test": "vite build --mode test",
"build:prod": "vite build --mode production",
"build": "run-p type-check \"build-only {@}\" --",

View File

@@ -105,7 +105,7 @@ const initFun = () => {
modeType.value = 'csv';
return;
}
if (enableConfigByTenant([TENANT_ENUM.LYRIC, TENANT_ENUM.EONTEC])) {
if (enableConfigByTenant([TENANT_ENUM.LYRIC])) {
modeType.value = 'kkFile';
diaVisible.value = true;
return;
@@ -134,31 +134,25 @@ const getCsvDataFun = () => {
current: 1,
size: 1,
};
listSimulationKeyResultApi(params)
.then((res: any) => {
if (res.code === 200) {
csvData.value = res.data?.data[0] || {};
}
})
.finally(() => {
listSimulationKeyResultApi(params).then((res: any) => {
if (res.code === 200) {
csvData.value = res.data?.data[0] || {};
diaVisible.value = true;
});
}
});
};
const getOnlyOfficeFun = () => {
const params = {
fileId: props.fileId,
};
downloadFileForEditApi(params)
.then((res: any) => {
if (res.code === 200) {
fileData.value = JSON.stringify(res.data);
fileKey.value = `${props.fileId}_${getUserId()}`;
}
})
.finally(() => {
downloadFileForEditApi(params).then((res: any) => {
if (res.code === 200) {
fileData.value = JSON.stringify(res.data);
fileKey.value = `${props.fileId}_${getUserId()}`;
diaVisible.value = true;
});
}
});
};
const closeFun = () => {

View File

@@ -606,6 +606,7 @@ defineExpose({
setSearchParamsFun,
setSearchParamByKeyFun,
setOptionsFun,
getTableDataFun,
});
</script>

View File

@@ -93,7 +93,6 @@ watch(
expStatus: localDetail.value.expStatus ? '1' : '0',
eMemberList: getMemberListIds(localDetail.value.eMemberList),
pMemberList: getMemberListIds(localDetail.value.pMemberList),
planTime: [localDetail.value.beginTime, localDetail.value.endTime],
});
standard.value = localDetail.value.standard;
if (localDetail.value.flowTemplate) {

View File

@@ -30,10 +30,22 @@ export default [
// component: () => import('@/views/task/projectOverview/index.vue'),
// },
{
title: '项目列表',
path: '/project/projectList',
name: 'ProjectList',
component: () => import('@/views/task/projectList/index.vue'),
title: '所有项目',
path: '/project/allProject',
name: 'AllProject',
component: () => import('@/views/task/projectList/allProject.vue'),
},
{
title: '负责项目',
path: '/project/chargeProject',
name: 'ChargeProject',
component: () => import('@/views/task/projectList/chargeProject.vue'),
},
{
title: '关注项目',
path: '/project/followProject',
name: 'FllowProject',
component: () => import('@/views/task/projectList/followProject.vue'),
},
// {
// title: '项目详情',

View File

@@ -37,10 +37,22 @@ export default [
// component: () => import('@/views/task/projectOverview/index.vue'),
// },
{
title: '项目列表',
path: '/project/projectList',
name: 'ProjectList',
component: () => import('@/views/task/projectList/index.vue'),
title: '所有项目',
path: '/project/allProject',
name: 'AllProject',
component: () => import('@/views/task/projectList/allProject.vue'),
},
{
title: '负责项目',
path: '/project/chargeProject',
name: 'ChargeProject',
component: () => import('@/views/task/projectList/chargeProject.vue'),
},
{
title: '关注项目',
path: '/project/followProject',
name: 'FllowProject',
component: () => import('@/views/task/projectList/followProject.vue'),
},
// {
// title: '项目详情',

View File

@@ -20,19 +20,16 @@
</span>
</div>
<el-dropdown
class="options-dropdown"
:class="{ 'is-visible': isDropdownVisible }"
@command="handleCommand"
@visible-change="handleVisibleChange"
>
<el-dropdown class="options-dropdown" :teleported="false">
<div class="options-btn" @click.stop>
<el-icon :size="18"><MoreFilled /></el-icon>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="(action, aIndex) in actionList" :key="aIndex" :command="action">
<el-link :type="action.type">{{ action.title }}</el-link>
<el-dropdown-menu @click.stop>
<el-dropdown-item v-for="(action, aIndex) in actionList" :key="aIndex">
<el-link :type="action.type" @click.stop="actionClickFun(action)">
{{ action.title }}
</el-link>
</el-dropdown-item>
</el-dropdown-menu>
</template>
@@ -41,7 +38,7 @@
</template>
<script setup lang="ts">
import { computed, ref } from 'vue';
import { computed } from 'vue';
import { MoreFilled } from '@element-plus/icons-vue';
import { useDict } from '@/utils/useDict';
import { PROJECT_EXE_STATUS_CODE } from '@/utils/enum/project';
@@ -82,15 +79,8 @@ const cardClickFun = () => {
emit('cardClick', props.project);
};
// const actionClickFun = (action: any) => {
// emit('actionClick', props.project, action);
// };
const handleCommand = (command: any) => {
emit('actionClick', props.project, command);
};
const isDropdownVisible = ref(false);
const handleVisibleChange = (visible: boolean) => {
isDropdownVisible.value = visible;
const actionClickFun = (action: any) => {
emit('actionClick', props.project, action);
};
</script>
@@ -111,10 +101,6 @@ const handleVisibleChange = (visible: boolean) => {
transform: scale(1.1);
}
}
&:hover .options-dropdown,
.options-dropdown.is-visible {
opacity: 1;
}
.cover-img {
transition: transform 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);

View File

@@ -223,7 +223,7 @@ export const exportFile = (api: any, tableName: string, fileName: string, params
export const downloadFileById = async (fileId: number) => {
// 1.点击事件下载
// const link = document.createElement('a');
// link.href = `${env.VITE_API_DOWNLOAD_URL}/data/downloadFile?fileId=${fileId}`;
// link.href = `${env.VITE_API_FILE_URL}/data/downloadFile?fileId=${fileId}`;
// document.body.appendChild(link);
// link.click();
// document.body.removeChild(link);
@@ -232,8 +232,7 @@ export const downloadFileById = async (fileId: number) => {
// 3.浏览器下载
getMinioPresignedUrlApi({ fileId }).then((res: any) => {
if (res.code === 200) {
const { minioDownloadUrl } = res.data;
const downloadUrl = env.VITE_API_DOWNLOAD_URL + minioDownloadUrl.split(':9000')[1];
const downloadUrl = res.data.minioDownloadUrl;
window.open(downloadUrl, '_blank');
}
});

View File

@@ -74,7 +74,9 @@ const lang = {
: 'All Tasks',
: 'Project Management',
: 'Poject Overview',
: 'Project List',
: 'All Project',
: 'Charge Project',
: 'Follow Project',
仿: 'Simulation Dashboard',
仿: 'Simulation Loop Dashboard',
: 'Accuracy Dashboard',

View File

@@ -74,7 +74,9 @@ const lang = {
: '所有任务',
: '项目管理',
: '项目总览',
: '项目列表',
: '所有项目',
: '负责项目',
: '关注项目',
仿: '仿真看板',
仿: '仿真闭环看板',
仿: '仿真汇总看板',

View File

@@ -979,7 +979,7 @@ const updatePerformanceFun = async (data: any) => {
const res: any = await editPerformanceApi(data);
if (res && res.code === 200) {
ElMessage.success('操作成功');
tableRef.value.resetFun();
tableRef.value.getTableDataFun();
}
};

View File

@@ -22,13 +22,7 @@
<div class="select-content">
<div class="select-content-head">
<el-space>
<el-button
type="primary"
@click="addSelectLevelFun"
:disabled="selectLevelFormData.selectLevelList.length >= 10"
>
添加层级
</el-button>
<el-button type="primary" @click="addSelectLevelFun">添加层级</el-button>
<el-button type="primary" @click="saveSelectLevelFun">保存</el-button>
<el-button type="primary" @click="editFun">编辑</el-button>
</el-space>
@@ -390,7 +384,6 @@ watch(
width: 100%;
flex: 1;
padding: var(--padding-normal) 0;
overflow-y: auto;
.select-level-box {
width: 100%;
display: flex;

View File

@@ -755,9 +755,6 @@ const goDetailFun = (data: any) => {
const mergeCurrentData = ref<any>({});
const choseNodeFun = (mergeData: any) => {
if (isSearching.value) {
isSearching.value = false;
}
mergeCurrentData.value = mergeData;
chosenData.value = [];
let data: any = {};

View File

@@ -44,7 +44,7 @@
<script setup lang="ts">
import { ref } from 'vue';
// import BaseTable from '@/components/common/table/baseTable.vue';
import BaseTable from '@/components/common/table/baseTable.vue';
import FileTable from '@/components/common/fileTable/index.vue';
import { formatFileSize } from '@/utils/file';
import {
@@ -108,7 +108,7 @@ const clickDeleteFun = () => {
// 清空回收站
const deleteAllLoading = ref(false);
const clearAll = () => {
ElMessageBox.confirm('该操作会删除回收站中所有文件,是否继续', '提示', {
ElMessageBox.confirm('是否确认清空回收站', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',

View File

@@ -0,0 +1,18 @@
<template>
<ProjectList :expandAction="actionList" />
</template>
<script setup lang="ts">
import { ref } from 'vue';
import ProjectList from './components/projectList.vue';
const actionList = ref<any>([
{
title: '关注',
type: 'primary',
click: (row: any) => {
console.log('关注', row);
},
},
]);
</script>

View File

@@ -0,0 +1,7 @@
<template>
<ProjectList />
</template>
<script setup lang="ts">
import ProjectList from './components/projectList.vue';
</script>

View File

@@ -1,18 +1,13 @@
<template>
<div class="project-card" @click="cardClickFun">
<el-dropdown
class="options-dropdown"
:class="{ 'is-visible': isDropdownVisible }"
@command="handleCommand"
@visible-change="handleVisibleChange"
>
<el-dropdown class="options-dropdown" :teleported="false">
<div class="options-btn" @click.stop>
<el-icon :size="18"><MoreFilled /></el-icon>
</div>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item v-for="(action, aIndex) in actionList" :key="aIndex" :command="action">
<el-link :type="action.type">
<el-dropdown-item v-for="(action, aIndex) in actionList" :key="aIndex">
<el-link :type="action.type" @click.stop="actionClickFun(action)">
{{ action.title }}
</el-link>
</el-dropdown-item>
@@ -20,11 +15,7 @@
</template>
</el-dropdown>
<img
class="gl-pointer-class cover-img"
:src="coverImgMap[project.detailImgUrl ? 'custom' : index % 2 !== 0 ? 'blue' : 'green']"
alt=""
/>
<img class="gl-pointer-class cover-img" :src="coverImgMap[project.detailImgUrl ? 'custom' : (index % 2 !== 0 ? 'blue' : 'green')]" alt="" />
<div class="bottom-box">
<span class="gl-text-ellipsis gl-pointer-class" :title="project.nodeName">
@@ -38,7 +29,7 @@
</template>
<script setup lang="ts">
import { computed, ref } from 'vue';
import { computed } from 'vue';
import { MoreFilled } from '@element-plus/icons-vue';
import { useDict } from '@/utils/useDict';
import { PROJECT_EXE_STATUS_CODE } from '@/utils/enum/project';
@@ -79,15 +70,8 @@ const cardClickFun = () => {
emit('cardClick', props.project);
};
// const actionClickFun = (action: any) => {
// emit('actionClick', props.project, action);
// };
const handleCommand = (command: any) => {
emit('actionClick', props.project, command);
};
const isDropdownVisible = ref(false);
const handleVisibleChange = (visible: boolean) => {
isDropdownVisible.value = visible;
const actionClickFun = (action: any) => {
emit('actionClick', props.project, action);
};
</script>
@@ -96,9 +80,5 @@ const handleVisibleChange = (visible: boolean) => {
.project-card {
@extend .project-card-base;
&:hover .options-dropdown,
.options-dropdown.is-visible {
opacity: 1;
}
}
</style>

View File

@@ -136,6 +136,14 @@ import { hasPermission } from '@/utils/permission';
import DefaultProjectCard from '@/views/task/projectList/components/projectCard.vue';
import LyricProjectCard from '@/tenants/lyric/views/project/projectCard.vue';
interface Props {
expandAction?: any;
}
const props = withDefaults(defineProps<Props>(), {
expandAction: [],
});
export interface IUserInfo {
id: number;
company: string | null;
@@ -199,6 +207,7 @@ const actionList = ref<any>([
return !hasPermission('project_list_delete_project');
},
},
...props.expandAction,
]);
//
const cardActionList = computed(() => {
@@ -239,7 +248,7 @@ const currentProjectBaseInfo = reactive<any>({
memberList: [],
});
const viewType = ref('car');
const viewType = ref('card');
const currentRow = ref();

View File

@@ -0,0 +1,20 @@
<template>
<ProjectList :expandAction="actionList" />
</template>
<script setup lang="ts">
import { ref } from 'vue';
import ProjectList from './components/projectList.vue';
const actionList = ref<any>([
{
title: '取消关注',
type: 'danger',
needConfirm: true,
confirmTip: '确定取消关注吗?',
click: (row: any) => {
console.log('取消关注', row);
},
},
]);
</script>