Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| ca3e53cdfd | |||
| 978e622bba | |||
| 6301841be2 |
@@ -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回调服务
|
||||
|
||||
40
.env.eontec
40
.env.eontec
@@ -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/
|
||||
@@ -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回调服务
|
||||
|
||||
@@ -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回调服务
|
||||
|
||||
@@ -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回调服务
|
||||
|
||||
@@ -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 {@}\" --",
|
||||
|
||||
@@ -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 = () => {
|
||||
|
||||
@@ -606,6 +606,7 @@ defineExpose({
|
||||
setSearchParamsFun,
|
||||
setSearchParamByKeyFun,
|
||||
setOptionsFun,
|
||||
getTableDataFun,
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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: '项目详情',
|
||||
|
||||
@@ -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: '项目详情',
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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');
|
||||
}
|
||||
});
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -74,7 +74,9 @@ const lang = {
|
||||
所有任务: '所有任务',
|
||||
项目管理: '项目管理',
|
||||
项目总览: '项目总览',
|
||||
项目列表: '项目列表',
|
||||
所有项目: '所有项目',
|
||||
负责项目: '负责项目',
|
||||
关注项目: '关注项目',
|
||||
仿真看板: '仿真看板',
|
||||
仿真闭环看板: '仿真闭环看板',
|
||||
仿真汇总看板: '仿真汇总看板',
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 = {};
|
||||
|
||||
@@ -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',
|
||||
|
||||
18
src/views/task/projectList/allProject.vue
Normal file
18
src/views/task/projectList/allProject.vue
Normal 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>
|
||||
7
src/views/task/projectList/chargeProject.vue
Normal file
7
src/views/task/projectList/chargeProject.vue
Normal file
@@ -0,0 +1,7 @@
|
||||
<template>
|
||||
<ProjectList />
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import ProjectList from './components/projectList.vue';
|
||||
</script>
|
||||
@@ -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>
|
||||
|
||||
@@ -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();
|
||||
|
||||
20
src/views/task/projectList/followProject.vue
Normal file
20
src/views/task/projectList/followProject.vue
Normal 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>
|
||||
Reference in New Issue
Block a user