Forráskód Böngészése

Merge branch 'master' of http://8.137.121.180:10880/longping/subject_gxj

Wayne 4 hónapja
szülő
commit
9b6d696c0f
22 módosított fájl, 965 hozzáadás és 758 törlés
  1. 4 2
      projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml
  2. 2 2
      projects-service/src/main/java/com/rtrh/projects/modules/projects/po/SubInfoGxj.java
  3. 46 41
      projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java
  4. 1 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/StatisticsVO.java
  5. 2 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/SubInfoTotalExcel.java
  6. 2 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoCbVO.java
  7. 2 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoTcVO.java
  8. 2 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoXjVO.java
  9. 3 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZjVO.java
  10. 2 0
      projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZkVO.java
  11. 454 102
      projects/src/main/java/com/rtrh/projects/web/controller/subject/SubInfoExportController.java
  12. 2 2
      projects/src/main/webapp/vmodules/project/projectInfo.jsp
  13. 197 373
      projects/src/main/webapp/vmodules/subject/subInfo/editSubInfo.jsp
  14. 46 29
      projects/src/main/webapp/vmodules/subject/subInfo/tz/cb.jsp
  15. 28 10
      projects/src/main/webapp/vmodules/subject/subInfo/tz/cb_sum.jsp
  16. 18 60
      projects/src/main/webapp/vmodules/subject/subInfo/tz/end.jsp
  17. 16 59
      projects/src/main/webapp/vmodules/subject/subInfo/tz/end_sum.jsp
  18. 33 14
      projects/src/main/webapp/vmodules/subject/subInfo/tz/main.jsp
  19. 28 8
      projects/src/main/webapp/vmodules/subject/subInfo/tz/main_sum.jsp
  20. 34 31
      projects/src/main/webapp/vmodules/subject/subInfo/tz/new.jsp
  21. 32 14
      projects/src/main/webapp/vmodules/subject/subInfo/tz/new_sum.jsp
  22. 11 11
      projects/src/main/webapp/vmodules/subject/subInfo/tz/xmzk.jsp

+ 4 - 2
projects-service/src/main/java/com/rtrh/projects/modules/projects/mapper/SubInfoMapper.xml

@@ -191,8 +191,9 @@
                 and s.indus_kind like CONCAT(#{vo.indusKind}, '%')
             </if>
             <if test="vo.iks!=null">
+                and s.indus_kind IN
                 <foreach collection="vo.iks" open="(" close=")" separator="," item="item">
-                    and s.indus_kind IN (#{item})
+                    (#{item})
                 </foreach>
             </if>
             <if test="vo.startAmt!=null and vo.startAmt!=''">
@@ -384,7 +385,8 @@
         SELECT sub_info.subject_id as subjectId,
                sub_info.sub_name as subName,
                sub_info.amt_total as amtTotal,
-               sub_info.indus_kind as indusKind
+               sub_info.indus_kind as indusKind,
+               sub_info.status as status
                from sub_info
         WHERE sub_info.logic_delete_flag = 0
             <if test="status != null and status != ''">

+ 2 - 2
projects-service/src/main/java/com/rtrh/projects/modules/projects/po/SubInfoGxj.java

@@ -156,8 +156,8 @@ public class SubInfoGxj extends TableBaseColomn implements Serializable {
     private String kindNature;
 
     // 前期手续数量
-    private String preProceNum;
-    private String preEndNum;
+    private Long preProceNum;
+    private Long preEndNum;
     private String yearAmtSj;
 
     private String preContent;

+ 46 - 41
projects-service/src/main/java/com/rtrh/projects/modules/projects/service/impl/SubInfoQueryServiceImpl.java

@@ -166,12 +166,12 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
     public List<SubInfoGxj> queryAll(LoginUserVO loginUser, SubInfoQueryTzVO queryVO) {
         queryVO.setMonth(DateUtil.thisYear() + "01");
         List<SubInfoGxj> data = subInfoMapper.queryPage(queryVO);
-        if (CollectionUtil.isEmpty(data)){
+        if (CollectionUtil.isEmpty(data)) {
             return new ArrayList<>();
         }
         List<String> ids = data.stream().map(SubInfoGxj::getId).collect(Collectors.toList());
         // 项目前期手续办理情况
-        List<SubInfoFixDetailPreNew> preNewList =  subInfoMapper.selectSubPreNewBySubIds(ids);
+        List<SubInfoFixDetailPreNew> preNewList = subInfoMapper.selectSubPreNewBySubIds(ids);
         Map<String, List<SubInfoFixDetailPreNew>> preNewMap = preNewList.stream().collect(Collectors.groupingBy(SubInfoFixDetailPreNew::getSubId));
 
         // 查询项目 最新月报内容(建设进度)
@@ -186,43 +186,46 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
                 e.setSubjectName(kindMap.get(e.getSubjectId()));
                 // 除了储备和新建项目外 其余项目进度为月报内容
                 if (!Lists.newArrayList(SubInfoStatusEnum.CB.getCode(), SubInfoStatusEnum.XJ.getCode()).contains(e.getStatus())) {
-                    e.setProgress(rptContentMap.getOrDefault(e.getSubId(),e.getProgress()));
+                    e.setProgress(rptContentMap.getOrDefault(e.getSubId(), e.getProgress()));
                 }
                 // 新建库前期手续
                 if (SubInfoStatusEnum.XJ.getCode().equals(e.getStatus())) {
-                    if (CollUtil.isNotEmpty(preNewMap.get(e.getSubId()))){
+                    if (CollUtil.isNotEmpty(preNewMap.get(e.getSubId()))) {
                         Map<String, Long> numMap = preNewMap.get(e.getSubId()).stream().collect(Collectors.groupingBy(SubInfoFixDetailPreNew::getStatusConf, Collectors.counting()));
-                        e.setPreProceNum(numMap.getOrDefault("1", 0L) + "");
-                        e.setPreEndNum(numMap.getOrDefault("2", 0L) + "");
+                        e.setPreProceNum(numMap.getOrDefault("1", 0L));
+                        e.setPreEndNum(numMap.getOrDefault("2", 0L));
+                    } else {
+                        e.setPreProceNum(0L);
+                        e.setPreEndNum(0L);
                     }
                 }
 
                 // 项目前期手续办理情况
                 List<SubInfoFixDetailPreNew> subInfoFixDetailPreNewList = preNewMap.get(e.getId());
                 StringBuilder sb = new StringBuilder();
-                if (com.rtrh.common.util.CollectionUtil.isNotEmpty(subInfoFixDetailPreNewList)){
+                if (com.rtrh.common.util.CollectionUtil.isNotEmpty(subInfoFixDetailPreNewList)) {
                     //已经完成的手续
                     StringBuilder end = new StringBuilder("已完成:");
                     //正在办理的手续
                     StringBuilder yellow = new StringBuilder("进行中:");
                     //判断是否有已完成手续
-                    boolean endBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"2".equals(f.getStatusConf()));
+                    boolean endBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f -> "2".equals(f.getStatusConf()));
                     //判断是否有正在进行手续
-                    boolean yellowBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f->"1".equals(f.getStatusConf()));
-                    subInfoFixDetailPreNewList.forEach(f->{
-                        if ("1".equals(f.getStatusConf())){
+                    boolean yellowBoolean = subInfoFixDetailPreNewList.stream().anyMatch(f -> "1".equals(f.getStatusConf()));
+                    subInfoFixDetailPreNewList.forEach(f -> {
+                        if ("1".equals(f.getStatusConf())) {
                             yellow.append(f.getTitle()).append(",");
-                        }else if ("2".equals(f.getStatusConf())){
+                        } else if ("2".equals(f.getStatusConf())) {
                             end.append(f.getTitle()).append(",");
                         }
                     });
-                    if (endBoolean){
-                        sb.append(end, 0, end.length()-1).append("。");
+                    if (endBoolean) {
+                        sb.append(end, 0, end.length() - 1).append("。");
                     }
-                    if (yellowBoolean){
-                        sb.append(yellow, 0, yellow.length()-1).append("。");
+                    if (yellowBoolean) {
+                        sb.append(yellow, 0, yellow.length() - 1).append("。");
                     }
-                    if (!endBoolean && !yellowBoolean){
+                    if (!endBoolean && !yellowBoolean) {
                         sb.append("暂无手续办理情况!");
                     }
                     e.setPreContent(sb.toString());
@@ -251,6 +254,16 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
 
         PageHelper.startPage(page.getPageNo(), page.getPageSize());
         List<SubInfoGxj> data = this.queryAll(loginUser, queryVO);
+        data.forEach(e->{
+            if (StringUtils.isNotBlank(e.getContent())){
+                int maxLength = Math.min(e.getContent().length(), 100);
+                e.setContent(e.getContent().substring(0, maxLength)+"...");
+            }
+            if (StringUtils.isNotBlank(e.getProgress())){
+                int maxLength = Math.min(e.getProgress().length(), 100);
+                e.setProgress(e.getProgress().substring(0, maxLength)+"...");
+            }
+        });
         PageInfo<SubInfoGxj> pageInfo = new PageInfo<>(data);
         page.setList(data);
         page.setTotalCount(pageInfo.getTotal());
@@ -265,44 +278,36 @@ public class SubInfoQueryServiceImpl implements SubInfoQueryService {
             num = list.stream().filter(e -> queryVO.getStatus().equals(e.getStatus())).count();
         }
         // abc类统计
-        Map<String, Long> abc = list.stream().filter(e -> StringUtils.isNotBlank(e.getAbc())).collect(Collectors.groupingBy(SubInfoGxj::getAbc, Collectors.counting()));
+        Map<String, Long> abc = list.stream().collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getAbc(), "."), Collectors.counting()));
         // 建设地点统计
         List<TSystable> jsddDict = tSysTableService.getByKind(SysTableKind.JSDD);
-        Map<String, Long> subject = list.stream()
-                .filter(e -> StringUtils.isNotBlank(e.getSubjectId()))
-                .collect(Collectors.groupingBy(SubInfoGxj::getSubjectId, Collectors.counting()));
+        Map<String, String> jsddNameMap = jsddDict.stream().collect(Collectors.toMap(TSystable::getCode, TSystable::getTitle));
+        Map<String, Long> subject = list.stream().collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getSubjectId(), "."), Collectors.counting()));
         List<StatisticsVO.KvNum> jsddList = new ArrayList<>();
         subject.forEach((k, v) -> {
-            jsddDict.stream()
-                    .filter(d -> d.getCode().equals(k))
-                    .findFirst()
-                    .ifPresent(d -> {
-                        jsddList.add(new StatisticsVO.KvNum()
-                                .setCode(d.getCode())
-                                .setName(d.getTitle())
-                                .setNum(v));
-                    });
+            jsddList.add(new StatisticsVO.KvNum()
+                    .setCode(k)
+                    .setName(jsddNameMap.getOrDefault(k, ""))
+                    .setNum(v));
         });
         // 行业统计
         List<TSystable> hyflDict = tSysTableService.getByKind(SysTableKind.HYFL);
-        Map<String, Long> indusKind = list.stream().filter(e -> StringUtils.isNotBlank(e.getIndusKind())).collect(Collectors.groupingBy(SubInfoGxj::getIndusKind, Collectors.counting()));
+        Map<String, String> hyflNameMap = hyflDict.stream().collect(Collectors.toMap(TSystable::getCode, TSystable::getTitle));
+        Map<String, Long> indusKind = list.stream()
+                .collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getIndusKind(), "."), Collectors.counting()));
         List<StatisticsVO.KvNum> hyflList = new ArrayList<>();
         indusKind.forEach((k, v) -> {
-            hyflDict.stream().filter(d -> d.getId().equals(k))
-                    .findFirst()
-                    .ifPresent(d -> {
-                        hyflList.add(new StatisticsVO.KvNum()
-                                .setCode(d.getId())
-                                .setName(d.getTitle())
-                                .setNum(v));
-                    });
+            hyflList.add(new StatisticsVO.KvNum()
+                    .setCode(k)
+                    .setName(hyflNameMap.getOrDefault(k, ""))
+                    .setNum(v));
         });
         return new StatisticsVO()
-                .setCbNum(num)
                 .setNum(num)
                 .setANum(abc.getOrDefault("A", 0L))
                 .setBNum(abc.getOrDefault("B", 0L))
-                .setCNum(abc.getOrDefault("C", 0L))
+                .setCNum(abc.getOrDefault("C", 0L) + abc.getOrDefault("c", 0L))
+                .setNNum(abc.getOrDefault(".", 0L))
                 .setJsddData(jsddList)
                 .setHyflData(hyflList);
     }

+ 1 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/StatisticsVO.java

@@ -32,6 +32,7 @@ public class StatisticsVO {
      * C类数量
      */
     private Long cNum;
+    private Long nNum;
 
     /**
      * 行业分类数据

+ 2 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/SubInfoTotalExcel.java

@@ -15,4 +15,6 @@ public class SubInfoTotalExcel {
 
     private String induskind;   //行业id
 
+    private String status;   //项目状态
+
 }

+ 2 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoCbVO.java

@@ -7,6 +7,8 @@ import java.math.BigDecimal;
 
 @Data
 public class SubInfoCbVO {
+    @Excel(name = "序号")
+    private String index;
 
     @Excel(name = "项目名称",width = 20.0)
     private String subName;

+ 2 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoTcVO.java

@@ -9,6 +9,8 @@ import java.util.Date;
 
 @Data
 public class SubInfoTcVO {
+    @Excel(name = "序号")
+    private String index;
 
     @Excel(name = "项目名称",width = 20.0)
     private String subName;

+ 2 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoXjVO.java

@@ -9,6 +9,8 @@ import java.util.Date;
 
 @Data
 public class SubInfoXjVO {
+    @Excel(name = "序号")
+    private String index;
 
     @Excel(name = "项目名称",width = 20.0)
     private String subName;

+ 3 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZjVO.java

@@ -9,6 +9,9 @@ import java.util.Date;
 
 @Data
 public class SubInfoZjVO {
+    @Excel(name = "序号")
+    private String index;
+
     @Excel(name = "项目名称",width = 20.0)
     private String subName;
 

+ 2 - 0
projects-service/src/main/java/com/rtrh/projects/modules/projects/vo/export/SubInfoZkVO.java

@@ -9,6 +9,8 @@ import java.util.Date;
 
 @Data
 public class SubInfoZkVO {
+    @Excel(name = "序号")
+    private String index;
 
     @Excel(name = "项目名称",width = 20.0)
     private String subName;

+ 454 - 102
projects/src/main/java/com/rtrh/projects/web/controller/subject/SubInfoExportController.java

@@ -14,6 +14,7 @@ import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
 
 import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.handler.inter.IExcelExportServer;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.io.IoUtil;
@@ -44,6 +45,7 @@ import com.rtrh.projects.modules.utils.StringUtils;
 import com.rtrh.projects.outapi.result.JsonResult;
 import com.rtrh.projects.web.util.SheetData;
 import com.rtrh.projects.web.util.SheetHead;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.xssf.streaming.SXSSFSheet;
@@ -833,31 +835,264 @@ public class SubInfoExportController extends BaseController {
             }
         }
     }
+    // 将数字转换为中文数字的方法
+    public static String toChineseNumber(int num) {
+        String[] chineseDigits = {"", "一", "二", "三", "四", "五", "六", "七", "八", "九"};
+        String[] chineseUnits = {"", "十", "百", "千"};
+
+        StringBuilder result = new StringBuilder();
+        int unitPosition = 0;
+
+        while (num > 0) {
+            int digit = num % 10;
+            if (digit != 0) {
+                result.insert(0, chineseDigits[digit] + chineseUnits[unitPosition]);
+            } else if (result.length() > 0 && result.charAt(0) != '零') {
+                result.insert(0, "零");
+            }
+            num /= 10;
+            unitPosition++;
+        }
+
+        // 处理特殊情况,比如 "一十" -> "十"
+        if (result.length() > 1 && result.charAt(0) == '一' && result.charAt(1) == '十') {
+            result.deleteCharAt(0);
+        }
 
+        return result.toString();
+    }
     /**
-     * 导出明细
+     * 4库/总库 导出明细
      *
      * @param response
      */
     @PostMapping("/exportDetailExcel")
     public void exportDetailExcel(HttpServletResponse response, @RequestBody SubInfoQueryTzVO queryVO) {
         List<SubInfoGxj> list = subInfoQueryService.queryAll(getCurUser().getLoginUser(), queryVO);
+        // 行业字典
+        Map<String, String> hyDictMap = subInduService.queryParentAll().stream().collect(Collectors.toMap(SubIndu::getCode, SubIndu::getTitle));
+        // 按行业分组
+        Map<String, List<SubInfoGxj>> groupMap = list.stream()
+                .collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getIndusKind(), "未知行业")));
         Workbook workbook;
         if (SubInfoStatusEnum.CB.getCode().equals(queryVO.getStatus())) {
-            workbook = exportExcel(list, SubInfoCbVO.class, "“四个一批”工业项目表(储备项目库)", "储备项目库");
-        } else if (SubInfoStatusEnum.XJ.getCode().equals(queryVO.getStatus())) {
-            workbook = exportExcel(list, SubInfoXjVO.class, "“四个一批”工业项目表(新建项目库)", "新建项目库");
-        } else if (SubInfoStatusEnum.ZJ.getCode().equals(queryVO.getStatus())) {
-            workbook = exportExcel(list, SubInfoZjVO.class, "“四个一批”工业项目表(在建项目库)", "在建项目库");
-        } else if (SubInfoStatusEnum.TC.getCode().equals(queryVO.getStatus())) {
-            workbook = exportExcel(list, SubInfoTcVO.class, "“四个一批”工业项目表(投产项目库)", "投产项目库");
-        } else {
-            workbook = exportExcel(list, SubInfoZkVO.class, "“四个一批”工业项目表(项目总库)", "项目总库");
+            List<SubInfoCbVO> exportList = new ArrayList<>();
+            // 合计行
+            SubInfoCbVO hjCount = new SubInfoCbVO();
+            hjCount.setIndex(String.format("合计(%s个)",list.size()));
+            exportList.add(hjCount);
+
+            int index = 1;
+            List<Integer> allSize = new ArrayList<>();
+            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
+                String key = entry.getKey();
+                List<SubInfoGxj> value = entry.getValue();
+                List<SubInfoCbVO> hyList = new ArrayList<>();
+                // 行业合计行
+                SubInfoCbVO hyCount = new SubInfoCbVO();
+                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+                // 每条数据行
+                hyList.add(hyCount);
+                for (int i = 0; i < value.size(); i++) {
+                    SubInfoGxj subInfoGxj = value.get(i);
+                    SubInfoCbVO vo = new SubInfoCbVO();
+                    BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setIndex(i + 1 + "");
+                    hyList.add(vo);
+                }
+                // 添加前计算合并行
+                allSize.add(exportList.size() + 2);
+                exportList.addAll(hyList);
+                index++;
+            }
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("“四个一批”工业项目表(储备项目库)");
+            exportParams.setSheetName("储备项目库");
+            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoCbVO.class, exportList);
+            extracted(response, list, workbook, allSize);
+        }else if (SubInfoStatusEnum.XJ.getCode().equals(queryVO.getStatus())){
+            List<SubInfoXjVO> exportList = new ArrayList<>();
+            // 合计行
+            SubInfoXjVO hjCount = new SubInfoXjVO();
+            hjCount.setIndex(String.format("合计(%s个)",list.size()));
+            exportList.add(hjCount);
+
+            int index = 1;
+            List<Integer> allSize = new ArrayList<>();
+            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
+                String key = entry.getKey();
+                List<SubInfoGxj> value = entry.getValue();
+                List<SubInfoXjVO> hyList = new ArrayList<>();
+                // 行业合计行
+                SubInfoXjVO hyCount = new SubInfoXjVO();
+                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+                // 每条数据行
+                hyList.add(hyCount);
+                for (int i = 0; i < value.size(); i++) {
+                    SubInfoGxj subInfoGxj = value.get(i);
+                    SubInfoXjVO vo = new SubInfoXjVO();
+                    BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setIndex(i + 1 + "");
+                    hyList.add(vo);
+                }
+                // 添加前计算合并行
+                allSize.add(exportList.size() + 2);
+                exportList.addAll(hyList);
+                index++;
+            }
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("“四个一批”工业项目表(新建项目库)");
+            exportParams.setSheetName("新建项目库");
+            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoXjVO.class, exportList);
+            extracted(response, list, workbook, allSize);
+        }else if (SubInfoStatusEnum.ZJ.getCode().equals(queryVO.getStatus())){
+            List<SubInfoZjVO> exportList = new ArrayList<>();
+            // 合计行
+            SubInfoZjVO hjCount = new SubInfoZjVO();
+            hjCount.setIndex(String.format("合计(%s个)",list.size()));
+            exportList.add(hjCount);
+
+            int index = 1;
+            List<Integer> allSize = new ArrayList<>();
+            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
+                String key = entry.getKey();
+                List<SubInfoGxj> value = entry.getValue();
+                List<SubInfoZjVO> hyList = new ArrayList<>();
+                // 行业合计行
+                SubInfoZjVO hyCount = new SubInfoZjVO();
+                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+                // 每条数据行
+                hyList.add(hyCount);
+                for (int i = 0; i < value.size(); i++) {
+                    SubInfoGxj subInfoGxj = value.get(i);
+                    SubInfoZjVO vo = new SubInfoZjVO();
+                    BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setIndex(i + 1 + "");
+                    hyList.add(vo);
+                }
+                // 添加前计算合并行
+                allSize.add(exportList.size() + 2);
+                exportList.addAll(hyList);
+                index++;
+            }
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("“四个一批”工业项目表(在建项目库)");
+            exportParams.setSheetName("在建项目库");
+            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoZjVO.class, exportList);
+            extracted(response, list, workbook, allSize);
+        }else if(SubInfoStatusEnum.TC.getCode().equals(queryVO.getStatus())) {
+            List<SubInfoTcVO> exportList = new ArrayList<>();
+            // 合计行
+            SubInfoTcVO hjCount = new SubInfoTcVO();
+            hjCount.setIndex(String.format("合计(%s个)",list.size()));
+            exportList.add(hjCount);
+
+            int index = 1;
+            List<Integer> allSize = new ArrayList<>();
+            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
+                String key = entry.getKey();
+                List<SubInfoGxj> value = entry.getValue();
+                List<SubInfoTcVO> hyList = new ArrayList<>();
+                // 行业合计行
+                SubInfoTcVO hyCount = new SubInfoTcVO();
+                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+                // 每条数据行
+                hyList.add(hyCount);
+                for (int i = 0; i < value.size(); i++) {
+                    SubInfoGxj subInfoGxj = value.get(i);
+                    SubInfoTcVO vo = new SubInfoTcVO();
+                    BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setIndex(i + 1 + "");
+                    hyList.add(vo);
+                }
+                // 添加前计算合并行
+                allSize.add(exportList.size() + 2);
+                exportList.addAll(hyList);
+                index++;
+            }
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("“四个一批”工业项目表(投产项目库)");
+            exportParams.setSheetName("投产项目库");
+            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoTcVO.class, exportList);
+            extracted(response, list, workbook, allSize);
+        }else {
+            List<SubInfoZkVO> exportList = new ArrayList<>();
+            // 合计行
+            SubInfoZkVO hjCount = new SubInfoZkVO();
+            hjCount.setIndex(String.format("合计(%s个)",list.size()));
+            exportList.add(hjCount);
+
+            int index = 1;
+            List<Integer> allSize = new ArrayList<>();
+            for (Map.Entry<String, List<SubInfoGxj>> entry : groupMap.entrySet()){
+                String key = entry.getKey();
+                List<SubInfoGxj> value = entry.getValue();
+                List<SubInfoZkVO> hyList = new ArrayList<>();
+                // 行业合计行
+                SubInfoZkVO hyCount = new SubInfoZkVO();
+                hyCount.setIndex(String.format("%s、%s( %s个 )",toChineseNumber(index), hyDictMap.getOrDefault(key, key), value.size()));
+                // 每条数据行
+                hyList.add(hyCount);
+                for (int i = 0; i < value.size(); i++) {
+                    SubInfoGxj subInfoGxj = value.get(i);
+                    SubInfoZkVO vo = new SubInfoZkVO();
+                    BeanUtils.copyProperties(subInfoGxj,vo);
+                    vo.setIndex(i + 1 + "");
+                    hyList.add(vo);
+                }
+                // 添加前计算合并行
+                allSize.add(exportList.size() + 2);
+                exportList.addAll(hyList);
+                index++;
+            }
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("“四个一批”工业项目表(项目总库)");
+            exportParams.setSheetName("项目总库");
+            workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoZkVO.class, exportList);
+            // workbook = ExcelExportUtil.exportBigExcel(exportParams, SubInfoZkVO.class, new IExcelExportServer() {
+            //     /**
+            //      * obj 就是下面的限制条件
+            //      * page 是页数,他是在分页进行文件转换,page每次+1
+            //      */
+            //     @Override
+            //     public List<Object> selectListForExcelExport(Object obj, int page) {
+            //         int pageSize = 100;
+            //         int fromIndex = (page - 1) * pageSize;
+            //         int toIndex = Math.min(fromIndex + pageSize, exportList.size());
+            //
+            //         // 如果 fromIndex 超过了列表大小,返回空列表
+            //         if (fromIndex >= exportList.size()) {
+            //             return null;
+            //         }
+            //         // 使用 subList 方法获取分页后的子列表
+            //         List<Object> list1 = new ArrayList<>();
+            //         List<SubInfoZkVO> zkVOList = exportList.subList(fromIndex, toIndex);
+            //         list1.addAll(zkVOList);
+            //         return list1;
+            //     }
+            // }, (exportList.size() / 10000) + 1);
+            extracted(response, list, workbook, allSize);
         }
+    }
+
+    private void extracted(HttpServletResponse response, List<SubInfoGxj> list, Workbook workbook, List<Integer> allSize) {
         response.setContentType("application/xlsx;charset=utf-8");
         response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目明细表") + System.currentTimeMillis() + ".xlsx");
-        // workbook.getSheetAt(0).autoSizeColumn(2);
+        // 合并单元格
+        CellStyle nonCenterCellStyle = createNonCenterBoldCellStyle(workbook);
         Sheet sheet = workbook.getSheetAt(0);
+        allSize.add(2);
+        for (Integer row : allSize) {
+            sheet.addMergedRegion(new CellRangeAddress(row, row, 0, 3));
+            // 获取合并区域的左上角单元格并设置样式
+            Row mergedRow = sheet.getRow(row);
+            if (mergedRow != null) {
+                Cell cell = mergedRow.getCell(0);
+                if (cell != null) {
+                    cell.setCellStyle(nonCenterCellStyle);
+                }
+            }
+        }
         // 设置自适应行高,i为需要自适应行高的起始行号, 起始行号为3 但是因为下标从0开始3需要减一,因为表格是循环生成,需要一行一行设置自适应高度
         for (int i = 2; i <= list.size() + 1; i++) {
             sheet.getRow(i).setHeight((short) -1);
@@ -869,12 +1104,35 @@ public class SubInfoExportController extends BaseController {
         }
     }
 
-    private <T> Workbook exportExcel(List<SubInfoGxj> list, Class<T> clazz, String title, String sheetName) {
+    private ExportParams getExportParams() {
         ExportParams exportParams = new ExportParams();
+        exportParams.setType(ExcelType.XSSF);
+        return exportParams;
+    }
+
+    /**
+     * 创建非居中且加粗的单元格样式
+     */
+    private static CellStyle createNonCenterBoldCellStyle(Workbook workbook) {
+        // 创建字体对象并设置为加粗
+        Font font = workbook.createFont();
+        font.setBold(true);  // 设置字体为加粗
+        // 创建单元格样式
+        CellStyle cellStyle = workbook.createCellStyle();
+        // 设置字体
+        cellStyle.setFont(font);
+        // 设置水平对齐方式为左对齐(非居中)
+        cellStyle.setAlignment(HorizontalAlignment.LEFT);
+        // 设置垂直对齐方式为居中
+        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
+        return cellStyle;
+    }
+
+    private <T> Workbook exportExcel(List<SubInfoGxj> list, Class<T> clazz, String title, String sheetName) {
+        ExportParams exportParams = getExportParams();
         exportParams.setTitle(title);
         exportParams.setSheetName(sheetName);
         exportParams.setType(ExcelType.XSSF);
-
         List<T> voList = list.stream()
                 .map(e -> {
                     T vo = BeanUtils.instantiateClass(clazz);
@@ -882,12 +1140,15 @@ public class SubInfoExportController extends BaseController {
                     return vo;
                 })
                 .collect(Collectors.toList());
-
         return ExcelExportUtil.exportExcel(exportParams, clazz, voList);
     }
-
+    private ExcelExportEntity getExcelExportEntity(String name, Object key, int width) {
+        ExcelExportEntity excelExportEntity = new ExcelExportEntity(name, key, width);
+        excelExportEntity.setWidth(width);
+        return excelExportEntity;
+    }
     /**
-     * 4库导出
+     * 4库导出总表
      *
      * @param response
      * @param vo
@@ -899,93 +1160,55 @@ public class SubInfoExportController extends BaseController {
         List<TSystable> jsddDict = tSysTableService.getByKind(SysTableKind.JSDD);
         Map<String, String> jsddMap = jsddDict.stream().collect(Collectors.toMap(TSystable::getCode, TSystable::getTitle));
         Map<String, String> hyflMap = subInduService.queryParentAll().stream().collect(Collectors.toMap(SubIndu::getCode, SubIndu::getTitle));
-        // 处理数据
-        List<SubInfoTotalInfoVO> exportData = new ArrayList<>();
-        if (CollectionUtil.isNotEmpty(list)) {
-            // 1.按属地分
-            List<SubInfoTotalInfoVO> ddList = list.stream()
-                    .collect(Collectors.groupingBy(SubInfoTotalExcel::getSubjectId))
-                    .entrySet().stream()
-                    .map(entry -> new SubInfoTotalInfoVO(
-                            "按属地分",
-                            jsddMap.getOrDefault(entry.getKey(), entry.getKey()),
-                            entry.getValue().size(),
-                            entry.getValue().stream()
-                                    .map(SubInfoTotalExcel::getAmtTotal)
-                                    .reduce(BigDecimal.ZERO, BigDecimal::add)
-                                    .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
-                    ))
-                    .collect(Collectors.toList());
-
-            // 2.按金额分 定义分组边界
-            Map<String, BigDecimal> groupBoundaries = new LinkedHashMap<>();
-            groupBoundaries.put("10亿元以下", new BigDecimal("100000"));
-            groupBoundaries.put("10-50亿元", new BigDecimal("500000"));
-            groupBoundaries.put("50-100亿元", new BigDecimal("1000000"));
-            List<SubInfoTotalInfoVO> amtList = list.stream()
-                    .collect(Collectors.groupingBy(transaction -> {
-                        for (Map.Entry<String, BigDecimal> entry : groupBoundaries.entrySet()) {
-                            if (transaction.getAmtTotal().compareTo(entry.getValue()) < 0) {
-                                return entry.getKey();
-                            }
-                        }
-                        return "100亿元以上"; // 超过最高范围的默认分组
-                    }))
-                    .entrySet().stream()
-                    .map(entry -> new SubInfoTotalInfoVO(
-                            "按金额分",
-                            entry.getKey(),
-                            entry.getValue().size(),
-                            entry.getValue().stream()
-                                    .map(SubInfoTotalExcel::getAmtTotal)
-                                    .reduce(BigDecimal.ZERO, BigDecimal::add)
-                                    .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
-                    ))
-                    .collect(Collectors.toList());
-
-            // 3.按行业分
-            List<SubInfoTotalInfoVO> hyList = list.stream()
-                    .collect(Collectors.groupingBy(transaction ->{
-                        String code = transaction.getInduskind();
-                        // 确保code不为空且长度至少为2
-                        if (code == null || code.length() < 2) {
-                            return "未知行业";  // 默认未知行业
-                        }
-                        return code.substring(0, 2);
-                    }))
-                    .entrySet().stream()
-                    .map(entry -> new SubInfoTotalInfoVO(
-                            "按行业分",
-                            hyflMap.getOrDefault(entry.getKey(),entry.getKey()),
-                            entry.getValue().size(),
-                            entry.getValue().stream()
-                                    .map(SubInfoTotalExcel::getAmtTotal)
-                                    .reduce(BigDecimal.ZERO, BigDecimal::add)
-                                    .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
-                            )
-                    )
-                    .collect(Collectors.toList());
-            exportData.addAll(ddList);
-            exportData.addAll(amtList);
-            exportData.addAll(hyList);
-            BigDecimal reduce = list.stream().map(SubInfoTotalExcel::getAmtTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
-            exportData.add(new SubInfoTotalInfoVO("合计", "合计", list.size(), reduce.divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)));
-            // 4.导出
-            ExportParams exportParams = new ExportParams();
-            exportParams.setTitle("项目库基本情况");
-            exportParams.setSheetName("项目库基本情况");
-            exportParams.setType(ExcelType.XSSF);
-            int mergeTotalStartRow = exportData.size() + 1;
-            Workbook workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoTotalInfoVO.class, exportData);
+        // 0.项目总库导出总表
+        if (StringUtils.isBlank(vo.getStatus())){
+            // 0.1 按区域构建表头
+            List<String> subjectIds = list.stream().map(SubInfoTotalExcel::getSubjectId).distinct().collect(Collectors.toList());
+            // 创建主表头
+            List<ExcelExportEntity> entityList = new ArrayList<>();
+            // 添加表头
+            ExcelExportEntity lbEntity = new ExcelExportEntity("项目类别", "subjectName");
+            entityList.add(lbEntity);
+
+            ExcelExportEntity hj = new ExcelExportEntity("合计", "hj");
+            List<ExcelExportEntity> subHeadEntities = new ArrayList<>();
+            subHeadEntities.add(getExcelExportEntity("项目个数", "count", 12));
+            subHeadEntities.add(getExcelExportEntity("计划总投资(亿元)", "amt", 20));
+            hj.setList(subHeadEntities);
+            entityList.add(hj);
+
+            for (String subjectId : subjectIds) {
+                ExcelExportEntity jsdd = new ExcelExportEntity(jsddMap.get(subjectId), subjectId);
+                List<ExcelExportEntity> ddHead = new ArrayList<>();
+                ddHead.add(getExcelExportEntity("项目个数", "count", 12));
+                ddHead.add(getExcelExportEntity("计划总投资(亿元)", "amt", 20));
+                jsdd.setList(ddHead);
+                entityList.add(jsdd);
+            }
+            // 0.2 构建数据
+            Map<String, List<SubInfoTotalExcel>> statusGroup = list.stream().collect(Collectors.groupingBy(SubInfoTotalExcel::getStatus));
+            List<Map<String,Object>> dataList = new ArrayList<>();
+            // 0.2.1 储备项目
+            List<SubInfoTotalExcel> cb = statusGroup.get(SubInfoStatusEnum.CB.getCode());
+            List<SubInfoTotalExcel> xj = statusGroup.get(SubInfoStatusEnum.XJ.getCode());
+            List<SubInfoTotalExcel> zj = statusGroup.get(SubInfoStatusEnum.ZJ.getCode());
+            List<SubInfoTotalExcel> tc = statusGroup.get(SubInfoStatusEnum.TC.getCode());
+
+            fillRowData(subjectIds, dataList, cb, SubInfoStatusEnum.CB.getDesc() + "项目");
+            fillRowData(subjectIds, dataList, xj, SubInfoStatusEnum.XJ.getDesc() + "项目");
+            fillRowData(subjectIds, dataList, zj, SubInfoStatusEnum.ZJ.getDesc() + "项目");
+            fillRowData(subjectIds, dataList, tc, SubInfoStatusEnum.TC.getDesc() + "项目");
+            fillRowData(subjectIds, dataList, list, "合计");
+
+
+            // 3.导出
+            ExportParams exportParams = getExportParams();
+            exportParams.setTitle("哈密市“四个一批”工业项目库总体情况");
+            exportParams.setSheetName("项目库总体情况");
+
+            Workbook workbook = ExcelExportUtil.exportExcel(exportParams, entityList, dataList);
             response.setContentType("application/xlsx;charset=utf-8");
-            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目明细表") + System.currentTimeMillis() + ".xlsx");
-            Sheet sheet = workbook.getSheetAt(0);
-            // 合并单元格
-            sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 1));
-            sheet.addMergedRegion(new CellRangeAddress(2, ddList.size() + 1, 0, 0));
-            sheet.addMergedRegion(new CellRangeAddress(ddList.size() + 2, ddList.size() + amtList.size() + 1, 0, 0));
-            sheet.addMergedRegion(new CellRangeAddress(ddList.size() + amtList.size() + 2, ddList.size() + amtList.size() + hyList.size() + 1, 0, 0));
-            sheet.addMergedRegion(new CellRangeAddress(mergeTotalStartRow, mergeTotalStartRow, 0, 1));
+            response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目库总体情况") + System.currentTimeMillis() + ".xlsx");
 
             try (OutputStream outputStream = response.getOutputStream()) {
                 workbook.write(outputStream);
@@ -993,10 +1216,139 @@ public class SubInfoExportController extends BaseController {
             } catch (IOException e) {
                 e.printStackTrace();
             }
+        }else {
+            // 处理数据
+            List<SubInfoTotalInfoVO> exportData = new ArrayList<>();
+            if (CollectionUtil.isNotEmpty(list)) {
+                // 1.按属地分
+                List<SubInfoTotalInfoVO> ddList = list.stream()
+                        .collect(Collectors.groupingBy(SubInfoTotalExcel::getSubjectId))
+                        .entrySet().stream()
+                        .map(entry -> new SubInfoTotalInfoVO(
+                                "按属地分",
+                                jsddMap.getOrDefault(entry.getKey(), entry.getKey()),
+                                entry.getValue().size(),
+                                entry.getValue().stream()
+                                        .map(SubInfoTotalExcel::getAmtTotal)
+                                        .reduce(BigDecimal.ZERO, BigDecimal::add)
+                                        .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
+                        ))
+                        .collect(Collectors.toList());
+
+                // 2.按金额分 定义分组边界
+                Map<String, BigDecimal> groupBoundaries = new LinkedHashMap<>();
+                groupBoundaries.put("10亿元以下", new BigDecimal("100000"));
+                groupBoundaries.put("10-50亿元", new BigDecimal("500000"));
+                groupBoundaries.put("50-100亿元", new BigDecimal("1000000"));
+                List<SubInfoTotalInfoVO> amtList = list.stream()
+                        .collect(Collectors.groupingBy(transaction -> {
+                            for (Map.Entry<String, BigDecimal> entry : groupBoundaries.entrySet()) {
+                                if (transaction.getAmtTotal().compareTo(entry.getValue()) < 0) {
+                                    return entry.getKey();
+                                }
+                            }
+                            return "100亿元以上"; // 超过最高范围的默认分组
+                        }))
+                        .entrySet().stream()
+                        .map(entry -> new SubInfoTotalInfoVO(
+                                "按金额分",
+                                entry.getKey(),
+                                entry.getValue().size(),
+                                entry.getValue().stream()
+                                        .map(SubInfoTotalExcel::getAmtTotal)
+                                        .reduce(BigDecimal.ZERO, BigDecimal::add)
+                                        .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
+                        ))
+                        .collect(Collectors.toList());
+
+                // 3.按行业分
+                List<SubInfoTotalInfoVO> hyList = list.stream()
+                        .collect(Collectors.groupingBy(transaction ->{
+                            String code = transaction.getInduskind();
+                            // 确保code不为空且长度至少为2
+                            if (code == null || code.length() < 2) {
+                                return "未知行业";  // 默认未知行业
+                            }
+                            return code.substring(0, 2);
+                        }))
+                        .entrySet().stream()
+                        .map(entry -> new SubInfoTotalInfoVO(
+                                        "按行业分",
+                                        hyflMap.getOrDefault(entry.getKey(),entry.getKey()),
+                                        entry.getValue().size(),
+                                        entry.getValue().stream()
+                                                .map(SubInfoTotalExcel::getAmtTotal)
+                                                .reduce(BigDecimal.ZERO, BigDecimal::add)
+                                                .divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)
+                                )
+                        )
+                        .collect(Collectors.toList());
+                exportData.addAll(ddList);
+                exportData.addAll(amtList);
+                exportData.addAll(hyList);
+                BigDecimal reduce = list.stream().map(SubInfoTotalExcel::getAmtTotal).reduce(BigDecimal.ZERO, BigDecimal::add);
+                exportData.add(new SubInfoTotalInfoVO("合计", "合计", list.size(), reduce.divide(new BigDecimal("10000"), 2, RoundingMode.HALF_UP)));
+                // 4.导出
+                ExportParams exportParams = getExportParams();
+                exportParams.setTitle("项目库基本情况");
+                exportParams.setSheetName("项目库基本情况");
+                int mergeTotalStartRow = exportData.size() + 1;
+                Workbook workbook = ExcelExportUtil.exportExcel(exportParams, SubInfoTotalInfoVO.class, exportData);
+                response.setContentType("application/xlsx;charset=utf-8");
+                response.setHeader("Content-Disposition", "attachment; filename=" + URLEncodeUtil.encode("项目明细表") + System.currentTimeMillis() + ".xlsx");
+                Sheet sheet = workbook.getSheetAt(0);
+                // 合并单元格
+                sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 1));
+                sheet.addMergedRegion(new CellRangeAddress(2, ddList.size() + 1, 0, 0));
+                sheet.addMergedRegion(new CellRangeAddress(ddList.size() + 2, ddList.size() + amtList.size() + 1, 0, 0));
+                sheet.addMergedRegion(new CellRangeAddress(ddList.size() + amtList.size() + 2, ddList.size() + amtList.size() + hyList.size() + 1, 0, 0));
+                sheet.addMergedRegion(new CellRangeAddress(mergeTotalStartRow, mergeTotalStartRow, 0, 1));
+
+                try (OutputStream outputStream = response.getOutputStream()) {
+                    workbook.write(outputStream);
+                    workbook.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
         }
+    }
 
+    private void fillRowData(List<String> subjectIds, List<Map<String, Object>> dataList, List<SubInfoTotalExcel> cb,String name) {
+        Map<String, List<SubInfoTotalExcel>> collect = cb.stream().collect(Collectors.groupingBy(e -> StringUtils.defaultIfBlank(e.getSubjectId(), ".")));
+        Map<String, List<Object>> map = new LinkedHashMap<>();
+        collect.forEach((key, value) -> {
+            List<Object> list1 = new ArrayList<>();
+            Map<String,Object> columnMap = new LinkedHashMap<>();
+            columnMap.put("count", value.size());
+            columnMap.put("amt", value.stream().map(SubInfoTotalExcel::getAmtTotal).reduce(BigDecimal.ZERO, BigDecimal::add));
+            list1.add(columnMap);
+            map.put(key, list1);
+        });
+
+        // 合计金额
+        BigDecimal cbAmtSum = cb.stream()
+                .map(SubInfoTotalExcel::getAmtTotal)
+                .reduce(BigDecimal.ZERO, BigDecimal::add);
+
+        Map<String, Object> rowMap = new LinkedHashMap<>();
+        rowMap.put("subjectName", name);
+
+        List<Object> list = new ArrayList<>();
+        Map<String, Object> hjMap = new LinkedHashMap<>();
+        hjMap.put("count", cb.size());
+        hjMap.put("amt", cbAmtSum);
+        list.add(hjMap);
+
+        rowMap.put("hj", list);
+
+        for (String subjectId : subjectIds) {
+            rowMap.put(subjectId, map.getOrDefault(subjectId, Collections.emptyList()));
+        }
+        dataList.add(rowMap);
     }
 
+
     /**
      * 导出重点项目新建明细表
      *

+ 2 - 2
projects/src/main/webapp/vmodules/project/projectInfo.jsp

@@ -199,9 +199,9 @@
             <table class="table1 page-table">
                 <tr>
                     <td class="label">计划开工时间</td>
-                    <td>${sunInfo.beginDate }</td>
+                    <td><fmt:formatDate value="${sunInfo.beginDate }" pattern="yyyy-MM-dd"/></td>
                     <td class="label">计划竣工时间</td>
-                    <td>${sunInfo.endDate }</td>
+                    <td><fmt:formatDate value="${sunInfo.endDate }" pattern="yyyy-MM-dd"/></td>
                 </tr>
                 <tr>
                     <td class="label">平台联系人</td>

+ 197 - 373
projects/src/main/webapp/vmodules/subject/subInfo/editSubInfo.jsp

@@ -516,19 +516,19 @@
                         </div>
                     </div>
 
-                    <div class="layui-row" style="display: none;">
-                        <div class="layui-col-xs6 layui-col-sm6">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label required" style="width: 186px;">是否入库</label>
-                                <div class="layui-input-block" style="margin-left: 216px;">
-                                    <input type="radio" lay-verify="required" value="1" checked="checked"
-                                           lay-filter="isRk" name="isRk" title="是"/>
-                                    <input type="radio" lay-verify="required" value="2" lay-filter="isRk" name="isRk"
-                                           title="否">
-                                </div>
-                            </div>
-                        </div>
-                    </div>
+<%--                    <div class="layui-row" style="display: none;">--%>
+<%--                        <div class="layui-col-xs6 layui-col-sm6">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label required" style="width: 186px;">是否入库</label>--%>
+<%--                                <div class="layui-input-block" style="margin-left: 216px;">--%>
+<%--                                    <input type="radio" lay-verify="required" value="1" checked="checked"--%>
+<%--                                           lay-filter="isRk" name="isRk" title="是"/>--%>
+<%--                                    <input type="radio" lay-verify="required" value="2" lay-filter="isRk" name="isRk"--%>
+<%--                                           title="否">--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
                     <div class="btn_group">
                         <input type="button" class="btn btn1" style="color: #fff; background-color: #3362c9;"
                                value="提交项目信息" lay-submit lay-filter="saveSubInfo"/>
@@ -537,164 +537,164 @@
             </div>
         </form>
 
-        <div id="amtSourceEdit" style="display: none; padding: 10px 0 0;">
-            <div class="layuimini-main">
+<%--        <div id="amtSourceEdit" style="display: none; padding: 10px 0 0;">--%>
+<%--            <div class="layuimini-main">--%>
 
-                <div class="layui-form" lay-filter="amtSourceEdit" action=""
-                     onkeydown="if(event.keyCode==13){return false;}">
-                    <div class="layui-row">
-                        <div class="layui-col-xs11 layui-col-sm11">
-                            <div class='layui-form-item'>
-                                <label class="layui-form-label required" style="width: 90px">资金来源</label>
-                                <div class="layui-input-block">
-                                    <select id="testAmt" name="testAmt" lay-filter="testAmt">
-                                        <option value="">请选择</option>
-                                        <c:forEach items="${ZJLY }" var="zj">
-                                            <option value="${zj.id }">${zj.title }</option>
-                                        </c:forEach>
-                                    </select>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class="layui-col-xs11 layui-col-sm11">
-                            <div class='layui-form-item'>
-                                <label class="layui-form-label required" style="width: 90px">金额(万元)</label>
-                                <div class="layui-input-block">
-                                    <input id="zjAmt" min="0" class="layui-input" type="number"/>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class="layui-col-xs11 layui-col-sm11">
-                            <div class='layui-form-item'>
-                                <label class="layui-form-label required" style="width: 90px">到位金额(万元)</label>
-                                <div class="layui-input-block">
-                                    <input id="zjAmtSj" min="0" class="layui-input" type="number"/>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class="layui-form-item">
-                            <label class="layui-form-label" style="width: 90px"></label>
-                            <div class="layui-input-block">
-                                <button class="layui-btn-submit" @click="closePane">取消</button>
-                                <button class="layui-btn-submit" style="margin-left: 10px" lay-submit
-                                        lay-filter="amtConfirm">确定
-                                </button>
-                            </div>
-                        </div>
-                    </div>
-                </div>
+<%--                <div class="layui-form" lay-filter="amtSourceEdit" action=""--%>
+<%--                     onkeydown="if(event.keyCode==13){return false;}">--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
+<%--                            <div class='layui-form-item'>--%>
+<%--                                <label class="layui-form-label required" style="width: 90px">资金来源</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <select id="testAmt" name="testAmt" lay-filter="testAmt">--%>
+<%--                                        <option value="">请选择</option>--%>
+<%--                                        <c:forEach items="${ZJLY }" var="zj">--%>
+<%--                                            <option value="${zj.id }">${zj.title }</option>--%>
+<%--                                        </c:forEach>--%>
+<%--                                    </select>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
+<%--                            <div class='layui-form-item'>--%>
+<%--                                <label class="layui-form-label required" style="width: 90px">金额(万元)</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <input id="zjAmt" min="0" class="layui-input" type="number"/>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class="layui-col-xs11 layui-col-sm11">--%>
+<%--                            <div class='layui-form-item'>--%>
+<%--                                <label class="layui-form-label required" style="width: 90px">到位金额(万元)</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <input id="zjAmtSj" min="0" class="layui-input" type="number"/>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class="layui-form-item">--%>
+<%--                            <label class="layui-form-label" style="width: 90px"></label>--%>
+<%--                            <div class="layui-input-block">--%>
+<%--                                <button class="layui-btn-submit" @click="closePane">取消</button>--%>
+<%--                                <button class="layui-btn-submit" style="margin-left: 10px" lay-submit--%>
+<%--                                        lay-filter="amtConfirm">确定--%>
+<%--                                </button>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                </div>--%>
 
-            </div>
-        </div>
-        <div id="planEdit" style="display: none; padding: 10px 0 0;">
-            <form class="layui-form" lay-filter="planEdit">
-                <div class="table_box">
-                    <div class="layui-row">
-                        <div class='layui-form-item'>
-                            <label class="layui-form-label required">结束时间</label>
-                            <div class="layui-input-block" style="padding: 0 10px 0 0;">
-                                <input type="text" id="planEndDate" readonly="readonly" required lay-verify="required"
-                                       class="layui-input" v-model="planEditInfo.endDate">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class='layui-form-item'>
-                            <label class="layui-form-label required">工作内容</label>
-                            <div class="layui-input-block" style="padding: 0 10px 0 0;">
-                                <textarea v-model="planEditInfo.content" class="layui-textarea" required
-                                          lay-verify="required"></textarea>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class='layui-form-item'>
-                            <label class="layui-form-label required">进度权重</label>
-                            <div class="layui-input-block" style="padding: 0 10px 0 0;">
-                                <input type="number" min="1" max="10" required lay-verify="required" class="layui-input"
-                                       v-model="planEditInfo.numRate">
-                            </div>
-                        </div>
-                    </div>
-                    <div class="layui-row">
-                        <div class="layui-form-item" style="text-align: right; padding: 0 67px 10px;">
-                            <input type="button" value="取消" class="layui-btn btn btn1" @click="closePane"/>
-                            <input type="button" value="保存" class="layui-btn btn btn1" lay-submit
-                                   lay-filter="planConfirm"/>
-                        </div>
-                    </div>
-                </div>
-            </form>
-        </div>
-        <div id="manageEdit" style="display: none">
-            <div class="layuimini-main">
-                <form class="layui-form" lay-filter="manageEdit">
-                    <div class="table_box">
-                        <div class="layui-row">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label required">监管单位</label>
-                                <div class="layui-input-block" id="gzsm">
-                                    <select name="manageId" required lay-verify="required" lay-filter="manageId"
-                                            v-model="currObjData.manageId" lay-search>
-                                        <option value="">--请选择--</option>
-                                        <c:forEach items="${unit }" var="un">
-                                            <option value="${un.id }" nameLead="${un.nameLead}"
-                                                    tel="${un.tel}">${un.title }</option>
-                                        </c:forEach>
-                                    </select>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-row">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label">责任科室</label>
-                                <div class="layui-input-block">
-                                    <select name="departId" lay-filter="departId" v-model="currObjData.departId">
-                                        <option value="">--请选择--</option>
-                                    </select>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-row">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label required">责任领导</label>
-                                <div class="layui-input-block">
-                                    <input type="text" name="nameLead" required lay-verify="required" placeholder="请输入"
-                                           autocomplete="off" class="layui-input" v-model="currObjData.nameLead">
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-row">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label required">责任电话</label>
-                                <div class="layui-input-block">
-                                    <input type="text" name="tel" required lay-verify="required" placeholder="请输入"
-                                           autocomplete="off" class="layui-input" v-model="currObjData.tel">
-                                </div>
-                            </div>
-                        </div>
-                        <div class="layui-row">
-                            <div class="layui-form-item">
-                                <label class="layui-form-label"></label>
-                                <div class="layui-input-block">
-                                    <button type="button" class="layui-btn-submit" @click="closePane">取消</button>
-                                    <button type="button" class="layui-btn-submit" style="margin-left: 10px" lay-submit
-                                            lay-filter="manageConfirm">保存
-                                    </button>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </form>
-            </div>
+<%--            </div>--%>
+<%--        </div>--%>
+<%--        <div id="planEdit" style="display: none; padding: 10px 0 0;">--%>
+<%--            <form class="layui-form" lay-filter="planEdit">--%>
+<%--                <div class="table_box">--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class='layui-form-item'>--%>
+<%--                            <label class="layui-form-label required">结束时间</label>--%>
+<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
+<%--                                <input type="text" id="planEndDate" readonly="readonly" required lay-verify="required"--%>
+<%--                                       class="layui-input" v-model="planEditInfo.endDate">--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class='layui-form-item'>--%>
+<%--                            <label class="layui-form-label required">工作内容</label>--%>
+<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
+<%--                                <textarea v-model="planEditInfo.content" class="layui-textarea" required--%>
+<%--                                          lay-verify="required"></textarea>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class='layui-form-item'>--%>
+<%--                            <label class="layui-form-label required">进度权重</label>--%>
+<%--                            <div class="layui-input-block" style="padding: 0 10px 0 0;">--%>
+<%--                                <input type="number" min="1" max="10" required lay-verify="required" class="layui-input"--%>
+<%--                                       v-model="planEditInfo.numRate">--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                    <div class="layui-row">--%>
+<%--                        <div class="layui-form-item" style="text-align: right; padding: 0 67px 10px;">--%>
+<%--                            <input type="button" value="取消" class="layui-btn btn btn1" @click="closePane"/>--%>
+<%--                            <input type="button" value="保存" class="layui-btn btn btn1" lay-submit--%>
+<%--                                   lay-filter="planConfirm"/>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                </div>--%>
+<%--            </form>--%>
+<%--        </div>--%>
+<%--        <div id="manageEdit" style="display: none">--%>
+<%--            <div class="layuimini-main">--%>
+<%--                <form class="layui-form" lay-filter="manageEdit">--%>
+<%--                    <div class="table_box">--%>
+<%--                        <div class="layui-row">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label required">监管单位</label>--%>
+<%--                                <div class="layui-input-block" id="gzsm">--%>
+<%--                                    <select name="manageId" required lay-verify="required" lay-filter="manageId"--%>
+<%--                                            v-model="currObjData.manageId" lay-search>--%>
+<%--                                        <option value="">--请选择--</option>--%>
+<%--                                        <c:forEach items="${unit }" var="un">--%>
+<%--                                            <option value="${un.id }" nameLead="${un.nameLead}"--%>
+<%--                                                    tel="${un.tel}">${un.title }</option>--%>
+<%--                                        </c:forEach>--%>
+<%--                                    </select>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                        <div class="layui-row">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label">责任科室</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <select name="departId" lay-filter="departId" v-model="currObjData.departId">--%>
+<%--                                        <option value="">--请选择--</option>--%>
+<%--                                    </select>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                        <div class="layui-row">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label required">责任领导</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <input type="text" name="nameLead" required lay-verify="required" placeholder="请输入"--%>
+<%--                                           autocomplete="off" class="layui-input" v-model="currObjData.nameLead">--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                        <div class="layui-row">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label required">责任电话</label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <input type="text" name="tel" required lay-verify="required" placeholder="请输入"--%>
+<%--                                           autocomplete="off" class="layui-input" v-model="currObjData.tel">--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                        <div class="layui-row">--%>
+<%--                            <div class="layui-form-item">--%>
+<%--                                <label class="layui-form-label"></label>--%>
+<%--                                <div class="layui-input-block">--%>
+<%--                                    <button type="button" class="layui-btn-submit" @click="closePane">取消</button>--%>
+<%--                                    <button type="button" class="layui-btn-submit" style="margin-left: 10px" lay-submit--%>
+<%--                                            lay-filter="manageConfirm">保存--%>
+<%--                                    </button>--%>
+<%--                                </div>--%>
+<%--                            </div>--%>
+<%--                        </div>--%>
+<%--                    </div>--%>
+<%--                </form>--%>
+<%--            </div>--%>
 
-        </div>
+<%--        </div>--%>
     </div>
 </template>
 <script type="text/text" id="amtToolBar">
@@ -812,37 +812,34 @@
                         self.planEditInfo.endDate = value;
                     }
                 });
-                layui.form.on("submit(amtConfirm)", function (obj) {
-                    var amt = $("#zjAmt").val();
-                    if (!isNumber(amt) || Number(amt) < 0) {
-                        App.msg.warn("请填写正数的金额");
-                        return;
-                    }
-                    var amtSj = $("#zjAmtSj").val();
-                    if (!isNumber(amtSj) || Number(amtSj) < 0) {
-                        App.msg.warn("请填写正数的到位金额");
-                        return;
-                    }
-                    //获取选择的值。
-                    if (self.amtSource.filter((item, index) => {
-                        return item.sourceId == self.testAmt;
-                    }).length > 0) {
-                        //存在,阻断
-                        App.msg.warn("该类型已被选择");
-                    } else {
-                        self.amtSource.push({
-                            sourceId: self.testAmt,
-                            sourceName: self.testAmtName,
-                            amt: amt,
-                            amtSj: amtSj
-                        });
-                        self.initAmtSource();
-                        self.closePane();
-                    }
-                });
-                layui.form.on("submit(planConfirm)", function (obj) {
-                    self.addPlanData();
-                });
+                // layui.form.on("submit(amtConfirm)", function (obj) {
+                //     var amt = $("#zjAmt").val();
+                //     if (!isNumber(amt) || Number(amt) < 0) {
+                //         App.msg.warn("请填写正数的金额");
+                //         return;
+                //     }
+                //     var amtSj = $("#zjAmtSj").val();
+                //     if (!isNumber(amtSj) || Number(amtSj) < 0) {
+                //         App.msg.warn("请填写正数的到位金额");
+                //         return;
+                //     }
+                //     //获取选择的值。
+                //     if (self.amtSource.filter((item, index) => {
+                //         return item.sourceId == self.testAmt;
+                //     }).length > 0) {
+                //         //存在,阻断
+                //         App.msg.warn("该类型已被选择");
+                //     } else {
+                //         self.amtSource.push({
+                //             sourceId: self.testAmt,
+                //             sourceName: self.testAmtName,
+                //             amt: amt,
+                //             amtSj: amtSj
+                //         });
+                //         self.initAmtSource();
+                //         self.closePane();
+                //     }
+                // });
                 layui.form.on("select(subjectId)", function (data) {
                     var ztdw = $("#subjectId option:checked").attr("ztdw");
                     self.subInfo.subjectId = data.value;
@@ -856,7 +853,6 @@
                 });
                 layui.form.on("select(kindNature)", function (data) {
                     self.subInfo.kindNature = data.value;
-                    self.chooseTzxz(data.value);
                 });
                 var kind = [];
                 <c:forEach items="${XMLX}" var="xm">
@@ -1001,28 +997,6 @@
                 this.amtSource = layui.table.getData("amtSource");
                 this.initAmtSource();
             },
-            chooseTzxz: function (kindNature) {
-                /*var self = this;
-                if (kindNature=="2"){
-                    $("#addAmt").hide();
-                    //设置企业投资
-                    if(self.amtSource.length == 1 && self.amtSource[0].sourceName == '社会资金') {
-                        return;
-                    }
-                    self.delAllAmt();
-                    var qyzj = $("#testAmt").find("option").filter((index,item)=>{return item.innerText == '社会资金';}).eq(0);
-                    self.amtSource.push({sourceId:qyzj.val(),sourceName:qyzj.text().trim()});
-                    this.initAmtSource();
-                }else{
-                    $("#addAmt").show();
-                    //非企业投资
-                    if(self.amtSource.length == 1 && self.amtSource[0].sourceName == '社会资金') {
-                        self.delAllAmt();
-                        this.initAmtSource();
-                        return;
-                    }
-                }*/
-            },
             getForm: function () {
                 var id = $("#id").val();
                 var self = this;
@@ -1032,9 +1006,7 @@
                 } else {
                     App.postJson("/api/subject/subInfo/getById", {id: id}, function (res) {
                         if (res.success) {
-                            console.log(res.data, "+++++++++++++")
                             self.subInfo = res.data;
-                            // console.log(self.subInfo.qyDate, "========================")
 
                             /*		self.kindSelect.setValue(self.subInfo.kind.split(","));*/
                             self.amtSource = res.data.subSource || [];
@@ -1103,38 +1075,9 @@
                     return;
                 }
                 var saveUrl = "/api/subject/subInfo/saveEditSubInfo";
-                //项目资金来源
-                if (this.amtSource.length == 0) {
-                    App.msg.warn("项目资金来源至少选择一项");
-                    return;
-                }
-                var totalSourceAmt = 0;
-                for (var i = 0; i < this.amtSource.length; i++) {
-                    if (this.amtSource[i].amt == null || this.amtSource[i].amt == undefined) {
-                        App.msg.warn(this.amtSource[i].sourceName + "资金不能为空");
-                        return;
-                    }
-                    if (this.amtSource[i].amtSj == null || this.amtSource[i].amtSj == undefined) {
-                        App.msg.warn(this.amtSource[i].sourceName + "到位资金不能为空");
-                        return;
-                    }
-                    totalSourceAmt += Number(this.amtSource[i].amt);
-                }
-                if (totalSourceAmt > this.subInfo.amtTotal) {
-                    App.msg.warn("资金来源不能大于总投资");
-                    return;
-                }
                 var saveAmtSource = this.amtSource.concat(this.delAmtSource);
                 this.subInfo.subSource = saveAmtSource;
-                /*		this.subInfo.kind = this.kindSelect.getValue("value").sort().join(",");*/
-                /*			if(this.subInfo.kind == "") {
-                                App.msg.warn("项目类型不能为空");
-                                return;
-                            }*/
-                /*if (self.subInfo.mainId == undefined || self.subInfo.mainId == null) {
-                    App.msg.warn("您选择的建设地点还未分配监管单位");
-                    return;
-                }*/
+
                 App.msg.confirm("确认提交项目信息吗?", function () {
                     console.log(self.subInfo)
                     App.postJson(saveUrl, {subInfo: self.subInfo}, function (res) {
@@ -1158,98 +1101,6 @@
                     });
                 })
             },
-            addPlan: function () {
-                var self = this;
-                this.edit = false;
-                this.planEditInfo = {
-                    numRate: 1
-                };
-                this.planEditPanl = layer.open({
-                    title: "新增计划",
-                    type: 1,
-                    content: $("#planEdit"),
-                    area: ['500px', 'auto']
-                })
-            },
-            addPlanData: function () {
-                if (this.planEditInfo.numRate > 10 || this.planEditInfo.numRate <= 0 || this.planEditInfo.numRate % 1 != 0) {
-                    layer.msg("进度权重必须是1-10的整数", {icon: 5, time: 2000});
-                    return;
-                }
-                var startDate = $("#beginDate").val();
-                var endDate = new Date(this.planEditInfo.endDate);
-                if (startDate > endDate) {
-                    layer.msg("计划结束时间不能小于项目开始时间!!!  项目开始时间" + startDate);
-                    return;
-                }
-                if (this.edit) {
-                    var dataIndex = this.currPlanObj.tr[0].dataset.index;
-                    if (this.planList.filter((item, index) => {
-                        return index != dataIndex && item.endDate == this.planEditInfo.endDate
-                    }).length > 0) {
-                        App.msg.warn(this.planEditInfo.endDate + "结束时间已存在,不能重复");
-                        return;
-                    }
-                    this.currPlanObj.update(this.planEditInfo);
-                } else {
-                    if (this.planList.filter(item => {
-                        return item.endDate == this.planEditInfo.endDate
-                    }).length > 0) {
-                        App.msg.warn(this.planEditInfo.endDate + "结束时间已存在,不能重复");
-                        return;
-                    }
-                    this.planList.push(this.planEditInfo);
-                }
-                this.sort();
-                this.closePane();
-            },
-            planEdit: function (obj) {
-                this.currPlanObj = obj;
-                this.edit = true;
-                this.planEditInfo = obj.data;
-                var self = this;
-                this.planEditPanl = layer.open({
-                    title: "新增计划",
-                    type: 1,
-                    content: $("#planEdit"),
-                    area: ["500px", "500px"]
-                });
-            },
-            delPlan: function (obj) {
-                var self = this;
-                App.msg.confirm("确认删除该计划吗?", function () {
-                    if (obj.data.id) {
-                        obj.data.logicDeleteFlag = 1;
-                        self.delPlanList.push(obj.data);
-                        obj.del();
-                        self.planList = layui.table.getData("planList");
-                    } else {
-                        obj.del();
-                        self.planList = layui.table.getData("planList");
-                    }
-                    self.sort();
-                })
-            },
-            /* loadPlanTable : function(){
-                var self = this;
-                layui.table.render({
-                    elem: '#planList', // 指定原始表格元素选择器(推荐id选择器)
-                    even: true,
-                    cols: [[ // 设置表头
-                        {type: 'numbers',title:'序号'},
-                        {field: 'beginDate', title: '开始时间', minWidth: 120},
-                        {field: 'endDate', title: '结束时间', minWidth: 120},
-                        {field: 'content', title: '工作内容', minWidth: 200},
-                        {field: 'numRate', title: '进度权重', minWidth: 100},
-                        {field: 'remark', title: '备注', width: 250},
-                        {title: '操作', align:'center', toolbar: '#planToolBar'}
-                    ]],
-                    data : self.planList
-                });
-                layui.table.on("tool(planList)", function(obj){
-                    self[obj.event].call(this, obj);
-                })
-            }, */
             sort: function () {
                 var beginDate = $("#beginDate").val();
                 this.planList.sort(function (a, b) {
@@ -1268,33 +1119,6 @@
                 }
                 this.loadPlanTable();
             },
-            savePlan: function () {
-                var plans = this.planList;
-                var subId = this.subInfo.id;
-                for (var i = 0; i < this.delPlanList.length; i++) {
-                    plans.push(this.delPlanList[i]);
-                }
-                this.planList = plans;
-                var self = this;
-                var data = {
-                    subId: subId,
-                    list: self.planList
-                }
-                App.msg.confirm("确认提交计划吗?", function () {
-                    App.postJson("/api/subject/subInfo/saveEditSubInfo", {planList: data}, function (res) {
-                        if (res.success) {
-                            App.msg.warn("提交成功");
-                            App.postJson("/api/subject/process/getPlanList", {subId: subId}, function (resc) {
-                                if (resc.success) {
-                                    self.planList = resc.data;
-                                    self.delPlanList = [];
-                                    self.loadPlanTable();
-                                }
-                            });
-                        }
-                    });
-                });
-            },
             addManage: function () {
                 var self = this;
                 this.currObjData = {

+ 46 - 29
projects/src/main/webapp/vmodules/subject/subInfo/tz/cb.jsp

@@ -87,12 +87,7 @@
         }
 
         .layui-form-select dl {
-            height: 120px;
-        }
-        .taller-select {
-            height: 200px; /* 设置固定高度 */
-            max-height: 300px; /* 设置最大高度,防止过长 */
-            overflow-y: auto; /* 启用垂直滚动条 */
+            height: 230px;
         }
     </style>
 </head>
@@ -145,7 +140,7 @@
                                         <label class="layui-form-label required label-longers">行业类别</label>
                                         <div class="layui-input-block">
                                             <%-- <div id="indusKind"></div>--%>
-                                            <select name="indusKind" class="taller-select">
+                                            <select name="indusKind">
                                                 <option value="">请选择</option>
                                                 <c:forEach items="${HYFL }" var="hy">
                                                     <option value="${hy.code }">${hy.title}
@@ -160,7 +155,7 @@
                                 </div>
                                 <div class="layui-col-xs3 layui-col-sm3 layui-col-md3 hiddenParam">
                                     <div class="layui-form-item">
-                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资</label>
+                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资(亿元)</label>
                                         <div class="layui-input-block time_box">
                                             <input type="number" name="startAmt" placeholder="请输入最小金额"
                                                    autocomplete="off"
@@ -206,7 +201,7 @@
         <div>
             <div class="layui-row">
                 <div style="display: flex;margin-bottom: 3px">
-                    <label class="juli" onclick="levelList('abcs','A类','A')">
+                    <label class="juli" onclick="levelList('abcs','A类','')">
                         储备项目总数
                         <span class="info-icon" title="A类项目:成熟类项目,可研或初设已编制并完成初审,达到项目等资金的进度">?</span>
                         <span class="lanse-first">{{beginRate.num}}</span>
@@ -226,7 +221,10 @@
                         <span class="info-icon" title="C类项目:意向类项目,还处于谋划论证阶段项目">?</span>
                         <span class="lanse-first">{{beginRate.cnum}}</span>
                     </label>
-
+                    <label class="juli" onclick="levelList('abcs','D类','.')">
+                        <span class="info-icon" title="ABC类未设置">?</span>
+                        <span class="lanse-first">{{beginRate.nnum}}</span>
+                    </label>
                 </div>
                 <div style="display: flex;margin-bottom: 3px">
                     <label class="juli"
@@ -544,7 +542,8 @@
             showExport: false,
             moveDbParam:{
                 status: "",
-                id: ""
+                id: "",
+                statusName: ""
             }
         },
         mounted: function () {
@@ -556,10 +555,29 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                param.statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
+                App.msg.confirm(`是否移入`+param.statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
             },
             init: function () {
                 let self = this;
@@ -567,11 +585,11 @@
                     self.moveDbParam.status = data.value;
                 });
 
-                App.postJson("/api/dict/query/index", {}, function (res) {
-                    self.JSDD = res.data.JSDD;
-                    self.HYFL = res.data.HYFL;
-
-                })
+                // App.postJson("/api/dict/query/index", {}, function (res) {
+                //     self.JSDD = res.data.JSDD;
+                //     self.HYFL = res.data.HYFL;
+                //
+                // })
 
                 this.winH = document.body.clientHeight;
                 var nowdate = new Date();
@@ -817,19 +835,19 @@
                     autoSort: false,
                     initSort: self.sort,
                     cols: [[
-                        {type: 'numbers', align: 'center', minwidth: 44, title: '序号'},
-                        {field: 'subName', title: '项目名称', minwidth: 200, templet: '#subName'},
-                        {field: 'subjectName', title: '项目所在地', minwidth: 200},
-                        {field: 'content', title: '项目建设内容', minwidth: 200},
+                        {type: 'numbers', align: 'center', width: 44, title: '序号',fixed: 'left'},
+                        {field: 'subName', fixed: 'left', title: '项目名称', width: 200, templet: '#subName'},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目建设内容', minWidth: 300},
                         {
                             field: 'amtTotal',
                             title: '计划总投资(亿元)',
-                            minwidth: 200,
+                            width: 100,
                             templet: d => (d.amtTotal / 10000).toFixed(2) + "亿元"
                         },
-                        {field: 'progress', title: '进展情况', minwidth: 200},
-                        {field: 'remark', title: '备注', minwidth: 200},
-                        {title: '操作', minwidth: 225, toolbar: '#toolBar', fixed: 'right'},
+                        {field: 'progress', title: '进展情况', minWidth: 300},
+                        {field: 'remark', title: '备注', minWidth: 200},
+                        {title: '操作', width: 225, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
                     height: $(window).height() - $('#table1').offset().top - 50,
@@ -902,10 +920,9 @@
 
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
-                    title: '标题',
+                    title: '移入',
                     content: '<div class="layui-form" style="padding: 20px;">' +
                                 '<div class="layui-form-item">' +
                                     '<label class="layui-form-label">当前状态:</label>' +

+ 28 - 10
projects/src/main/webapp/vmodules/subject/subInfo/tz/cb_sum.jsp

@@ -768,14 +768,32 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                const statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
+                App.msg.confirm(`是否移入`+statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
             },
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
                     title: '标题',
@@ -1089,15 +1107,15 @@
                     cols: [[ // 设置表头
                         {type: 'numbers', fixed: 'left', align: 'center', width: 44, title: '序号'},
                         {field: 'subName', fixed: 'left', title: '项目名称', width: 200, templet: '#subName'},
-                        {field: 'subjectName', fixed: 'left', title: '项目所在地', width: 200},
-                        {field: 'content', fixed: 'left', title: '项目建设内容', width: 200},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content',  title: '项目建设内容', minWidth: 300},
                         {
-                            field: 'amtTotal', fixed: 'left', title: '计划总投资(亿元)', width: 200, templet: function (d) {
+                            field: 'amtTotal', title: '计划总投资(亿元)', width: 100, templet: function (d) {
                                 return (d.amtTotal / 10000).toFixed(2) + "亿元";
                             }
                         },
-                        {field: 'progress', fixed: 'left', title: '进展情况', width: 200},
-                        {field: 'remark', fixed: 'left', title: '备注', width: 200},
+                        {field: 'progress', title: '进展情况', minWidth: 200},
+                        {field: 'remark',  title: '备注', minWidth: 200},
                         {title: '操作', width: 225, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
@@ -1327,7 +1345,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=3");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=3");
             },
             preNew: function (obj) {
                 window.location.href = App.getUrl("/subPreNew/todo?subId=" + obj.data.id);

+ 18 - 60
projects/src/main/webapp/vmodules/subject/subInfo/tz/end.jsp

@@ -65,7 +65,7 @@
         }
 
         .layui-form-select dl {
-            height: 120px;
+            height: 230px;
         }
     </style>
 </head>
@@ -185,7 +185,7 @@
                                 </div>
                                 <div class="layui-col-xs3 layui-col-sm3 layui-col-md3 hiddenParam">
                                     <div class="layui-form-item">
-                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资</label>
+                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资(亿元)</label>
                                         <div class="layui-input-block time_box">
                                             <input type="number" name="startAmt" placeholder="请输入最小金额"
                                                    autocomplete="off"
@@ -732,21 +732,21 @@
                 let rgDate = document.getElementById('rgDate').value;
                 if (!rgDate) {
                     App.msg.error('请选择入规日期');
+                    return
                 }
                 let param = {rgDate:rgDate,id:this.rgParam.id}
-                App.postJson("/api/subject/subInfo/rg",param, (res)=>{
-                    App.msg.success(res.msg);
+                App.msg.confirm('确定入规?',()=>{
+                    App.postJson("/api/subject/subInfo/rg",param, (res)=>{
+                        if (res.success) {
+                            App.msg.success("入规成功");
+                        } else {
+                            App.msg.error(res.message || "入规失败,请重试");
+                        }
+                    })
                 })
                 this.closeAllLayers();
+                this.getData();
             },
-            // confirmMove: function () {
-            //     let param = this.rgParam
-            //     console.log(param,"=====")
-            //     App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-            //         App.msg.success(res.msg);
-            //     })
-            //     this.closeAllLayers();
-            // },
             rg (obj) {
                 this.rgParam.id = obj.data.id
                 layer.open({
@@ -1034,54 +1034,12 @@
 
                     cols: [[ // 设置表头
                         {type: 'numbers', fixed: 'left', align: 'center', title: '序号', width: 44},
-                        <%--{title: '', fixed: 'left', align:'center', templet: function(row) {--%>
-                        <%--	var temp='<span class="step step_' + (row.status === "9" ? '' : (row.status === "0" ? 'empty' : 'half')) + '"></span>'--%>
-                        <%--	if (${isHydw}){--%>
-                        <%--		if(row.status_fgw==="2"){--%>
-                        <%--			temp=temp+	'<span class="step step_red'  + '"></span>'--%>
-                        <%--		}else if (row.status_fgw==="1"){--%>
-                        <%--			temp=temp+	'<span class="step step_yellow'  + '"></span>'--%>
-                        <%--		}else{--%>
-                        <%--			temp=temp+	'<span class="step step_green'  + '"></span>'--%>
-                        <%--		}--%>
-                        <%--	}--%>
-                        <%--	return temp;--%>
-                        <%--	}},--%>
-                        {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 300, templet: '#subName'},
-<%--                        <c:if test="${sfgw}">--%>
-<%--                        // {field: 'score', title: '得分', width: 70, templet: '#scoreTem'},--%>
-<%--                        {field: 'assessReason', title: '项目后评价', minWidth: 150, templet: '#assessReasonTem'},--%>
-<%--                        </c:if>--%>
-                        {field: 'subjectName', title: '项目所在地', minWidth: 150},
-                        {field: 'content', title: '项目基本情况', minWidth: 150},
-                        {field: 'rgDate', title: '升规入统时间', minWidth: 150},
-                        {field: 'progress', title: '进展情况', minWidth: 150},
+                        {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目基本情况', minWidth: 300},
+                        {field: 'rgDate', title: '升规入统时间', minWidth: 100},
+                        {field: 'progress', title: '进展情况', minWidth: 300},
                         {field: 'remark', title: '备注', minWidth: 150},
-                        // {field: 'acceptanceReports', title: '验收报告', minWidth: 150, templet: function(row) {
-                        //         if (row.acceptanceReports && row.acceptanceReports.length > 0) {
-                        //             // 渲染所有文件名,并绑定文件路径
-                        //             return row.acceptanceReports.map(function(report) {
-                        //                 return '<a href="' + report.picAddre + '" target="_blank">' + report.picName + '</a>';
-                        //             }).join('<br>');  // 使用 <br> 分隔多个文件
-                        //         } else {
-                        //             return '无报告';
-                        //         }
-                        //     }},
-                        // // {field: 'regulationStatus', title: '申规入统', minWidth: 150},
-                        // {field: 'amtTotal', title: '投资金额', minWidth: 250, templet: '#amt'},
-                        // // {field: 'offset', title: '偏离度-%', width: 100 },
-                        // {field: 'mainName', title: '日常责任监管单位', minWidth: 100},
-                        // {field: 'unitName', title: '项目单位', minWidth: 120},
-                        // // {field: 'statusName', title: '项目进度', width: 200},
-                        // // {field: 'isHide', title: '在建库', minWidth: 120,templet: function(row) {
-                        // // 		if(row.isHide == "1") {
-                        // // 			return '<span>是</span>';
-                        // // 		}else{
-                        // // 			return '<span>否</span>';
-                        // // 		}
-                        // // 		return "";
-                        // // 	}},
-                        // // {field: 'reason', title: '退回/不同意原因', width: 160},
                         {title: '操作', width: 200, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
@@ -1314,7 +1272,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id+"&queryType=4");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id+"&queryType=4");
             },
             toTh: function (obj) {
                 if (obj.data.statusJh == null || obj.data.statusJh == '0' || obj.data.statusJh == '1') {

+ 16 - 59
projects/src/main/webapp/vmodules/subject/subInfo/tz/end_sum.jsp

@@ -657,21 +657,20 @@
                 let rgDate = document.getElementById('rgDate').value;
                 if (!rgDate) {
                     App.msg.error('请选择入规日期');
+                    return
                 }
                 let param = {rgDate:rgDate,id:this.rgParam.id}
-                App.postJson("/api/subject/subInfo/rg",param, (res)=>{
-                    App.msg.success(res.msg);
+                App.msg.confirm('确定入规?',()=>{
+                    App.postJson("/api/subject/subInfo/rg",param, (res)=>{
+                        if (res.success) {
+                            App.msg.success("入规成功");
+                        } else {
+                            App.msg.error(res.message || "入规失败,请重试");
+                        }
+                    })
                 })
                 this.closeAllLayers();
             },
-            // confirmMove: function () {
-            //     let param = this.rgParam
-            //     console.log(param,"=====")
-            //     App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-            //         App.msg.success(res.msg);
-            //     })
-            //     this.closeAllLayers();
-            // },
             rg (obj) {
                 this.rgParam.id = obj.data.id
                 layer.open({
@@ -935,54 +934,12 @@
 
                     cols: [[ // 设置表头
                         {type: 'numbers', fixed: 'left', align: 'center', title: '序号', width: 44},
-                        <%--{title: '', fixed: 'left', align:'center', templet: function(row) {--%>
-                        <%--	var temp='<span class="step step_' + (row.status === "9" ? '' : (row.status === "0" ? 'empty' : 'half')) + '"></span>'--%>
-                        <%--	if (${isHydw}){--%>
-                        <%--		if(row.status_fgw==="2"){--%>
-                        <%--			temp=temp+	'<span class="step step_red'  + '"></span>'--%>
-                        <%--		}else if (row.status_fgw==="1"){--%>
-                        <%--			temp=temp+	'<span class="step step_yellow'  + '"></span>'--%>
-                        <%--		}else{--%>
-                        <%--			temp=temp+	'<span class="step step_green'  + '"></span>'--%>
-                        <%--		}--%>
-                        <%--	}--%>
-                        <%--	return temp;--%>
-                        <%--	}},--%>
-                        {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 300, templet: '#subName'},
-                        <%--                        <c:if test="${sfgw}">--%>
-                        <%--                        // {field: 'score', title: '得分', width: 70, templet: '#scoreTem'},--%>
-                        <%--                        {field: 'assessReason', title: '项目后评价', minWidth: 150, templet: '#assessReasonTem'},--%>
-                        <%--                        </c:if>--%>
-                        {field: 'subjectName', title: '项目所在地', minWidth: 150},
-                        {field: 'content', title: '项目基本情况', minWidth: 150},
-                        {field: 'rgDate', title: '升规入统时间', minWidth: 150},
-                        {field: 'progress', title: '进展情况', minWidth: 150},
-                        {field: 'remark', title: '备注', minWidth: 150},
-                        // {field: 'acceptanceReports', title: '验收报告', minWidth: 150, templet: function(row) {
-                        //         if (row.acceptanceReports && row.acceptanceReports.length > 0) {
-                        //             // 渲染所有文件名,并绑定文件路径
-                        //             return row.acceptanceReports.map(function(report) {
-                        //                 return '<a href="' + report.picAddre + '" target="_blank">' + report.picName + '</a>';
-                        //             }).join('<br>');  // 使用 <br> 分隔多个文件
-                        //         } else {
-                        //             return '无报告';
-                        //         }
-                        //     }},
-                        // // {field: 'regulationStatus', title: '申规入统', minWidth: 150},
-                        // {field: 'amtTotal', title: '投资金额', minWidth: 250, templet: '#amt'},
-                        // // {field: 'offset', title: '偏离度-%', width: 100 },
-                        // {field: 'mainName', title: '日常责任监管单位', minWidth: 100},
-                        // {field: 'unitName', title: '项目单位', minWidth: 120},
-                        // // {field: 'statusName', title: '项目进度', width: 200},
-                        // // {field: 'isHide', title: '在建库', minWidth: 120,templet: function(row) {
-                        // // 		if(row.isHide == "1") {
-                        // // 			return '<span>是</span>';
-                        // // 		}else{
-                        // // 			return '<span>否</span>';
-                        // // 		}
-                        // // 		return "";
-                        // // 	}},
-                        // // {field: 'reason', title: '退回/不同意原因', width: 160},
+                        {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目基本情况', minWidth: 300},
+                        {field: 'rgDate', title: '升规入统时间', width: 150},
+                        {field: 'progress', title: '进展情况', minWidth: 300},
+                        {field: 'remark', title: '备注', minWidth: 200},
                         {title: '操作', width: 200, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
@@ -1205,7 +1162,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=4");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=4");
             },
             toTh: function (obj) {
                 if (obj.data.statusJh == null || obj.data.statusJh == '0' || obj.data.statusJh == '1') {

+ 33 - 14
projects/src/main/webapp/vmodules/subject/subInfo/tz/main.jsp

@@ -66,7 +66,7 @@
         }
 
         .layui-form-select dl {
-            height: 120px;
+            height: 230px;
         }
     </style>
 </head>
@@ -143,7 +143,7 @@
                                 </div>
                                 <div class="layui-col-xs3 layui-col-sm3 layui-col-md3 hiddenParam">
                                     <div class="layui-form-item">
-                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资</label>
+                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资(亿元)</label>
                                         <div class="layui-input-block time_box">
                                             <input type="number" name="startAmt" placeholder="请输入最小金额"
                                                    autocomplete="off"
@@ -728,17 +728,36 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                const statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
+                App.msg.confirm(`是否移入`+statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
+                // this.getData()
             },
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
-                    title: '标题',
+                    title: '移入',
                     content: '<div class="layui-form" style="padding: 20px;">' +
                         '<div class="layui-form-item">' +
                         '<label class="layui-form-label">当前状态:</label>' +
@@ -1111,16 +1130,16 @@
                             }
                         },
                         {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
-                        {field: 'subjectName', title: '项目所在地', width: 200},
-                        {field: 'content', title: '项目建设内容', width: 200},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目建设内容', width: 300},
                         {
-                            field: 'amtTotal',  title: '计划总投资(亿元)', width: 200, templet: function (d) {
+                            field: 'amtTotal',  title: '计划总投资(亿元)', width: 100, templet: function (d) {
                                 return (d.amtTotal / 10000).toFixed(2) + "亿元";
                             }
                         },
-                        {field: 'tcDate',  title: '建成投产时间', width: 200,templet: '#date'},
-                        {field: 'yearAmtSj', title: '年度投资', width: 200},
-                        {field: 'progress',  title: '进展情况', width: 200},
+                        {field: 'tcDate',  title: '建成投产时间', width: 100,templet: '#date'},
+                        {field: 'yearAmtSj', title: '年度投资', width: 100},
+                        {field: 'progress',  title: '进展情况', width: 300},
                         {field: 'remark', title: '备注', width: 200},
                         {title: '操作', width: 180, toolbar: '#toolBar', fixed: 'right'},
                     ]],
@@ -1333,7 +1352,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=1");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=1");
             },
             toTh: function (obj) {
                 if (obj.data.statusJh == null || obj.data.statusJh == '0' || obj.data.statusJh == '1') {

+ 28 - 8
projects/src/main/webapp/vmodules/subject/subInfo/tz/main_sum.jsp

@@ -738,14 +738,33 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                const statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
+                App.msg.confirm(`是否移入`+statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
+                // this.getData()
             },
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
                     title: '标题',
@@ -1102,6 +1121,7 @@
                         {
                             type: 'numbers',
                             align: 'center',
+                            fixed: 'left',
                             title: '序号',
                             width: 50,
                             templet: function (row) {
@@ -1112,7 +1132,7 @@
                                 }
                             }
                         },
-                        {field: 'subName', title: '项目名称', minWidth: 200, templet: '#subName'},
+                        {field: 'subName',fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
                         {field: 'subjectName', title: '项目所在地', minWidth: 100},
                         {field: 'content', title: '项目建设内容', minWidth: 200},
                         {
@@ -1120,10 +1140,10 @@
                                 return (d.amtTotal / 10000).toFixed(2) + "亿元";
                             }
                         },
-                        {field: 'tcDate',  title: '建成投产时间', minWidth: 100,templet: '#date'},
+                        {field: 'tcDate',  title: '建成投产时间', minWidth: 160,templet: '#date'},
                         {field: 'amtTotal', title: '年度投资', minWidth: 100},
                         {field: 'progress',  title: '进展情况', minWidth: 200},
-                        {field: 'remark', title: '备注', minWidth: 100},
+                        {field: 'remark', title: '备注', minWidth: 160},
                         {title: '操作', width: 180, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
@@ -1325,7 +1345,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=1");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=1");
             },
             toTh: function (obj) {
                 if (obj.data.statusJh == null || obj.data.statusJh == '0' || obj.data.statusJh == '1') {

+ 34 - 31
projects/src/main/webapp/vmodules/subject/subInfo/tz/new.jsp

@@ -87,7 +87,7 @@
         }
 
         .layui-form-select dl {
-            height: 120px;
+            height: 230px;
         }
 
     </style>
@@ -155,7 +155,7 @@
 
                                 <div class="layui-col-xs3 layui-col-sm3 layui-col-md3 hiddenParam">
                                     <div class="layui-form-item">
-                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资</label>
+                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资(亿元)</label>
                                         <div class="layui-input-block time_box">
                                             <input type="number" name="startAmt" placeholder="请输入最小金额"
                                                    autocomplete="off"
@@ -668,17 +668,35 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                const statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
+                App.msg.confirm(`是否移入`+statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
             },
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
-                    title: '标题',
+                    title: '移入',
                     content: '<div class="layui-form" style="padding: 20px;">' +
                         '<div class="layui-form-item">' +
                         '<label class="layui-form-label">当前状态:</label>' +
@@ -1032,33 +1050,18 @@
                     autoSort: false,
                     initSort: self.sort,
                     cols: [[ // 设置表头
-                        {type: 'numbers',  align: 'center', minwidth: 44, title: '序号'},
-                        {field: 'subName',  title: '项目名称', minwidth: 200, templet: '#subName'},
-/*                        {
-                            field: 'abc',
-                            type: 'string',
-                            title: 'ABC',
-
-                            align: 'center',
-                            width: 60,
-                            templet: "#abcSpan"
-                        },*/
-                        // {field: 'offsetLight', title: '偏离状态',  minWidth: 150, templet: '#offsetLight'},
-                        // {field: 'statusName', title: '项目进度', width: 200},
-                        // {field: 'amtTotal', title: '投资金额', minWidth: 250, templet: '#amt', sort:"amtTotal"},
-                        // {field: 'offset', title: '偏离度-%', width: 100},
-                        // {field: 'fileId', title: '现场影像', width: 150, templet:'#imageDiv'},
-                        // {field: 'subName',  title: '项目名称', width: 200, templet: '#subName'},
-                        {field: 'subjectName', title: '项目所在地', minwidth: 200},
-                        {field: 'content', title: '项目建设内容', minwidth: 200},
+                        {type: 'numbers',  align: 'center', width: 44, title: '序号',fixed: 'left'},
+                        {field: 'subName',  title: '项目名称', minWidth: 200, templet: '#subName',fixed: 'left'},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目建设内容', minWidth: 300},
                         {
-                            field: 'amtTotal', title: '计划总投资(亿元)', minwidth: 200, templet: function (d) {
+                            field: 'amtTotal', title: '计划总投资(亿元)', width: 100, templet: function (d) {
                                 return (d.amtTotal / 10000).toFixed(2) + "亿元";
                             }
                         },
-                        {field: 'preProceNum', title: '预计开工时间', minwidth: 160, templet: '#date'},
-                          {field: 'xmbaStatus', title: '前期手续办理情况', minwidth: 160, templet: '#preInfo'},
-                        {field: 'remark', title: '备注', minwidth: 245, templet: '#remark'},
+                        {field: 'preProceNum', title: '预计开工时间', width: 160, templet: '#date'},
+                          {field: 'xmbaStatus', title: '前期手续办理情况', width: 160, templet: '#preInfo'},
+                        {field: 'remark', title: '备注', width: 245, templet: '#remark'},
                         {title: '操作', minwidth: 225, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
@@ -1307,7 +1310,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=3");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=3");
             },
             preNew: function (obj) {
                 window.location.href = App.getUrl("/subPreNew/todo?subId=" + obj.data.id);

+ 32 - 14
projects/src/main/webapp/vmodules/subject/subInfo/tz/new_sum.jsp

@@ -740,15 +740,33 @@
             },
             confirmMove: function () {
                 let param = this.moveDbParam
-                App.postJson("/api/subject/subInfo/moveDb",param, (res)=>{
-                    App.msg.success(res.msg);
-                })
+                // 数据验证
+                if (!param || !param.status) {
+                    App.msg.error("请选择移入状态");
+                    return;
+                }
+                const statusMap = {
+                    1: "储备",
+                    2: "新建",
+                    3: "在建",
+                    9: "投产"
+                };
+                const statusName = statusMap[param.status] || "未知状态";
+
                 this.closeAllLayers();
-                this.getData()
+                App.msg.confirm(`是否移入`+statusName+`库?`, () => {
+                    App.postJson("/api/subject/subInfo/moveDb", { id: param.id, status: param.status }, (res) => {
+                        if (res.success) {
+                            App.msg.success("移入成功");
+                        } else {
+                            App.msg.error(res.message || "移入失败,请重试");
+                        }
+                    })
+                });
+                // this.getData()
             },
             move (obj) {
                 this.moveDbParam.id = obj.data.id
-                this.moveDbParam.status = obj.data.cbStatus
                 layer.open({
                     type: 1,
                     title: '标题',
@@ -1109,19 +1127,19 @@
                     initSort: self.sort,
                     cols: [[ // 设置表头
                         {type: 'numbers', fixed: 'left', align: 'center', width: 44, title: '序号'},
-                        {field: 'subName', fixed: 'left', title: '项目名称', width: 200, templet: '#subName'},
+                        {field: 'subName', fixed: 'left', title: '项目名称', minWidth: 200, templet: '#subName'},
 
-                        {field: 'subjectName', title: '项目所在地', minwidth: 200},
-                        {field: 'content', title: '项目建设内容', minwidth: 200},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '项目建设内容', minWidth: 300},
                         {
-                            field: 'amtTotal', title: '计划总投资(亿元)', minwidth: 200, templet: function (d) {
+                            field: 'amtTotal', title: '计划总投资(亿元)', width: 100, templet: function (d) {
                                 return (d.amtTotal / 10000).toFixed(2) + "亿元";
                             }
                         },
-                        {field: 'preProceNum', title: '预计开工时间', minwidth: 160, templet: '#date'},
-                        {field: 'xmbaStatus', title: '前期手续办理情况', minwidth: 160, templet: '#preInfo'},
-                        {field: 'remark', title: '备注', minwidth: 245, templet: '#remark'},
-                        {title: '操作', minwidth: 225, toolbar: '#toolBar', fixed: 'right'},
+                        {field: 'preProceNum', title: '预计开工时间', width: 160, templet: '#date'},
+                        {field: 'xmbaStatus', title: '前期手续办理情况', width: 160, templet: '#preInfo'},
+                        {field: 'remark', title: '备注', width: 245, templet: '#remark'},
+                        {title: '操作', width: 225, toolbar: '#toolBar', fixed: 'right'},
                         // {field: 'xmbaStatus', title: '前期手续办理情况', width: 160, templet: '#preInfo'},
                         // {field: 'xmbaStatus', title: '计划时间', width: 160, templet: '#date'},
                         // {field: 'xmbaStatus', title: '总投资', width: 245, templet: '#amtTotal'},
@@ -1358,7 +1376,7 @@
                 window.open(App.getUrl("/subject/apply/downPdf?subId=" + obj.data.id));
             },
             toEditSubInfo: function (obj) {
-                window.location.href = App.getUrl("/subject/subInfo/editSubInfo?subId=" + obj.data.id + "&queryType=3");
+                window.location.href = App.getUrl("/subject/subInfo/editSubInfo2?subId=" + obj.data.id + "&queryType=3");
             },
             preNew: function (obj) {
                 window.location.href = App.getUrl("/subPreNew/todo?subId=" + obj.data.id);

+ 11 - 11
projects/src/main/webapp/vmodules/subject/subInfo/tz/xmzk.jsp

@@ -87,7 +87,7 @@
         }
 
         .layui-form-select dl {
-            height: 120px;
+            height: 230px;
         }
 
     </style>
@@ -155,7 +155,7 @@
                                 </div>
                                 <div class="layui-col-xs3 layui-col-sm3 layui-col-md3 hiddenParam">
                                     <div class="layui-form-item">
-                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资</label>
+                                        <label class="layui-form-label required label-longers" style="width: 100px;">项目总投资(亿元)</label>
                                         <div class="layui-input-block time_box">
                                             <input type="number" name="startAmt" placeholder="请输入最小金额"
                                                    autocomplete="off"
@@ -898,20 +898,20 @@
                     autoSort: false,
                     initSort: self.sort,
                     cols: [[
-                        {type: 'numbers', align: 'center', minwidth: 44, title: '序号'},
-                        {field: 'subName', title: '项目名称', minwidth: 200, templet: '#subName'},
-                        {field: 'subjectName', title: '项目所在地', minwidth: 200},
-                        {field: 'content', title: '建设内容', minwidth: 200},
+                        {type: 'numbers', align: 'center', width: 44, title: '序号',fixed: 'left'},
+                        {field: 'subName', title: '项目名称', minWidth: 200, templet: '#subName',fixed: 'left'},
+                        {field: 'subjectName', title: '项目所在地', width: 100},
+                        {field: 'content', title: '建设内容', minWidth: 300},
                         {
                             field: 'amtTotal',
                             title: '总投资',
-                            minwidth: 200,
+                            width: 100,
                             templet: d => (d.amtTotal / 10000).toFixed(2) + "亿元"
                         },
-                        {field: 'statusName', title: '状态', minwidth: 200},
-                        {field: 'beginDate', title: '计划开工日期', minwidth: 200},
-                        {field: 'endDate', title: '计划完工日期', minwidth: 200},
-                        {title: '操作', minwidth: 225, toolbar: '#toolBar', fixed: 'right'},
+                        {field: 'statusName', title: '状态', width: 160},
+                        {field: 'beginDate', title: '计划开工日期', minWidth: 160},
+                        {field: 'endDate', title: '计划完工日期', minWidth: 160},
+                        {title: '操作', minWidth: 225, toolbar: '#toolBar', fixed: 'right'},
                     ]],
                     fixed: true,
                     height: $(window).height() - $('#table1').offset().top - 50,