分发任务界面开发

This commit is contained in:
weibl
2025-10-30 20:07:04 +08:00
parent e45fdcd3fd
commit 741124c289
7 changed files with 229 additions and 1 deletions

View File

@@ -3,6 +3,11 @@ import { get, post } from '@/api/request';
const env = import.meta.env; const env = import.meta.env;
const PREFIX = env.VITE_API_PREFIX_PROJECT; const PREFIX = env.VITE_API_PREFIX_PROJECT;
/**
*
* @param type: 0 我执行的 1我关注的 2所有任务 3我负责的
* @returns
*/
export const queryTaskListApi = (params: any) => { export const queryTaskListApi = (params: any) => {
return post(`${PREFIX}task/list`, params); return post(`${PREFIX}task/list`, params);
}; };

View File

@@ -54,6 +54,12 @@ export default [
name: 'TaskConfirm', name: 'TaskConfirm',
component: () => import('@/views/task/simulationTask/confirmTask/index.vue'), component: () => import('@/views/task/simulationTask/confirmTask/index.vue'),
}, },
{
title: '我分发的',
path: '/task/send',
name: 'TaskSend',
component: () => import('@/views/task/simulationTask/mySend/index.vue'),
},
{ {
title: '我执行的', title: '我执行的',
path: '/task/execute', path: '/task/execute',

12
src/utils/enum/data.ts Normal file
View File

@@ -0,0 +1,12 @@
export enum DIR_TYPE {
/** 知识库文件夹 */
KNOWLEDGE = 1,
/** 项目节点文件夹 */
PROJECT_NODE = 2,
/** 头像库文件夹 */
AVATAR = 3,
/** 仿真参数库文件夹 */
SIMULATION_PARAM = 4,
/** 训练模型文件夹 */
TRAINING_MODEL = 5,
}

View File

@@ -14,6 +14,7 @@ const lang = {
'我的任务': 'My Task', '我的任务': 'My Task',
'我发起的': 'I Initiated', '我发起的': 'I Initiated',
'我确认的': 'I Confirmed', '我确认的': 'I Confirmed',
'我分发的': 'I Distributed',
'我执行的': 'I Executed', '我执行的': 'I Executed',
'我关注的': 'I Followed', '我关注的': 'I Followed',
'所有任务': 'All Tasks', '所有任务': 'All Tasks',

View File

@@ -14,6 +14,7 @@ const lang = {
'我的任务': '我的任务', '我的任务': '我的任务',
'我发起的': '我发起的', '我发起的': '我发起的',
'我确认的': '我确认的', '我确认的': '我确认的',
'我分发的': '我分发的',
'我执行的': '我执行的', '我执行的': '我执行的',
'我关注的': '我关注的', '我关注的': '我关注的',
'所有任务': '所有任务', '所有任务': '所有任务',

View File

@@ -18,7 +18,6 @@
</div> </div>
<div class="top-icons"> <div class="top-icons">
<el-button link @click="goProjectListFun">返回列表</el-button> <el-button link @click="goProjectListFun">返回列表</el-button>
{{ currentProjectInfo.exeStatus }}12
<el-button :disable="currentProjectInfo.exeStatus === PROJECT_EXE_STATUS_CODE.CLOSED" icon="setting" @click="openEditBasicDialogFun">项目设置</el-button> <el-button :disable="currentProjectInfo.exeStatus === PROJECT_EXE_STATUS_CODE.CLOSED" icon="setting" @click="openEditBasicDialogFun">项目设置</el-button>
<el-button icon="operation" @click="openEditNodeDialogFun">阶段设置</el-button> <el-button icon="operation" @click="openEditNodeDialogFun">阶段设置</el-button>
<el-button icon="calendar" @click="openAddTaskDialogFun">仿真策划</el-button> <el-button icon="calendar" @click="openAddTaskDialogFun">仿真策划</el-button>
@@ -266,6 +265,9 @@ const closeProject = async() => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.gl-page-content {
height: 0;
}
.app-container { .app-container {
padding: 16px; padding: 16px;
} }

View File

@@ -0,0 +1,201 @@
<template>
<div class="gl-page-content">
<taskTable
showIndex
ref="exeTableRef"
tableName="SIMULATION_TASK_SEND_LIST"
:params="{type:0}"
:api="queryTaskListApi"
:actionsWidth="tableActionsLength['2-2']"
>
<template #tableActions="{ row }">
<div class="gl-table-actions">
<el-link type="primary" @click="editTaskFun(row)">编辑</el-link>
<el-link type="danger" @click="deleteTaskFun(row.uuid)">删除</el-link>
</div>
</template>
</taskTable>
<!-- <BaseTable
ref="exeTableRef"
tableName="SIMULATION_TASK_EXECUTE_LIST"
:api="queryTaskListApi"
:params="{type:0}"
:searchLimitNum="3"
>
<template #tableActions="{ row }">
<div class="actions">
<el-link v-if="row.status === TASK_PROCESS_STATUS.NO_STARTED" type="danger" @click="changeTaskStatus(row, TASK_PROCESS_STATUS.REJECTED)">驳回</el-link>
<el-link v-if="row.status === TASK_PROCESS_STATUS.NO_STARTED" type="danger" @click="changeTaskStatus(row, TASK_PROCESS_STATUS.IN_PROGRESS)">启动</el-link>
<el-link v-if="row.status === TASK_PROCESS_STATUS.IN_PROGRESS" type="danger" @click="changeTaskStatus(row, TASK_PROCESS_STATUS.PAUSED)">暂停</el-link>
<el-link v-if="row.status === TASK_PROCESS_STATUS.IN_PROGRESS" type="danger" @click="changeTaskStatus(row, TASK_PROCESS_STATUS.COMPLETED)">完成</el-link>
</div>
</template>
</BaseTable> -->
<Dialog
v-model="formVisible"
:loading="loadingInterface"
diaTitle="编辑任务"
:width="500"
:height="500"
@close="closeFun"
show-footer
>
<TableForm
ref="tableFormRef"
tableName="SIMULATION_TASK_SEND_LIST"
showDisabled
@load="formLoad"
>
</TableForm>
<template #rightfoot>
<el-button @click="closeFun">取消</el-button>
<el-button type="primary" @click="confirmFun">确认</el-button>
</template>
</Dialog>
</div>
</template>
<script setup lang="ts">
import { queryTaskListApi, updateTaskStatusApi } from '@/api/project/task';
// import BaseTable from '@/components/common/table/baseTable.vue';
import { TASK_CALCULATE_STATUS, TASK_CALCULATE_STATUS_OPTIONS, TASK_PROCESS_STATUS, TASK_PROCESS_STATUS_OPTIONS } from '@/utils/enum/task';
import { ElMessage } from 'element-plus';
import taskTable from '../components/taskTable.vue';
import { nextTick, onMounted, ref } from 'vue';
import Dialog from '@/components/common/dialog/index.vue';
import TableForm from '@/components/common/table/tableForm.vue';
import { tableActionsLength } from '@/utils/common';
import dayjs from 'dayjs';
const exeTableRef = ref();
const loadingInterface = ref(false);
// SIMULATION_TASK_SEND_LIST
// const headData = ref<any[]>([
// { title: '任务名称', key: 'taskName', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '任务状态', key: 'taskStatus', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '风险状态', key: 'achievement', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '任务进度', key: 'progress', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '审批状态', key: 'approvalStatus', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '仿真负责人', key: 'simLeader', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '项目', key: 'project', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '学科', key: 'discipline', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '计划结束时间', key: 'endTime', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// { title: '实际结束时间', key: 'actualEndTime', isShow: true, inputMode: 'input', type: 1, inForm: false, required: true },
// ]);
const formVisible = ref(false);
const tableFormRef = ref();
const closeFun = () => {
formVisible.value = false;
};
const editRow = ref();
const editTaskFun = (row: any) => {
formVisible.value = true;
editRow.value = row;
nextTick(() => {
tableFormRef.value.setFormDataFun({ ...row, achieveStatus: row.achieveStatus + '', eMemberList: row.eMemberList ? row.eMemberList.map((item: any) => item.id).join(',') : '' });
});
};
const deleteTaskFun = (uuid:string) => {
console.log('uuid', uuid);
};
const formLoad = () => {
console.log('formLoad', tableFormRef.value);
// nextTick(() => {
const exeStatusList = TASK_PROCESS_STATUS_OPTIONS.map((item: any) => {
return {
label: item.label,
value: item.value,
disabled: disposeDisabledExeStatus(editRow.value.exeStatus, item),
};
});
const achieveStatusList = TASK_CALCULATE_STATUS_OPTIONS.map((item: any) => {
return {
label: item.label,
value: item.value,
disabled: disposeDisabledAchieveStatus(editRow.value.achieveStatus, item),
};
});
tableFormRef.value.setOptionsFun('exeStatus', exeStatusList);
tableFormRef.value.setOptionsFun('achieveStatus', achieveStatusList);
// });
};
const disposeDisabledExeStatus = (status: string, option: { value: TASK_PROCESS_STATUS; }) => {
if (status === TASK_PROCESS_STATUS.COMPLETED) {
return true;
}
if (status === TASK_PROCESS_STATUS.IN_PROGRESS) {
return [TASK_PROCESS_STATUS.NO_STARTED].includes(option.value);
}
if (status === TASK_PROCESS_STATUS.NO_STARTED) {
return [TASK_PROCESS_STATUS.PAUSED].includes(option.value);
}
if (status === TASK_PROCESS_STATUS.PAUSED) {
return ![TASK_PROCESS_STATUS.IN_PROGRESS].includes(option.value);
}
if (status === TASK_PROCESS_STATUS.REJECTED) {
return true;
}
};
const disposeDisabledAchieveStatus = (status: string, option: { value: TASK_CALCULATE_STATUS; }) => {
if (status === TASK_CALCULATE_STATUS.NO_CALCULATE) {
return false;
}
if (status === TASK_CALCULATE_STATUS.QUALIFIED) {
return [TASK_CALCULATE_STATUS.NO_CALCULATE].includes(option.value);
}
if (status === TASK_CALCULATE_STATUS.UNQUALIFIED) {
return [TASK_CALCULATE_STATUS.NO_CALCULATE].includes(option.value);
}
};
const confirmFun = async() => {
if (await tableFormRef.value.validateFun()) {
loadingInterface.value = true;
const fromData:any = tableFormRef.value.getFormDataFun();
// console.log('tableFormRef.value.getFormDataFun()', fromData);
const params:{
taskId: string;
exeStatus: string;
achieveStatus: string;
process: number;
finishTime?: string;
} = {
...fromData,
taskId: fromData.uuid,
exeStatus: fromData.exeStatus,
achieveStatus: fromData.achieveStatus,
process: fromData.progress,
};
if (fromData.exeStatus === TASK_PROCESS_STATUS.COMPLETED) {
params.finishTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
}
const res:any = await updateTaskStatusApi(params);
if (res.code === 200) {
// row.exeStatus = status;
ElMessage({
message: '操作成功',
type: 'success',
});
formVisible.value = false;
console.log('exeTableRef.value', exeTableRef.value);
exeTableRef.value.tableRef.resetFun();
} else {
ElMessage({
message: '任务数据更新失败!',
type: 'error',
});
}
loadingInterface.value = false;
}
};
onMounted(() => {
});
</script>