增加项目管理功能
parent
9519000083
commit
1c95a50d1c
|
@ -45,10 +45,32 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="updateBy" column="update_by" />
|
||||
<result property="updateTime" column="update_time" />
|
||||
<result property="remark" column="remark" />
|
||||
<association property="setting" column="ps_id" javaType="ProProjectInfoSetting" resultMap="ProProjectInfoSettingResult" />
|
||||
<collection property="projectDeptsList" javaType="java.util.List" resultMap="ProProjectInfoDeptsResult" />
|
||||
</resultMap>
|
||||
<resultMap id="ProProjectInfoDeptsResult" type="ProProjectInfoDepts">
|
||||
<result property="id" column="pd_id" />
|
||||
<result property="projectId" column="id" />
|
||||
<result property="projectName" column="project_name" />
|
||||
<result property="deptType" column="pd_type" />
|
||||
<result property="deptName" column="pd_name" />
|
||||
<result property="deptCode" column="pd_code" />
|
||||
<result property="leader" column="pd_leader" />
|
||||
<result property="phone" column="pd_phone" />
|
||||
</resultMap>
|
||||
<resultMap id="ProProjectInfoSettingResult" type="ProProjectInfoSetting">
|
||||
<result property="id" column="ps_id" />
|
||||
<result property="projectId" column="id" />
|
||||
<result property="projectName" column="project_name" />
|
||||
<result property="orgName" column="ps_org_name" />
|
||||
<result property="orgLogo" column="ps_org_logo" />
|
||||
<result property="orgImage" column="ps_org_image" />
|
||||
<result property="orgVideo" column="ps_org_video" />
|
||||
<result property="orgPlane" column="ps_org_plane" />
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectProProjectInfoVo">
|
||||
select pi.id, pi.dept_id, sd.dept_name, pi.vis_dept_id, pi.dis_dept_id, pi.project_name, pi.project_code, pi.simple_name, pi.project_type, pi.project_level, pi.project_regional, pi.project_address, pi.project_nature, pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment, pi.floor_area, pi.total_output_value, pi.planned_completion_time, pi.scheduled_start_time, pi.actual_operating_time, pi.actual_completion_time, pi.contract_amount, pi.paid_amount, pi.on_account_amount, pi.project_schedule, pi.project_summarize, pi.project_qr_code, pi.project_status, pi.project_sort, pi.is_del, pi.create_by, pi.create_time, pi.update_by, pi.update_time, pi.remark from pro_project_info pi
|
||||
select pi.id, pi.dept_id, sd.dept_name, pi.vis_dept_id, pi.dis_dept_id, pi.project_name, pi.project_code, pi.simple_name, pi.project_type, pi.project_level, pi.project_regional, pi.project_address, pi.project_nature, pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment, pi.floor_area, pi.total_output_value, pi.planned_completion_time, pi.scheduled_start_time, pi.actual_operating_time, pi.actual_completion_time, pi.contract_amount, pi.paid_amount, pi.on_account_amount, pi.project_schedule, pi.project_summarize, pi.project_qr_code, pi.project_status, pi.project_sort, pi.is_del, pi.create_by, pi.create_time, pi.update_by, pi.update_time, pi.remark
|
||||
from pro_project_info pi
|
||||
left join sys_dept sd on sd.dept_id = pi.dept_id
|
||||
</sql>
|
||||
|
||||
|
@ -73,7 +95,18 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
</select>
|
||||
|
||||
<select id="selectProProjectInfoById" parameterType="Long" resultMap="ProProjectInfoResult">
|
||||
<include refid="selectProProjectInfoVo"/>
|
||||
select pi.id, pi.dept_id, sd.dept_name, pi.vis_dept_id, pi.dis_dept_id, pi.project_name,
|
||||
pi.project_code, pi.simple_name, pi.project_type, pi.project_level, pi.project_regional, pi.project_address, pi.project_nature,
|
||||
pi.licence_number, pi.project_person, pi.project_person_phone, pi.longitude, pi.latitude, pi.project_time_limit, pi.total_investment,
|
||||
pi.floor_area, pi.total_output_value, pi.planned_completion_time, pi.scheduled_start_time, pi.actual_operating_time, pi.actual_completion_time,
|
||||
pi.contract_amount, pi.paid_amount, pi.on_account_amount, pi.project_schedule, pi.project_summarize, pi.project_qr_code, pi.project_status,
|
||||
pi.project_sort, pi.is_del, pi.create_by, pi.create_time, pi.update_by, pi.update_time, pi.remark,
|
||||
pd.id pd_id,pd.dept_type pd_type,pd.dept_name pd_name,pd.dept_code pd_code,pd.leader pd_leader,pd.phone pd_phone,
|
||||
ps.id ps_id,ps.org_name ps_org_name,ps.org_logo ps_org_logo,ps.org_image ps_org_image,ps.org_video ps_org_video,ps.org_plane ps_org_plane
|
||||
from pro_project_info pi
|
||||
left join sys_dept sd on sd.dept_id = pi.dept_id
|
||||
left join pro_project_info_depts pd on pi.id=pd.project_id
|
||||
left join pro_project_info_setting ps on pi.id=ps.project_id
|
||||
where pi.id = #{id}
|
||||
</select>
|
||||
|
||||
|
|
|
@ -2,6 +2,10 @@ package com.yanzhu.manage.service.impl;
|
|||
|
||||
import java.util.List;
|
||||
import com.yanzhu.common.core.utils.DateUtils;
|
||||
import com.yanzhu.manage.domain.ProProjectInfoDepts;
|
||||
import com.yanzhu.manage.domain.ProProjectInfoSetting;
|
||||
import com.yanzhu.manage.mapper.ProProjectInfoDeptsMapper;
|
||||
import com.yanzhu.manage.mapper.ProProjectInfoSettingMapper;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.yanzhu.manage.mapper.ProProjectInfoMapper;
|
||||
|
@ -19,7 +23,10 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
|
|||
{
|
||||
@Autowired
|
||||
private ProProjectInfoMapper proProjectInfoMapper;
|
||||
|
||||
@Autowired
|
||||
private ProProjectInfoDeptsMapper deptsMapper;
|
||||
@Autowired
|
||||
private ProProjectInfoSettingMapper settingMapper;
|
||||
/**
|
||||
* 查询项目信息
|
||||
*
|
||||
|
@ -67,6 +74,26 @@ public class ProProjectInfoServiceImpl implements IProProjectInfoService
|
|||
public int updateProProjectInfo(ProProjectInfo proProjectInfo)
|
||||
{
|
||||
proProjectInfo.setUpdateTime(DateUtils.getNowDate());
|
||||
List<ProProjectInfoDepts> depts= proProjectInfo.getProjectDeptsList();
|
||||
if(depts!=null){
|
||||
depts.forEach(dept->{
|
||||
dept.setProjectId(proProjectInfo.getId());
|
||||
if(dept.getId()!=null){
|
||||
deptsMapper.updateProProjectInfoDepts(dept);
|
||||
}else{
|
||||
deptsMapper.insertProProjectInfoDepts(dept);
|
||||
}
|
||||
});
|
||||
}
|
||||
ProProjectInfoSetting setting= proProjectInfo.getSetting();
|
||||
if(setting!=null){
|
||||
setting.setProjectId(proProjectInfo.getId());
|
||||
if(setting.getId()!=null){
|
||||
settingMapper.updateProProjectInfoSetting(setting);
|
||||
}else{
|
||||
settingMapper.insertProProjectInfoSetting(setting);
|
||||
}
|
||||
}
|
||||
return proProjectInfoMapper.updateProProjectInfo(proProjectInfo);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<template>
|
||||
<el-dialog :title="title" v-model="show" width="800px" append-to-body custom-class="baidu-map-dialog"
|
||||
<el-dialog :title="title" v-model="show" width="800px" append-to-body class="baidu-map-dialog"
|
||||
:close-on-click-modal="false" :close-on-press-escape="false" >
|
||||
<div class="div-info">
|
||||
<div>经度纬度:{{point?(point.lng.toFixed(5)+","+point.lat.toFixed(5)):'' }}</div>
|
||||
|
|
|
@ -53,7 +53,7 @@
|
|||
</el-table-column>
|
||||
<el-table-column label="项目排序" align="center" prop="projectSort" width="120">
|
||||
<template #default="scope">
|
||||
<el-input-number size="mini" v-model="scope.row.projectSort" :min="1" :max="999"
|
||||
<el-input-number v-model="scope.row.projectSort" :min="1" :max="999"
|
||||
@change="setProjectSort(scope.row, $event)"></el-input-number>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
@ -114,21 +114,21 @@
|
|||
v-model:limit="queryParams.pageSize" @pagination="getList" />
|
||||
|
||||
<!-- 添加或修改项目信息对话框 -->
|
||||
<el-dialog :title="title" v-model="open" width="1080px" append-to-body>
|
||||
<el-dialog :title="title" v-model="open" width="1080px" append-to-body :close-on-click-modal="false" :close-on-press-escape="false" class="project-info-edit-dlg">
|
||||
<el-form ref="proProjectInfoRef" :model="form" :rules="rules" label-width="100px">
|
||||
<el-tabs v-model="activeName" type="card" class="demo-tabs">
|
||||
<el-tab-pane label="项目基本信息" name="base">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="16">
|
||||
<el-col :span="8">
|
||||
<el-form-item label="归属单位" prop="deptId">
|
||||
<el-select v-model="form.deptId" placeholder="请选择公司" clearable>
|
||||
<el-option v-for="dict in deptOptions" :key="dict.deptId" :label="dict.deptName"
|
||||
<el-select v-model="form.deptId" placeholder="请选择公司" clearable @change="doChangeComp">
|
||||
<el-option v-for="dict in data.compOptions" :key="dict.deptId" :label="dict.deptName"
|
||||
:value="dict.deptId"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<el-form-item label="显示层级" prop="disDeptId">
|
||||
<el-form-item label="归属部门" prop="disDeptId">
|
||||
<el-tree-select v-model="form.disDeptId" :data="deptOptions"
|
||||
:props="{ value: 'id', label: 'label', children: 'children' }" value-key="id" placeholder="请选择显示层级"
|
||||
check-strictly style="width:100%" />
|
||||
|
@ -255,40 +255,29 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="参建单位信息" name="depts">
|
||||
<el-row :gutter="10" class="mb8">
|
||||
<el-col :span="1.5">
|
||||
<el-button type="primary" icon="Plus" @click="handleAddDepts">添加</el-button>
|
||||
<el-tab-pane label="参建单位信息" name="depts" v-if="data.opt=='edit'">
|
||||
<div v-for="(it,idx) in projectDeptsList" :key="idx" class="prj-dept-item">
|
||||
<div class="dept-item-header">
|
||||
<el-icon size="14" color="#2196F3"><OfficeBuilding /></el-icon>
|
||||
<span class="sp-header">{{ it.deptType }}</span>
|
||||
</div>
|
||||
<el-row>
|
||||
<el-col :span="8">
|
||||
<span class="sp-label">{{ it.deptType }}名称</span>
|
||||
<el-input v-model="it.deptName" class="txt-dept-name"/>
|
||||
</el-col>
|
||||
<el-col :span="1.5">
|
||||
<el-button type="danger" icon="Delete" @click="handleDeleteDepts">删除</el-button>
|
||||
<el-col :span="8">
|
||||
<span class="sp-label">负责人姓名</span>
|
||||
<el-input v-model="it.leader" class="txt-leader"/>
|
||||
</el-col>
|
||||
<el-col :span="8">
|
||||
<span class="sp-label">负责人联系电话</span>
|
||||
<el-input v-model="it.phone" class="txt-phone"/>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-table :data="projectDeptsList" :row-class-name="rowProjectDeptsIndex"
|
||||
@selection-change="handleDeptsSelectionChange" ref="projectDeptsRef">
|
||||
<el-table-column type="selection" width="50" align="center" />
|
||||
<el-table-column label="序号" align="center" prop="index" width="50" />
|
||||
<el-table-column label="单位类型" prop="deptType" align="center">
|
||||
<template #default="scope">
|
||||
<el-select v-model="scope.row.deptType" placeholder="请选择单位类型">
|
||||
<el-option v-for="dict in pro_dept_type" :key="dict.value" :label="dict.label"
|
||||
:value="dict.value"></el-option>
|
||||
</el-select>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="单位负责人" prop="leader" align="center">
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.leader" placeholder="请输入负责人姓名" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="负责人联系电话" prop="phone" align="center">
|
||||
<template #default="scope">
|
||||
<el-input v-model="scope.row.phone" placeholder="请输入负责人联系电话" />
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</el-tab-pane>
|
||||
<el-tab-pane label="项目大屏设置" name="setting">
|
||||
<el-tab-pane label="项目大屏设置" name="setting" v-if="data.opt=='edit'" class="pan-setting">
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目显示名" prop="orgName">
|
||||
|
@ -297,26 +286,26 @@
|
|||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="12">
|
||||
<el-col :span="12" :class="form.setting.orgLogo?'no-up':'can-up'" class="up-img">
|
||||
<el-form-item label="显示LOGO" prop="orgLogo">
|
||||
<image-upload v-model="form.setting.orgLogo" :limit="1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
<el-col :span="12">
|
||||
<el-col :span="12" :class="form.setting.orgPlane?'no-up':'can-up'" class="up-img">
|
||||
<el-form-item label="项目平面图" prop="orgPlane">
|
||||
<image-upload v-model="form.setting.orgPlane" :limit="3" />
|
||||
<image-upload v-model="form.setting.orgPlane" :limit="1" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-form-item label="项目图片" prop="orgImage">
|
||||
<el-col :span="24" :class="form.setting.orgImage && form.setting.orgImage.split(',').length==9?'no-up':'can-up'" class="up-img">
|
||||
<el-form-item label="项目预览图" prop="orgImage">
|
||||
<image-upload v-model="form.setting.orgImage" :limit="9" />
|
||||
</el-form-item>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<el-row :gutter="20">
|
||||
<el-col :span="24">
|
||||
<el-col :span="24" :class="form.setting.orgVideo?'no-up':'can-up'" class="up-video">
|
||||
<el-form-item label="项目视频" prop="orgVideo">
|
||||
<file-upload v-model="form.setting.orgVideo" :limit="1" :fileType="['mp4']" :fileSize="100" />
|
||||
</el-form-item>
|
||||
|
@ -395,7 +384,11 @@ const data = reactive({
|
|||
projectTimeLimit: [{ required: true, message: "工程期限不能为空", trigger: "blur" }],
|
||||
totalInvestment: [{ required: true, message: "项目总投资不能为空", trigger: "blur" }],
|
||||
contractAmount: [{ required: true, message: "合同金额不能为空", trigger: "blur" }],
|
||||
}
|
||||
},
|
||||
allDeptTree:[],
|
||||
compOptions:[],
|
||||
opt:'',
|
||||
|
||||
});
|
||||
|
||||
const { queryParams, form, rules } = toRefs(data);
|
||||
|
@ -469,6 +462,7 @@ function reset() {
|
|||
setting: {}
|
||||
};
|
||||
proxy.resetForm("proProjectInfoRef");
|
||||
activeName.value="base";
|
||||
}
|
||||
|
||||
/** 搜索按钮操作 */
|
||||
|
@ -492,6 +486,7 @@ function handleSelectionChange(selection) {
|
|||
|
||||
/** 新增按钮操作 */
|
||||
function handleAdd() {
|
||||
data.opt="add"
|
||||
reset();
|
||||
open.value = true;
|
||||
title.value = "添加项目信息";
|
||||
|
@ -499,12 +494,30 @@ function handleAdd() {
|
|||
|
||||
/** 修改按钮操作 */
|
||||
function handleUpdate(row) {
|
||||
data.opt="edit"
|
||||
reset();
|
||||
const _id = row.id || ids.value
|
||||
getProProjectInfo(_id).then(response => {
|
||||
form.value = response.data;
|
||||
form.value.setting=response.data.setting||{
|
||||
orgName:'',
|
||||
orgLogo:'',
|
||||
orgPlane:'',
|
||||
orgImage:[],
|
||||
orgVideo:''
|
||||
};
|
||||
open.value = true;
|
||||
title.value = "修改项目信息";
|
||||
projectDeptsList.value=(response.data.projectDeptsList||[]).filter(d=>d.id);
|
||||
if(projectDeptsList.value.length==0){
|
||||
projectDeptsList.value=[
|
||||
{deptType:'建设单位',deptName:'',leader:'',phone:''},
|
||||
{deptType:'监理单位',deptName:'',leader:'',phone:''},
|
||||
{deptType:'设计单位',deptName:'',leader:'',phone:''},
|
||||
{deptType:'检测单位',deptName:'',leader:'',phone:''},
|
||||
{deptType:'勘察单位',deptName:'',leader:'',phone:''},
|
||||
];
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -543,17 +556,21 @@ function handleDeptsSelectionChange(selection) {
|
|||
|
||||
/** 提交按钮 */
|
||||
function submitForm() {
|
||||
debugger
|
||||
proxy.$refs["proProjectInfoRef"].validate(valid => {
|
||||
if (valid) {
|
||||
form.value.projectDeptsList = projectDeptsList.value;
|
||||
let postData={
|
||||
...form.value
|
||||
}
|
||||
if (form.value.id != null) {
|
||||
updateProProjectInfo(form.value).then(response => {
|
||||
updateProProjectInfo(postData).then(response => {
|
||||
proxy.$modal.msgSuccess("修改成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
});
|
||||
} else {
|
||||
addProProjectInfo(form.value).then(response => {
|
||||
addProProjectInfo(postData).then(response => {
|
||||
proxy.$modal.msgSuccess("新增成功");
|
||||
open.value = false;
|
||||
getList();
|
||||
|
@ -595,11 +612,37 @@ function handleExport() {
|
|||
|
||||
/** 查询部门下拉树结构 */
|
||||
function getDeptTree() {
|
||||
deptTreeSelect().then(response => {
|
||||
data.allDeptTree = response.data;
|
||||
});
|
||||
listDept({ deptType: 2 }).then(response => {
|
||||
deptOptions.value = response.data;
|
||||
data.compOptions = response.data;
|
||||
});
|
||||
};
|
||||
|
||||
//公司下拉选择
|
||||
function doChangeComp(){
|
||||
const findDept=nodes=>{
|
||||
let tmps=nodes.filter(d=>d.data.deptId==form.value.deptId);
|
||||
if(tmps.length>0){
|
||||
return tmps[0].children;
|
||||
}else{
|
||||
for(let i=0;i<nodes.length;i++){
|
||||
let obj=findDept(nodes[i].children);
|
||||
if(obj){
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
};
|
||||
if(form.value.deptId){
|
||||
deptOptions.value=findDept(data.allDeptTree);
|
||||
}else{
|
||||
deptOptions.value=[]
|
||||
}
|
||||
}
|
||||
|
||||
/** 地图选择 */
|
||||
function getMapInfo() {
|
||||
mapRef.value.showDlg();
|
||||
|
@ -609,3 +652,54 @@ function getMapInfo() {
|
|||
getList();
|
||||
getDeptTree();
|
||||
</script>
|
||||
<style lang="scss">
|
||||
.project-info-edit-dlg{
|
||||
.prj-dept-item{
|
||||
margin-bottom: 20px;
|
||||
.dept-item-header{
|
||||
display: flex;
|
||||
color: #2196F3;
|
||||
align-items: center;
|
||||
.sp-header{
|
||||
display: inline-block;
|
||||
margin-left: 4px;
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
display: inline-block;
|
||||
width:auto;
|
||||
}
|
||||
.sp-label{
|
||||
font-size:12px;
|
||||
color:#888;
|
||||
&::after{
|
||||
content: ":";
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-tab-pane.pan-setting{
|
||||
.el-form-item{
|
||||
flex-flow: column;
|
||||
margin-bottom:0px;
|
||||
}
|
||||
.up-img{
|
||||
&.no-up{
|
||||
.el-upload__tip{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
.up-video{
|
||||
&.no-up{
|
||||
.el-upload__tip{
|
||||
display: none;
|
||||
}
|
||||
.upload-file-uploader{
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
</style>
|
|
@ -132,7 +132,7 @@
|
|||
@pagination="getList"
|
||||
/>
|
||||
<!-- 预览界面 -->
|
||||
<el-dialog :title="preview.title" v-model="preview.open" width="80%" top="5vh" append-to-body custom-class="scrollbar">
|
||||
<el-dialog :title="preview.title" v-model="preview.open" width="80%" top="5vh" append-to-body class="scrollbar">
|
||||
<el-tabs v-model="preview.activeName">
|
||||
<el-tab-pane
|
||||
v-for="(value, key) in preview.data"
|
||||
|
|
Loading…
Reference in New Issue