提交代码
parent
77fa7476d8
commit
cfa648dbe6
|
@ -5,6 +5,8 @@ import com.yanzhu.common.core.web.domain.BaseEntity;
|
||||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目信息对象 pro_project_info
|
* 项目信息对象 pro_project_info
|
||||||
*
|
*
|
||||||
|
@ -154,6 +156,9 @@ public class ProProjectInfo extends BaseEntity
|
||||||
@Excel(name = "删除标识")
|
@Excel(name = "删除标识")
|
||||||
private Long isDel;
|
private Long isDel;
|
||||||
|
|
||||||
|
private ProProjectInfoSetting setting;
|
||||||
|
private List<ProProjectInfoDepts> projectDeptsList;
|
||||||
|
|
||||||
public void setId(Long id)
|
public void setId(Long id)
|
||||||
{
|
{
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
@ -226,15 +231,7 @@ public class ProProjectInfo extends BaseEntity
|
||||||
{
|
{
|
||||||
return projectType;
|
return projectType;
|
||||||
}
|
}
|
||||||
public void setprojectLevel(String projectLevel)
|
|
||||||
{
|
|
||||||
this.projectLevel = projectLevel;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getprojectLevel()
|
|
||||||
{
|
|
||||||
return projectLevel;
|
|
||||||
}
|
|
||||||
public void setProjectRegional(String projectRegional)
|
public void setProjectRegional(String projectRegional)
|
||||||
{
|
{
|
||||||
this.projectRegional = projectRegional;
|
this.projectRegional = projectRegional;
|
||||||
|
@ -469,6 +466,30 @@ public class ProProjectInfo extends BaseEntity
|
||||||
this.deptName = deptName;
|
this.deptName = deptName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getProjectLevel() {
|
||||||
|
return projectLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectLevel(String projectLevel) {
|
||||||
|
this.projectLevel = projectLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ProProjectInfoSetting getSetting() {
|
||||||
|
return setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSetting(ProProjectInfoSetting setting) {
|
||||||
|
this.setting = setting;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ProProjectInfoDepts> getProjectDeptsList() {
|
||||||
|
return projectDeptsList;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProjectDeptsList(List<ProProjectInfoDepts> projectDeptsList) {
|
||||||
|
this.projectDeptsList = projectDeptsList;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
@ -480,7 +501,7 @@ public class ProProjectInfo extends BaseEntity
|
||||||
.append("projectCode", getProjectCode())
|
.append("projectCode", getProjectCode())
|
||||||
.append("simpleName", getSimpleName())
|
.append("simpleName", getSimpleName())
|
||||||
.append("projectType", getProjectType())
|
.append("projectType", getProjectType())
|
||||||
.append("projectLevel", getprojectLevel())
|
.append("projectLevel", getProjectLevel())
|
||||||
.append("projectRegional", getProjectRegional())
|
.append("projectRegional", getProjectRegional())
|
||||||
.append("projectAddress", getProjectAddress())
|
.append("projectAddress", getProjectAddress())
|
||||||
.append("projectNature", getProjectNature())
|
.append("projectNature", getProjectNature())
|
||||||
|
|
|
@ -38,6 +38,14 @@ public class ProProjectInfoDepts extends BaseEntity
|
||||||
@Excel(name = "参建单位编号")
|
@Excel(name = "参建单位编号")
|
||||||
private String deptCode;
|
private String deptCode;
|
||||||
|
|
||||||
|
/** 负责人 */
|
||||||
|
@Excel(name = "负责人")
|
||||||
|
private String leader;
|
||||||
|
|
||||||
|
/** 联系电话 */
|
||||||
|
@Excel(name = "联系电话")
|
||||||
|
private String phone;
|
||||||
|
|
||||||
/** 删除标识 */
|
/** 删除标识 */
|
||||||
@Excel(name = "删除标识")
|
@Excel(name = "删除标识")
|
||||||
private Long isDel;
|
private Long isDel;
|
||||||
|
@ -105,6 +113,22 @@ public class ProProjectInfoDepts extends BaseEntity
|
||||||
this.projectName = projectName;
|
this.projectName = projectName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getLeader() {
|
||||||
|
return leader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLeader(String leader) {
|
||||||
|
this.leader = leader;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhone() {
|
||||||
|
return phone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPhone(String phone) {
|
||||||
|
this.phone = phone;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
|
||||||
|
|
|
@ -11,6 +11,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<result property="deptType" column="dept_type" />
|
<result property="deptType" column="dept_type" />
|
||||||
<result property="deptName" column="dept_name" />
|
<result property="deptName" column="dept_name" />
|
||||||
<result property="deptCode" column="dept_code" />
|
<result property="deptCode" column="dept_code" />
|
||||||
|
<result property="leader" column="leader" />
|
||||||
|
<result property="phone" column="phone" />
|
||||||
<result property="isDel" column="is_del" />
|
<result property="isDel" column="is_del" />
|
||||||
<result property="createBy" column="create_by" />
|
<result property="createBy" column="create_by" />
|
||||||
<result property="createTime" column="create_time" />
|
<result property="createTime" column="create_time" />
|
||||||
|
@ -20,7 +22,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
</resultMap>
|
</resultMap>
|
||||||
|
|
||||||
<sql id="selectProProjectInfoDeptsVo">
|
<sql id="selectProProjectInfoDeptsVo">
|
||||||
select pd.id, pd.project_id, pi.project_name, pd.dept_type, pd.dept_name, pd.dept_code, pd.is_del, pd.create_by, pd.create_time, pd.update_by, pd.update_time, pd.remark from pro_project_info_depts pd
|
select pd.id, pd.project_id, pi.project_name, pd.dept_type, pd.dept_name, pd.dept_code, leader, phone, pd.is_del, pd.create_by, pd.create_time, pd.update_by, pd.update_time, pd.remark from pro_project_info_depts pd
|
||||||
left join pro_project_info pi on pi.id = pd.project_id
|
left join pro_project_info pi on pi.id = pd.project_id
|
||||||
left join sys_dept sd on sd.dept_id = pi.dept_id
|
left join sys_dept sd on sd.dept_id = pi.dept_id
|
||||||
</sql>
|
</sql>
|
||||||
|
@ -50,6 +52,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="deptType != null">dept_type,</if>
|
<if test="deptType != null">dept_type,</if>
|
||||||
<if test="deptName != null">dept_name,</if>
|
<if test="deptName != null">dept_name,</if>
|
||||||
<if test="deptCode != null">dept_code,</if>
|
<if test="deptCode != null">dept_code,</if>
|
||||||
|
<if test="leader != null">leader,</if>
|
||||||
|
<if test="phone != null">phone,</if>
|
||||||
<if test="isDel != null">is_del,</if>
|
<if test="isDel != null">is_del,</if>
|
||||||
<if test="createBy != null">create_by,</if>
|
<if test="createBy != null">create_by,</if>
|
||||||
<if test="createTime != null">create_time,</if>
|
<if test="createTime != null">create_time,</if>
|
||||||
|
@ -62,6 +66,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="deptType != null">#{deptType},</if>
|
<if test="deptType != null">#{deptType},</if>
|
||||||
<if test="deptName != null">#{deptName},</if>
|
<if test="deptName != null">#{deptName},</if>
|
||||||
<if test="deptCode != null">#{deptCode},</if>
|
<if test="deptCode != null">#{deptCode},</if>
|
||||||
|
<if test="leader != null">#{leader},</if>
|
||||||
|
<if test="phone != null">#{phone},</if>
|
||||||
<if test="isDel != null">#{isDel},</if>
|
<if test="isDel != null">#{isDel},</if>
|
||||||
<if test="createBy != null">#{createBy},</if>
|
<if test="createBy != null">#{createBy},</if>
|
||||||
<if test="createTime != null">#{createTime},</if>
|
<if test="createTime != null">#{createTime},</if>
|
||||||
|
@ -78,6 +84,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="deptType != null">dept_type = #{deptType},</if>
|
<if test="deptType != null">dept_type = #{deptType},</if>
|
||||||
<if test="deptName != null">dept_name = #{deptName},</if>
|
<if test="deptName != null">dept_name = #{deptName},</if>
|
||||||
<if test="deptCode != null">dept_code = #{deptCode},</if>
|
<if test="deptCode != null">dept_code = #{deptCode},</if>
|
||||||
|
<if test="leader != null">leader = #{leader},</if>
|
||||||
|
<if test="phone != null">phone = #{phone},</if>
|
||||||
<if test="isDel != null">is_del = #{isDel},</if>
|
<if test="isDel != null">is_del = #{isDel},</if>
|
||||||
<if test="createBy != null">create_by = #{createBy},</if>
|
<if test="createBy != null">create_by = #{createBy},</if>
|
||||||
<if test="createTime != null">create_time = #{createTime},</if>
|
<if test="createTime != null">create_time = #{createTime},</if>
|
||||||
|
|
|
@ -69,7 +69,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
<if test="projectStatus != null and projectStatus != ''"> and pi.project_status = #{projectStatus}</if>
|
<if test="projectStatus != null and projectStatus != ''"> and pi.project_status = #{projectStatus}</if>
|
||||||
<if test="isDel != null "> and pi.is_del = #{isDel}</if>
|
<if test="isDel != null "> and pi.is_del = #{isDel}</if>
|
||||||
</where>
|
</where>
|
||||||
order by id project_sort, id desc
|
order by pi.project_sort, pi.id desc
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="selectProProjectInfoById" parameterType="Long" resultMap="ProProjectInfoResult">
|
<select id="selectProProjectInfoById" parameterType="Long" resultMap="ProProjectInfoResult">
|
||||||
|
@ -206,14 +206,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
where id = #{id}
|
where id = #{id}
|
||||||
</update>
|
</update>
|
||||||
|
|
||||||
<delete id="deleteProProjectInfoById" parameterType="Long">
|
<update id="deleteProProjectInfoById" parameterType="Long">
|
||||||
delete from pro_project_info where id = #{id}
|
update pro_project_info set is_del=1 where id = #{id}
|
||||||
</delete>
|
</update>
|
||||||
|
|
||||||
<delete id="deleteProProjectInfoByIds" parameterType="String">
|
<update id="deleteProProjectInfoByIds" parameterType="String">
|
||||||
delete from pro_project_info where id in
|
update pro_project_info set is_del=1 where id in
|
||||||
<foreach item="id" collection="array" open="(" separator="," close=")">
|
<foreach item="id" collection="array" open="(" separator="," close=")">
|
||||||
#{id}
|
#{id}
|
||||||
</foreach>
|
</foreach>
|
||||||
</delete>
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -1,6 +1,12 @@
|
||||||
package com.yanzhu.system.controller;
|
package com.yanzhu.system.controller;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import com.yanzhu.common.core.constant.CacheConstants;
|
||||||
|
import com.yanzhu.common.core.constant.Constants;
|
||||||
|
import com.yanzhu.common.core.enums.IsDelEnums;
|
||||||
|
import com.yanzhu.common.redis.service.RedisService;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
@ -32,6 +38,9 @@ import com.yanzhu.system.service.ISysDeptService;
|
||||||
@RequestMapping("/dept")
|
@RequestMapping("/dept")
|
||||||
public class SysDeptController extends BaseController
|
public class SysDeptController extends BaseController
|
||||||
{
|
{
|
||||||
|
@Autowired
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysDeptService deptService;
|
private ISysDeptService deptService;
|
||||||
|
|
||||||
|
@ -130,4 +139,24 @@ public class SysDeptController extends BaseController
|
||||||
deptService.checkDeptDataScope(deptId);
|
deptService.checkDeptDataScope(deptId);
|
||||||
return toAjax(deptService.deleteDeptById(deptId));
|
return toAjax(deptService.deleteDeptById(deptId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取部门列表
|
||||||
|
*/
|
||||||
|
@RequiresPermissions("system:dept:project")
|
||||||
|
@GetMapping("/projectDeptList")
|
||||||
|
public AjaxResult list()
|
||||||
|
{
|
||||||
|
String key = "projectDeptList_0";
|
||||||
|
Object cache = redisService.getCacheObject(key);
|
||||||
|
if(cache!=null){
|
||||||
|
return success(cache);
|
||||||
|
}
|
||||||
|
SysDept query = new SysDept();
|
||||||
|
query.setDelFlag(IsDelEnums.NO.getInfo());
|
||||||
|
query.setDeptType("3");// 项目单位
|
||||||
|
List<SysDept> depts = deptService.selectDeptList(query);
|
||||||
|
redisService.setCacheObject(key,depts, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
|
||||||
|
return success(depts);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.yanzhu.system.controller;
|
package com.yanzhu.system.controller;
|
||||||
|
|
||||||
|
import com.yanzhu.common.core.constant.Constants;
|
||||||
import com.yanzhu.common.core.domain.R;
|
import com.yanzhu.common.core.domain.R;
|
||||||
import com.yanzhu.common.core.utils.poi.ExcelUtil;
|
import com.yanzhu.common.core.utils.poi.ExcelUtil;
|
||||||
import com.yanzhu.common.core.web.controller.BaseController;
|
import com.yanzhu.common.core.web.controller.BaseController;
|
||||||
|
@ -7,6 +8,7 @@ import com.yanzhu.common.core.web.domain.AjaxResult;
|
||||||
import com.yanzhu.common.core.web.page.TableDataInfo;
|
import com.yanzhu.common.core.web.page.TableDataInfo;
|
||||||
import com.yanzhu.common.log.annotation.Log;
|
import com.yanzhu.common.log.annotation.Log;
|
||||||
import com.yanzhu.common.log.enums.BusinessType;
|
import com.yanzhu.common.log.enums.BusinessType;
|
||||||
|
import com.yanzhu.common.redis.service.RedisService;
|
||||||
import com.yanzhu.common.security.annotation.InnerAuth;
|
import com.yanzhu.common.security.annotation.InnerAuth;
|
||||||
import com.yanzhu.common.security.annotation.RequiresPermissions;
|
import com.yanzhu.common.security.annotation.RequiresPermissions;
|
||||||
import com.yanzhu.common.security.utils.SecurityUtils;
|
import com.yanzhu.common.security.utils.SecurityUtils;
|
||||||
|
@ -14,6 +16,7 @@ import com.yanzhu.system.api.domain.SysDept;
|
||||||
import com.yanzhu.system.api.domain.SysRole;
|
import com.yanzhu.system.api.domain.SysRole;
|
||||||
import com.yanzhu.system.api.domain.SysUser;
|
import com.yanzhu.system.api.domain.SysUser;
|
||||||
import com.yanzhu.system.domain.SysUserRole;
|
import com.yanzhu.system.domain.SysUserRole;
|
||||||
|
import com.yanzhu.system.domain.vo.TreeSelect;
|
||||||
import com.yanzhu.system.service.ISysDeptService;
|
import com.yanzhu.system.service.ISysDeptService;
|
||||||
import com.yanzhu.system.service.ISysRoleService;
|
import com.yanzhu.system.service.ISysRoleService;
|
||||||
import com.yanzhu.system.service.ISysUserService;
|
import com.yanzhu.system.service.ISysUserService;
|
||||||
|
@ -24,6 +27,7 @@ import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 角色信息
|
* 角色信息
|
||||||
|
@ -34,6 +38,9 @@ import java.util.List;
|
||||||
@RequestMapping("/role")
|
@RequestMapping("/role")
|
||||||
public class SysRoleController extends BaseController
|
public class SysRoleController extends BaseController
|
||||||
{
|
{
|
||||||
|
@Autowired
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysRoleService roleService;
|
private ISysRoleService roleService;
|
||||||
|
|
||||||
|
@ -241,7 +248,15 @@ public class SysRoleController extends BaseController
|
||||||
{
|
{
|
||||||
AjaxResult ajax = AjaxResult.success();
|
AjaxResult ajax = AjaxResult.success();
|
||||||
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
|
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
|
||||||
ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
|
String key = "role.deptTree_"+SecurityUtils.getUserId();
|
||||||
|
List<TreeSelect> treeList = redisService.getCacheObject(key);
|
||||||
|
if(treeList!=null){
|
||||||
|
ajax.put("depts", treeList);
|
||||||
|
}else{
|
||||||
|
treeList = deptService.selectDeptTreeList(new SysDept());
|
||||||
|
redisService.setCacheObject(key,treeList, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
|
||||||
|
ajax.put("depts", treeList);
|
||||||
|
}
|
||||||
return ajax;
|
return ajax;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,9 +4,13 @@ import java.io.IOException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
|
import com.yanzhu.common.core.constant.Constants;
|
||||||
|
import com.yanzhu.common.redis.service.RedisService;
|
||||||
|
import com.yanzhu.system.domain.vo.TreeSelect;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
@ -51,6 +55,9 @@ import com.yanzhu.system.service.ISysUserService;
|
||||||
@RequestMapping("/user")
|
@RequestMapping("/user")
|
||||||
public class SysUserController extends BaseController
|
public class SysUserController extends BaseController
|
||||||
{
|
{
|
||||||
|
@Autowired
|
||||||
|
private RedisService redisService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ISysUserService userService;
|
private ISysUserService userService;
|
||||||
|
|
||||||
|
@ -346,7 +353,14 @@ public class SysUserController extends BaseController
|
||||||
@GetMapping("/deptTree")
|
@GetMapping("/deptTree")
|
||||||
public AjaxResult deptTree(SysDept dept)
|
public AjaxResult deptTree(SysDept dept)
|
||||||
{
|
{
|
||||||
return success(deptService.selectDeptTreeList(dept));
|
String key = "user.deptTree_"+SecurityUtils.getUserId();
|
||||||
|
Object cache = redisService.getCacheObject(key);
|
||||||
|
if(cache!=null){
|
||||||
|
return success(cache);
|
||||||
|
}
|
||||||
|
List<TreeSelect> treeList = deptService.selectDeptTreeList(dept);
|
||||||
|
redisService.setCacheObject(key,treeList, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
|
||||||
|
return success(treeList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "指定流程办理人员列表")
|
@ApiOperation(value = "指定流程办理人员列表")
|
||||||
|
|
|
@ -8,6 +8,8 @@
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
|
||||||
<link rel="icon" href="/favicon.ico">
|
<link rel="icon" href="/favicon.ico">
|
||||||
<title>若依管理系统</title>
|
<title>若依管理系统</title>
|
||||||
|
<script type="text/javascript"
|
||||||
|
src="https://api.map.baidu.com/api?v=1.0&&type=webgl&ak=6zAD8CIavtzWnkGg0a7roush5maGMIPn"></script>
|
||||||
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
<!--[if lt IE 11]><script>window.location.href='/html/ie.html';</script><![endif]-->
|
||||||
<style>
|
<style>
|
||||||
html,
|
html,
|
||||||
|
|
|
@ -50,3 +50,11 @@ export function delDept(deptId) {
|
||||||
method: 'delete'
|
method: 'delete'
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 项目单位列表
|
||||||
|
export function projectDeptList() {
|
||||||
|
return request({
|
||||||
|
url: '/system/dept/projectDeptList',
|
||||||
|
method: 'get'
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,157 @@
|
||||||
|
<template>
|
||||||
|
<el-dialog :title="title" v-model="show" width="800px" append-to-body custom-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>
|
||||||
|
<div>详细地址:{{ getAddress() }}</div>
|
||||||
|
<div style="margin-top: 10px;text-align: center;" v-if="getAddress()">
|
||||||
|
<el-button size="small" type="primary" @click="doOk">确定</el-button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="index-map" style="width: 100%;height:600px;"></div>
|
||||||
|
</el-dialog>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
const show = ref(false);
|
||||||
|
const title = ref("");
|
||||||
|
const map = ref("");
|
||||||
|
const point = ref("");
|
||||||
|
const cityInfo = ref("");
|
||||||
|
|
||||||
|
const emit = defineEmits(["docom"]);
|
||||||
|
|
||||||
|
function getCity(data,cb){
|
||||||
|
let myPoint = new BMapGL.Point(+data.longitude,+data.latitude);
|
||||||
|
let myGeo = new BMapGL.Geocoder({extensions_town: true});
|
||||||
|
myGeo.getLocation(myPoint,r=>{
|
||||||
|
let cityInfo={
|
||||||
|
address:r.content?.address||'',
|
||||||
|
poi_desc:r.content?.poi_desc||'',
|
||||||
|
district:r.content?.address_detail?.district||'',
|
||||||
|
city:r.content?.address_detail?.city||'',
|
||||||
|
province:r.content?.address_detail?.province||''
|
||||||
|
}
|
||||||
|
cb && cb(myPoint,cityInfo);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function doOk(){
|
||||||
|
emit("docom",point.value,cityInfo.value);
|
||||||
|
show.value=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getAddress(){
|
||||||
|
let addr=cityInfo.value?.address||'';
|
||||||
|
let poi_desc=cityInfo.value?.poi_desc||'';
|
||||||
|
return addr+poi_desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
function showDlg(opt){
|
||||||
|
title.value=opt?.title||'选择地址';
|
||||||
|
show.value=true;
|
||||||
|
setTimeout(()=>{
|
||||||
|
initMap();
|
||||||
|
},400);
|
||||||
|
}
|
||||||
|
|
||||||
|
function currentPoint(){
|
||||||
|
let geolocation = new BMapGL.Geolocation();
|
||||||
|
geolocation.enableSDKLocation();
|
||||||
|
geolocation.getCurrentPosition(e=>{
|
||||||
|
if(e.point){
|
||||||
|
let point = e.point
|
||||||
|
let initMarker = new BMapGL.Marker(point);
|
||||||
|
map.value.centerAndZoom(point, 18);
|
||||||
|
map.value.addOverlay(initMarker);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function mapClick(e){
|
||||||
|
point.value=e.latlng;
|
||||||
|
let myGeo = new BMapGL.Geocoder({extensions_town: true});
|
||||||
|
myGeo.getLocation(e.latlng,r=>{
|
||||||
|
if(r){
|
||||||
|
cityInfo.value={
|
||||||
|
address:r.content?.address||'',
|
||||||
|
poi_desc:r.content?.poi_desc||'',
|
||||||
|
district:r.content?.address_detail?.district||'',
|
||||||
|
city:r.content?.address_detail?.city||'',
|
||||||
|
province:r.content?.address_detail?.province||''
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
cityInfo.value={}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function initMap() {
|
||||||
|
let imap = new BMapGL.Map("index-map");
|
||||||
|
|
||||||
|
map.value = imap;
|
||||||
|
let point = new BMapGL.Point(116.404, 39.915);
|
||||||
|
//初始化地图,设置中心点坐标和地图级别
|
||||||
|
map.value.centerAndZoom(point, 15);
|
||||||
|
map.value.setDefaultCursor("crosshair");//设置地图默认的鼠标指针样式
|
||||||
|
map.value.enableScrollWheelZoom();//启用滚轮放大缩小,默认禁用。
|
||||||
|
|
||||||
|
//创建点坐标
|
||||||
|
|
||||||
|
//创建标注
|
||||||
|
let initMarker = new BMapGL.Marker(point);
|
||||||
|
//向地图中添加单个覆盖物时会触发此事件
|
||||||
|
map.value.addOverlay(initMarker);
|
||||||
|
//开启标注拖拽功能
|
||||||
|
//initMarker.enableDragging();
|
||||||
|
//将标注点移动到中心位置
|
||||||
|
|
||||||
|
|
||||||
|
//添加地图默认控件
|
||||||
|
map.value.addControl(new BMapGL.NavigationControl());
|
||||||
|
//开启鼠标滚轮缩放
|
||||||
|
map.value.addEventListener("click",mapClick);
|
||||||
|
var myGeo = new BMapGL.Geocoder();
|
||||||
|
// 将地址解析结果显示在地图上,并调整地图视野
|
||||||
|
myGeo.getPoint('经河新城', function (point) {
|
||||||
|
if (point) {
|
||||||
|
console.log("--->",point)
|
||||||
|
map.value.centerAndZoom(point, 16);
|
||||||
|
map.value.addOverlay(new BMapGL.Marker(point, { title: '经河新城' }))
|
||||||
|
map.value.enableScrollWheelZoom(true);
|
||||||
|
//map.value.setHeading(64.5); //设置地图旋转角度
|
||||||
|
//map.value.setTilt(73); //设置地图的倾斜角度
|
||||||
|
} else {
|
||||||
|
alert('您选择的地址没有解析到结果!');
|
||||||
|
}
|
||||||
|
}, '陕西省')
|
||||||
|
currentPoint();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 暴露组件 */
|
||||||
|
defineExpose({
|
||||||
|
showDlg,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
<style lang="scss" >
|
||||||
|
.baidu-map-dialog{
|
||||||
|
.el-dialog__body{
|
||||||
|
position: relative;
|
||||||
|
padding: 0px;
|
||||||
|
.div-info{
|
||||||
|
position: absolute;
|
||||||
|
top:0px;
|
||||||
|
right: 10px;
|
||||||
|
width:300px;
|
||||||
|
font-size: 12px;
|
||||||
|
background: rgba(255,255,255,0.5);
|
||||||
|
box-shadow: 6px 6px 6px rgba(0,0,0,0.2);
|
||||||
|
z-index: 99999;
|
||||||
|
padding: 8px;
|
||||||
|
border:solid 1px #ccc;
|
||||||
|
color: #51b5ff;
|
||||||
|
line-height: 24px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
|
@ -1,30 +1,6 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="app-container">
|
<div class="app-container">
|
||||||
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
|
||||||
<el-form-item label="所属单位" prop="deptId" v-hasPermi="['manage:dept:project']">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.deptId"
|
|
||||||
placeholder="请输入所属单位"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="部门主键" prop="visDeptId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.visDeptId"
|
|
||||||
placeholder="请输入部门主键"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="显示部门" prop="disDeptId">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.disDeptId"
|
|
||||||
placeholder="请输入显示部门"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="项目名称" prop="projectName">
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
<el-input
|
<el-input
|
||||||
v-model="queryParams.projectName"
|
v-model="queryParams.projectName"
|
||||||
|
@ -33,54 +9,14 @@
|
||||||
@keyup.enter="handleQuery"
|
@keyup.enter="handleQuery"
|
||||||
/>
|
/>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="项目编号" prop="projectCode">
|
<el-form-item label="项目类型" prop="projectType">
|
||||||
<el-input
|
<el-select v-model="queryParams.projectType" placeholder="请选择项目类型" clearable>
|
||||||
v-model="queryParams.projectCode"
|
|
||||||
placeholder="请输入项目编号"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="项目简称" prop="simpleName">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.simpleName"
|
|
||||||
placeholder="请输入项目简称"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="项目等级" prop="projectLevel">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.projectLevel"
|
|
||||||
placeholder="请输入项目等级"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="项目负责人" prop="projectPerson">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.projectPerson"
|
|
||||||
placeholder="请输入项目负责人"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="负责人电话" prop="projectPersonPhone">
|
|
||||||
<el-input
|
|
||||||
v-model="queryParams.projectPersonPhone"
|
|
||||||
placeholder="请输入负责人电话"
|
|
||||||
clearable
|
|
||||||
@keyup.enter="handleQuery"
|
|
||||||
/>
|
|
||||||
</el-form-item>
|
|
||||||
<el-form-item label="删除标识" prop="isDel">
|
|
||||||
<el-select v-model="queryParams.isDel" placeholder="请选择删除标识" clearable>
|
|
||||||
<el-option
|
<el-option
|
||||||
v-for="dict in sys_is_del"
|
v-for="dict in pro_project_type"
|
||||||
:key="dict.value"
|
:key="dict.value"
|
||||||
:label="dict.label"
|
:label="dict.label"
|
||||||
:value="dict.value"
|
:value="dict.value"
|
||||||
/>
|
></el-option>
|
||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
|
@ -133,50 +69,69 @@
|
||||||
|
|
||||||
<el-table v-loading="loading" :data="proProjectInfoList" @selection-change="handleSelectionChange">
|
<el-table v-loading="loading" :data="proProjectInfoList" @selection-change="handleSelectionChange">
|
||||||
<el-table-column type="selection" width="55" align="center" />
|
<el-table-column type="selection" width="55" align="center" />
|
||||||
<el-table-column label="主键" align="center" prop="id" />
|
<el-table-column label="项目名称" align="center" prop="projectName" width="250"/>
|
||||||
<el-table-column label="所属单位" align="center" prop="deptId" />
|
<el-table-column label="项目部门" align="center" prop="deptName" width="200"/>
|
||||||
<el-table-column label="部门主键" align="center" prop="visDeptId" />
|
|
||||||
<el-table-column label="显示部门" align="center" prop="disDeptId" />
|
|
||||||
<el-table-column label="项目名称" align="center" prop="projectName" />
|
|
||||||
<el-table-column label="项目编号" align="center" prop="projectCode" />
|
|
||||||
<el-table-column label="项目简称" align="center" prop="simpleName" />
|
<el-table-column label="项目简称" align="center" prop="simpleName" />
|
||||||
<el-table-column label="项目类型" align="center" prop="projectType" />
|
<el-table-column label="项目类型" align="center" prop="projectType" width="100">
|
||||||
<el-table-column label="项目等级" align="center" prop="projectLevel" />
|
<template #default="scope">
|
||||||
<el-table-column label="项目区县" align="center" prop="projectRegional" />
|
<dict-tag :options="pro_project_type" :value="scope.row.projectType"/>
|
||||||
<el-table-column label="项目地址" align="center" prop="projectAddress" />
|
</template>
|
||||||
<el-table-column label="项目建设属性" align="center" prop="projectNature" />
|
</el-table-column>
|
||||||
<el-table-column label="许可证号" align="center" prop="licenceNumber" />
|
<el-table-column label="二维码" align="center" prop="projectQrCode" width="80">
|
||||||
<el-table-column label="项目负责人" align="center" prop="projectPerson" />
|
<template #default="scope">
|
||||||
<el-table-column label="负责人电话" align="center" prop="projectPersonPhone" />
|
<image-preview :src="scope.row.projectQrCode" :width="50" :height="50"/>
|
||||||
<el-table-column label="经度" align="center" prop="longitude" />
|
</template>
|
||||||
<el-table-column label="纬度" align="center" prop="latitude" />
|
</el-table-column>
|
||||||
<el-table-column label="项目工期" align="center" prop="projectTimeLimit" />
|
<el-table-column label="项目排序" align="center" prop="projectSort" width="120">
|
||||||
<el-table-column label="总投资" align="center" prop="totalInvestment" />
|
<template #default="scope">
|
||||||
<el-table-column label="建筑面积" align="center" prop="floorArea" />
|
<el-input-number size="mini" v-model="scope.row.projectSort" :min="1" :max="999"
|
||||||
<el-table-column label="开累产值" align="center" prop="totalOutputValue" />
|
@change="setProjectSort(scope.row, $event)"></el-input-number>
|
||||||
<el-table-column label="计划完工时间" align="center" prop="plannedCompletionTime" />
|
</template>
|
||||||
<el-table-column label="计划开始时间" align="center" prop="scheduledStartTime" />
|
</el-table-column>
|
||||||
<el-table-column label="实际开始时间" align="center" prop="actualOperatingTime" />
|
<el-table-column label="项目地址" align="center" prop="projectAddress" width="250"/>
|
||||||
<el-table-column label="实际完工时间" align="center" prop="actualCompletionTime" />
|
<el-table-column label="负责人" align="center" prop="projectPerson" width="100"/>
|
||||||
<el-table-column label="合同总金额" align="center" prop="contractAmount" />
|
<el-table-column label="负责人电话" align="center" prop="projectPersonPhone" width="120"/>
|
||||||
<el-table-column label="已支付金额" align="center" prop="paidAmount" />
|
<el-table-column label="项目工期" align="center" prop="projectTimeLimit" width="120">
|
||||||
<el-table-column label="挂账金额" align="center" prop="onAccountAmount" />
|
<template #default="scope">
|
||||||
|
<el-tag effect="plain">
|
||||||
|
{{ scope.row.projectTimeLimit + ' 天' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="总投资" align="center" prop="totalInvestment" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag effect="dark">
|
||||||
|
{{ scope.row.totalInvestment + ' 万元' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="合同金额" align="center" prop="contractAmount" >
|
||||||
|
<template #default="scope">
|
||||||
|
<el-tag effect="dark">
|
||||||
|
{{ scope.row.contractAmount + ' 万元' }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column label="项目进度" align="center" prop="projectSchedule">
|
<el-table-column label="项目进度" align="center" prop="projectSchedule">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :options="pro_project_schedule" :value="scope.row.projectSchedule"/>
|
<dict-tag :options="pro_project_schedule" :value="scope.row.projectSchedule"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="项目概述" align="center" prop="projectSummarize" />
|
<el-table-column label="计划开始时间" align="center" prop="scheduledStartTime" width="120"/>
|
||||||
<el-table-column label="项目二维码" align="center" prop="projectQrCode" />
|
<el-table-column label="计划完工时间" align="center" prop="plannedCompletionTime" width="120"/>
|
||||||
<el-table-column label="项目状态" align="center" prop="projectStatus" />
|
<el-table-column label="实际开始时间" align="center" prop="actualOperatingTime" width="120"/>
|
||||||
<el-table-column label="项目排序" align="center" prop="projectSort" />
|
<el-table-column label="实际完工时间" align="center" prop="actualCompletionTime" width="120"/>
|
||||||
<el-table-column label="删除标识" align="center" prop="isDel">
|
<el-table-column label="项目状态" align="center" prop="isDel">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<dict-tag :options="sys_is_del" :value="scope.row.isDel"/>
|
<dict-tag :options="sys_is_del" :value="scope.row.isDel"/>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
<el-table-column label="备注" align="center" prop="remark" />
|
<el-table-column label="创建时间" align="center" prop="createTime" width="180">
|
||||||
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
|
<template #default="scope">
|
||||||
|
<span>{{ parseTime(scope.row.createTime, '{y}-{m}-{d}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column label="操作" align="center" fixed="right" class-name="small-padding fixed-width">
|
||||||
<template #default="scope">
|
<template #default="scope">
|
||||||
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:proProjectInfo:edit']">修改</el-button>
|
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)" v-hasPermi="['manage:proProjectInfo:edit']">修改</el-button>
|
||||||
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:proProjectInfo:remove']">删除</el-button>
|
<el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)" v-hasPermi="['manage:proProjectInfo:remove']">删除</el-button>
|
||||||
|
@ -193,111 +148,266 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<!-- 添加或修改项目信息对话框 -->
|
<!-- 添加或修改项目信息对话框 -->
|
||||||
<el-dialog :title="title" v-model="open" width="500px" append-to-body>
|
<el-dialog :title="title" v-model="open" width="1080px" append-to-body>
|
||||||
<el-form ref="proProjectInfoRef" :model="form" :rules="rules" label-width="80px">
|
<el-form ref="proProjectInfoRef" :model="form" :rules="rules" label-width="100px">
|
||||||
<el-form-item label="所属单位" prop="deptId">
|
<el-tabs
|
||||||
<el-input v-model="form.deptId" placeholder="请输入所属单位" />
|
v-model="activeName"
|
||||||
</el-form-item>
|
type="card"
|
||||||
<el-form-item label="部门主键" prop="visDeptId">
|
class="demo-tabs"
|
||||||
<el-input v-model="form.visDeptId" placeholder="请输入部门主键" />
|
>
|
||||||
</el-form-item>
|
<el-tab-pane label="项目基本信息" name="base">
|
||||||
<el-form-item label="显示部门" prop="disDeptId">
|
<el-row :gutter="20">
|
||||||
<el-input v-model="form.disDeptId" placeholder="请输入显示部门" />
|
<el-col :span="16">
|
||||||
</el-form-item>
|
<el-form-item label="所属部门" prop="deptId">
|
||||||
<el-form-item label="项目名称" prop="projectName">
|
<el-tree-select
|
||||||
<el-input v-model="form.projectName" placeholder="请输入项目名称" />
|
v-model="form.deptId"
|
||||||
</el-form-item>
|
:data="deptOptions"
|
||||||
<el-form-item label="项目编号" prop="projectCode">
|
:props="{ value: 'id', label: 'label', children: 'children' }"
|
||||||
<el-input v-model="form.projectCode" placeholder="请输入项目编号" />
|
value-key="id"
|
||||||
</el-form-item>
|
placeholder="请选择所属部门"
|
||||||
<el-form-item label="项目简称" prop="simpleName">
|
check-strictly
|
||||||
<el-input v-model="form.simpleName" placeholder="请输入项目简称" />
|
style="width:100%"
|
||||||
</el-form-item>
|
/>
|
||||||
<el-form-item label="项目等级" prop="projectLevel">
|
</el-form-item>
|
||||||
<el-input v-model="form.projectLevel" placeholder="请输入项目等级" />
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
<el-form-item label="项目区县" prop="projectRegional">
|
<el-form-item label="显示层级" prop="disDeptId">
|
||||||
<el-input v-model="form.projectRegional" placeholder="请输入项目区县" />
|
<el-tree-select
|
||||||
</el-form-item>
|
v-model="form.disDeptId"
|
||||||
<el-form-item label="项目地址" prop="projectAddress">
|
:data="deptOptions"
|
||||||
<el-input v-model="form.projectAddress" placeholder="请输入项目地址" />
|
:props="{ value: 'id', label: 'label', children: 'children' }"
|
||||||
</el-form-item>
|
value-key="id"
|
||||||
<el-form-item label="项目建设属性" prop="projectNature">
|
placeholder="请选择显示层级"
|
||||||
<el-input v-model="form.projectNature" placeholder="请输入项目建设属性" />
|
check-strictly
|
||||||
</el-form-item>
|
style="width:100%"
|
||||||
<el-form-item label="许可证号" prop="licenceNumber">
|
/>
|
||||||
<el-input v-model="form.licenceNumber" placeholder="请输入许可证号" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="项目负责人" prop="projectPerson">
|
</el-row>
|
||||||
<el-input v-model="form.projectPerson" placeholder="请输入项目负责人" />
|
<el-row :gutter="20">
|
||||||
</el-form-item>
|
<el-col :span="16">
|
||||||
<el-form-item label="负责人电话" prop="projectPersonPhone">
|
<el-form-item label="项目名称" prop="projectName">
|
||||||
<el-input v-model="form.projectPersonPhone" placeholder="请输入负责人电话" />
|
<el-input v-model="form.projectName" maxlength="64" show-word-limit placeholder="请输入项目名称" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="经度" prop="longitude">
|
</el-col>
|
||||||
<el-input v-model="form.longitude" placeholder="请输入经度" />
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label="项目简称" prop="simpleName">
|
||||||
<el-form-item label="纬度" prop="latitude">
|
<el-input v-model="form.simpleName" maxlength="32" show-word-limit placeholder="请输入项目简称" />
|
||||||
<el-input v-model="form.latitude" placeholder="请输入纬度" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="项目工期" prop="projectTimeLimit">
|
</el-row>
|
||||||
<el-input v-model="form.projectTimeLimit" placeholder="请输入项目工期" />
|
<el-row :gutter="20">
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
<el-form-item label="总投资" prop="totalInvestment">
|
<el-form-item label="项目类型" prop="projectType">
|
||||||
<el-input v-model="form.totalInvestment" placeholder="请输入总投资" />
|
<el-select v-model="form.projectType" placeholder="请选择项目类型">
|
||||||
</el-form-item>
|
<el-option
|
||||||
<el-form-item label="建筑面积" prop="floorArea">
|
v-for="dict in pro_project_type"
|
||||||
<el-input v-model="form.floorArea" placeholder="请输入建筑面积" />
|
:key="dict.value"
|
||||||
</el-form-item>
|
:label="dict.label"
|
||||||
<el-form-item label="开累产值" prop="totalOutputValue">
|
:value="dict.value"
|
||||||
<el-input v-model="form.totalOutputValue" placeholder="请输入开累产值" />
|
></el-option>
|
||||||
</el-form-item>
|
</el-select>
|
||||||
<el-form-item label="计划完工时间" prop="plannedCompletionTime">
|
</el-form-item>
|
||||||
<el-input v-model="form.plannedCompletionTime" placeholder="请输入计划完工时间" />
|
</el-col>
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
<el-form-item label="计划开始时间" prop="scheduledStartTime">
|
<el-form-item label="项目负责人" prop="projectPerson">
|
||||||
<el-input v-model="form.scheduledStartTime" placeholder="请输入计划开始时间" />
|
<el-input v-model="form.projectPerson" maxlength="10" show-word-limit placeholder="请输入项目负责人" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item label="实际开始时间" prop="actualOperatingTime">
|
</el-col>
|
||||||
<el-input v-model="form.actualOperatingTime" placeholder="请输入实际开始时间" />
|
<el-col :span="8">
|
||||||
</el-form-item>
|
<el-form-item label="负责人电话" prop="projectPersonPhone">
|
||||||
<el-form-item label="实际完工时间" prop="actualCompletionTime">
|
<el-input v-model="form.projectPersonPhone" maxlength="11" show-word-limit placeholder="请输入负责人电话" />
|
||||||
<el-input v-model="form.actualCompletionTime" placeholder="请输入实际完工时间" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="合同总金额" prop="contractAmount">
|
</el-row>
|
||||||
<el-input v-model="form.contractAmount" placeholder="请输入合同总金额" />
|
<el-row :gutter="20">
|
||||||
</el-form-item>
|
<el-col :span="24">
|
||||||
<el-form-item label="已支付金额" prop="paidAmount">
|
<el-form-item label="项目地址" prop="projectAddress">
|
||||||
<el-input v-model="form.paidAmount" placeholder="请输入已支付金额" />
|
<el-input
|
||||||
</el-form-item>
|
v-model="addressInfos"
|
||||||
<el-form-item label="挂账金额" prop="onAccountAmount">
|
placeholder="请选择项目地址信息"
|
||||||
<el-input v-model="form.onAccountAmount" placeholder="请输入挂账金额" />
|
@focus="getMapInfo"
|
||||||
</el-form-item>
|
>
|
||||||
<el-form-item label="项目进度" prop="projectSchedule">
|
<template #prefix>
|
||||||
<el-input v-model="form.projectSchedule" placeholder="请输入项目进度" />
|
<el-icon class="el-input__icon"><Location /></el-icon>
|
||||||
</el-form-item>
|
</template>
|
||||||
<el-form-item label="项目概述" prop="projectSummarize">
|
</el-input>
|
||||||
<el-input v-model="form.projectSummarize" type="textarea" placeholder="请输入内容" />
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="项目二维码" prop="projectQrCode">
|
</el-row>
|
||||||
<el-input v-model="form.projectQrCode" placeholder="请输入项目二维码" />
|
<el-row :gutter="20">
|
||||||
</el-form-item>
|
<el-col :span="8">
|
||||||
<el-form-item label="项目排序" prop="projectSort">
|
<el-form-item label="项目工期" prop="projectTimeLimit">
|
||||||
<el-input v-model="form.projectSort" placeholder="请输入项目排序" />
|
<el-input v-model.number="form.projectTimeLimit" maxlength="10" show-word-limit placeholder="请输入项目工期" >
|
||||||
</el-form-item>
|
<template #append>天</template>
|
||||||
<el-form-item label="删除标识" prop="isDel">
|
</el-input>
|
||||||
<el-select v-model="form.isDel" placeholder="请选择删除标识">
|
</el-form-item>
|
||||||
<el-option
|
</el-col>
|
||||||
v-for="dict in sys_is_del"
|
<el-col :span="8">
|
||||||
:key="dict.value"
|
<el-form-item label="项目总投资" prop="totalInvestment">
|
||||||
:label="dict.label"
|
<el-input v-model.number="form.totalInvestment" maxlength="20" show-word-limit placeholder="请输入项目总投资">
|
||||||
:value="parseInt(dict.value)"
|
<template #append>万元</template>
|
||||||
></el-option>
|
</el-input>
|
||||||
</el-select>
|
</el-form-item>
|
||||||
</el-form-item>
|
</el-col>
|
||||||
<el-form-item label="备注" prop="remark">
|
<el-col :span="8">
|
||||||
<el-input v-model="form.remark" placeholder="请输入备注" />
|
<el-form-item label="合同总金额" prop="contractAmount">
|
||||||
</el-form-item>
|
<el-input v-model.number="form.contractAmount" maxlength="20" show-word-limit placeholder="请输入合同总金额">
|
||||||
|
<template #append>万元</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="建筑面积" prop="floorArea">
|
||||||
|
<el-input v-model.number="form.floorArea" maxlength="20" show-word-limit placeholder="请输入项目建筑面积">
|
||||||
|
<template #append>㎡</template>
|
||||||
|
</el-input>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="项目进度" prop="projectSchedule">
|
||||||
|
<el-select v-model="form.projectSchedule" placeholder="请选择项目进度" style="width:100%">
|
||||||
|
<el-option
|
||||||
|
v-for="dict in pro_project_schedule"
|
||||||
|
:key="dict.value"
|
||||||
|
:label="dict.label"
|
||||||
|
:value="dict.value"
|
||||||
|
></el-option>
|
||||||
|
</el-select>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="计划开工时间" prop="scheduledStartTime" >
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.scheduledStartTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择计划开工时间"
|
||||||
|
style="width:100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="计划完工时间" prop="plannedCompletionTime">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.plannedCompletionTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择计划完工时间"
|
||||||
|
style="width:100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="实际开工时间" prop="actualOperatingTime">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.actualOperatingTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择实际开工时间"
|
||||||
|
style="width:100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
<el-col :span="8">
|
||||||
|
<el-form-item label="实际完工时间" prop="actualCompletionTime">
|
||||||
|
<el-date-picker
|
||||||
|
v-model="form.actualCompletionTime"
|
||||||
|
type="date"
|
||||||
|
placeholder="请选择实际完工时间"
|
||||||
|
style="width:100%"
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="项目概述" prop="projectSummarize">
|
||||||
|
<el-input
|
||||||
|
v-model="form.projectSummarize"
|
||||||
|
type="textarea"
|
||||||
|
:rows="3"
|
||||||
|
placeholder="请输入项目概述"
|
||||||
|
maxlength="1024"
|
||||||
|
show-word-limit
|
||||||
|
/>
|
||||||
|
</el-form-item>
|
||||||
|
</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-col>
|
||||||
|
<el-col :span="1.5">
|
||||||
|
<el-button type="danger" icon="Delete" @click="handleDeleteDepts">删除</el-button>
|
||||||
|
</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>
|
||||||
|
</el-tab-pane>
|
||||||
|
<el-tab-pane label="项目大屏设置" name="setting">
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<el-form-item label="项目显示名" prop="orgName">
|
||||||
|
<el-input v-model="form.setting.orgName" maxlength="32" show-word-limit placeholder="请输入项目显示名" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="12">
|
||||||
|
<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-form-item label="项目平面图" prop="orgPlane">
|
||||||
|
<image-upload v-model="form.setting.orgPlane" :limit="3"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
<el-row :gutter="20">
|
||||||
|
<el-col :span="24">
|
||||||
|
<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-form-item label="项目视频" prop="orgVideo">
|
||||||
|
<file-upload v-model="form.setting.orgVideo" :limit="1" :fileType="['mp4']" :fileSize="100"/>
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
|
</el-row>
|
||||||
|
</el-tab-pane>
|
||||||
|
</el-tabs>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
<div class="dialog-footer">
|
<div class="dialog-footer">
|
||||||
|
@ -306,15 +416,21 @@
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
</el-dialog>
|
</el-dialog>
|
||||||
|
|
||||||
|
<baidu-map ref="mapRef" @docom="mapDocom"></baidu-map>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup name="ProProjectInfo">
|
<script setup name="ProProjectInfo">
|
||||||
|
import { deptTreeSelect } from "@/api/system/user";
|
||||||
|
import { projectDeptList } from "@/api/system/dept";
|
||||||
import { listProProjectInfo, getProProjectInfo, delProProjectInfo, addProProjectInfo, updateProProjectInfo } from "@/api/manage/proProjectInfo";
|
import { listProProjectInfo, getProProjectInfo, delProProjectInfo, addProProjectInfo, updateProProjectInfo } from "@/api/manage/proProjectInfo";
|
||||||
|
import BaiduMap from "@/components/BaiduMap/Map.vue";
|
||||||
|
|
||||||
const { proxy } = getCurrentInstance();
|
const { proxy } = getCurrentInstance();
|
||||||
const { sys_is_del } = proxy.useDict('sys_is_del');
|
const { pro_project_type, pro_project_schedule, pro_dept_type, sys_is_del } = proxy.useDict('pro_project_type', 'pro_project_schedule', 'pro_dept_type', 'sys_is_del');
|
||||||
|
|
||||||
|
const mapRef = ref("");
|
||||||
const proProjectInfoList = ref([]);
|
const proProjectInfoList = ref([]);
|
||||||
const open = ref(false);
|
const open = ref(false);
|
||||||
const loading = ref(true);
|
const loading = ref(true);
|
||||||
|
@ -324,9 +440,17 @@ const single = ref(true);
|
||||||
const multiple = ref(true);
|
const multiple = ref(true);
|
||||||
const total = ref(0);
|
const total = ref(0);
|
||||||
const title = ref("");
|
const title = ref("");
|
||||||
|
const activeName = ref('base')
|
||||||
|
const addressInfos = ref("");
|
||||||
|
const projectDeptsList = ref([]);
|
||||||
|
const checkedProjectDepts = ref([]);
|
||||||
|
|
||||||
|
const deptOptions = ref([]);
|
||||||
|
|
||||||
const data = reactive({
|
const data = reactive({
|
||||||
form: {},
|
form: {
|
||||||
|
setting:{}
|
||||||
|
},
|
||||||
queryParams: {
|
queryParams: {
|
||||||
pageNum: 1,
|
pageNum: 1,
|
||||||
pageSize: 10,
|
pageSize: 10,
|
||||||
|
@ -344,11 +468,30 @@ const data = reactive({
|
||||||
isDel: null,
|
isDel: null,
|
||||||
},
|
},
|
||||||
rules: {
|
rules: {
|
||||||
|
deptId: [{ required: true, message: "所属部门不能为空", trigger: "change" }],
|
||||||
|
disDeptId: [{ required: true, message: "显示层级不能为空", trigger: "change" }],
|
||||||
|
projectName: [{ required: true, message: "项目名称不能为空", trigger: "blur" }],
|
||||||
|
simpleName: [{ required: false, message: "项目简称不能为空", trigger: "blur" }],
|
||||||
|
projectType: [{ required: true, message: "项目类型不能为空", trigger: "change" }],
|
||||||
|
projectPerson: [{ required: true, message: "项目负责人不能为空", trigger: "blur" }],
|
||||||
|
projectPersonPhone: [{ required: true, message: "负责人电话不能为空", trigger: "blur" }],
|
||||||
|
projectAddress: [{ required: false, message: "项目地址不能为空", trigger: "blur" }],
|
||||||
|
projectTimeLimit: [{ required: true, message: "工程期限不能为空", trigger: "blur" }],
|
||||||
|
totalInvestment: [{ required: true, message: "项目总投资不能为空", trigger: "blur" }],
|
||||||
|
contractAmount: [{ required: true, message: "合同金额不能为空", trigger: "blur" }],
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
const { queryParams, form, rules } = toRefs(data);
|
const { queryParams, form, rules } = toRefs(data);
|
||||||
|
|
||||||
|
/** 地图选择 */
|
||||||
|
function mapDocom(pt, city) {
|
||||||
|
form.value.projectAddress = (city.address || "") + (city.poi_desc || "");
|
||||||
|
form.value.longitude = pt.lng.toFixed(5);
|
||||||
|
form.value.latitude = pt.lat.toFixed(5);
|
||||||
|
addressInfos.value = form.value.projectAddress + "," + form.value.longitude + "," + form.value.latitude;
|
||||||
|
}
|
||||||
|
|
||||||
/** 查询项目信息列表 */
|
/** 查询项目信息列表 */
|
||||||
function getList() {
|
function getList() {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
|
@ -406,7 +549,8 @@ function reset() {
|
||||||
createTime: null,
|
createTime: null,
|
||||||
updateBy: null,
|
updateBy: null,
|
||||||
updateTime: null,
|
updateTime: null,
|
||||||
remark: null
|
remark: null,
|
||||||
|
setting: {}
|
||||||
};
|
};
|
||||||
proxy.resetForm("proProjectInfoRef");
|
proxy.resetForm("proProjectInfoRef");
|
||||||
}
|
}
|
||||||
|
@ -448,10 +592,44 @@ function handleUpdate(row) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 参建单位序号 */
|
||||||
|
function rowProjectDeptsIndex({ row, rowIndex }) {
|
||||||
|
row.index = rowIndex + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 参建单位添加按钮操作 */
|
||||||
|
function handleAddDepts() {
|
||||||
|
let obj = {};
|
||||||
|
obj.deptType = "";
|
||||||
|
obj.deptName = "";
|
||||||
|
obj.leader = "";
|
||||||
|
obj.phone = "";
|
||||||
|
projectDeptsList.value.push(obj);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 参建单位删除按钮操作 */
|
||||||
|
function handleDeleteDepts() {
|
||||||
|
if (checkedProjectDepts.value.length == 0) {
|
||||||
|
proxy.$modal.msgError("请先选择要删除的参建单位!");
|
||||||
|
} else {
|
||||||
|
const projectDeptsList = projectDeptsList.value;
|
||||||
|
const checkedProjectDepts = checkedProjectDepts.value;
|
||||||
|
projectDeptsList.value = projectDeptsList.filter(function(item) {
|
||||||
|
return checkedProjectDepts.indexOf(item.index) == -1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** 复选框选中数据 */
|
||||||
|
function handleDeptsSelectionChange(selection) {
|
||||||
|
checkedProjectDepts.value = selection.map(item => item.index)
|
||||||
|
}
|
||||||
|
|
||||||
/** 提交按钮 */
|
/** 提交按钮 */
|
||||||
function submitForm() {
|
function submitForm() {
|
||||||
proxy.$refs["proProjectInfoRef"].validate(valid => {
|
proxy.$refs["proProjectInfoRef"].validate(valid => {
|
||||||
if (valid) {
|
if (valid) {
|
||||||
|
form.value.projectDeptsList = projectDeptsList.value;
|
||||||
if (form.value.id != null) {
|
if (form.value.id != null) {
|
||||||
updateProProjectInfo(form.value).then(response => {
|
updateProProjectInfo(form.value).then(response => {
|
||||||
proxy.$modal.msgSuccess("修改成功");
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
|
@ -469,6 +647,18 @@ function submitForm() {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//修改项目排序
|
||||||
|
function setProjectSort(row, val) {
|
||||||
|
let param = {
|
||||||
|
id: row.id,
|
||||||
|
projectSort: val,
|
||||||
|
};
|
||||||
|
updateProProjectInfo(param).then((response) => {
|
||||||
|
proxy.$modal.msgSuccess("修改成功");
|
||||||
|
getList();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/** 删除按钮操作 */
|
/** 删除按钮操作 */
|
||||||
function handleDelete(row) {
|
function handleDelete(row) {
|
||||||
const _ids = row.id || ids.value;
|
const _ids = row.id || ids.value;
|
||||||
|
@ -487,5 +677,19 @@ function handleExport() {
|
||||||
}, `proProjectInfo_${new Date().getTime()}.xlsx`)
|
}, `proProjectInfo_${new Date().getTime()}.xlsx`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** 查询部门下拉树结构 */
|
||||||
|
function getDeptTree() {
|
||||||
|
deptTreeSelect().then(response => {
|
||||||
|
deptOptions.value = response.data;
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
/** 地图选择 */
|
||||||
|
function getMapInfo(){
|
||||||
|
mapRef.value.showDlg();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
getList();
|
getList();
|
||||||
|
getDeptTree();
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue