明树Git Lab

Commit a9deae8e authored by yangyajing's avatar yangyajing

项目管理各流程页面开发

parent d2a96b7a
Pipeline #104202 passed with stage
in 12 seconds
......@@ -47,7 +47,6 @@ export function $post ({ url, data = {}, callback }) {
}
return response;
}).catch((err) => {
console.log(err);
ElMessage.error(err.msg || "操作失败");
if (err && err.response && err.response.status === 401) {
router.replace("/login");
......
......@@ -29,6 +29,40 @@ const routes = [
meta: { menuName: '项目管理', icon: 'Management' },
redirect: "/projectAllPage",
children: [
{
path: '/projectDraft',
name: 'projectDraft',
title: '项目遴选',
component: () => import('@/views/managePage/projectDraft.vue'),
meta: { menuName: '项目遴选' }
},
{
path: '/projectSetUp',
name: 'projectSetUp',
title: '项目立项',
component: () => import('@/views/managePage/projectSetUp.vue'),
meta: {
menuName: '项目立项'
}
},
{
path: '/projectArgument',
name: 'projectArgument',
title: '项目论证',
component: () => import('@/views/managePage/projectArgument.vue'),
meta: {
menuName: '项目论证'
}
},
{
path: '/projectDecision',
name: 'projectDecision',
title: '项目决策',
component: () => import('@/views/managePage/projectDecision.vue'),
meta: {
menuName: '项目决策'
}
},
{
path: '/projectAllPage',
name: 'projectAllPage',
......@@ -37,7 +71,7 @@ const routes = [
meta: { menuName: '项目档案库' }
},
{
path: '/addProject',
path: '/addProject/:type',
name: 'addProject',
title: '新增项目',
component: () => import('@/views/managePage/addProject.vue'),
......@@ -45,15 +79,6 @@ const routes = [
menuName: '新增项目',
showInMenu: false // 不在菜单中显示
}
},
{
path: '/projectSetUp',
name: 'projectSetUp',
title: '项目立项',
component: () => import('@/views/managePage/projectSetUp.vue'),
meta: {
menuName: '项目立项'
}
}
]
},
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -4,14 +4,12 @@
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="showFieldsModal">表头筛选</el-button>
<el-button type="primary" @click="addProject">新增</el-button>
</div>
</div>
<div class="project-manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:rowHeight="40"
:data="tableData"
:columns="tableColumns"
:total="total"
......@@ -109,14 +107,6 @@
data.projectLzType === 5 ? "已立项" : data.projectLzType === 7 ? "决策填报中" :
data.projectLzType === 8 ? "决策审批中" : data.projectLzType === 9 ? "已决策" : "待立项"
}
},
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center"
}
]);
// 获取可显示表头项
......@@ -166,14 +156,6 @@
data.projectLzType === 5 ? "已立项" : data.projectLzType === 7 ? "决策填报中" :
data.projectLzType === 8 ? "决策审批中" : data.projectLzType === 9 ? "已决策" : "待立项"
}
},
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center",
}
]);
filedsModalShow.value = false;
......@@ -193,7 +175,7 @@
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
buttonType: "xmdak"
menuType: "xmdak"
},
callback: (data) => {
tableData.value = data.rows;
......@@ -212,44 +194,6 @@
currentPage.value = page;
getProjectData();
}
const addProject = () => {
router.push("/addProject");
};
const editProject = (item) => {
router.push({
name: "addProject",
query: {
projectId: item.id
}
});
};
const previewProject = (item) => {
router.push({
name: "addProject",
query: {
isPreview: true,
projectId: item.id
}
})
}
const deleteProject = (item) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
proxy.$post({
url: "/api/project/deleteProject",
data: {
id: item.id
},
callback: (data) => {
ElMessage.success("删除成功");
getProjectData();
}
})
}).catch(() => {})
}
onMounted(() => {
getTableFields();
getProjectData();
......@@ -265,9 +209,6 @@
box-sizing: border-box;
display: flex;
flex-direction: column;
.tab-content{
padding: 10px 15px;
}
}
&-header{
display: flex;
......@@ -278,15 +219,6 @@
height: 0;
display: flex;
flex-direction: column;
.table-wrap{
margin: 15px 0;
flex: 1;
height: 0;
}
.page-wrap{
display: flex;
justify-content: flex-end;
}
}
}
</style>
<template>
<div class="project-manage-container">
<div class="project-manage-header">
<div class="header-left"></div>
<div class="header-right"></div>
</div>
<div class="project-manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="fillProject(row)">继续填报</el-button>
<el-button link type="primary" size="small" @click="approvalProject(row)">发起审批</el-button>
</template>
</common-table>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
let tableData = ref([]);
let tableColumns = ref([
{
prop: "projectName",
label: "项目名称",
showOverflowTooltip: true
},
{
prop: "projectCode",
label: "项目编号",
showOverflowTooltip: true
},
{
prop: "projectLzType",
label: "状态",
width: 120,
align: "center",
formatter: (data) => {
return data.projectLzType === 1 ? "待立项" : data.projectLzType === 3 ? "立项审批中" :
data.projectLzType === 5 ? "已立项" : data.projectLzType === 7 ? "决策填报中" :
data.projectLzType === 8 ? "决策审批中" : data.projectLzType === 9 ? "已决策" : "待立项"
}
},
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center"
}
]);
let loading = ref(false);
let total = ref(0);
let currentPage = ref(1);
let pageSize = ref(10);
// 获取列表数据
const getProjectData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/listProject",
data: {
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
menuType: "xmlz"
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
}
})
};
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getProjectData();
}
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getProjectData();
}
const fillProject = () => {};
const approvalProject = () => {};
onMounted(() => {
getProjectData();
})
</script>
<style scoped lang="less">
.project-manage{
&-container{
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
&-header{
display: flex;
justify-content: space-between;
}
&-content{
flex: 1;
height: 0;
display: flex;
flex-direction: column;
}
}
</style>
<template>
<div class="project-manage-container">
<div class="project-manage-header">
<div class="header-left"></div>
<div class="header-right"></div>
</div>
<div class="project-manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="getResult(row)">查询决策结果</el-button>
</template>
</common-table>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
let tableData = ref([]);
let tableColumns = ref([
{
prop: "projectName",
label: "项目名称",
showOverflowTooltip: true
},
{
prop: "projectCode",
label: "项目编号",
showOverflowTooltip: true
},
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center"
}
]);
let loading = ref(false);
let total = ref(0);
let currentPage = ref(1);
let pageSize = ref(10);
// 获取列表数据
const getProjectData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/listProject",
data: {
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
menuType: "xmjc"
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
}
})
};
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getProjectData();
}
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getProjectData();
}
const getResult = () => {};
onMounted(() => {
getProjectData();
})
</script>
<style scoped lang="less">
.project-manage{
&-container{
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
&-header{
display: flex;
justify-content: space-between;
}
&-content{
flex: 1;
height: 0;
display: flex;
flex-direction: column;
}
}
</style>
<template>
<div class="project-manage-container">
<div class="project-manage-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="addProject">新增</el-button>
</div>
</div>
<div class="project-manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:data="tableData"
:columns="tableColumns"
:total="total"
:current-page="currentPage"
:page-size="pageSize"
:index="true"
:indexLabel="'序号'"
title=""
:border="true"
@size-change="handleSizeChange"
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="previewProject(row)">查看</el-button>
<el-button link type="primary" size="small" @click="editProject(row)">编辑</el-button>
<el-button link type="danger" size="small" @click="deleteProject(row)">删除</el-button>
</template>
</common-table>
</div>
</div>
</template>
<script setup>
import { reactive, ref, onMounted, computed, getCurrentInstance } from "vue";
import { useRouter } from "vue-router";
import { useProjectStore } from "@/stores/project.js";
import { ElMessage, ElMessageBox } from "element-plus";
import CommonTable from "@/components/common/commonTable.vue";
const projectStore = useProjectStore();
const router = useRouter();
const { proxy } = getCurrentInstance();
// 计算表格高度
let tableData = ref([]);
let tableColumns = ref([
{
prop: "projectName",
label: "项目名称",
showOverflowTooltip: true
},
{
prop: "projectCode",
label: "项目编号",
showOverflowTooltip: true
},
{
prop: "projectLzType",
label: "状态",
width: 120,
align: "center",
formatter: (data) => {
return data.projectLzType === 1 ? "待立项" : data.projectLzType === 3 ? "立项审批中" :
data.projectLzType === 5 ? "已立项" : data.projectLzType === 7 ? "决策填报中" :
data.projectLzType === 8 ? "决策审批中" : data.projectLzType === 9 ? "已决策" : "待立项"
}
},
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center"
}
]);
let loading = ref(false);
let total = ref(0);
let currentPage = ref(1);
let pageSize = ref(10);
// 获取列表数据
const getProjectData = () => {
loading.value = true;
proxy.$post({
url: "/api/project/listProject",
data: {
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
menuType: "xmlingxuan"
},
callback: (data) => {
tableData.value = data.rows;
total.value = data.count;
loading.value = false;
}
})
};
// 分页
const handleSizeChange = (size) => {
pageSize.value = size;
currentPage.value = 1;
getProjectData();
}
const handleCurrentPageChange = (page) => {
currentPage.value = page;
getProjectData();
}
const addProject = () => {
router.push("/addProject/xmlingxuan");
};
const editProject = (item) => {
router.push({
name: "addProject",
params: {
type: "xmlingxuan"
},
query: {
projectId: item.id
}
});
};
const previewProject = (item) => {
router.push({
name: "addProject",
query: {
isPreview: true,
projectId: item.id
}
})
}
const deleteProject = (item) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
proxy.$post({
url: "/api/project/deleteProject",
data: {
id: item.id
},
callback: (data) => {
ElMessage.success("删除成功");
getProjectData();
}
})
}).catch(() => {})
}
onMounted(() => {
getProjectData();
})
</script>
<style scoped lang="less">
.project-manage{
&-container{
width: 100%;
height: 100%;
padding: 20px;
box-sizing: border-box;
display: flex;
flex-direction: column;
}
&-header{
display: flex;
justify-content: space-between;
}
&-content{
flex: 1;
height: 0;
display: flex;
flex-direction: column;
}
}
</style>
......@@ -2,16 +2,12 @@
<div class="project-manage-container">
<div class="project-manage-header">
<div class="header-left"></div>
<div class="header-right">
<el-button type="primary" @click="showFieldsModal">表头筛选</el-button>
<el-button type="primary" @click="addProject">新增</el-button>
</div>
<div class="header-right"></div>
</div>
<div class="project-manage-content" v-loading="loading">
<common-table
:autoHeight="true"
:maxRows="10"
:rowHeight="40"
:data="tableData"
:columns="tableColumns"
:total="total"
......@@ -25,52 +21,19 @@
@current-page-change="handleCurrentPageChange"
>
<template #operations="{ row, index }">
<el-button link type="primary" size="small" @click="previewProject(row)">查看</el-button>
<el-button link type="primary" size="small" @click="editProject(row)">编辑</el-button>
<el-button link type="danger" size="small" @click="deleteProject(row)">删除</el-button>
<!-- 立项审批中 -->
<el-button link type="primary" size="small"
v-if="row.projectLzType === 3"
:loading="row.loading" @click="getResult(row)"
>查询审批结果</el-button>
<!-- 已立项 -->
<el-button link type="primary" size="small"
v-if="row.projectLzType === 5"
@click="fillDecision(row)"
>决策填报</el-button>
</template>
</common-table>
<!-- <div class="table-wrap">
<el-table :data="tableData" style="width: 100%"
empty-text="暂无数据" height="100%" border
>
<el-table-column type="index" width="50" />
<el-table-column prop="projectName" label="项目名称" />
<el-table-column prop="projectCode" label="项目编号" />
<el-table-column fixed="right" label="操作" min-width="120">
<template #default="scope">
<el-button link type="primary" size="small" @click="previewProject(scope.row)">查看</el-button>
<el-button link type="primary" size="small" @click="editProject(scope.row)">编辑</el-button>
<el-button link type="danger" size="small" @click="deleteProject(scope.row)">删除</el-button>
</template>
</el-table-column>
</el-table>
</div>
<div class="page-wrap">
<el-pagination background layout="prev, pager, next" :total="1000" />
</div> -->
</div>
<el-dialog v-model="filedsModalShow"
modal-class="fields-modal"
title="筛选查询" width="50%" top="10vh"
>
<common-table
:data="tableFields"
:columns="fieldsTableColumns"
:selection="true"
:border="true"
:pagination="false"
:autoHeight="true"
:rowHeight="40"
@selection-change="handleFieldsSelectChange"
></common-table>
<template #footer>
<div class="dialog-footer">
<el-button @click="cancelFieldsModal">取消</el-button>
<el-button type="primary" @click="confirmFieldsModal">确定</el-button>
</div>
</template>
</el-dialog>
</div>
</template>
......@@ -85,8 +48,6 @@
const router = useRouter();
const { proxy } = getCurrentInstance();
// 计算表格高度
let tableData = ref([]);
let tableColumns = ref([
{
......@@ -102,61 +63,12 @@
{
prop: "operations",
label: "操作",
width: 160,
width: 190,
slot: "operations",
fixed: "right",
align: "center"
}
]);
// 获取可显示表头项
let filedsModalShow = ref(false);
let tableFields = reactive([]);
const fieldsTableColumns = reactive([
{
prop: "comment",
label: "名称"
}
]);
const getTableFields = () => {
proxy.$post({
url: "/api/project/getProjectFields",
data: {},
callback: (data) => {
tableFields = (data[0] && data[0].attributes) || [];
}
})
};
const showFieldsModal = () => {
filedsModalShow.value = true;
}
let selectFields = ref([]);
const handleFieldsSelectChange = (datas) => {
selectFields.value = datas;
};
const cancelFieldsModal = () => {
selectFields.value = [];
filedsModalShow.value = false;
}
const confirmFieldsModal = () => {
tableColumns.value = selectFields.value.map(item => {
return {
prop: item.fieldName,
label: item.comment,
showOverflowTooltip: true
};
}).concat([
{
prop: "operations",
label: "操作",
width: 160,
slot: "operations",
fixed: "right",
align: "center",
}
]);
filedsModalShow.value = false;
};
let loading = ref(false);
let total = ref(0);
......@@ -171,7 +83,7 @@
page: currentPage.value,
pagesize: pageSize.value,
attributes: [],
buttonType: "xmlx"
menuType: "xmlx"
},
callback: (data) => {
tableData.value = data.rows;
......@@ -190,46 +102,39 @@
currentPage.value = page;
getProjectData();
}
const addProject = () => {
router.push("/addProject");
};
const editProject = (item) => {
const getResult = (item) => {
item.loading = true;
proxy.$post({
url: "/api/project/queryLixiangResult",
data: {
id: item.id
},
callback: (data) => {
item.loading = false;
router.push({
name: "addProject",
params: {
type: "xmlx"
},
query: {
projectId: item.id
}
});
}
})
};
const previewProject = (item) => {
const fillDecision = (item) => {
router.push({
name: "addProject",
params: {
type: "xmlx"
},
query: {
isPreview: true,
projectId: item.id
}
})
}
const deleteProject = (item) => {
ElMessageBox.confirm("确认删除该项?", "提示",{
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
}).then(() => {
proxy.$post({
url: "/api/project/deleteProject",
data: {
id: item.id
},
callback: (data) => {
ElMessage.success("删除成功");
getProjectData();
}
})
}).catch(() => {})
}
});
};
onMounted(() => {
getTableFields();
getProjectData();
})
</script>
......@@ -243,9 +148,6 @@
box-sizing: border-box;
display: flex;
flex-direction: column;
.tab-content{
padding: 10px 15px;
}
}
&-header{
display: flex;
......@@ -256,15 +158,6 @@
height: 0;
display: flex;
flex-direction: column;
.table-wrap{
margin: 15px 0;
flex: 1;
height: 0;
}
.page-wrap{
display: flex;
justify-content: flex-end;
}
}
}
</style>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment