明树Git Lab

Commit 708e181d authored by yangyajing's avatar yangyajing

资源库管理、投资目标责任书

parent d57c83ce
Pipeline #105990 passed with stage
in 16 seconds
...@@ -35,37 +35,37 @@ const routes = [ ...@@ -35,37 +35,37 @@ const routes = [
path: '/projectDraft', path: '/projectDraft',
name: 'projectDraft', name: 'projectDraft',
title: '项目遴选', title: '项目遴选',
component: () => import('@/views/managePage/projectDraft.vue') component: () => import('@/views/projectManage/projectDraft.vue')
}, },
{ {
path: '/projectSetUp', path: '/projectSetUp',
name: 'projectSetUp', name: 'projectSetUp',
title: '项目立项', title: '项目立项',
component: () => import('@/views/managePage/projectSetUp.vue') component: () => import('@/views/projectManage/projectSetUp.vue')
}, },
{ {
path: '/projectArgument', path: '/projectArgument',
name: 'projectArgument', name: 'projectArgument',
title: '项目论证', title: '项目论证',
component: () => import('@/views/managePage/projectArgument.vue') component: () => import('@/views/projectManage/projectArgument.vue')
}, },
{ {
path: '/projectDecision', path: '/projectDecision',
name: 'projectDecision', name: 'projectDecision',
title: '项目决策', title: '项目决策',
component: () => import('@/views/managePage/projectDecision.vue') component: () => import('@/views/projectManage/projectDecision.vue')
}, },
{ {
path: '/projectAllPage', path: '/projectAllPage',
name: 'projectAllPage', name: 'projectAllPage',
title: '项目档案库', title: '项目档案库',
component: () => import('@/views/managePage/projectAllPage.vue') component: () => import('@/views/projectManage/projectAllPage.vue')
}, },
{ {
path: '/addProject/:type', path: '/addProject/:type',
name: 'addProject', name: 'addProject',
title: '新增项目', title: '新增项目',
component: () => import('@/views/managePage/addProject.vue') component: () => import('@/views/projectManage/addProject.vue')
} }
] ]
}, },
...@@ -93,37 +93,43 @@ const routes = [ ...@@ -93,37 +93,43 @@ const routes = [
path: '/templateManage', path: '/templateManage',
name: 'templateManage', name: 'templateManage',
title: '模板管理', title: '模板管理',
component: () => import('@/views/managePage/templateManage.vue') component: () => import('@/views/projectManage/templateManage.vue')
}, },
{ {
path: '/systemManage', path: '/systemManage',
name: '系统管理', name: 'systemManage',
title: 'systemManage', title: '系统管理',
meta: { menuName: '系统管理' }, meta: { menuName: '系统管理' },
children: [ children: [
{ {
path: 'departManage', path: 'departManage',
name: '部门管理', name: 'departManage',
title: 'departManage', title: '部门管理',
component: () => import('@/views/systemManage/departManage.vue') component: () => import('@/views/systemManage/departManage.vue')
}, },
{ {
path: 'userManage', path: 'userManage',
name: '用户管理', name: 'userManage',
title: 'userManage', title: '用户管理',
component: () => import('@/views/systemManage/userManage.vue') component: () => import('@/views/systemManage/userManage.vue')
}, },
{ {
path: 'roleManage', path: 'roleManage',
name: '角色管理', name: 'roleManage',
title: 'roleManage', title: '角色管理',
component: () => import('@/views/systemManage/roleManage.vue') component: () => import('@/views/systemManage/roleManage.vue')
}, },
{ {
path: 'menuManage', path: 'menuManage',
name: '菜单管理', name: 'menuManage',
title: 'menuManage', title: '菜单管理',
component: () => import('@/views/systemManage/menuManage.vue') component: () => import('@/views/systemManage/menuManage.vue')
},
{
path: 'resourceManage',
name: 'resourceManage',
title: '资源库管理',
component: () => import('@/views/systemManage/resourceManage.vue')
} }
] ]
}, },
......
.manage-container{ .system-manage-container{
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background: rgba(157, 188, 218, 0.1); box-sizing: border-box;
} }
.manage-header{ .system-manage-header{
background: rgba(255, 255, 255, 0.9); background: rgba(255, 255, 255, 0.9);
border-radius: 8px; border-radius: 8px;
padding: 12px 20px 0; padding: 12px 20px 0;
...@@ -20,6 +23,12 @@ ...@@ -20,6 +23,12 @@
} }
} }
} }
.system-manage-content{
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
.manage-content{ .manage-content{
flex: 1; flex: 1;
height: 0; height: 0;
...@@ -39,7 +48,7 @@ ...@@ -39,7 +48,7 @@
} }
} }
} }
.project-manage{ .manage{
&-container{ &-container{
width: 100%; width: 100%;
height: 100%; height: 100%;
...@@ -48,16 +57,16 @@ ...@@ -48,16 +57,16 @@
display: flex; display: flex;
flex-direction: column; flex-direction: column;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
.manage-container{ }
width: 100%; &-wrap{
height: 100%; width: 100%;
display: flex; height: 100%;
flex-direction: column; display: flex;
background: rgba(255, 255, 255, 0.9); flex-direction: column;
border-radius: 8px; background: rgba(255, 255, 255, 0.9);
padding: 12px; border-radius: 8px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); padding: 12px;
} box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
} }
&-header{ &-header{
...@@ -111,7 +120,7 @@ ...@@ -111,7 +120,7 @@
flex-direction: column; flex-direction: column;
.tabs-content{ .tabs-content{
flex: 1; flex: 1;
max-height: 100%; height: 0;
} }
.el-tabs{ .el-tabs{
height: 100%; height: 100%;
...@@ -121,7 +130,7 @@ ...@@ -121,7 +130,7 @@
.tab-content{ .tab-content{
height: 100%; height: 100%;
overflow: auto; overflow: auto;
padding: 0 20px; padding: 0 10px;
.col-title{ .col-title{
height: 24px; height: 24px;
line-height: 24px; line-height: 24px;
...@@ -197,4 +206,55 @@ ...@@ -197,4 +206,55 @@
height: 100%; height: 100%;
} }
} }
} }
\ No newline at end of file .add-dialog{
.el-tree{
width: 100%;
}
}
.tree-content {
overflow: auto;
position: relative;
.el-tree {
max-height: 700px;
overflow-y: auto;
// 只有当内容超过700px时才显示滚动条
&:not(:hover) {
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
display: none;
}
}
&:hover {
scrollbar-width: thin;
&::-webkit-scrollbar {
display: block;
width: 6px;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
}
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
.node-name{
flex: 1;
width: 0;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
}
\ No newline at end of file
This diff is collapsed.
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="primary" @click="addStatement">新增</el-button> <el-button type="primary" @click="addStatement">新增</el-button>
</div> </div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="primary" @click="showFieldsModal">表头筛选</el-button> <el-button type="primary" @click="showFieldsModal">表头筛选</el-button>
</div> </div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -161,6 +161,11 @@ ...@@ -161,6 +161,11 @@
} }
}) })
}; };
onMounted(() => {
getTableFields();
getProjectData();
})
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
...@@ -184,10 +189,6 @@ ...@@ -184,10 +189,6 @@
} }
}) })
} }
onMounted(() => {
getTableFields();
getProjectData();
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"></div> <div class="header-right"></div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -96,6 +96,10 @@ ...@@ -96,6 +96,10 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
...@@ -130,9 +134,6 @@ ...@@ -130,9 +134,6 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"></div> <div class="header-right"></div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -96,6 +96,9 @@ ...@@ -96,6 +96,9 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
...@@ -119,9 +122,6 @@ ...@@ -119,9 +122,6 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="primary" @click="addProject">新增</el-button> <el-button type="primary" @click="addProject">新增</el-button>
</div> </div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -99,6 +99,9 @@ ...@@ -99,6 +99,9 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
...@@ -153,9 +156,6 @@ ...@@ -153,9 +156,6 @@
}) })
}).catch(() => {}) }).catch(() => {})
} }
onMounted(() => {
getProjectData();
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"></div> <div class="header-right"></div>
</div> </div>
<div class="project-manage-content" v-loading="loading"> <div class="manage-content" v-loading="loading">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -103,6 +103,9 @@ ...@@ -103,6 +103,9 @@
} }
}) })
}; };
onMounted(() => {
getProjectData();
})
// 分页 // 分页
const handleSizeChange = (size) => { const handleSizeChange = (size) => {
pageSize.value = size; pageSize.value = size;
...@@ -145,9 +148,6 @@ ...@@ -145,9 +148,6 @@
} }
}); });
}; };
onMounted(() => {
getProjectData();
})
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
......
<template> <template>
<div class="project-manage-container"> <div class="manage-container">
<div class="manage-container"> <div class="manage-wrap">
<div class="project-manage-header"> <div class="manage-header">
<div class="header-left"></div> <div class="header-left"></div>
<div class="header-right"> <div class="header-right">
<el-button type="primary" @click="addItem">新增</el-button> <el-button type="primary" @click="addItem">新增</el-button>
<el-button type="primary" @click="exportData">导出</el-button> <el-button type="primary" @click="exportData">导出</el-button>
</div> </div>
</div> </div>
<div class="project-manage-content"> <div class="manage-content">
<el-table :data="tableData" style="width: 100%; height: 100%;" empty-text="暂无数据" border> <el-table :data="tableData" style="width: 100%; height: 100%;" empty-text="暂无数据" border>
<el-table-column type="index" width="50" /> <el-table-column type="index" width="50" />
<el-table-column v-for="column in tableColumns" :key="column.prop" <el-table-column v-for="column in tableColumns" :key="column.prop"
......
...@@ -152,19 +152,23 @@ const handleDelete = (data) => { ...@@ -152,19 +152,23 @@ const handleDelete = (data) => {
const saveDepartForm = () => { const saveDepartForm = () => {
let url = departFormData.value.id ? "updateDepart" : "createDepart" departForm.value.validate(valid => {
proxy.$post({ if (valid) {
url: "/api/user/depart/" + url, let url = departFormData.value.id ? "updateDepart" : "createDepart"
data: departFormData.value, proxy.$post({
callback: (data) => { url: "/api/user/depart/" + url,
ElMessage.success(dialogTitle.value + "成功"); data: departFormData.value,
cancelDepartForm(); callback: (data) => {
loadTreeData(); ElMessage.success(dialogTitle.value + "成功");
}, cancelDepartForm();
error: (err) => { loadTreeData();
ElMessage.error("组织添加失败:", err); },
}, error: (err) => {
}); ElMessage.error("组织添加失败:", err);
},
});
}
})
}; };
const cancelDepartForm = () => { const cancelDepartForm = () => {
departForm.value.resetFields(); departForm.value.resetFields();
...@@ -300,6 +304,7 @@ onMounted(() => { ...@@ -300,6 +304,7 @@ onMounted(() => {
</script> </script>
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less";
.depart-manage { .depart-manage {
padding: 20px; padding: 20px;
background: rgba(157, 188, 218, 0.1); background: rgba(157, 188, 218, 0.1);
...@@ -324,53 +329,8 @@ onMounted(() => { ...@@ -324,53 +329,8 @@ onMounted(() => {
.tree-content { .tree-content {
flex: 1; flex: 1;
height: 0; height: 0;
overflow: auto;
margin-top: 20px; margin-top: 20px;
position: relative;
.el-tree {
max-height: 700px;
overflow-y: auto;
// 只有当内容超过700px时才显示滚动条
&:not(:hover) {
scrollbar-width: none;
-ms-overflow-style: none;
&::-webkit-scrollbar {
display: none;
}
}
&:hover {
scrollbar-width: thin;
&::-webkit-scrollbar {
display: block;
width: 6px;
}
&::-webkit-scrollbar-thumb {
background-color: rgba(144, 147, 153, 0.3);
border-radius: 3px;
}
&::-webkit-scrollbar-track {
background-color: transparent;
}
}
}
.custom-tree-node {
flex: 1;
display: flex;
align-items: center;
justify-content: space-between;
font-size: 14px;
padding-right: 8px;
.node-name{
flex: 1;
width: 0;
-webkit-background-clip: text;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
}
} }
.user-content { .user-content {
flex: 1; flex: 1;
width: 0; width: 0;
......
<template> <template>
<div class="manage-container menu-manage" v-loading="loading"> <div class="system-manage-container menu-manage" v-loading="loading">
<div class="manage-content table-container"> <div class="system-manage-content manage-content">
<common-table <common-table
:data="tableData" :data="tableData"
:columns="tableColumns" :columns="tableColumns"
...@@ -186,28 +186,4 @@ onMounted(() => { ...@@ -186,28 +186,4 @@ onMounted(() => {
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
.menu-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
}
</style> </style>
This diff is collapsed.
<template> <template>
<div class="manage-container role-manage" v-loading="loading"> <div class="system-manage-container role-manage" v-loading="loading">
<div class="manage-header"> <div class="system-manage-header">
<div class="header-left"> <div class="header-left">
<el-form :inline="true" :model="searchForm"> <el-form :inline="true" :model="searchForm">
<el-form-item label="名称查询"> <el-form-item label="名称查询">
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</el-form> </el-form>
</div> </div>
</div> </div>
<div class="manage-content table-container"> <div class="system-manage-content manage-content">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:maxRows="10" :maxRows="10"
...@@ -47,7 +47,7 @@ ...@@ -47,7 +47,7 @@
</common-table> </common-table>
</div> </div>
<el-dialog <el-dialog class="add-dialog"
v-model="dialogVisible" v-model="dialogVisible"
:title="dialogTitle" :title="dialogTitle"
width="400px" width="400px"
...@@ -260,7 +260,7 @@ const saveRoleForm = () => { ...@@ -260,7 +260,7 @@ const saveRoleForm = () => {
}, },
error: (err) => { error: (err) => {
ElMessage.error(dialogTitle.value + "失败:", err); ElMessage.error(dialogTitle.value + "失败:", err);
}, }
}); });
} }
}) })
...@@ -338,30 +338,6 @@ onMounted(() => { ...@@ -338,30 +338,6 @@ onMounted(() => {
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
.role-manage {
padding: 20px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
}
}
.el-tree { .el-tree {
max-height: 500px; max-height: 500px;
overflow-y: auto; overflow-y: auto;
......
<template> <template>
<div class="manage-container user-manage" v-loading="loading"> <div class="system-manage-container user-manage" v-loading="loading">
<div class="manage-header"> <div class="system-manage-header">
<div class="header-left"> <div class="header-left">
<el-form :inline="true" :model="searchForm"> <el-form :inline="true" :model="searchForm">
<el-form-item label="关键字查询"> <el-form-item label="关键字查询">
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
</el-form> </el-form>
</div> </div>
</div> </div>
<div class="manage-content table-container"> <div class="system-manage-content manage-content">
<common-table <common-table
:autoHeight="true" :autoHeight="true"
:data="tableData" :data="tableData"
...@@ -198,14 +198,11 @@ const tableColumns = [ ...@@ -198,14 +198,11 @@ const tableColumns = [
// 对话框相关 // 对话框相关
const dialogVisible = ref(false); const dialogVisible = ref(false);
const dialogTitle = ref("新增用户"); const dialogTitle = ref("新增用户");
const isEdit = ref(false);
const editIndex = ref(-1);
// 用户表单数据 // 用户表单数据
const userForm = ref(); const userForm = ref();
const userFormData = ref({}); const userFormData = ref({});
const departmentData = ref([]); const departmentData = ref([]);
const positionsData = ref([]);
const rolesData = ref([]); const rolesData = ref([]);
const loadDepartmentData = () => { const loadDepartmentData = () => {
...@@ -219,18 +216,6 @@ const loadDepartmentData = () => { ...@@ -219,18 +216,6 @@ const loadDepartmentData = () => {
}); });
}; };
// 岗位下拉数据
const loadPositionsData = () => {
proxy.$post({
url: "/api/user/position/listPosition",
data: {},
callback: (data) => {
positionsData.value = data.rows;
},
error: (err) => {},
});
};
// 角色下拉数据 // 角色下拉数据
const loadRolesData = () => { const loadRolesData = () => {
proxy.$post({ proxy.$post({
...@@ -274,15 +259,12 @@ const handleCurrentPageChange = (page) => { ...@@ -274,15 +259,12 @@ const handleCurrentPageChange = (page) => {
// 新增用户 // 新增用户
const handleAdd = () => { const handleAdd = () => {
isEdit.value = false;
dialogTitle.value = "新增用户"; dialogTitle.value = "新增用户";
dialogVisible.value = true; dialogVisible.value = true;
}; };
// 编辑 // 编辑
const handleEdit = (row, index) => { const handleEdit = (row, index) => {
isEdit.value = true;
dialogTitle.value = "编辑用户"; dialogTitle.value = "编辑用户";
editIndex.value = index;
proxy.$post({ proxy.$post({
url: "/api/user/manage/getUserInfo", url: "/api/user/manage/getUserInfo",
data: { id: row.id }, data: { id: row.id },
...@@ -399,30 +381,4 @@ onMounted(() => { ...@@ -399,30 +381,4 @@ onMounted(() => {
<style scoped lang="less"> <style scoped lang="less">
@import "@/styles/manage.less"; @import "@/styles/manage.less";
.user-manage {
padding: 8px 8px 20px 8px;
background: rgba(157, 188, 218, 0.1);
height: 100%;
display: flex;
flex-direction: column;
box-sizing: border-box;
.search-form {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
flex-shrink: 0;
}
.table-container {
background: rgba(255, 255, 255, 0.9);
border-radius: 8px;
padding: 12px;
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
padding-left: 0px;
padding-top: 2px;
}
}
</style> </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