Browse Source

Merge branch 'dev' of ssh://10.10.100.21/source/saas-platform into dev

jinsy 7 years ago
parent
commit
da07cfa1ef
89 changed files with 1998 additions and 1196 deletions
  1. 2 2
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java
  2. 41 16
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  3. 67 13
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  4. 94 11
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  5. 14 10
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  6. 14 9
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  7. 2 2
      applications/money/money-server/src/main/resources/mapper/OthspendingsMapper.xml
  8. 2 0
      applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutDTO.java
  9. 1 5
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdIODetailMapper.java
  10. 0 4
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdInOutMapper.java
  11. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOut.java
  12. 9 11
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  13. 14 28
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  14. 3 88
      applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml
  15. 2 2
      applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml
  16. 9 100
      applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutMapper.xml
  17. 2 2
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseListMapper.xml
  18. 7 91
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  19. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  20. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  21. 5 0
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  22. 18 7
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  23. 2 2
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java
  24. 5 0
      base-servers/gateway-server/src/main/resources/application.yml
  25. 1 1
      base-servers/socket/socket-api/src/main/java/com/usoftchina/saas/socket/api/SocketMessageApi.java
  26. 1 1
      base-servers/socket/socket-server/src/main/resources/application.yml
  27. 18 0
      framework/core/src/main/java/com/usoftchina/saas/base/entity/CommonBaseEntity.java
  28. 29 0
      frontend/saas-web/app/model/report/Purchase.js
  29. 154 38
      frontend/saas-web/app/util/BaseUtil.js
  30. 3 3
      frontend/saas-web/app/util/Errors.js
  31. 232 227
      frontend/saas-web/app/util/FormUtil.js
  32. 2 2
      frontend/saas-web/app/view/auth/LoginController.js
  33. 1 1
      frontend/saas-web/app/view/core/base/BasePanelController.js
  34. 11 11
      frontend/saas-web/app/view/core/base/GridPanel.js
  35. 1 1
      frontend/saas-web/app/view/core/chart/ChartBase.js
  36. 1 1
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  37. 21 9
      frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js
  38. 3 1
      frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js
  39. 214 0
      frontend/saas-web/app/view/core/form/DataMultiCombo.js
  40. 12 7
      frontend/saas-web/app/view/core/form/FormPanel.js
  41. 32 31
      frontend/saas-web/app/view/core/form/FormPanelController.js
  42. 4 6
      frontend/saas-web/app/view/core/form/field/DetailGridField.js
  43. 12 14
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  44. 1 1
      frontend/saas-web/app/view/core/query/QueryPanelController.js
  45. 6 70
      frontend/saas-web/app/view/core/report/ReportPanel.js
  46. 2 2
      frontend/saas-web/app/view/core/tab/Controller.js
  47. 8 8
      frontend/saas-web/app/view/document/bom/FormController.js
  48. 8 8
      frontend/saas-web/app/view/document/customer/FormController.js
  49. 8 8
      frontend/saas-web/app/view/document/employee/FormController.js
  50. 31 5
      frontend/saas-web/app/view/document/kind/ChildForm.js
  51. 3 6
      frontend/saas-web/app/view/document/kind/Kind.js
  52. 4 6
      frontend/saas-web/app/view/document/kind/KindController.js
  53. 8 8
      frontend/saas-web/app/view/document/product/FormController.js
  54. 8 8
      frontend/saas-web/app/view/document/vendor/FormController.js
  55. 1 1
      frontend/saas-web/app/view/home/InfoCard.js
  56. 1 1
      frontend/saas-web/app/view/main/Main.js
  57. 2 2
      frontend/saas-web/app/view/main/Navigation.js
  58. 1 1
      frontend/saas-web/app/view/money/othreceipts/FormPanelController.js
  59. 1 1
      frontend/saas-web/app/view/money/othspendings/FormPanelController.js
  60. 1 1
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  61. 5 5
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  62. 1 1
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  63. 5 5
      frontend/saas-web/app/view/money/recBalance/FormPanelController.js
  64. 7 3
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  65. 4 4
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  66. 2 1
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js
  67. 4 4
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanelController.js
  68. 4 0
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  69. 2 12
      frontend/saas-web/app/view/purchase/report/Purchase.js
  70. 2 1
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  71. 5 5
      frontend/saas-web/app/view/sale/sale/FormPanelController.js
  72. 1 0
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  73. 5 5
      frontend/saas-web/app/view/sale/saleOut/FormPanelController.js
  74. 2 2
      frontend/saas-web/app/view/stock/make/FormPanelController.js
  75. 12 16
      frontend/saas-web/app/view/sys/account/DataList.js
  76. 321 0
      frontend/saas-web/app/view/sys/baseconfig/FormPanel.js
  77. 66 0
      frontend/saas-web/app/view/sys/baseconfig/FormPanelController.js
  78. 5 0
      frontend/saas-web/app/view/sys/baseconfig/FormPanelModel.js
  79. 233 86
      frontend/saas-web/app/view/sys/config/FormPanel.js
  80. 6 9
      frontend/saas-web/app/view/sys/config/FormPanelController.js
  81. 1 1
      frontend/saas-web/app/view/sys/feedback/FormPanelController.js
  82. 7 9
      frontend/saas-web/app/view/sys/finish/DataList.js
  83. 1 1
      frontend/saas-web/app/view/sys/guide/FormPanel.js
  84. 5 0
      frontend/saas-web/app/view/sys/manager/FormPanel.js
  85. 9 11
      frontend/saas-web/app/view/sys/maxnumbers/DataList.js
  86. 4 7
      frontend/saas-web/app/view/sys/power/FormPanelController.js
  87. 6 9
      frontend/saas-web/app/view/sys/power/TreePanel.js
  88. 2 2
      frontend/saas-web/app/view/viewport/ViewportController.js
  89. 106 103
      frontend/saas-web/overrides/i18n.js

+ 2 - 2
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java

@@ -65,12 +65,12 @@ public enum Operation {
     /**
      * 转采购验收单
      */
-    TURNPURCCHECKIN("msg.TurnPurcCheckin", "msg.TurnPurcCheckinSuccess"),
+    PURCHASEIN("msg.TurnPurcCheckin", "msg.TurnPurcCheckinSuccess"),
 
     /**
      * 转采购验退单
      */
-    TURNPURCCHECKOUT("msg.TurnPurcCheckout", "msg.TurnPurcCheckoutSuccess"),
+    PURCHASEOUT("msg.TurnPurcCheckout", "msg.TurnPurcCheckoutSuccess"),
 
     /**
      * 转出货单

+ 41 - 16
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java

@@ -61,13 +61,21 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
 
         Long id = fundtransfer.getId();
 
-        if (fundtransfer.getId() > 0){
+        DocBaseDTO baseDTO = new DocBaseDTO();
+        if (id > 0){
             fundtransferMapper.updateByPrimaryKeySelective(fundtransfer);
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.update(baseDTO);
         }else {
             fundtransfer.setCompanyId(BaseContextHolder.getCompanyId());
             fundtransfer.setFt_recorder(BaseContextHolder.getUserName());
             fundtransferMapper.insertSelective(fundtransfer);
             id = fundtransfer.getId();
+
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.save(baseDTO);
         }
 
         Iterator isdet = fundtransferdetails.iterator();
@@ -82,9 +90,6 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
                 fundtransferdetailMapper.insertSelective(fundtransferdetail);
             }
         }
-        DocBaseDTO baseDTO = getBaseDTOById(id);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -104,14 +109,34 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         Iterator isList = fundtransferdetailList.iterator();
         while (isList.hasNext()){
             Fundtransferdetail fundtransferdetail = (Fundtransferdetail) isList.next();
-            Double amount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_bankcode());
-            Double inamount = banksubledgerMapper.selectThisamount(fundtransferdetail.getFtd_inbankcode());
-
-            //中间表
-            banksubledgerMapper.updateBankcode(amount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "-");
-            banksubledgerMapper.updateBankcode(inamount, fundtransferdetail.getFtd_nowbalance(),
-                    fundtransferdetail.getFtd_bankcode(), "+");
+            Double amount = fundtransferdetail.getFtd_nowbalance();
+            //收款
+            Banksubledger banksubledger = new Banksubledger();
+            banksubledger.setCompanyId(BaseContextHolder.getCompanyId());
+            banksubledger.setBl_ym(fundtransferdetail.getFtd_ym());
+            banksubledger.setBl_bankid(fundtransferdetail.getFtd_inbankid());
+            banksubledger.setBl_bankcode(fundtransferdetail.getFtd_inbankcode());
+            banksubledger.setBl_bankname(fundtransferdetail.getFtd_inbankname());
+            banksubledger.setBl_code(fundtransfer.getFt_code());
+            banksubledger.setBl_kind("资金转账");
+            banksubledger.setBl_date(fundtransfer.getFt_date());
+            banksubledger.setBl_income(fundtransferdetail.getFtd_nowbalance());
+            banksubledger.setBl_remark(fundtransferdetail.getFtd_remark());
+            banksubledgerMapper.insertSelective(banksubledger);
+
+            //付款
+            Banksubledger banksubledger1 = new Banksubledger();
+            banksubledger1.setCompanyId(BaseContextHolder.getCompanyId());
+            banksubledger1.setBl_ym(fundtransferdetail.getFtd_ym());
+            banksubledger1.setBl_bankid(fundtransferdetail.getFtd_bankid());
+            banksubledger1.setBl_bankcode(fundtransferdetail.getFtd_bankcode());
+            banksubledger1.setBl_bankname(fundtransferdetail.getFtd_bankname());
+            banksubledger1.setBl_code(fundtransfer.getFt_code());
+            banksubledger1.setBl_kind("资金转账");
+            banksubledger1.setBl_date(fundtransfer.getFt_date());
+            banksubledger1.setBl_spending(fundtransferdetail.getFtd_nowbalance());
+            banksubledger1.setBl_remark(fundtransferdetail.getFtd_remark());
+            banksubledgerMapper.insertSelective(banksubledger1);
 
             //资金账号表
             int bk_id = fundtransferdetail.getFtd_bankid();
@@ -141,7 +166,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         }
         DocBaseDTO baseDTO = getBaseDTOById(id);
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.audit(baseDTO);
         return baseDTO;
     }
 
@@ -199,7 +224,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
 
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.unAudit(baseDTO);
     }
 
 
@@ -209,7 +234,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         fundtransferdetailMapper.deleteByPrimaryKey(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.delete(baseDTO);
     }
 
     @Override
@@ -217,7 +242,7 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         fundtransferdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override

+ 67 - 13
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java

@@ -14,10 +14,7 @@ import com.usoftchina.saas.commons.po.BillCodeSeq;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
-import com.usoftchina.saas.money.mapper.BanksubledgerMapper;
-import com.usoftchina.saas.money.mapper.OthreceiptsMapper;
-import com.usoftchina.saas.money.mapper.OthreceiptsdetailMapper;
-import com.usoftchina.saas.money.mapper.StatsinfoMapper;
+import com.usoftchina.saas.money.mapper.*;
 import com.usoftchina.saas.money.po.*;
 import com.usoftchina.saas.money.service.OthreceiptsService;
 import com.usoftchina.saas.page.PageRequest;
@@ -47,8 +44,14 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
     private StatsinfoMapper statsinfoMapper;
     @Autowired
     private MessageLogService messageLogService;
-//    @Autowired
-//    private CommonService commonService;
+    @Autowired
+    private CommonService commonService;
+    @Autowired
+    private BankinformationMapper bankinformationMapper;
+    @Autowired
+    private RecbalanceMapper recbalanceMapper;
+    @Autowired
+    private SubledgerMapper subledgerMapper;
 
     @Override
     public DocBaseDTO insert(Othte othte) {
@@ -66,13 +69,20 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
 
         Long id = othreceipts.getId();
 
+        DocBaseDTO baseDTO = new DocBaseDTO();
         if (othreceipts.getId() > 0){
             othreceiptsMapper.updateByPrimaryKeySelective(othreceipts);
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.update(baseDTO);
         }else {
             othreceipts.setCompanyId(BaseContextHolder.getCompanyId());
             othreceipts.setOr_recorder(BaseContextHolder.getUserName());
             othreceiptsMapper.insertSelective(othreceipts);
             id = othreceipts.getId();
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.save(baseDTO);
         }
 
         Iterator isdet = othreceiptsdetail.iterator();
@@ -87,9 +97,6 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
                 othreceiptsdetailMapper.insertSelective(othreceiptsdetail1);
             }
         }
-        DocBaseDTO baseDTO = getBaseDTOById(id);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -111,8 +118,55 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
             Othreceiptsdetail othreceiptsdetail = (Othreceiptsdetail) isList.next();
             banksubledgerMapper.updateBankcode(amount, othreceiptsdetail.getOrd_nowbalance(),
                     othreceipts.getOr_bankcode(), "+");
+
         }
 
+        //资金账号表
+        int bk_inid = othreceipts.getOr_bankid();
+
+        Double or_amount = othreceipts.getOr_amount();
+        //收款
+        Bankinformation bankinformation = bankinformationMapper.selectByPrimaryKey(bk_inid);
+        Double beginamount = bankinformation.getBk_beginamount();
+        Double spending = bankinformation.getBk_spending() == null ? new Double(0) : bankinformation.getBk_spending();
+        Double incomme = bankinformation.getBk_income() == null ? new Double(0) : bankinformation.getBk_income();
+        bankinformation.setBk_thisamount(beginamount + incomme - spending + or_amount);
+        bankinformation.setBk_income(incomme + or_amount);
+        bankinformation.setBk_spending(spending);
+        bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
+
+        //客户付款
+        /**
+         * 更新客户资料
+         * cu_preamount=nvl(cu_preamount,0)+rb_preamount,
+         * cu_recamount=nvl(cu_recamount,0)-rb_rbdamount,
+         * cu_leftamount=cu_beginaramount-cu_beginprerecamount+cu_recamount-cu_preamount;
+         */
+        Customer customerData = recbalanceMapper.selectCustomerByPrimaryKey(othreceipts.getOr_custid());
+        Double preamount = customerData.getCu_preamount()==null?new Double(0):customerData.getCu_preamount();
+        Double beginapamount = customerData.getCu_beginaramount()==null?new Double(0):customerData.getCu_beginaramount();
+        Double beginprepayamount= customerData.getCu_beginprerecamount()==null?new Double(0):customerData.getCu_beginprerecamount();
+        Double recamount = customerData.getCu_recamount()==null?new Double(0):customerData.getCu_recamount();
+
+        Customer customer = new Customer();
+        customer.setId(Long.valueOf(othreceipts.getOr_custid()));
+        customer.setCu_preamount(preamount);
+        customer.setCu_recamount(recamount-or_amount);
+        customer.setCu_leftamount(beginapamount-beginprepayamount+recamount-or_amount-preamount);
+        recbalanceMapper.updateCustomerByPrimaryKeySelective(customer);
+
+        //插入subledger中间表
+        Subledger subledger = new Subledger();
+        subledger.setSl_code(othreceipts.getOr_code());
+        subledger.setSl_kind("其他收入单");
+        subledger.setSl_custid(othreceipts.getOr_custid());
+        subledger.setSl_vendid(0);
+        subledger.setSl_date(othreceipts.getOr_date());
+        subledger.setSl_amount(or_amount);
+        subledger.setCompanyId(BaseContextHolder.getCompanyId());
+        subledgerMapper.insertSelective(subledger);
+
+
         //计算期间金额
         Statsinfo statsinfo = new Statsinfo();
         List<Integer> ymList = othreceiptsdetailMapper.selectYm(Math.toIntExact(id));
@@ -133,7 +187,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
 //                "rb_id="+baseDTO.getId(),"rb_status","rb_statuscode",
 //                "rb_auditdate","rb_auditman");
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.audit(baseDTO);
         return baseDTO;
     }
 
@@ -174,7 +228,7 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         }
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.unAudit(baseDTO);
     }
 
     @Override
@@ -183,14 +237,14 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         othreceiptsdetailMapper.deleteByPrimaryKey(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.delete(baseDTO);
     }
 
     public void deleteItem(int id) {
         othreceiptsdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override

+ 94 - 11
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java

@@ -13,10 +13,7 @@ import com.usoftchina.saas.commons.po.BillCodeSeq;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
-import com.usoftchina.saas.money.mapper.BanksubledgerMapper;
-import com.usoftchina.saas.money.mapper.OthspendingsMapper;
-import com.usoftchina.saas.money.mapper.OthspendingsdetailMapper;
-import com.usoftchina.saas.money.mapper.StatsinfoMapper;
+import com.usoftchina.saas.money.mapper.*;
 import com.usoftchina.saas.money.po.*;
 import com.usoftchina.saas.money.service.OthspendingsService;
 import com.usoftchina.saas.page.PageRequest;
@@ -45,6 +42,12 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
     private StatsinfoMapper statsinfoMapper;
     @Autowired
     private MessageLogService messageLogService;
+    @Autowired
+    private BankinformationMapper bankinformationMapper;
+    @Autowired
+    private SubledgerMapper subledgerMapper;
+    @Autowired
+    private PaybalanceMapper paybalanceMapper;
 
     @Override
     public DocBaseDTO insert(Othsp othsp) {
@@ -61,13 +64,21 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         Long id = othspendings.getId();
 
 
+        DocBaseDTO baseDTO = new DocBaseDTO();
         if (othspendings.getId() > 0){
             othspendingsMapper.updateByPrimaryKeySelective(othspendings);
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.update(baseDTO);
         }else {
             othspendings.setCompanyId(BaseContextHolder.getCompanyId());
             othspendings.setOs_recorder(BaseContextHolder.getUserName());
             othspendingsMapper.insertSelective(othspendings);
             id = othspendings.getId();
+
+            baseDTO = getBaseDTOById(id);
+            //日志记录
+            messageLogService.save(baseDTO);
         }
 
         Iterator isdet = othspendingsdetails.iterator();
@@ -82,9 +93,6 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
                 othspendingsdetailMapper.insertSelective(othspendingsdetail);
             }
         }
-        DocBaseDTO baseDTO = getBaseDTOById(id);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -94,7 +102,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         othspendingsdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.delete(baseDTO);
     }
 
     @Override
@@ -102,7 +110,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         othspendingsdetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override
@@ -149,6 +157,48 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
                     othspendings.getOs_bankcode(), "+");
         }
 
+        //资金账号表
+        int bk_id = othspendings.getOs_bankid();
+
+        Double bk_amount = othspendings.getOs_amount();
+        //付款方
+        Bankinformation bankinformation = bankinformationMapper.selectByPrimaryKey(bk_id);
+        Double beginamount = bankinformation.getBk_beginamount();
+        Double spending = bankinformation.getBk_spending() == null ? new Double(0) : bankinformation.getBk_spending();
+        Double incomme = bankinformation.getBk_income() == null ? new Double(0) : bankinformation.getBk_income();
+        bankinformation.setBk_thisamount(beginamount + incomme - spending - bk_amount);
+        bankinformation.setBk_income(incomme);
+        bankinformation.setBk_spending(spending + bk_amount);
+
+        /**
+         * ve_preamount=nvl(ve_preamount,0)+pb_preamount,
+         * ve_payamount=nvl(ve_payamount,0)-pb_pbdamount,
+         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
+         */
+        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(othspendings.getOs_vendid());
+        Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
+        Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
+        Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
+        Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
+
+        Vendor vendor = new Vendor();
+        vendor.setId(Long.valueOf(othspendings.getOs_vendid()));
+        vendor.setVe_preamount(preamount);
+        vendor.setVe_payamount(payamount - bk_amount);
+        vendor.setVe_leftamount(beginapamount-beginprepayamount+payamount-bk_amount-preamount);
+        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+
+        //插入subledger中间表
+        Subledger subledger = new Subledger();
+        subledger.setSl_code(othspendings.getOs_code());
+        subledger.setSl_kind("其他支出单");
+        subledger.setSl_custid(0);
+        subledger.setSl_vendid(othspendings.getOs_vendid());
+        subledger.setSl_date(othspendings.getOs_date());
+        subledger.setSl_amount(bk_amount);
+        subledger.setCompanyId(BaseContextHolder.getCompanyId());
+        subledgerMapper.insertSelective(subledger);
+
         //计算期间金额
         Statsinfo statsinfo = new Statsinfo();
         List<Integer> ymList = othspendingsdetailMapper.selectYm(Math.toIntExact(id));
@@ -165,7 +215,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         }
         DocBaseDTO baseDTO = getBaseDTOById(id);
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.audit(baseDTO);
         return baseDTO;
     }
 
@@ -180,6 +230,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         //删除中间表
         othspendings = othspendingsMapper.selectByPrimaryKey(id);
         banksubledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他收入单");
+        subledgerMapper.deleteByPrimaryKey(othspendings.getOs_code(), "其他支出单");
 
         //资金
         Double amount = banksubledgerMapper.selectThisamount(othspendings.getOs_bankcode());
@@ -192,6 +243,38 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
                     othspendings.getOs_bankcode(), "-");
         }
 
+        //资金账号表
+        int bk_id = othspendings.getOs_bankid();
+
+        Double bk_amount = othspendings.getOs_amount();
+        //付款方
+        Bankinformation bankinformation = bankinformationMapper.selectByPrimaryKey(bk_id);
+        Double beginamount = bankinformation.getBk_beginamount();
+        Double spending = bankinformation.getBk_spending() == null ? new Double(0) : bankinformation.getBk_spending();
+        Double incomme = bankinformation.getBk_income() == null ? new Double(0) : bankinformation.getBk_income();
+        bankinformation.setBk_thisamount(beginamount + incomme - spending - bk_amount);
+        bankinformation.setBk_income(incomme);
+        bankinformation.setBk_spending(spending + bk_amount);
+
+        /**
+         * ve_preamount=nvl(ve_preamount,0)+pb_preamount,
+         * ve_payamount=nvl(ve_payamount,0)-pb_pbdamount,
+         * ve_leftamount=ve_beginapamount-ve_beginprepayamount+ve_payamount-ve_preamount;
+         */
+        Vendor vendorData = paybalanceMapper.selectVendorByPrimaryKey(othspendings.getOs_vendid());
+        Double preamount = vendorData.getVe_preamount()==null?new Double(0):vendorData.getVe_preamount();
+        Double beginapamount = vendorData.getVe_beginapamount()==null?new Double(0):vendorData.getVe_beginapamount();
+        Double beginprepayamount= vendorData.getVe_beginprepayamount()==null?new Double(0):vendorData.getVe_beginprepayamount();
+        Double payamount = vendorData.getVe_payamount()==null?new Double(0):vendorData.getVe_payamount();
+
+        Vendor vendor = new Vendor();
+        vendor.setId(Long.valueOf(othspendings.getOs_vendid()));
+        vendor.setVe_preamount(preamount);
+        vendor.setVe_payamount(payamount + bk_amount);
+        vendor.setVe_leftamount(beginapamount+beginprepayamount-payamount+bk_amount+preamount);
+        paybalanceMapper.updateVendorByPrimaryKeySelective(vendor);
+
+
         //计算期间金额
         Statsinfo statsinfo = new Statsinfo();
         List<Integer> ymList = othspendingsdetailMapper.selectYm(id);
@@ -209,7 +292,7 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
 
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.unAudit(baseDTO);
     }
 
     @Override

+ 14 - 10
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -68,14 +68,21 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         //校验数据
         checkPaybalance(pay);
 
-        if (paybalance.getId() > 0){
+        DocBaseDTO baseDTO = new DocBaseDTO();
+
+        if (pbId > 0){
             paybalanceMapper.updateByPrimaryKeySelective(paybalance);
+            baseDTO = getBaseDTOById(pbId);
+            //日志记录
+            messageLogService.update(baseDTO);
         }else {
             paybalance.setCompanyId(BaseContextHolder.getCompanyId());
             paybalance.setPb_recorder(BaseContextHolder.getUserName());
             paybalanceMapper.insertSelective(paybalance);
             pbId = paybalance.getId();
-            System.out.println("rbid:" + pbId);
+            baseDTO = getBaseDTOById(pbId);
+            //日志记录
+            messageLogService.save(baseDTO);
         }
 
         Iterator isdet = paybalancedet.iterator();
@@ -103,9 +110,6 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
                 paybalancedetailMapper.insertSelective(paybalancedetail1);
             }
         }
-        DocBaseDTO baseDTO = getBaseDTOById(pbId);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -270,7 +274,7 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 //                "pb_id="+baseDTO.getId(),"pb_status","pb_statuscode",
 //                "pb_auditdate","pb_auditman");
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.audit(baseDTO);
         return baseDTO;
     }
 
@@ -353,7 +357,7 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         }
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.unAudit(baseDTO);
     }
 
     public void delete(int id){
@@ -362,7 +366,7 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         paybalancedetMapper.deleteByPrimaryKey(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.delete(baseDTO);
     }
 
     @Override
@@ -370,7 +374,7 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         paybalancedetMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override
@@ -378,7 +382,7 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         paybalancedetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     public Pay select(int id){

+ 14 - 9
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java

@@ -66,14 +66,22 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         //校验数据
         checkRecbalance(rec);
 
+        DocBaseDTO baseDTO = new DocBaseDTO();
         Long rbId = recbalance.getId();
         if (rbId > 0){
             recbalanceMapper.updateByPrimaryKeySelective(recbalance);
+            baseDTO = getBaseDTOById(rbId);
+            //日志记录
+            messageLogService.update(baseDTO);
         }else {
             recbalance.setCompanyId(BaseContextHolder.getCompanyId());
             recbalance.setRb_recorder(BaseContextHolder.getUserName());
             recbalanceMapper.insertSelective(recbalance);
             rbId = recbalance.getId();
+
+            baseDTO = getBaseDTOById(rbId);
+            //日志记录
+            messageLogService.save(baseDTO);
         }
 
         Iterator isdet = recbalancedet.iterator();
@@ -101,9 +109,6 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
                 recbalancedetailMapper.insertSelective(recbalancedetail1);
             }
         }
-        DocBaseDTO baseDTO = getBaseDTOById(rbId);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -177,7 +182,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         recbalancedetailMapper.deleteByPrimaryKey(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.delete(baseDTO);
     }
 
     @Override
@@ -197,7 +202,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         recbalancedetMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override
@@ -205,7 +210,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         recbalancedetailMapper.deleteItem(id);
         DocBaseDTO baseDTO = getBaseDTOById(Long.valueOf(id));
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.deleteDetail(baseDTO);
     }
 
     @Override
@@ -306,7 +311,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
 //                "rb_id="+baseDTO.getId(),"rb_status","rb_statuscode",
 //                "rb_auditdate","rb_auditman");
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.audit(baseDTO);
         return baseDTO;
     }
 
@@ -390,7 +395,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         }
         DocBaseDTO baseDTO = getBaseDTOById(id);
         //日志记录
-        messageLogService.save(baseDTO);
+        messageLogService.unAudit(baseDTO);
     }
 
     public PageInfo<Recbalance> selectList(PageRequest page, ListReqDTO reqDTO) {
@@ -538,7 +543,7 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
             banksubledger.setBl_date(recbalance.getRb_date());
 
             if (recbalance.getRb_custid() == null || recbalance.getRb_custid() != 0){
-                banksubledger.setBl_asstype("供应商往来");
+                banksubledger.setBl_asstype("客户往来");
             }
             banksubledger.setBl_assid(recbalance.getRb_custid());
             banksubledger.setBl_asscode(recbalance.getRb_custcode());

+ 2 - 2
applications/money/money-server/src/main/resources/mapper/OthspendingsMapper.xml

@@ -33,8 +33,8 @@
   <sql id="Base_Column_List" >
     os_id, os_code, os_date, os_vendid, os_vendcode, os_vendname, os_bankid, os_bankcode, 
     os_bankname, os_amount, os_recorderid, os_recorder, os_recorddate, os_status, os_statuscode, 
-    os_remark, othspendingsdetail.companyId, othspendingsdetail.updaterId,
-    othspendingsdetail.updatedate, os_text1, os_text2, os_text3, os_text4,
+    os_remark, companyId, updaterId,
+    updatedate, os_text1, os_text2, os_text3, os_text4,
     os_text5
   </sql>
   <sql id="Detail_Column_List" >

+ 2 - 0
applications/purchase/purchase-dto/src/main/java/com/usoftchina/saas/purchase/dto/ProdInOutDTO.java

@@ -73,4 +73,6 @@ public class ProdInOutDTO extends CommonBaseDTO implements Serializable {
 
     private String pi_remark;
 
+    private Long pi_ioid;
+
 }

+ 1 - 5
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdIODetailMapper.java

@@ -17,15 +17,11 @@ public interface ProdIODetailMapper extends CommonBaseMapper<ProdIODetail> {
 
     int updateByPrimaryKeySelective(ProdIODetail record);
 
-    int updateByPrimaryKeyWithBLOBs(ProdIODetail record);
-
-    int updateByPrimaryKey(ProdIODetail record);
-
     void batchInsert(List<ProdIODetail> list);
 
     void batchUpdate(List<ProdIODetail> list);
 
-    void updatePurchaseYqty(Integer id);
+    void updatePurchaseYqty(Long id);
 
     List<ProdIODetail> selectByFK(Long id);
 

+ 0 - 4
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/ProdInOutMapper.java

@@ -15,10 +15,6 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
 
     int updateByPrimaryKeySelective(ProdInOut record);
 
-    int updateByPrimaryKeyWithBLOBs(ProdInOut record);
-
-    int updateByPrimaryKey(ProdInOut record);
-
     Integer validateCodeWhenInsert(@Param("pi_inoutno") String pi_inoutno, @Param("companyId") Long companyId);
 
     Integer validateCodeWhenUpdate(@Param("pi_inoutno") String pi_inoutno, @Param("id") Long id,@Param("companyId") Long companyId);

+ 2 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/ProdInOut.java

@@ -68,4 +68,6 @@ public class ProdInOut extends CommonBaseEntity implements Serializable {
 
     private String pi_remark;
 
+    private Long pi_ioid;
+
 }

+ 9 - 11
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java

@@ -179,7 +179,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             ProdIODetail detail = BeanMapper.map(item, ProdIODetail.class);
             detail.setUpdaterId(userId);
             detail.setUpdateTime(new Date());
-            detail.setUpdater(userName);
+//            detail.setUpdater(userName);
             if (StringUtils.isEmpty(detail.getId()) || "0".equals(detail.getId().toString())) {
                 detail.setCompanyId(companyId);
                 detail.setCreatorId(userId);
@@ -215,7 +215,6 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         updateYqty(prodInOut);
         //日志记录
         messageLogService.update(baseDTO);
-        messageLogService.customizeLog(baseDTO, Operation.TURNPURCCHECKOUT);
         return baseDTO;
     }
 
@@ -405,7 +404,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         if ("采购验收单".equals(prodInOut.getPi_class())){
             purchasedetailMapper.updatePurchaseYqty(prodInOut.getPi_puid());
         }else if ("采购验退单".equals(prodInOut.getPi_class())){
-            prodIODetailMapper.updatePurchaseYqty(prodInOut.getPi_puid());
+            prodIODetailMapper.updatePurchaseYqty(prodInOut.getPi_ioid());
         }
     }
 
@@ -444,13 +443,14 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         targetPi.setPi_vendname(sourcePi.getPi_vendname());
         targetPi.setPi_puid(sourcePi.getPi_puid());
         targetPi.setPi_pucode(sourcePi.getPi_pucode());
+        targetPi.setPi_ioid(sourcePi.getId());
         //设置公司id
         targetPi.setCompanyId(sourcePi.getCompanyId());
         targetPi.setCreateTime(new Date());
         targetPi.setCreatorId(userId);
-        targetPi.setCreator(userName);
+//        targetPi.setCreator(userName);
         targetPi.setUpdaterId(userId);
-        targetPi.setUpdater(userName);
+//        targetPi.setUpdater(userName);
         targetPi.setUpdateTime(new Date());
 
         //保存数据
@@ -485,9 +485,9 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                  targetPid.setCompanyId(sourcePid.getCompanyId());
                  targetPid.setCreateTime(new Date());
                  targetPid.setCreatorId(userId);
-                 targetPid.setCreator(userName);
+//                 targetPid.setCreator(userName);
                  targetPid.setUpdaterId(userId);
-                 targetPid.setUpdater(userName);
+//                 targetPid.setUpdater(userName);
                  targetPid.setUpdateTime(new Date());
                  //本次转单数
                  targetPid.setPd_outqty(pdInqty-pdYqty);
@@ -501,10 +501,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
 //        getDefaultWarehouseByProduct(pi_id);
         //采购验退单相关计算
         calcProdInout(pi_id,"采购验退单");
-        DocBaseDTO baseDTO = new DocBaseDTO();
-        baseDTO.setId(pi_id);
-        baseDTO.setCode(piInoutno);
-        baseDTO.setName("采购验退单");
+        DocBaseDTO baseDTO = new DocBaseDTO(pi_id, piInoutno, BillCodeSeq.PURCHASEOUT.getName());
+        messageLogService.customizeLog(baseDTO, Operation.PURCHASEOUT);
         return Result.success(baseDTO);
     }
 

+ 14 - 28
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java

@@ -11,6 +11,7 @@ import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
 import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
+import com.usoftchina.saas.commons.po.Operation;
 import com.usoftchina.saas.commons.po.Status;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.api.ProductApi;
@@ -144,7 +145,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
                 detail.setCreateTime(new Date());
                 detail.setCreatorId(userId);
                 detail.setUpdaterId(userId);
-                detail.setUpdater(userName);
+//                detail.setUpdater(userName);
                 detail.setUpdateTime(new Date());
                 insertDetails.add(detail);
             }
@@ -170,12 +171,12 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
             detail.setPd_code(pu_code);
             detail.setPd_delivery(item.getPd_delivery()==null?purchase.getPu_delivery():item.getPd_delivery());
             detail.setUpdaterId(userId);
-            detail.setUpdater(userName);
+//            detail.setUpdater(userName);
             detail.setUpdateTime(new Date());
             if (StringUtils.isEmpty(detail.getId()) || "0".equals(detail.getId().toString())) {
                 detail.setCompanyId(companyId);
                 detail.setCreatorId(userId);
-                detail.setCreator(userName);
+//                detail.setCreator(userName);
                 detail.setCreateTime(new Date());
                 insertDetails.add(detail);
             } else {
@@ -309,7 +310,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         purchase.setPu_acceptstatuscode(Status.CLOSE.name());
         purchase.setPu_acceptstatus(Status.CLOSE.getDisplay());
         //更新更新人信息
-        purchase.setUpdater(BaseContextHolder.getUserName());
+//        purchase.setUpdater(BaseContextHolder.getUserName());
         purchase.setUpdaterId(BaseContextHolder.getUserId());
         purchase.setUpdateTime(new Date());
         purchaseMapper.updateByPrimaryKeySelective(purchase);
@@ -340,7 +341,6 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         Purchase purchase = purchaseMapper.selectByPrimaryKey(id);
         DocBaseDTO docBaseDTO = null;
         Double acceptqty=new Double(0),qty=new Double(0);
-
         if(!Status.CLOSE.name().equals(purchase.getPu_acceptstatuscode())){
             throw new BizException(BizExceptionCode.BIZ_OPEN);
         }
@@ -373,10 +373,9 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
                 purchase.setPu_acceptstatuscode(Status.TURNIN.name());
             }
             //更新更新人信息
-            purchase.setUpdater(BaseContextHolder.getUserName());
+//            purchase.setUpdater(BaseContextHolder.getUserName());
             purchase.setUpdaterId(BaseContextHolder.getUserId());
             purchase.setUpdateTime(new Date());
-
             purchaseMapper.updateByPrimaryKeySelective(purchase);
             docBaseDTO = getBaseDTOById(id);
             //日志
@@ -400,9 +399,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         Long userId = BaseContextHolder.getUserId();
         //人员名
         String userName = BaseContextHolder.getUserName();
-
         Purchase purchase = getMapper().selectByPrimaryKey(id);
-
         Integer count=0;
         double pdQty=0, pdYqty=0;
         //检查转单状态
@@ -411,9 +408,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         if ("CLOSED".equals(acceptstatus)){
             return Result.error(ExceptionCode.CLOSED_EXIST);
         }
-
         List<PurchaseDetail> purchaseDetails = purchasedetailMapper.selectByFK(id);
-
         //检查从表
         for (PurchaseDetail purchaseDetail : purchaseDetails) {
             pdQty = purchaseDetail.getPd_qty()==null?0:purchaseDetail.getPd_qty();
@@ -441,18 +436,15 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         prodInOut.setPi_vendname(purchase.getPu_vendname());
         prodInOut.setPi_puid(purchase.getId().intValue());
         prodInOut.setPi_pucode(purchase.getPu_code());
-
         //设置公司id
         prodInOut.setCompanyId(purchase.getCompanyId());
         prodInOut.setCreatorId(userId);
         prodInOut.setCreateTime(new Date());
-        prodInOut.setCreator(userName);
+//        prodInOut.setCreator(userName);
         prodInOut.setUpdaterId(userId);
-        prodInOut.setUpdater(userName);
+//        prodInOut.setUpdater(userName);
         prodInOut.setUpdateTime(new Date());
-
         prodInOutMapper.insertSelective(prodInOut);
-
         //插入验收单从表
         long pi_id = prodInOut.getId();
 
@@ -478,10 +470,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
                 prodIODetail.setCompanyId(purchaseDetail.getCompanyId());
                 prodIODetail.setCreatorId(userId);
                 prodIODetail.setCreateTime(new Date());
-                prodIODetail.setCreator(userName);
+//                prodIODetail.setCreator(userName);
                 prodIODetail.setUpdaterId(userId);
                 prodIODetail.setUpdateTime(new Date());
-                prodIODetail.setUpdater(userName);
+//                prodIODetail.setUpdater(userName);
                 //本次转单数
                 prodIODetail.setPd_inqty(pdQty-pdYqty);
                 prodIODetailMapper.insertSelective(prodIODetail);
@@ -491,14 +483,11 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
             }
         }
         //更新默认仓库
-        prodInOutService.getDefaultWarehouseByProduct(pi_id);
-
+//        prodInOutService.getDefaultWarehouseByProduct(pi_id);
         //采购验收单相关计算
         prodInOutService.calcProdInout(pi_id,"采购验收单");
-        DocBaseDTO baseDTO = new DocBaseDTO();
-        baseDTO.setId(pi_id);
-        baseDTO.setCode(piInoutno);
-        baseDTO.setName("采购验收单");
+        DocBaseDTO baseDTO = new DocBaseDTO(pi_id, piInoutno, BillCodeSeq.PURCHASEIN.getName());
+        messageLogService.customizeLog(baseDTO, Operation.PURCHASEIN);
         return Result.success(baseDTO);
     }
 
@@ -517,12 +506,9 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         purchase.setPu_acceptstatuscode(Status.UNAUDITED.name());
         purchase.setUpdateTime(new Date());
         purchase.setUpdaterId(BaseContextHolder.getUserId());
-        purchase.setUpdater(BaseContextHolder.getUserName());
+//        purchase.setUpdater(BaseContextHolder.getUserName());
        // setUpdateInfo(purchase);
         //更新存在字段
-        purchaseMapper.updateByPrimaryKeySelective(purchase);
-        //更新最新采购单价
-//        productApi.updateLatestPurchasePrice(id);
         //日志
         messageLogService.audit(docBaseDTO);
         return result;

+ 3 - 88
applications/purchase/purchase-server/src/main/resources/mapper/ProdIODetailMapper.xml

@@ -465,91 +465,6 @@
     </set>
     where pd_id = #{id,jdbcType=INTEGER}
   </update>
-  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.usoftchina.saas.purchase.po.ProdIODetail">
-    update prodiodetail
-    set pd_piid = #{pd_piid,jdbcType=INTEGER},
-      pd_inoutno = #{pd_inoutno,jdbcType=VARCHAR},
-      pd_piclass = #{pd_piclass,jdbcType=VARCHAR},
-      pd_pdno = #{pd_pdno,jdbcType=INTEGER},
-      pd_ordercode = #{pd_ordercode,jdbcType=VARCHAR},
-      pd_orderdetno = #{pd_orderdetno,jdbcType=INTEGER},
-      pd_prodid = #{pd_prodid,jdbcType=INTEGER},
-      pd_prodcode = #{pd_prodcode,jdbcType=VARCHAR},
-      pd_unit = #{pd_unit,jdbcType=VARCHAR},
-      pd_inqty = #{pd_inqty,jdbcType=DOUBLE},
-      pd_outqty = #{pd_outqty,jdbcType=DOUBLE},
-      pd_orderprice = #{pd_orderprice,jdbcType=DOUBLE},
-      pd_sendprice = #{pd_sendprice,jdbcType=DOUBLE},
-      pd_price = #{pd_price,jdbcType=DOUBLE},
-      pd_total = #{pd_total,jdbcType=DOUBLE},
-      pd_taxrate = #{pd_taxrate,jdbcType=DOUBLE},
-      pd_netprice = #{pd_netprice,jdbcType=DOUBLE},
-      pd_nettotal = #{pd_nettotal,jdbcType=DOUBLE},
-      pd_whid = #{pd_whid,jdbcType=INTEGER},
-      pd_whcode = #{pd_whcode,jdbcType=VARCHAR},
-      pd_whname = #{pd_whname,jdbcType=VARCHAR},
-      pd_inwhid = #{pd_inwhid,jdbcType=INTEGER},
-      pd_inwhcode = #{pd_inwhcode,jdbcType=VARCHAR},
-      pd_inwhname = #{pd_inwhname,jdbcType=VARCHAR},
-      pd_orderid = #{pd_orderid,jdbcType=INTEGER},
-      pd_sdid = #{pd_sdid,jdbcType=INTEGER},
-      pd_status = #{pd_status,jdbcType=INTEGER},
-      companyid = #{companyid,jdbcType=INTEGER},
-      updaterid = #{updaterid,jdbcType=INTEGER},
-      updatetime = #{updatetime,jdbcType=TIMESTAMP},
-      pd_text1 = #{pd_text1,jdbcType=VARCHAR},
-      pd_text2 = #{pd_text2,jdbcType=VARCHAR},
-      pd_text3 = #{pd_text3,jdbcType=VARCHAR},
-      pd_text4 = #{pd_text4,jdbcType=VARCHAR},
-      pd_text5 = #{pd_text5,jdbcType=VARCHAR},
-      pd_ym = #{pd_ym,jdbcType=INTEGER},
-      pd_yqty = #{pd_yqty,jdbcType=DOUBLE},
-      pd_remark = #{pd_remark,jdbcType=LONGVARCHAR},
-      pd_ioid = #{pd_ioid,jdbcType=INTEGER}
-    where pd_id = #{pd_id,jdbcType=INTEGER}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.purchase.po.ProdIODetail">
-    update prodiodetail
-    set pd_piid = #{pd_piid,jdbcType=INTEGER},
-      pd_inoutno = #{pd_inoutno,jdbcType=VARCHAR},
-      pd_piclass = #{pd_piclass,jdbcType=VARCHAR},
-      pd_pdno = #{pd_pdno,jdbcType=INTEGER},
-      pd_ordercode = #{pd_ordercode,jdbcType=VARCHAR},
-      pd_orderdetno = #{pd_orderdetno,jdbcType=INTEGER},
-      pd_prodid = #{pd_prodid,jdbcType=INTEGER},
-      pd_prodcode = #{pd_prodcode,jdbcType=VARCHAR},
-      pd_unit = #{pd_unit,jdbcType=VARCHAR},
-      pd_inqty = #{pd_inqty,jdbcType=DOUBLE},
-      pd_outqty = #{pd_outqty,jdbcType=DOUBLE},
-      pd_orderprice = #{pd_orderprice,jdbcType=DOUBLE},
-      pd_sendprice = #{pd_sendprice,jdbcType=DOUBLE},
-      pd_price = #{pd_price,jdbcType=DOUBLE},
-      pd_total = #{pd_total,jdbcType=DOUBLE},
-      pd_taxrate = #{pd_taxrate,jdbcType=DOUBLE},
-      pd_netprice = #{pd_netprice,jdbcType=DOUBLE},
-      pd_nettotal = #{pd_nettotal,jdbcType=DOUBLE},
-      pd_whid = #{pd_whid,jdbcType=INTEGER},
-      pd_whcode = #{pd_whcode,jdbcType=VARCHAR},
-      pd_whname = #{pd_whname,jdbcType=VARCHAR},
-      pd_inwhid = #{pd_inwhid,jdbcType=INTEGER},
-      pd_inwhcode = #{pd_inwhcode,jdbcType=VARCHAR},
-      pd_inwhname = #{pd_inwhname,jdbcType=VARCHAR},
-      pd_orderid = #{pd_orderid,jdbcType=INTEGER},
-      pd_sdid = #{pd_sdid,jdbcType=INTEGER},
-      pd_status = #{pd_status,jdbcType=INTEGER},
-      companyid = #{companyid,jdbcType=INTEGER},
-      updaterid = #{updaterid,jdbcType=INTEGER},
-      updatetime = #{updatetime,jdbcType=TIMESTAMP},
-      pd_text1 = #{pd_text1,jdbcType=VARCHAR},
-      pd_text2 = #{pd_text2,jdbcType=VARCHAR},
-      pd_text3 = #{pd_text3,jdbcType=VARCHAR},
-      pd_text4 = #{pd_text4,jdbcType=VARCHAR},
-      pd_text5 = #{pd_text5,jdbcType=VARCHAR},
-      pd_ym = #{pd_ym,jdbcType=INTEGER},
-      pd_yqty = #{pd_yqty,jdbcType=DOUBLE},
-      pd_ioid = #{pd_ioid,jdbcType=INTEGER}
-    where pd_id = #{pd_id,jdbcType=INTEGER}
-  </update>
   <insert id="batchInsert" parameterType="java.util.List" >
     insert into prodiodetail (pd_piid, pd_inoutno,
     pd_piclass, pd_pdno, pd_ordercode,
@@ -722,11 +637,11 @@
     </foreach>
   </update>
 
-  <update id="updatePurchaseYqty" parameterType="java.lang.Integer">
+  <update id="updatePurchaseYqty" parameterType="long">
   update prodiodetail a
   set a.pd_yqty =ifnull((select  b.pd_outqty  from  (select pd_ioid,sum(pd_outqty) pd_outqty from  prodiodetail left join prodinout on pd_piid = pi_id where pd_piclass='采购验退单'
-  and pi_puid=#{id,jdbcType=INTEGER}  GROUP BY pd_ioid) b where ifnull(b.pd_ioid ,0)= a.pd_id ),0)
-  where a.pd_piid = (select pi_id from prodinout where pi_puid=#{id,jdbcType=INTEGER} and pi_class='采购验收单')
+  and pi_ioid=#{id,jdbcType=INTEGER}  GROUP BY pd_ioid) b where ifnull(b.pd_ioid ,0)= a.pd_id ),0)
+  where a.pd_piid = #{id,jdbcType=INTEGER}
   </update>
 
 

+ 2 - 2
applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutListMapper.xml

@@ -63,10 +63,10 @@
     <result column="companyid" property="companyId" jdbcType="BIGINT" />
     <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
     <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
-    <result column="updater" jdbcType="VARCHAR" property="updater" />
+    <!--<result column="updater" jdbcType="VARCHAR" property="updater" />-->
     <result column="creatorid" property="creatorId" jdbcType="INTEGER"/>
     <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
-    <result column="creator" property="creator" jdbcType="VARCHAR" />
+    <!--<result column="creator" property="creator" jdbcType="VARCHAR" />-->
     <result column="pd_text1" jdbcType="VARCHAR" property="pd_text1" />
     <result column="pd_text2" jdbcType="VARCHAR" property="pd_text2" />
     <result column="pd_text3" jdbcType="VARCHAR" property="pd_text3" />

+ 9 - 100
applications/purchase/purchase-server/src/main/resources/mapper/ProdInOutMapper.xml

@@ -27,10 +27,8 @@
     <result column="companyid" property="companyId" jdbcType="BIGINT" />
     <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
     <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
-    <result column="updater" jdbcType="VARCHAR" property="updater" />
     <result column="creatorid" property="creatorId" jdbcType="INTEGER"/>
     <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
-    <result column="creator" property="creator" jdbcType="VARCHAR" />
     <result column="pi_text1" jdbcType="VARCHAR" property="pi_text1" />
     <result column="pi_text2" jdbcType="VARCHAR" property="pi_text2" />
     <result column="pi_text3" jdbcType="VARCHAR" property="pi_text3" />
@@ -39,7 +37,7 @@
     <result column="pi_auditdate" jdbcType="TIMESTAMP" property="pi_auditdate" />
     <result column="pi_auditman" jdbcType="VARCHAR" property="pi_auditman" />
     <result column="pi_remark" jdbcType="VARCHAR" property="pi_remark" />
-
+    <result column="pi_ioid" jdbcType="INTEGER" property="pi_ioid" />
 
   </resultMap>
   <resultMap extends="BaseResultMap" id="ResultMapWithBLOBs" type="com.usoftchina.saas.purchase.po.ProdInOut">
@@ -52,8 +50,8 @@
     pi_id, pi_inoutno, pi_class, pi_date, pi_vendid, pi_vendcode, pi_vendname, pi_custid, 
     pi_custcode, pi_custname, pi_puid, pi_pucode, pi_said, pi_sacode, pi_total, pi_recordmanid, 
     pi_recordman, pi_recorddate, pi_status, pi_statuscode, pi_printstatus, pi_printstatuscode, 
-    companyid, updaterid, updatetime,updater,creatorid,createtime,creator, pi_text1, pi_text2, pi_text3, pi_text4, pi_text5,pi_auditdate,
-    pi_auditman,pi_remark
+    companyid, updaterid, updatetime,creatorid,createtime, pi_text1, pi_text2, pi_text3, pi_text4, pi_text5,pi_auditdate,
+    pi_auditman,pi_remark,pi_ioid
   </sql>
   <sql id="Blob_Column_List">
     pi_address
@@ -149,23 +147,15 @@
       <if test="updateTime != null" >
         updateTime,
       </if>
-      <if test="updater != null" >
-        updater,
-      </if>
       <if test="creatorId != null" >
         creatorId,
       </if>
       <if test="createTime != null" >
         createTime,
       </if>
-      <if test="creator != null" >
-        creator,
-      </if>
-
       <if test="pi_text1 != null">
         pi_text1,
       </if>
-
       <if test="pi_text2 != null">
         pi_text2,
       </if>
@@ -190,6 +180,9 @@
       <if test="pi_remark != null">
         pi_remark,
       </if>
+      <if test="pi_ioid != null">
+        pi_ioid,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
 
@@ -263,19 +256,12 @@
       <if test="updateTime != null" >
         #{updateTime,jdbcType=TIMESTAMP},
       </if>
-      <if test="updater != null" >
-        #{updater,jdbcType=VARCHAR},
-      </if>
       <if test="creatorId != null" >
         #{creatorId,jdbcType=INTEGER},
       </if>
       <if test="createTime != null" >
         #{createTime,jdbcType=TIMESTAMP},
       </if>
-      <if test="creator != null" >
-        #{creator,jdbcType=VARCHAR},
-      </if>
-
       <if test="pi_text1 != null">
         #{pi_text1,jdbcType=VARCHAR},
       </if>
@@ -303,7 +289,9 @@
       <if test="pi_remark != null">
         #{pi_remark,jdbcType=VARCHAR},
       </if>
-
+      <if test="pi_ioid != null">
+        #{pi_ioid,jdbcType=INTEGER},
+      </if>
     </trim>
   </insert>
 
@@ -382,9 +370,6 @@
       <if test="updateTime != null" >
         updateTime = #{updateTime,jdbcType=TIMESTAMP},
       </if>
-      <if test="updater != null" >
-        updater = #{updater,jdbcType=VARCHAR},
-      </if>
       <if test="pi_text1 != null">
         pi_text1 = #{pi_text1,jdbcType=VARCHAR},
       </if>
@@ -415,82 +400,6 @@
     </set>
     where pi_id = #{id,jdbcType=INTEGER}
   </update>
-  <update id="updateByPrimaryKeyWithBLOBs" parameterType="com.usoftchina.saas.purchase.po.ProdInOut">
-    update prodinout
-    set pi_inoutno = #{pi_inoutno,jdbcType=VARCHAR},
-      pi_class = #{pi_class,jdbcType=VARCHAR},
-      pi_date = #{pi_date,jdbcType=TIMESTAMP},
-      pi_vendid = #{pi_vendid,jdbcType=INTEGER},
-      pi_vendcode = #{pi_vendcode,jdbcType=VARCHAR},
-      pi_vendname = #{pi_vendname,jdbcType=VARCHAR},
-      pi_custid = #{pi_custid,jdbcType=INTEGER},
-      pi_custcode = #{pi_custcode,jdbcType=VARCHAR},
-      pi_custname = #{pi_custname,jdbcType=VARCHAR},
-      pi_puid = #{pi_puid,jdbcType=INTEGER},
-      pi_pucode = #{pi_pucode,jdbcType=VARCHAR},
-      pi_said = #{pi_said,jdbcType=INTEGER},
-      pi_sacode = #{pi_sacode,jdbcType=VARCHAR},
-      pi_total = #{pi_total,jdbcType=DOUBLE},
-      pi_recordmanid = #{pi_recordmanid,jdbcType=INTEGER},
-      pi_recordman = #{pi_recordman,jdbcType=VARCHAR},
-      pi_recorddate = #{createTime,jdbcType=TIMESTAMP},
-      pi_status = #{pi_status,jdbcType=VARCHAR},
-      pi_statuscode = #{pi_statuscode,jdbcType=VARCHAR},
-      pi_printstatus = #{pi_printstatus,jdbcType=VARCHAR},
-      pi_printstatuscode = #{pi_printstatuscode,jdbcType=VARCHAR},
-
-      companyid = #{companyId,jdbcType=INTEGER},
-      updaterId = #{updaterId,jdbcType=INTEGER},
-      updateTime = #{updateTime,jdbcType=TIMESTAMP},
-      updater = #{updater,jdbcType=VARCHAR},
-      pi_text1 = #{pi_text1,jdbcType=VARCHAR},
-      pi_text2 = #{pi_text2,jdbcType=VARCHAR},
-      pi_text3 = #{pi_text3,jdbcType=VARCHAR},
-      pi_text4 = #{pi_text4,jdbcType=VARCHAR},
-      pi_text5 = #{pi_text5,jdbcType=VARCHAR},
-      pi_address = #{pi_address,jdbcType=LONGVARCHAR},
-      pi_auditdate = #{pi_auditdate,jdbcType=TIMESTAMP},
-      pi_auditman = #{pi_auditman,jdbcType=VARCHAR},
-      pi_remark = #{pi_remark,jdbcType=VARCHAR}
-    where pi_id = #{pi_id,jdbcType=INTEGER}
-  </update>
-  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.purchase.po.ProdInOut">
-    update prodinout
-    set pi_inoutno = #{pi_inoutno,jdbcType=VARCHAR},
-      pi_class = #{pi_class,jdbcType=VARCHAR},
-      pi_date = #{pi_date,jdbcType=TIMESTAMP},
-      pi_vendid = #{pi_vendid,jdbcType=INTEGER},
-      pi_vendcode = #{pi_vendcode,jdbcType=VARCHAR},
-      pi_vendname = #{pi_vendname,jdbcType=VARCHAR},
-      pi_custid = #{pi_custid,jdbcType=INTEGER},
-      pi_custcode = #{pi_custcode,jdbcType=VARCHAR},
-      pi_custname = #{pi_custname,jdbcType=VARCHAR},
-      pi_puid = #{pi_puid,jdbcType=INTEGER},
-      pi_pucode = #{pi_pucode,jdbcType=VARCHAR},
-      pi_said = #{pi_said,jdbcType=INTEGER},
-      pi_sacode = #{pi_sacode,jdbcType=VARCHAR},
-      pi_total = #{pi_total,jdbcType=DOUBLE},
-      pi_recordmanid = #{pi_recordmanid,jdbcType=INTEGER},
-      pi_recordman = #{pi_recordman,jdbcType=VARCHAR},
-      pi_recorddate = #{createTime,jdbcType=TIMESTAMP},
-      pi_status = #{pi_status,jdbcType=VARCHAR},
-      pi_statuscode = #{pi_statuscode,jdbcType=VARCHAR},
-      pi_printstatus = #{pi_printstatus,jdbcType=VARCHAR},
-      pi_printstatuscode = #{pi_printstatuscode,jdbcType=VARCHAR},
-      companyid = #{companyId,jdbcType=INTEGER},
-      updaterId = #{updaterId,jdbcType=INTEGER},
-      updateTime = #{updateTime,jdbcType=TIMESTAMP},
-      updater = #{updater,jdbcType=VARCHAR},
-      pi_text1 = #{pi_text1,jdbcType=VARCHAR},
-      pi_text2 = #{pi_text2,jdbcType=VARCHAR},
-      pi_text3 = #{pi_text3,jdbcType=VARCHAR},
-      pi_text4 = #{pi_text4,jdbcType=VARCHAR},
-      pi_text5 = #{pi_text5,jdbcType=VARCHAR},
-      pi_auditdate = #{pi_auditdate,jdbcType=TIMESTAMP},
-      pi_auditman = #{pi_auditman,jdbcType=VARCHAR},
-      pi_remark = #{pi_remark,jdbcType=VARCHAR}
-    where pi_id = #{id,jdbcType=INTEGER}
-  </update>
 
   <select id="validateCodeWhenInsert"  resultType="int">
     select count(1) from prodinout where pi_inoutno = #{pi_inoutno} and companyid = #{companyId}

+ 2 - 2
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseListMapper.xml

@@ -26,10 +26,10 @@
         <result column="companyid" property="companyId" jdbcType="BIGINT" />
         <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
         <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
-        <result column="updater" jdbcType="VARCHAR" property="updater" />
+        <!--<result column="updater" jdbcType="VARCHAR" property="updater" />-->
         <result column="creatorid" property="creatorId" jdbcType="INTEGER"/>
         <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
-        <result column="creator" property="creator" jdbcType="VARCHAR" />
+        <!--<result column="creator" property="creator" jdbcType="VARCHAR" />-->
         <result column="pu_text1" property="pu_text1" jdbcType="VARCHAR" />
         <result column="pu_text2" property="pu_text2" jdbcType="VARCHAR" />
         <result column="pu_text3" property="pu_text3" jdbcType="VARCHAR" />

+ 7 - 91
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml

@@ -27,10 +27,10 @@
     <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
     <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
 
-    <result column="updater" jdbcType="VARCHAR" property="updater" />
+    <!--<result column="updater" jdbcType="VARCHAR" property="updater" />-->
     <result column="creatorid" property="creatorId" jdbcType="INTEGER"/>
     <result column="createtime" property="createTime" jdbcType="TIMESTAMP" />
-    <result column="creator" property="creator" jdbcType="VARCHAR" />
+    <!--<result column="creator" property="creator" jdbcType="VARCHAR" />-->
 
     <result column="pu_text1" property="pu_text1" jdbcType="VARCHAR" />
     <result column="pu_text2" property="pu_text2" jdbcType="VARCHAR" />
@@ -46,7 +46,7 @@
     pu_id, pu_code, pu_date, pu_vendid, PU_VENDCODE, PU_VENDNAME, PU_BUYERID, PU_BUYERCODE, 
     PU_BUYERNAME, PU_DELIVERY, PU_TAXTOTAL, PU_TOTAL, PU_REMARK, PU_TOTALUPPER, PU_INDATE, 
     PU_PRINTSTATUS, PU_PRINTSTATUSCODE, PU_ACCEPTSTATUSCODE, PU_ACCEPTSTATUS, PU_STATUSCODE, 
-    PU_STATUS, companyid, updaterId, updateTime,updater,creatorid,createtime,creator, pu_text1, pu_text2, pu_text3, pu_text4,
+    PU_STATUS, companyid, updaterId, updateTime,creatorid,createtime, pu_text1, pu_text2, pu_text3, pu_text4,
     pu_text5
   </sql>
   <sql id="Blob_Column_List" >
@@ -64,34 +64,7 @@
     delete from purchase
     where pu_id = #{id}
   </delete>
-  <insert id="insert" parameterType="com.usoftchina.saas.purchase.po.Purchase" >
-    insert into purchase (pu_id, pu_code, pu_date, 
-      pu_vendid, PU_VENDCODE, PU_VENDNAME, 
-      PU_BUYERID, PU_BUYERCODE, PU_BUYERNAME, 
-      PU_DELIVERY, PU_TAXTOTAL, PU_TOTAL, 
-      PU_REMARK, PU_TOTALUPPER, PU_INDATE, 
-      PU_PRINTSTATUS, PU_PRINTSTATUSCODE, PU_ACCEPTSTATUSCODE, 
-      PU_ACCEPTSTATUS, PU_STATUSCODE, PU_STATUS, 
-      companyid, updaterId, updateTime,
-      ,updater,creatorid,createtime,creator
-      pu_text1, pu_text2, pu_text3, 
-      pu_text4, pu_text5, PU_SHIPADDRESSCODE
-      )
-    values (#{id,jdbcType=INTEGER}, #{puCode,jdbcType=VARCHAR}, #{puDate,jdbcType=TIMESTAMP},
-      #{puVendid,jdbcType=INTEGER}, #{puVendcode,jdbcType=VARCHAR}, #{puVendname,jdbcType=VARCHAR}, 
-      #{puBuyerid,jdbcType=INTEGER}, #{puBuyercode,jdbcType=VARCHAR}, #{puBuyername,jdbcType=VARCHAR}, 
-      #{puDelivery,jdbcType=TIMESTAMP}, #{puTaxtotal,jdbcType=DOUBLE}, #{puTotal,jdbcType=DOUBLE}, 
-      #{puRemark,jdbcType=VARCHAR}, #{puTotalupper,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
-      #{puPrintstatus,jdbcType=VARCHAR}, #{puPrintstatuscode,jdbcType=VARCHAR}, #{puAcceptstatuscode,jdbcType=VARCHAR}, 
-      #{puAcceptstatus,jdbcType=VARCHAR}, #{puStatuscode,jdbcType=VARCHAR}, #{puStatus,jdbcType=VARCHAR}, 
-      #{companyId,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER}, #{updateTime,jdbcType=TIMESTAMP},
 
-      #{updater,jdbcType=VARCHAR}, #{creatorid,jdbcType=INTEGER}, #{createtime,jdbcType=TIMESTAMP}, #{creator,jdbcType=VARCHAR},
-
-      #{puText1,jdbcType=VARCHAR}, #{puText2,jdbcType=VARCHAR}, #{puText3,jdbcType=VARCHAR}, 
-      #{puText4,jdbcType=VARCHAR}, #{puText5,jdbcType=VARCHAR}, #{puShipaddresscode,jdbcType=LONGVARCHAR}
-      )
-  </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.saas.purchase.po.Purchase" >
     <selectKey resultType="java.lang.Long" keyProperty="id">
       SELECT LAST_INSERT_ID() AS ID
@@ -167,17 +140,12 @@
       <if test="updateTime != null" >
         updateTime,
       </if>
-
-      <if test="updater != null" >
-        updater,
-      </if><if test="creatorId != null" >
+      <if test="creatorId != null" >
       creatorId,
-      </if><if test="createTime != null" >
+      </if>
+      <if test="createTime != null" >
       createTime,
-      </if><if test="creator != null" >
-      creator,
       </if>
-
       <if test="pu_text1 != null" >
         pu_text1,
       </if>
@@ -268,17 +236,11 @@
         #{updateTime,jdbcType=TIMESTAMP},
       </if>
 
-      <if test="updater != null" >
-        #{updater,jdbcType=VARCHAR},
-      </if><if test="creatorId != null" >
+      <if test="creatorId != null" >
        #{creatorId,jdbcType=INTEGER},
       </if><if test="createTime != null" >
        #{createTime,jdbcType=TIMESTAMP},
-      </if><if test="creator != null" >
-       #{creator,jdbcType=VARCHAR},
       </if>
-
-
       <if test="pu_text1 != null" >
         #{pu_text1,jdbcType=VARCHAR},
       </if>
@@ -368,15 +330,9 @@
       <if test="updaterId != null" >
         updaterId = #{updaterId,jdbcType=INTEGER},
       </if>
-
       <if test="updateTime != null" >
         updateTime = #{updateTime,jdbcType=TIMESTAMP},
       </if>
-
-      <if test="updater != null" >
-        updater = #{updater,jdbcType=VARCHAR},
-      </if>
-
       <if test="pu_text1 != null" >
         pu_text1 = #{pu_text1,jdbcType=VARCHAR},
       </if>
@@ -398,39 +354,6 @@
     </set>
     where pu_id = #{id,jdbcType=INTEGER}
   </update>
-  <update id="updateByPrimaryKey" parameterType="com.usoftchina.saas.purchase.po.Purchase" >
-    update purchase
-    set pu_code = #{pu_code,jdbcType=VARCHAR},
-      pu_date = #{pu_date,jdbcType=TIMESTAMP},
-      pu_vendid = #{pu_vendid,jdbcType=INTEGER},
-      PU_VENDCODE = #{pu_vendcode,jdbcType=VARCHAR},
-      PU_VENDNAME = #{pu_vendname,jdbcType=VARCHAR},
-      PU_BUYERID = #{pu_buyerid,jdbcType=INTEGER},
-      PU_BUYERCODE = #{pu_buyercode,jdbcType=VARCHAR},
-      PU_BUYERNAME = #{pu_buyername,jdbcType=VARCHAR},
-      PU_DELIVERY = #{pu_delivery,jdbcType=TIMESTAMP},
-      PU_TAXTOTAL = #{pu_taxtotal,jdbcType=DOUBLE},
-      PU_TOTAL = #{pu_total,jdbcType=DOUBLE},
-      PU_REMARK = #{pu_remark,jdbcType=VARCHAR},
-      PU_TOTALUPPER = #{pu_totalupper,jdbcType=VARCHAR},
-      PU_INDATE = #{createTime,jdbcType=TIMESTAMP},
-      PU_PRINTSTATUS = #{pu_printstatus,jdbcType=VARCHAR},
-      PU_PRINTSTATUSCODE = #{pu_printstatuscode,jdbcType=VARCHAR},
-      PU_ACCEPTSTATUSCODE = #{pu_acceptstatuscode,jdbcType=VARCHAR},
-      PU_ACCEPTSTATUS = #{pu_acceptstatus,jdbcType=VARCHAR},
-      PU_STATUSCODE = #{pu_statuscode,jdbcType=VARCHAR},
-      PU_STATUS = #{pu_status,jdbcType=VARCHAR},
-      companyid = #{companyId,jdbcType=INTEGER},
-      updaterId = #{updaterId,jdbcType=INTEGER},
-      updateTime = #{updateTime,jdbcType=TIMESTAMP},
-      updater = #{updater,jdbcType=VARCHAR},
-      pu_text1 = #{pu_text1,jdbcType=VARCHAR},
-      pu_text2 = #{pu_text2,jdbcType=VARCHAR},
-      pu_text3 = #{pu_text3,jdbcType=VARCHAR},
-      pu_text4 = #{pu_text4,jdbcType=VARCHAR},
-      pu_text5 = #{pu_text5,jdbcType=VARCHAR}
-    where pu_id = #{id,jdbcType=INTEGER}
-  </update>
   <select id="validateAudit" parameterType="com.usoftchina.saas.commons.dto.DocBaseDTO" resultType="java.lang.String">
     select GROUP_CONCAT(pu_code) from purchase where pu_statuscode='AUDITED' and pu_id in
     <foreach collection="list" item="item" open="(" close=")" separator=",">
@@ -446,13 +369,6 @@
   <select id="validateUnAudit" parameterType="long" resultType="java.lang.String">
     select pu_code from purchase where pu_id = #{pu_id} and IFNULL(pu_statuscode,'UNAUDITED')='UNAUDITED'
   </select>
-  <!--<select id="selectByTest" resultMap="BaseResultMap" parameterType="string" >
-    select * from purchase <where>
-    <if test="_parameter != null">
-       ${value}
-    </if>
-  </where>
-  </select>-->
   <select id="validateCodeWhenInsert" resultType="int">
     select count(1) from purchase where pu_code = #{code} and companyId =#{companyId}
   </select>

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java

@@ -40,4 +40,6 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     void updateNetTotal(Long id);
 
     Integer checkSendStatus(Long id);
+
+    void updateCreator(@Param("userId") Long userId, @Param("userName") String userName, @Param("id") Long id);
 }

+ 2 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java

@@ -100,6 +100,7 @@ public class SaleServiceImpl implements SaleService{
         Long companyId = BaseContextHolder.getCompanyId();
         //人员Id
         Long userId = BaseContextHolder.getUserId();
+        String name = BaseContextHolder.getUserName();
         //获取主表信息
         SaleDTO main = formdata.getMain();
         List<SaleDetailDTO> items = formdata.getItems();
@@ -125,6 +126,7 @@ public class SaleServiceImpl implements SaleService{
             //插入操作
             saleMapper.insertSelective(sale);
             sa_id = sale.getId();
+            saleMapper.updateCreator(userId, name, sa_id);
             //添加从表传输对象
             for (SaleDetailDTO item : items) {
                 SaleDetail detail = BeanMapper.map(item, SaleDetail.class);

+ 5 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml

@@ -33,6 +33,8 @@
     <result column="sa_seller" property="sa_seller" jdbcType="VARCHAR" />
     <result column="sa_sellercode" property="sa_sellercode" jdbcType="VARCHAR" />
     <result column="sa_date" property="sa_date" jdbcType="TIMESTAMP"/>
+    <result column="creatorName" property="creatorName" jdbcType="VARCHAR" />
+    <result column="updaterName" property="updaterName" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >
     sa_id, sa_code, sa_custid, sa_custcode, sa_custname, sa_toplace, sa_total, sa_totalupper, 
@@ -419,4 +421,7 @@
     select count(1) from saledetail where sd_said = #{id}
     and ifnull(sd_yqty, 0) > 0;
   </select>
+  <update id="updateCreator">
+    update sale set creatorId = #{userId} , creatorName=#{userName} where sa_id=#{id}
+  </update>
 </mapper>

+ 18 - 7
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java

@@ -21,16 +21,21 @@ import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.server.error.ServletErrorUtils;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.CollectionUtils;
 import com.usoftchina.saas.utils.JsonUtils;
 import com.usoftchina.saas.utils.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 
 /**
  * @author yingp
@@ -67,6 +72,8 @@ public class AuthController {
     @Autowired
     private SocketMessageApi socketMessageApi;
 
+    private Logger logger = LoggerFactory.getLogger(AuthController.class);
+
     /**
      * 登录认证获取token
      *
@@ -111,14 +118,15 @@ public class AuthController {
     }
 
     /**
-     * 账户中心登录回调
+     * 账户中心登录时jsonp回调
      *
      * @param clientId 客户端唯一标志,发起请求到账户中心时带上
      * @param info
      * @return
      */
-    @PostMapping("/sso/callback")
-    public Result ssoCallback(HttpServletRequest request, @RequestParam String clientId, CookieInfo info) {
+    @GetMapping("/sso/callback")
+    public void ssoCallback(HttpServletRequest request, HttpServletResponse response,
+                            String clientId, CookieInfo info) throws IOException{
         if (null != info && null != info.getMobile()) {
             AccountDTO accountDTO = null;
             Result<AccountDTO> result = accountApi.getAccount(info.getMobile());
@@ -127,7 +135,9 @@ public class AuthController {
                     // 新用户,自动注册
                     accountDTO = createAccountByCookieInfo(info);
                 } else {
-                    return Result.error(result.getCode(), result.getMessage());
+                    logger.error(result.getMessage());
+                    ServletErrorUtils.writeMessage(response, "successCallback({success:'0'})");
+                    return;
                 }
             } else {
                 accountDTO = result.getData();
@@ -136,7 +146,9 @@ public class AuthController {
                     accountDTO.setUu(info.getUserUU());
                     Result updateResult = accountApi.update(BeanMapper.map(accountDTO, AccountUpdateDTO.class));
                     if (!updateResult.isSuccess()) {
-                        return Result.error(updateResult.getCode(), updateResult.getMessage());
+                        logger.error(updateResult.getMessage());
+                        ServletErrorUtils.writeMessage(response, "successCallback({success:'0'})");
+                        return;
                     }
                 }
             }
@@ -157,9 +169,8 @@ public class AuthController {
                 TokenDTO tokenDTO = BeanMapper.map(jwtToken, TokenDTO.class);
                 socketMessageApi.sendToClient(clientId, JsonUtils.toJsonString(new AuthDTO(tokenDTO, accountDTO)));
             }
-            return Result.success();
+            ServletErrorUtils.writeMessage(response, "successCallback({success:'1'})");
         }
-        return Result.error(ExceptionCode.COOKIE_ILLEGAL_ARGUMENT);
     }
 
     /**

+ 2 - 2
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java

@@ -104,8 +104,8 @@ public class AuthFilter implements GlobalFilter, Ordered {
      * @return
      */
     private boolean isIgnore(ServerHttpRequest request) {
-        String path = request.getPath().value();
-        return authConfig.getIgnores().stream().anyMatch(ignore -> ignore.equals(path));
+        return authConfig.getIgnores().stream().anyMatch(ignore ->
+                new AntPathRequestMatcher(ignore).matches(request));
     }
 
     private String getAuthHeaderToken(ServerHttpRequest request) {

+ 5 - 0
base-servers/gateway-server/src/main/resources/application.yml

@@ -104,6 +104,10 @@ spring:
         - Path=/api/commons/**
         filters:
         - RewritePath=/api/commons/(?<segment>.*), /$\{segment}
+      - id: SOCKET-SERVER
+        uri: lb:ws://SOCKET-SERVER
+        predicates:
+        - Path=/ws/**
   redis:
     host: 192.168.253.12
     port: 6379
@@ -178,3 +182,4 @@ auth:
     - /api/auth/sso/callback
     - /api/account/account/register
     - /api/auth/info
+    - /ws/**

+ 1 - 1
base-servers/socket/socket-api/src/main/java/com/usoftchina/saas/socket/api/SocketMessageApi.java

@@ -19,7 +19,7 @@ public interface SocketMessageApi {
      * @return
      */
     @PostMapping("/clients/{clientId}")
-    Result sendToClient(@PathVariable String clientId, String message);
+    Result sendToClient(@PathVariable("clientId") String clientId, String message);
 
     /**
      * 广播信息

+ 1 - 1
base-servers/socket/socket-server/src/main/resources/application.yml

@@ -40,7 +40,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8500/eureka/
 server:
   port: 8680
   tomcat:

+ 18 - 0
framework/core/src/main/java/com/usoftchina/saas/base/entity/CommonBaseEntity.java

@@ -16,6 +16,24 @@ public abstract class CommonBaseEntity extends BaseEntity<Long> {
     protected Long creatorId;
     protected Date updateTime;
     protected Long updaterId;
+    protected String creatorName;
+    protected String updaterName;
+
+    public String getCreatorName() {
+        return creatorName;
+    }
+
+    public void setCreatorName(String creatorName) {
+        this.creatorName = creatorName;
+    }
+
+    public String getUpdaterName() {
+        return updaterName;
+    }
+
+    public void setUpdaterName(String updaterName) {
+        this.updaterName = updaterName;
+    }
 
     @Override
     public Long getId() {

+ 29 - 0
frontend/saas-web/app/model/report/Purchase.js

@@ -0,0 +1,29 @@
+Ext.define('saas.model.report.Purchase', {
+    extend: 'saas.model.Base',
+
+    fields: [
+
+        { name: 'id', type: 'int' },
+        { name: 'pu_code', type: 'string' },
+        { name: 'pu_vendcode', type: 'string' },
+        { name: 'pu_vendname', type: 'string' },
+        { name: 'pu_acceptstatus', type: 'string' },
+        { name: 'pu_buyername', type: 'string' },
+        { name: 'pu_date', type: 'date' },
+        { name: 'pd_detno', type: 'int' },
+        { name: 'pd_prodcode', type: 'string' },
+        { name: 'pr_detail', type: 'string' },
+        { name: 'pr_spec', type: 'string' },
+        { name: 'pr_brand', type: 'string' },
+        { name: 'pr_unit', type: 'string' },
+        { name: 'pd_qyt', type: 'float' },
+        { name: 'pd_price', type: 'float' },
+        { name: 'pd_taxrate', type: 'float' },
+        { name: 'pd_total', type: 'float' },
+        { name: 'pd_taxprice', type: 'float' },
+        { name: 'pd_taxtotal', type: 'float' },
+        { name: 'pd_acceptqty', type: 'float' },
+        { name: 'pd_accepttotal', type: 'float' },
+        { name: 'pd_remark', type: 'string' },
+    ],
+});

+ 154 - 38
frontend/saas-web/app/util/BaseUtil.js

@@ -1,42 +1,158 @@
 Ext.define('saas.util.BaseUtil', {
 
-    /**
-     * 发起Ajax请求
-     * @param config: 请求参数
-     */
-    request: function (config) {
-        var url = config.url,
-            params = config.params,
-            async = config.async || true,
-            method = config.method || 'GET',
-            timeout = config.timeout || 8000,
-            defaultHeaders = {
-                'Access-Control-Allow-Origin': '*',
-                "Content-Type": 'application/json;charset=UTF-8' 
-            };
-        return new Ext.Promise(function (resolve, reject) {
-            Ext.Ajax.request({
-                url: url,
-                params: params,
-                async: async,
-                method: method,
-                timeout: timeout,
-                headers: Ext.apply(defaultHeaders, config.headers),
-                success: function (response, opts) {
-                    var res = Ext.decode(response.responseText);
-                    if(res.success) {
-                        return resolve(res);
-                    }else {
-                        console.error('server request failure with code ' + res.code + '.');
-                        console.error('failure message: ' + res.message);
-                        return reject(res);
-                    }
-                },
-                failure: function (response, opts) {
-                    console.error('server-side failure with status code ' + response);
-                    return reject(response);
-                }
+    statics: {
+
+        /**
+         * 打开/切换到新页签
+         * @param xtype: view xtype
+         * @param title: 标题
+         * @param id: id
+         * @param config: 绑定到view的其他配置
+         */
+        openTab: function (xtype, title, id, config) {
+            var mainTab = Ext.getCmp('main-tab-panel');
+            var panel = mainTab.query('[tabId="' + id + '"]')[0];
+            if (!panel) {
+                panel = Ext.create('saas.view.core.tab.Panel', {
+                    tabId: id,
+                    title: title,
+                    viewType: xtype,
+                    viewConfig: config
+                });
+
+                Ext.suspendLayouts();
+                mainTab.setActiveTab(mainTab.add(panel));
+                Ext.resumeLayouts(true);
+            } else {
+                panel.viewConfig = config;
+                mainTab.setActiveTab(panel);
+            }
+        },
+
+        /**
+         * 重设tab标题
+         */
+        refreshTabTitle: function (id, title) {
+            var currentTab = this.getCurrentTab();
+            currentTab.tabId = id;
+            currentTab.setTitle(title);
+        },
+
+        /**
+         * 获得当前Tab
+         */
+        getCurrentTab: function () {
+            var mainTab = Ext.getCmp('main-tab-panel');
+            var currentTab = mainTab.getActiveTab();
+
+            return currentTab;
+        },
+
+        /**
+         * 显示toast提示(无需用户操作)
+         * @param content: 内容
+         * @param title: 标题
+         * 
+         */
+        showToast: function (content, title) {
+            Ext.toast({
+                html: content,
+                title: title,
+                closable: false,
+                align: 't',
+                slideDUration: 400,
+                maxWidth: 400
+            });
+        },
+
+        /**
+         * 显示警告(需要选择是、否)
+         * @param title: 标题
+         * @param message: 内容
+         * @return : Promise
+         */
+        showConfirm: function (title, message) {
+            return new Ext.Promise(function (resolve, reject) {
+                Ext.MessageBox.confirm(title, message, function (buttonId) {
+                    return resolve(buttonId);
+                });
+            })
+        },
+
+        warnMsg: function (msg, fn) {
+            Ext.MessageBox.show({
+                title: '提示',
+                msg: msg,
+                buttons: Ext.Msg.YESNO,
+                icon: Ext.Msg.WARNING,
+                fn: fn
+            });
+        },
+
+        deleteWarn: function (msg, fn) {
+            Ext.MessageBox.show({
+                title: '提示',
+                msg: msg || '确定要删除当前表单?',
+                buttons: Ext.Msg.YESNO,
+                icon: Ext.Msg.WARNING,
+                fn: fn,
+                renderTo: Ext.getCmp('main-tab-panel').getActiveTab().getEl()
             });
-        })
-    },
+        },
+
+        /**
+         * 判断字符串是否日期字符串
+         * 需要满足格式 yyyy-MM-dd hh:mm:ss
+         * 或者yyyy-M-d h:m:s
+         * @param str: 字符串
+         * @returns Boolean
+         */
+        isDateString: function (str) {
+            return (/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/).test(str);
+        },
+
+        getCurrentUse: function () {
+            return saas.util.State.get('session').account;
+        },
+
+        /**
+         * 发起Ajax请求
+         * @param config: 请求参数
+         */
+        request: function (config) {
+            var url = config.url,
+                params = config.params,
+                async = config.async || true,
+                    method = config.method || 'GET',
+                    timeout = config.timeout || 8000,
+                    defaultHeaders = {
+                        'Access-Control-Allow-Origin': '*',
+                        "Content-Type": 'application/json;charset=UTF-8'
+                    };
+            return new Ext.Promise(function (resolve, reject) {
+                Ext.Ajax.request({
+                    url: url,
+                    params: params,
+                    async: async,
+                    method: method,
+                    timeout: timeout,
+                    headers: Ext.apply(defaultHeaders, config.headers),
+                    success: function (response, opts) {
+                        var res = Ext.decode(response.responseText);
+                        if (res.success) {
+                            return resolve(res);
+                        } else {
+                            console.error('server request failure with code ' + res.code + '.');
+                            console.error('failure message: ' + res.message);
+                            return reject(res);
+                        }
+                    },
+                    failure: function (response, opts) {
+                        console.error('server-side failure with status code ' + response);
+                        return reject(response);
+                    }
+                });
+            })
+        },
+    }
 });

+ 3 - 3
frontend/saas-web/app/util/Errors.js

@@ -42,16 +42,16 @@ Ext.define('saas.util.Errors', {
                 if (error.code === -32096) {    // READONLY_SESSION
                     // The session is read-only (demo version), let's display a temporary message
                     // and return false since this exception should not be considered as an error.
-                    showToast(error.message);
+                    saas.util.BaseUtil.showToast(error.message);
                     return false;
                 }
                 if (error.code === -32001 && form) {
                     form.setErrors(this.toForm(error));
                 } else {
-                    showToast(error.name + ' Error:' + error.message);
+                    saas.util.BaseUtil.showToast(error.name + ' Error:' + error.message);
                 }
             } else if (Ext.isString(error)) {
-                showToast('Error:' + error);
+                saas.util.BaseUtil.showToast('Error:' + error);
             }
 
             return true;

+ 232 - 227
frontend/saas-web/app/util/FormUtil.js

@@ -1,270 +1,275 @@
 Ext.define('saas.util.FormUtil', {
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    statics: {
 
-    // 请求页面组件接口模板
-    baseUrl: '/api/ui/co_view/config?name={viewName}',
-    // 模板替换正则
-    urlRe: /(.*){viewName}(.*)/g,
-    
-    /**
-     * 获得form的字段配置
-     * @param form: form组件
-     * @param url: url
-     */
-    setItems: function(form) {
-        var me = this,
-        viewName = form.viewName,
-        defaultItems = form.defaultItems,
-        brr = [],
-        formModel = form.getViewModel(),
-        url = me.baseUrl.replace(me.urlRe, '$1' + viewName);
-        
-        brr = brr.concat(form.defaultItems);
+        // 请求页面组件接口模板
+        baseUrl: '/api/ui/co_view/config?name={viewName}',
+        // 模板替换正则
+        urlRe: /(.*){viewName}(.*)/g,
 
-        this.BaseUtil.request({url, async: false})
-        .then(function(res) {
-            if(res.success) {
-                var config = res.data || true, items = defaultItems || [];
-                if(config) {
-                    var cusItems = config.items || [];
-                    Ext.Array.each(cusItems, function(cusItem) {
-                        var item = items.find(function(item) {
-                            return item.name == cusItem.name;
-                        });
-                        Ext.apply(item, cusItem);
-                    });
-                    Ext.Array.each(items, function(item) {
-
-                        // 设置必填
-                        if(item.allowBlank==false){
-                            // TODO 需要判断类型
-                            item.beforeLabelTextTpl = "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>";
-                        }
+        /**
+         * 获得form的字段配置
+         * @param form: form组件
+         * @param url: url
+         */
+        setItems: function(form) {
+            var me = this,
+            viewName = form.viewName,
+            defaultItems = form.defaultItems,
+            brr = [],
+            formModel = form.getViewModel(),
+            url = me.baseUrl.replace(me.urlRe, '$1' + viewName);
+            
+            brr = brr.concat(form.defaultItems);
 
-                        if(item.xtype == 'textfield') {
-                            Ext.applyIf(item, {
-                                maxLength: 50
-                            });
-                        }
-                        
-                        if(item.xtype == 'datefield') {
-                            Ext.applyIf(item, {
-                                editable: false,
-                                format: 'Y-m-d'
+            saas.util.BaseUtil.request({url, async: false})
+            .then(function(res) {
+                if(res.success) {
+                    var config = res.data || true, items = defaultItems || [];
+                    if(config) {
+                        var cusItems = config.items || [];
+                        Ext.Array.each(cusItems, function(cusItem) {
+                            var item = items.find(function(item) {
+                                return item.name == cusItem.name;
                             });
-                        }
+                            Ext.apply(item, cusItem);
+                        });
+                        Ext.Array.each(items, function(item) {
 
-                        if(item.xtype == 'numberfield') {
-                            Ext.applyIf(item, {
-                                hideTrigger: true, // 隐藏trigger
-                                mouseWheelEnabled: false // 取消滚轮事件
-                            });
-                            // 设置默认值为0
-                            formModel.set(item.name, 0);
-                        }
+                            // 设置必填
+                            if(item.allowBlank==false){
+                                // TODO 需要判断类型
+                                item.beforeLabelTextTpl = "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>";
+                            }
 
-                        // 如果是从表为其绑定store
-                        if(item.xtype == 'detailGridField') {
-                            var index = form.detailCount;
-                            var columns = item.columns,
-                            cnames = columns.filter(function(c) {
-                                return c.dataIndex && !c.ignore;
-                            }).map(function(c) {
-                                return c.dataIndex
-                            }),
-                            defaultValueColumns = {};
+                            if(item.xtype == 'textfield') {
+                                Ext.applyIf(item, {
+                                    maxLength: 50
+                                });
+                            }
+                            
+                            if(item.xtype == 'datefield') {
+                                Ext.applyIf(item, {
+                                    editable: false,
+                                    format: 'Y-m-d'
+                                });
+                            }
 
-                            Ext.Array.each(columns, function(c) {
+                            if(item.xtype == 'numberfield') {
+                                Ext.applyIf(item, {
+                                    hideTrigger: true, // 隐藏trigger
+                                    mouseWheelEnabled: false // 取消滚轮事件
+                                });
+                                // 设置默认值为0
+                                formModel.set(item.name, 0);
+                            }
 
-                                if(c.dataIndex && c.defaultValue) {
-                                    defaultValueColumns[c.dataIndex] = c.defaultValue;
-                                }
+                            // 如果是从表为其绑定store
+                            if(item.xtype == 'detailGridField') {
+                                var index = form.detailCount;
+                                var columns = item.columns,
+                                cnames = columns.filter(function(c) {
+                                    return c.dataIndex && !c.ignore;
+                                }).map(function(c) {
+                                    return c.dataIndex
+                                }),
+                                defaultValueColumns = {};
 
-                                // 不可锁定
-                                Ext.applyIf(c, {
-                                    lockable: false,
-                                    width: 120
-                                });
+                                Ext.Array.each(columns, function(c) {
 
-                                //必填
-                                Ext.applyIf(c, {
-                                    allowBlank: true
-                                });
-                                if(!c.allowBlank){
-                                    c.cls = 'x-grid-necessary';
-                                }
+                                    if(c.dataIndex && c.defaultValue) {
+                                        defaultValueColumns[c.dataIndex] = c.defaultValue;
+                                    }
 
-                                if(c.xtype == 'textfield') {
+                                    // 不可锁定
                                     Ext.applyIf(c, {
-                                        maxLength: 50
+                                        lockable: false,
+                                        width: 120
                                     });
-                                }else if(c.xtype == 'datecolumn') {
-                                    Ext.applyIf(c, {
-                                        format: 'Y-m-d'
-                                    });
-                                }else if(c.xtype == 'numbercolumn') {
+
+                                    //必填
                                     Ext.applyIf(c, {
-                                        align: 'end'
-                                    });
-                                }
-                                
-                                var editor = c.editor;
-                                if(editor) {
-                                    Ext.applyIf(editor, {
-                                        selectOnFocus: true
+                                        allowBlank: true
                                     });
-                                    if(editor.xtype == 'numberfield') {
-                                        Ext.applyIf(editor, {
-                                            hideTrigger: true, // 隐藏trigger
-                                            mouseWheelEnabled: false // 取消滚轮事件
+                                    if(!c.allowBlank){
+                                        c.cls = 'x-grid-necessary';
+                                    }
+
+                                    if(c.xtype == 'textfield') {
+                                        Ext.applyIf(c, {
+                                            maxLength: 50
                                         });
-                                    }else if(editor.xtype == 'datefield') {
-                                        Ext.apply(editor, {
+                                    }else if(c.xtype == 'datecolumn') {
+                                        Ext.applyIf(c, {
                                             format: 'Y-m-d'
                                         });
+                                    }else if(c.xtype == 'numbercolumn') {
+                                        Ext.applyIf(c, {
+                                            align: 'end'
+                                        });
+                                    }
+                                    
+                                    var editor = c.editor;
+                                    if(editor) {
                                         Ext.applyIf(editor, {
-                                            editable: false
+                                            selectOnFocus: true
                                         });
+                                        if(editor.xtype == 'numberfield') {
+                                            Ext.applyIf(editor, {
+                                                hideTrigger: true, // 隐藏trigger
+                                                mouseWheelEnabled: false // 取消滚轮事件
+                                            });
+                                        }else if(editor.xtype == 'datefield') {
+                                            Ext.apply(editor, {
+                                                format: 'Y-m-d'
+                                            });
+                                            Ext.applyIf(editor, {
+                                                editable: false
+                                            });
+                                        }
                                     }
-                                }
-                            });
-
-                            if(columns[columns.length - 1].flex != 1) {
-                                columns.push({
-                                    flex: 1,
-                                    allowBlank: true
                                 });
-                            }
-
-                            cnames.push(item.detnoColumn);
 
-                            formModel.set('detail' + index + '.detailBindFields', cnames);
-                            item.bind = {
-                                store: '{detail' + index + '.detailStore}'
-                            };     
-                            formModel.set('detail' + index + '.detailStore', Ext.create('Ext.data.Store', {
-                                model:item.storeModel,
-                                data: [],
-                                listeners: {
-                                    add: function(store, records, index, eOpts) {
-                                        Ext.Array.each(records, function(r) {
-                                            for(k in defaultValueColumns) {
-                                                r.set(k, defaultValueColumns[k]);
-                                            }
-                                            r.commit();
-                                        });
-                                    }
+                                if(columns[columns.length - 1].flex != 1) {
+                                    columns.push({
+                                        flex: 1,
+                                        allowBlank: true
+                                    });
                                 }
-                            }));
 
-                            form.detailCount++;
-                        }
-                    });
-                }
-                return form.addItems(items);
-            }else {
-                return []
-            }
-        })
-        .then(function(items) {
-            form.fireEvent('afterSetItems', form, items);
-        })
-        .then(function() {
-            me.loadData(form);
-        })
-        .catch(function(response) {
-            showToast('错误:' + response.message);
-            console.error(response);
-        });
+                                cnames.push(item.detnoColumn);
 
-    },
+                                formModel.set('detail' + index + '.detailBindFields', cnames);
+                                item.bind = {
+                                    store: '{detail' + index + '.detailStore}'
+                                };     
+                                formModel.set('detail' + index + '.detailStore', Ext.create('Ext.data.Store', {
+                                    model:item.storeModel,
+                                    data: [],
+                                    listeners: {
+                                        add: function(store, records, index, eOpts) {
+                                            Ext.Array.each(records, function(r) {
+                                                for(k in defaultValueColumns) {
+                                                    r.set(k, defaultValueColumns[k]);
+                                                }
+                                                r.commit();
+                                            });
+                                        }
+                                    }
+                                }));
 
-    loadData: function(form) {
-        var me = this;
-        form.setLoading(true);
-        if(form.initId && form.initId!=0) {
-            var url = form._readUrl + form.initId;
-            me.BaseUtil.request({url })
-            .then(function(res) {
-                form.setLoading(false);
-                if(res.success) {
-                    var d = res.data;
-                    var o = {
-                        main: d.main
-                    };
-                    if(d.hasOwnProperty('items')) {
-                        o.detail0 = d.items;
-                    }else {
-                        var idx = 1;
-                        while(d.hasOwnProperty('items' + idx)) {
-                            o['detail' + (idx - 1)] = d['items' + idx];
-                            idx++;
-                        }
+                                form.detailCount++;
+                            }
+                        });
                     }
-                    form.initFormData(o);
-                    form.fireEvent('load', form, o);
+                    return form.addItems(items);
+                }else {
+                    return []
                 }
             })
+            .then(function(items) {
+                form.fireEvent('afterSetItems', form, items);
+            })
+            .then(function() {
+                me.loadData(form);
+            })
             .catch(function(response) {
-                form.setLoading(false);
+                saas.util.BaseUtil.showToast('错误:' + response.message);
                 console.error(response);
             });
-        }else{
-            //取后台编号
-            me.BaseUtil.request({
-                url: '/api/commons/number/getMaxnumber',
-                headers: {
-                    "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
-                },
-                params: {
-                    caller:form.caller
-                },
-                method: 'POST',
-            }).then(function(res) {
-                form.setLoading(false);
-                if(res.success){
-                    var code = res.data;
-                    var viewModel = form.getViewModel();
-                    var detailGrids = form.query('detailGridField');
 
-                    if(code){
-                        var o = {};
-                        o[form._codeField] = code;
+        },
 
-                        var formData = {main: {}};
-                        Ext.apply(formData.main, o);
-                        Ext.Array.each(detailGrids, function(grid, index) {
-                            var detno = 0;
-                            var detnoColumn = grid.detnoColumn;
-                            var datas = [];
-                            
-                            Ext.Array.each(new Array(5), function() {
-                                detno += 1;
-                                var data = {};
-                                data[detnoColumn] = detno;
-                                datas.push(data);
-                            })
-                            formData['detail' + index] = datas;
-                        });
+        loadData: function(form) {
+            var me = this;
+            form.setLoading(true);
+            if(form.initId && form.initId!=0) {
+                var url = form._readUrl + form.initId;
+                saas.util.BaseUtil.request({url })
+                .then(function(res) {
+                    form.setLoading(false);
+                    if(res.success) {
+                        var d = res.data;
+                        var o = {
+                            main: d.main
+                        };
+                        if(d.hasOwnProperty('items')) {
+                            o.detail0 = d.items;
+                        }else {
+                            var idx = 1;
+                            while(d.hasOwnProperty('items' + idx)) {
+                                o['detail' + (idx - 1)] = d['items' + idx];
+                                idx++;
+                            }
+                        }
+                        form.initFormData(o);
+                        form.fireEvent('load', form, o);
+                    }
+                })
+                .catch(function(response) {
+                    form.setLoading(false);
+                    console.error(response);
+                });
+            }else{
+                //取后台编号
+                saas.util.BaseUtil.request({
+                    url: '/api/commons/number/getMaxnumber',
+                    headers: {
+                        "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+                    },
+                    params: {
+                        caller:form.caller
+                    },
+                    method: 'POST',
+                }).then(function(res) {
+                    form.setLoading(false);
+                    if(res.success){
+                        var code = res.data;
+                        var viewModel = form.getViewModel();
+                        var detailGrids = form.query('detailGridField');
+
+                        if(code){
+                            var o = {};
+                            o[form._codeField] = code;
+
+                            var formData = {main: {}};
+                            Ext.apply(formData.main, o);
+                            Ext.Array.each(detailGrids, function(grid, index) {
+                                var detno = 0;
+                                var detnoColumn = grid.detnoColumn;
+                                var datas = [];
+                                
+                                Ext.Array.each(new Array(5), function() {
+                                    detno += 1;
+                                    var data = {};
+                                    data[detnoColumn] = detno;
+                                    datas.push(data);
+                                })
+                                formData['detail' + index] = datas;
+                            });
 
-                        return formData;
+                            return formData;
+                        }else {
+                            throw new Error('请求单据编号错误');
+                        }
                     }else {
-                        throw new Error('请求单据编号错误');
+                        return {
+                            main: {},
+                        }
                     }
-                }
-            }).then(function(formData) {
-                var initData = form.initData;
-                if(initData) {
-                    Ext.apply(initData.main, formData.main);
-                    form.setFormData(initData);
-                }else {
-                    form.initFormData(formData);
-                }
-            }).catch(function(res) {
-                showToast(res.message);
-                form.setLoading(false);
-            })
+                }).then(function(formData) {
+                    var initData = form.initData;
+                    if(initData) {
+                        Ext.apply(initData.main, formData.main);
+                        form.setFormData(initData);
+                    }else {
+                        form.initFormData(formData);
+                    }
+                }).catch(function(res) {
+                    saas.util.BaseUtil.showToast(res.message);
+                    form.setLoading(false);
+                })
+            }
         }
     }
 });

+ 2 - 2
frontend/saas-web/app/view/auth/LoginController.js

@@ -39,7 +39,7 @@ Ext.define('saas.view.auth.LoginController', {
             })
             .catch(function(error) {
                 view.isMasked() && view.unmask();
-                showToast(error.message);
+                saas.util.BaseUtil.showToast(error.message);
             });
     },
 
@@ -61,7 +61,7 @@ Ext.define('saas.view.auth.LoginController', {
 				me.fireEvent('login', newSession);
             })
             .catch(function(error) {
-                showToast(error.message);
+                saas.util.BaseUtil.showToast(error.message);
             })
             .then(function() {
                 view.isMasked() && view.unmask();

+ 1 - 1
frontend/saas-web/app/view/core/base/BasePanelController.js

@@ -22,7 +22,7 @@ Ext.define('saas.view.core.base.BasePanelController', {
     add: function(){
         var form = this.getView();
         var id = form.xtype + '_add';
-        openTab(form.xtype,'新增' + form._title,id);
+        saas.util.BaseUtil.openTab(form.xtype,'新增' + form._title,id);
     },
 
     getCondition: function(items) {

+ 11 - 11
frontend/saas-web/app/view/core/base/GridPanel.js

@@ -77,7 +77,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text:'新增',
                         handler:function(b){
                             var form = b.ownerCt.ownerCt.ownerCt;
-                            openTab(form._formXtype, '新增' + form._title, form._formXtype+'_add'); 
+                            saas.util.BaseUtil.openTab(form._formXtype, '新增' + form._title, form._formXtype+'_add'); 
                         }
                     }, {
                         text: '导入',
@@ -123,7 +123,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text: '删除',
                         handler: function(){
                             var form = this.ownerCt.ownerCt.ownerCt;
-                            deleteWarn(form._deleteMsg,function(btn){
+                            saas.util.BaseUtil.deleteWarn(form._deleteMsg,function(btn){
                                 if(btn == 'yes'){
                                     me.onVastDeal(form._batchDeleteUrl);
                                 }
@@ -154,27 +154,27 @@ Ext.define('saas.view.core.base.GridPanel', {
         var grid = this;
         var data = grid.getGridSelected(type);
         if(!data){
-            showToast('请勾选符合条件的行进行操作。');
+            saas.util.BaseUtil.showToast('请勾选符合条件的行进行操作。');
             return false;
         }
         if(data&&data.length>0){
             var params = JSON.stringify({baseDTOs:data});
-            form.BaseUtil.request({
+            saas.util.BaseUtil.request({
                     url: url,
                     params: params,
                     method: 'POST',
                     async:false
                 })
                 .then(function() {
-                    showToast('操作成功');
+                    saas.util.BaseUtil.showToast('操作成功');
                     grid.store.load();
                 })
                 .catch(function(res) {
                     console.error(res);
-                    showToast('操作失败: ' + res.message);
+                    saas.util.BaseUtil.showToast('操作失败: ' + res.message);
                 });
         }else{
-            showToast('请勾选至少一条明细。');
+            saas.util.BaseUtil.showToast('请勾选至少一条明细。');
         }
     },
 
@@ -194,25 +194,25 @@ Ext.define('saas.view.core.base.GridPanel', {
             if(classList.indexOf('fa-pencil')>-1){
                 var config = {};
                 config.initId = record.get('id');
-                openTab(form._formXtype, '修改'+form._title, form._formXtype+config.initId, config);
+                saas.util.BaseUtil.openTab(form._formXtype, '修改'+form._title, form._formXtype+config.initId, config);
             }else if(classList.indexOf('fa-trash-o')>-1){
                 //删除
                 var id = record.get('id');
                 if(id){
-                    form.BaseUtil.request({
+                    saas.util.BaseUtil.request({
                         url: form._deleteUrl+id,
                         method: 'POST',
                     })
                     .then(function(localJson) {
                         if(localJson.success){
                             //解析参数
-                            showToast('删除成功');
+                            saas.util.BaseUtil.showToast('删除成功');
                             view.ownerCt.store.load();
                         }
                     })
                     .catch(function(res) {
                         console.error(res);
-                        showToast('删除失败: ' + res.message);
+                        saas.util.BaseUtil.showToast('删除失败: ' + res.message);
                     });
                 }
             }

+ 1 - 1
frontend/saas-web/app/view/core/chart/ChartBase.js

@@ -6,7 +6,7 @@ Ext.define('saas.view.core.chart.ChartBase', {
     ],
 
     height: 300,
-    bodyPadding: 5,
+    bodyPadding: '16 0 16 0',
 
     layout: 'fit',
 

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -74,7 +74,7 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                         handler:function(b){
                             var grid = me;
                             var trigger = grid.ownerCt.trigger;
-                            openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
+                            saas.util.BaseUtil.openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
                         }
                     }])
                 },{

+ 21 - 9
frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js

@@ -106,17 +106,12 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                             });
                             grid.condition = grid.getCondition(items);
                             grid.store.loadPage(1);
+                            grid.selModel.noChange = true;
+                            grid.selModel.deselectAll();
+                            grid.selModel.select(grid.selectRecordArr);
+                            grid.selModel.noChange = false;
                         }
                     },'->',{
-                        xtype:'button',
-                        text:'新增',
-                        handler:function(b){
-                            var grid = me;
-                            var trigger = grid.ownerCt.trigger;
-                            openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
-                        }
-                    },{
-                        xtype:'button',
                         text:'确定',
                         cls:'x-formpanel-btn-blue',
                         handler:function(b){
@@ -147,6 +142,23 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                             mainGrid.up('detailGridField').fireEvent('edit');
                             grid.ownerCt.close();
                         }
+                    },{
+                        xtype:'button',
+                        text:'新增',
+                        handler:function(b){
+                            var grid = me;
+                            var trigger = grid.ownerCt.trigger;
+                            saas.util.BaseUtil.openTab(trigger.addXtype, '新增'+trigger.addTitle,trigger.addXtype + '_add');
+                        },
+                        listeners:{
+                            afterrender:function(b){
+                                var grid = me;
+                                var trigger = grid.ownerCt.trigger;
+                                if(!trigger.addXtype||trigger.addXtype==''){
+                                    b.hide();
+                                }
+                            }
+                        }
                     }])
                 },{
                     xtype: 'pagingtoolbar',

+ 3 - 1
frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js

@@ -226,7 +226,9 @@ Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
                             if(nowRec.get(item.to)&&nowRec.get(item.to)!=""){
                                 nowRec.set(item.to,null);
                             }
-                            delete nowRec.modified[item.to];
+                            if(nowRec.modified){
+                                delete nowRec.modified[item.to];
+                            }
                             if(JSON.stringify(nowRec.modified)=="{}"){
                                 nowRec.dirty = false
                             }

+ 214 - 0
frontend/saas-web/app/view/core/form/DataMultiCombo.js

@@ -0,0 +1,214 @@
+/**
+ * Created by zhouy on 2018/10/17.
+ */
+Ext.define('saas.view.core.form.DataMultiCombo', {
+    extend: 'Ext.form.field.Trigger',
+    alias: 'widget.datamulticombo',
+    editable : false,
+    matchFieldWidth: true,
+    value: [],
+    cachedConfig: {
+        menuAlign: 'tl-bl?',
+        destroyMenu: true
+    },
+    initComponent: function() {
+        var me = this;
+        //获取数据
+        if(me.dataUrl){
+            Ext.Ajax.request({  
+                url : me.dataUrl,
+                timeout: 100000000,  
+                method : 'post',  
+                params : {}  ,
+                headers:{
+                    'Access-Control-Allow-Origin': '*',
+                    'Authorization':  saas.util.State.get('session').token
+                },
+                success: function(fp, o){
+                    // if(o.result.error){
+                    //     showError(o.result.error);
+                    // } else {
+                    //     var msg = Ext.getCmp('baseform').ownerCt.ownerCt.down('htmleditor[name=msg]');
+                    //     var imgel=msg.getEl().dom.getElementsByTagName('iframe')[0].contentWindow.document.body;
+                    //     if(imgel.getElementsByTagName('img').length>0){
+                    //       imgel.removeChild(imgel.getElementsByTagName('img')[0]);
+                    //     }
+                    //     //Ext.getCmp('baseform').ownerCt.ownerCt.down('hidden').setValue('../../../'+o.result.path);
+                    //     Ext.getCmp('baseform').ownerCt.setValue(o.result.path);
+                    //     var element = document.createElement("img");
+                    //     element.src = basePath + 'common/download.action?path=' + o.result.path.replace(/\+/g, '%2B');
+                    //     element.style="width:100%;height:100%";            
+                    //     element.title = '&img' + o.result.filepath + ";";
+                    //     msg.setValue('<img src="'+element.src+'" style=width:100%;height:100%;>');
+                    // }
+                },
+                failure: function (response, opts) {
+                    saas.util.BaseUtil.showToast('上传失败: ' + response.responseText);
+                }
+            });
+            me.BaseUtil.request({
+                url: me.dataUrl,
+                params: '',
+                method: 'POST',
+                async:false
+            })
+            .then(function(localJson) {
+                if(localJson.success){
+                }
+            })
+            .catch(function(res) {
+                console.error(res);
+                saas.util.BaseUtil.showToast('保存失败: ' + res.message);
+            });
+
+            // datas: [
+            //     ["已审核", "已审核"],
+            //     ["未审核", "未审核"]
+            // ]
+        }
+        me.callParent(arguments);
+    },
+    listeners:{
+        afterrender:function(f){
+            this.mon(f.el,{
+                mouseover: this.onMouseOver,
+                mouseleave:this.onMouseLeave,
+                scope:this
+            });
+        }
+
+    },
+    onMouseOver:function(){
+       this.showMenu();
+    },
+    onMouseLeave:function(a,b,c){
+        this.hideMenu(a.parentEvent?a:b);//el光标离开第二个参数为Event对象
+    },
+    onTriggerClick:function(){
+        this.showMenu();
+    },
+    getMenu: function() {
+        var me = this;
+
+        if (!me.menu) {
+
+            me.menu = Ext.create('Ext.menu.Menu',{
+                hideOnParentHide: false,
+                items: me.getMenuItems(),
+                listeners:{
+                    mouseleave:me.onMouseLeave,
+                    scope:me
+                }
+            });
+        }
+        return me.menu;
+    },
+    getMenuItems:function(){
+        var me = this,
+            i = 0,
+            item,
+            items = me.datas,
+            itemsLn = me.datas.length,
+            menuItems = [],
+            value = me.value;
+        for (; i < itemsLn; i++) {
+            item = items[i];
+            var checked = !!value.find(function(v) {
+                return v.value = iem[0];
+            });
+            menuItem = new Ext.menu.CheckItem({
+                text: item[1],
+                checked: checked,
+                checkValue:item[0],
+                hideOnClick: false,
+                checkHandler: this.onCheckChange,
+                scope: this
+            });
+            menuItems.push(menuItem);
+        }
+        return menuItems.length ? menuItems : null;
+    },
+    onCheckChange:function(checkItem, checked){
+        var items=this.menu.items.items,
+            checkedItems = [];
+        Ext.Array.each(items,function(item){
+            if(item.checked){
+                checkedItems.push({
+                    text: item.text,
+                    value: item.checkValue
+                });
+            }
+        });
+        this.setValue(checkedItems);
+    },
+
+    setValue: function(items) {
+        var me = this, rawV = '',
+        datas = me.datas,
+        menu = me.menu;
+        if(!Ext.isArray(items)) {
+            items = [items]
+        }
+        items.map(function(item, index) {
+            if(Ext.isString(item)) {
+                var data = datas.find(function(d) {
+                    return d[0] == item;
+                });
+                items[index] = {
+                    text: data[1],
+                    value: data[0]
+                }
+            }
+        })
+        rawV = items.map(function(item) {
+            return item.text
+        }).join(',');
+        this.setRawValue(rawV);
+        this.value = items;
+        if(menu) {
+            Ext.Array.each(menu.items.items, function(item) {
+                item.setChecked(!!items.find(function(i) {
+                    return i.value == item.checkValue;
+                }));
+            });
+        }
+        this.publishState('value', items);
+    },
+
+    showMenu: function (e, menu) {
+        menu = menu || this.getMenu();
+        /**
+         * menu上边框样式待处理
+         * */
+        if (menu) {
+            if (menu.isVisible()) {
+                    menu.focus();
+            } else {
+                menu.autoFocus = true;
+                if(this.matchFieldWidth){
+                    menu.setWidth(this.bodyEl.getWidth());
+                }
+                if (menu.isMenu) {
+                    menu.showBy(this.inputEl, this.getMenuAlign(),[-1, 0]);
+                } else if (menu.isViewportMenu) {
+                    menu.setDisplayed(!menu.getDisplayed());
+                } else {
+                    menu.show();
+                }
+            }
+        }
+    },
+    hideMenu: function(b) {
+        if (this.hasVisibleMenu()) {
+            var target=b.parentEvent.relatedTarget;
+            if(!((target.className && target.className.indexOf('x-menu')!=-1) || (target.name && target.name.indexOf(this.name)!=-1))){
+                this.menu.hide();
+            }
+        }
+        return this;
+    },
+    hasVisibleMenu: function() {
+        var menu = this.menu;
+        return menu && menu.rendered && menu.isVisible();
+    }
+});

+ 12 - 7
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -7,10 +7,6 @@ Ext.define('saas.view.core.form.FormPanel', {
 
     cls: 'x-core-form',
 
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-
     //字段属性
     _codeField: '',
     _statusField: '',
@@ -53,7 +49,7 @@ Ext.define('saas.view.core.form.FormPanel', {
         auditTexts = me.auditTexts;
 
         me.initViewModel();
-        me.FormUtil.setItems(me);
+        saas.util.FormUtil.setItems(me);
 
         me.defaultBtns = me.defaultBtns || [{
             cls: 'x-formpanel-btn-orange',
@@ -99,9 +95,18 @@ Ext.define('saas.view.core.form.FormPanel', {
                 hidden:'{!showAuditBtn}'
             },
             handler: "auditBtnClick",
+        }, {
+            cls:'x-formpanel-btn-white',
+            text:'打印',
+            hidden: true,
+            bind: {
+                // hidden: '{!id}'
+            },
+            handler:"onPrint"
         }, {
             cls:'x-formpanel-btn-white',
             text:'操作日志',
+            hidden: true,
             bind: {
                 hidden: '{!id}'
             },
@@ -198,8 +203,8 @@ Ext.define('saas.view.core.form.FormPanel', {
         viewModel.set(codeField, '');
         viewModel.set('createTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
         viewModel.set('updateTime', Ext.Date.format(new Date(), 'Y-m-d H:i:s'));
-        viewModel.set('creatorId', getCurrentUse().id);
-        viewModel.set('creator', getCurrentUse().realname);
+        viewModel.set('creatorId', saas.util.BaseUtil.getCurrentUse().id);
+        viewModel.set('creator', saas.util.BaseUtil.getCurrentUse().realname);
 
         if (statusCodeField) {
             var o = {};

+ 32 - 31
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -2,9 +2,6 @@ Ext.define('saas.view.core.form.FormPanelController', {
     extend: 'Ext.app.ViewController',
     alias: 'controller.core-form-formpanel',
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-    FormUtil: Ext.create('saas.util.FormUtil'),
-
     auditBtnClick: function() {
         var me = this,
         form = me.getView(),
@@ -18,7 +15,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
     add: function(){
         var form = this.getView();
         var id = form.xtype + '-add';
-        openTab(form.xtype,'新增' + form._title, id);
+        saas.util.BaseUtil.openTab(form.xtype,'新增' + form._title, id);
     },
 
     onCopy: function() {
@@ -28,7 +25,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
 
         var formData = me.initCopyData(form.getFormData());
 
-        openTab(form.xtype,'新增' + form._title, id, {initData: formData});
+        saas.util.BaseUtil.openTab(form.xtype,'新增' + form._title, id, {initData: formData});
     },
 
     initCopyData: function(formData) {
@@ -47,7 +44,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
 
         for(var k in main) {
             // 主表日期改为当前日期
-            if(isDateString(main[k])) {
+            if(saas.util.BaseUtil.isDateString(main[k])) {
                 main[k] = Ext.Date.format(new Date, 'Y-m-d H:i:s');
             }
         }
@@ -61,7 +58,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
                     // 从表id清空
                     delete d['id'];
                     // 从表日期清空
-                    if(isDateString(d[k])) {
+                    if(saas.util.BaseUtil.isDateString(d[k])) {
                         d[k] = '';
                     }
                 }
@@ -87,9 +84,9 @@ Ext.define('saas.view.core.form.FormPanelController', {
                 return false;
             }
 
-            deleteWarn(form._deleteMsg,function(btn){
+            saas.util.BaseUtil.deleteWarn(form._deleteMsg,function(btn){
                 if(btn == 'yes'){
-                    me.BaseUtil.request({
+                    saas.util.BaseUtil.request({
                         url: form._deleteUrl+id,
                         method: 'POST',
                     })
@@ -98,12 +95,12 @@ Ext.define('saas.view.core.form.FormPanelController', {
                             var mainTab = Ext.getCmp('main-tab-panel');
                             mainTab.getActiveTab().close();
                             //解析参数
-                            showToast('删除成功');
+                            saas.util.BaseUtil.showToast('删除成功');
                         }
                     })
                     .catch(function(res) {
                         console.error(res);
-                        showToast('删除失败: ' + res.message);
+                        saas.util.BaseUtil.showToast('删除失败: ' + res.message);
                     });
                 }
             });
@@ -116,7 +113,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 
@@ -151,7 +148,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
             delete params.items1;
         }
 
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._saveUrl,
             params: JSON.stringify(params),
             method: 'POST',
@@ -161,20 +158,20 @@ Ext.define('saas.view.core.form.FormPanelController', {
                 var id = localJson.data.id;
                 var code = localJson.data.code;
                 form.initId = id;
-                form.FormUtil.loadData(form);
-                showToast('保存成功');
+                saas.util.FormUtil.loadData(form);
+                saas.util.BaseUtil.showToast('保存成功');
 
                 var newId = form.xtype + '-' + id;
                 var newTitle = form._title + '(' + code + ')';
 
-                refreshTabTitle(newId, newTitle);
+                saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
 
                 form.fireEvent('aftersave', true, form, localJson);
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('保存失败: ' + res.message);
+            saas.util.BaseUtil.showToast('保存失败: ' + res.message);
             form.fireEvent('aftersave', false, form, res);
         });
     },
@@ -188,7 +185,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         var dirty = form.isDirty();
 
         if(id && dirty) {
-            showConfirm('提示', form.dirtyAuditText)
+            saas.util.BaseUtil.showConfirm('提示', form.dirtyAuditText)
             .then(function(yes) {
                 if(yes == 'yes') {
                     me.onSave();
@@ -200,7 +197,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         var valid = form.isValid();
 
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 
@@ -234,7 +231,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
             delete params.items1;
         }
 
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._auditUrl,
             params: JSON.stringify(params),
             method: 'POST',
@@ -251,11 +248,11 @@ Ext.define('saas.view.core.form.FormPanelController', {
                     var newId = form.xtype + '-' + id;
                     var newTitle = form._title + '(' + code + ')';
 
-                    refreshTabTitle(newId, newTitle);
+                    saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
                 }
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 form.setEditable(false);
-                showToast('审核成功' + (localJson.message ? ': ' + localJson.message : ''));
+                saas.util.BaseUtil.showToast('审核成功' + (localJson.message ? ': ' + localJson.message : ''));
                 form.fireEvent('afteraudit', true, form, localJson);
             }
         })
@@ -270,10 +267,10 @@ Ext.define('saas.view.core.form.FormPanelController', {
                 var newId = form.xtype + '-' + id;
                 var newTitle = form._title + '(' + code + ')';
 
-                refreshTabTitle(newId, newTitle);
-                form.FormUtil.loadData(form);
+                saas.util.BaseUtil.refreshTabTitle(newId, newTitle);
+                saas.util.FormUtil.loadData(form);
             }
-            showToast('审核失败: ' + res.message);
+            saas.util.BaseUtil.showToast('审核失败: ' + res.message);
             form.fireEvent('afteraudit', false, form, res);
         });
     },
@@ -301,20 +298,20 @@ Ext.define('saas.view.core.form.FormPanelController', {
         var id = viewModel.get(form._idField);
         var code = viewModel.get(form._codeField);
 
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._unAuditUrl+id,
             method: 'POST',
         })
         .then(function(localJson) {
             if(localJson.success){
                 //解析参数
-                showToast('反审核成功');
-                form.FormUtil.loadData(form);
+                saas.util.BaseUtil.showToast('反审核成功');
+                saas.util.FormUtil.loadData(form);
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('反审核失败: ' + res.message);
+            saas.util.BaseUtil.showToast('反审核失败: ' + res.message);
         });
     },
 
@@ -368,5 +365,9 @@ Ext.define('saas.view.core.form.FormPanelController', {
             }));
         };
         win.show();
-    }
+    },
+
+    onPrint: function() {
+        console.log('print');
+    },
 });

+ 4 - 6
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -2,8 +2,6 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
     extend: 'Ext.grid.Panel',
     xtype: 'detailGridField',
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-
     cls: 'x-detailgridfield',
 
     border: 1,
@@ -262,10 +260,10 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         var id = selectedRecord.data.id;
 
         if(id&&id!=0&&(typeof id) == 'number') {
-            showConfirm('警告', '确定删除该条明细')
+            saas.util.BaseUtil.showConfirm('警告', '确定删除该条明细')
             .then(function(yes) {
                 if(yes == 'yes') {
-                    me.BaseUtil.request({
+                    saas.util.BaseUtil.request({
                         url: me.deleteDetailUrl+id,
                         params: '',
                         method: 'POST',
@@ -274,12 +272,12 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
                         store.remove(selectedRecord);
                         me.fireEvent('validChange');
                         //解析参数
-                        showToast('删除成功');
+                        saas.util.BaseUtil.showToast('删除成功');
                     })
                     .catch(function() {
                         me.fireEvent('validChange');
                         //失败
-                        showToast('删除失败');
+                        saas.util.BaseUtil.showToast('删除失败');
                     });
                 }else {
                     throw new Error();

+ 12 - 14
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -2,8 +2,6 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
     extend: 'Ext.grid.Panel',
     xtype: 'core-query-querygridpanel',
 
-    //工具类
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     //字段属性
     baseColumn: [],
     relativeColumn: [],
@@ -77,11 +75,11 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                         exception: function(proxy, response, operation, eOpts) {
                             if(operation.success) {
                                 if(response.timedout) {
-                                    showToast('请求超时');
+                                    saas.util.BaseUtil.showToast('请求超时');
                                 }
                             }else {
                                 console.error('exception: ', response.responseJson);
-                                showToast('请求错误:' + response.responseJson.message);
+                                saas.util.BaseUtil.showToast('请求错误:' + response.responseJson.message);
                             }
                         }
                     }
@@ -268,7 +266,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                 idValue = record.get(grid.idField),
                 codeValue = record.get(grid.codeField),
                 id = grid.addXtype + '-' + idValue;
-                openTab(grid.addXtype, grid.addTitle+"("+codeValue+")", id, {
+                saas.util.BaseUtil.openTab(grid.addXtype, grid.addTitle+"("+codeValue+")", id, {
                     initId: idValue
                 });
             }
@@ -318,7 +316,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         var lastIndex = _url.lastIndexOf('/');
         var caller = _url.substring(lastIndex);
         var url = '/api/commons'+caller+'/export';
-        grid.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: url,
             params: '',
             method: 'POST',
@@ -341,7 +339,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
             }
         })
         .catch(function(res) {
-            showToast('导出失败: ' + res.message);
+            saas.util.BaseUtil.showToast('导出失败: ' + res.message);
         });
     },
     onCloseOrder:function(me){
@@ -353,13 +351,13 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         var grid = btns.up('grid');
         var data = grid.getGridSelected();
         if(data&&data.length>0){
-            warnMsg("是否删除所选单据?",function(btn){
+            saas.util.BaseUtil.warnMsg("是否删除所选单据?",function(btn){
                 if(btn == 'yes'){
                     grid.vastOperation("batchDelete");
                 }
             });
         }else{
-            showToast('请勾选至少一条明细。');
+            saas.util.BaseUtil.showToast('请勾选至少一条明细。');
         }
     },
     vastOperation :function(type){
@@ -367,7 +365,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         var data = me.getGridSelected();
         if(data&&data.length>0){
             var params = JSON.stringify({baseDTOs:data});
-            me.BaseUtil.request({
+            saas.util.BaseUtil.request({
                 url: me.baseVastUrl+type,
                 params: params,
                 method: 'POST',
@@ -375,18 +373,18 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
             })
             .then(function(res) {
                 if(res.data){
-                    showToast(res.data);
+                    saas.util.BaseUtil.showToast(res.data);
                 }else{
-                    showToast('操作成功');
+                    saas.util.BaseUtil.showToast('操作成功');
                 }
                 me.getStore().loadPage(1);
             })
             .catch(function(res) {
                 console.error(res);
-                showToast('操作失败: ' + res.message);
+                saas.util.BaseUtil.showToast('操作失败: ' + res.message);
             });
         }else{
-            showToast('请勾选至少一条明细。');
+            saas.util.BaseUtil.showToast('请勾选至少一条明细。');
         }
     },
     /** */

+ 1 - 1
frontend/saas-web/app/view/core/query/QueryPanelController.js

@@ -37,7 +37,7 @@ Ext.define('saas.view.core.query.QueryPanelController', {
         queryPanel = me.getView(),
         gridPanel = queryPanel.down('core-query-querygridpanel'),
         id = gridPanel.addXtype + '-add';
-        openTab(gridPanel.addXtype,'新增'+gridPanel.addTitle,id)
+        saas.util.BaseUtil.openTab(gridPanel.addXtype,'新增'+gridPanel.addTitle,id)
     },
     onReSetClick:function(btn){
         btn.ownerCt.ownerCt.reset();

+ 6 - 70
frontend/saas-web/app/view/core/report/ReportPanel.js

@@ -74,7 +74,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
                                     ext: 'xlsx'
                                 }
                             }, {
-                                text: 'Excel xlsx (include groups)',
+                                text: 'Excel xlsx (包含分组合计)',
                                 cfg: {
                                     type: 'excel07',
                                     ext: 'xlsx',
@@ -88,7 +88,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
                                     ext: 'xml'
                                 }
                             }, {
-                                text: 'Excel xml (include groups)',
+                                text: 'Excel xml (包含分组合计)',
                                 cfg: {
                                     includeGroups: true,
                                     includeSummary: true
@@ -110,7 +110,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
                                     type: 'html'
                                 }
                             }, {
-                                text: 'HTML (include groups)',
+                                text: 'HTML (包含分组合计)',
                                 cfg: {
                                     type: 'html',
                                     includeGroups: true,
@@ -179,6 +179,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
         var me = this;
         var store = Ext.create('Ext.data.Store', {
             fields: me.getFields(),
+            // model: me.reportModel,
             autoLoad: true,
             pageSize: 15,
             data: [],
@@ -198,11 +199,11 @@ Ext.define('saas.view.core.report.ReportPanel', {
                     exception: function(proxy, response, operation, eOpts) {
                         if(operation.success) {
                             if(response.timedout) {
-                                showToast('请求超时');
+                                saas.util.BaseUtil.showToast('请求超时');
                             }
                         }else {
                             console.error('exception: ', response.responseJson);
-                            showToast('请求错误:' + response.responseJson);
+                            saas.util.BaseUtil.showToast('请求错误:' + response.responseJson);
                         }
                     }
                 }
@@ -326,71 +327,6 @@ Ext.define('saas.view.core.report.ReportPanel', {
         return items;
     },
 
-    initToolBarItems: function () {
-        var me = this;
-
-        return ['->', {
-            ui: 'default-toolbar',
-            xtype: 'button',
-            text: '导出为...',
-            menu: {
-                defaults: {
-                    handler: 'exportTo'
-                },
-                items: [{
-                    text: 'Excel xlsx',
-                    cfg: {
-                        type: 'excel07',
-                        ext: 'xlsx'
-                    }
-                }, {
-                    text: 'Excel xlsx (include groups)',
-                    cfg: {
-                        type: 'excel07',
-                        ext: 'xlsx',
-                        includeGroups: true,
-                        includeSummary: true
-                    }
-                }, {
-                    text: 'Excel xml',
-                    cfg: {
-                        type: 'excel03',
-                        ext: 'xml'
-                    }
-                }, {
-                    text: 'Excel xml (include groups)',
-                    cfg: {
-                        includeGroups: true,
-                        includeSummary: true
-                    }
-                }, {
-                    text: 'CSV',
-                    cfg: {
-                        type: 'csv'
-                    }
-                }, {
-                    text: 'TSV',
-                    cfg: {
-                        type: 'tsv',
-                        ext: 'csv'
-                    }
-                }, {
-                    text: 'HTML',
-                    cfg: {
-                        type: 'html'
-                    }
-                }, {
-                    text: 'HTML (include groups)',
-                    cfg: {
-                        type: 'html',
-                        includeGroups: true,
-                        includeSummary: true
-                    }
-                }]
-            }
-        }]
-    },
-
     getConditions: function() {
         var me = this,
         formItems = me.searchItems,

+ 2 - 2
frontend/saas-web/app/view/core/tab/Controller.js

@@ -34,7 +34,7 @@ Ext.define('saas.view.core.tab.Controller', {
                 if (me.fireEvent('beforeclose', me) !== false) {
                     if (me.tabBar) {
                         if(tabView.closeConfirm && tabView.isDirty()) {
-                            showConfirm('提示', '表单数据有修改,确定要退出吗?')
+                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
                             .then(function(yes) {
                                 if(yes == 'yes') {
                                     if (me.tabBar.closeTab(me) === false) {
@@ -49,7 +49,7 @@ Ext.define('saas.view.core.tab.Controller', {
                         }
                     } else {
                         if(tabView.closeConfirm == 'function' && tabView.isDirty()) {
-                            showConfirm('提示', '表单数据有修改,确定要退出吗?')
+                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
                             .then(function(yes) {
                                 if(yes == 'yes') {
                                     me.fireClose();

+ 8 - 8
frontend/saas-web/app/view/document/bom/FormController.js

@@ -344,7 +344,7 @@ Ext.define('saas.view.document.bom.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._openUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -352,14 +352,14 @@ Ext.define('saas.view.document.bom.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 //viewModel.set('base.editable', false);
-                showToast('启用成功');
+                saas.util.BaseUtil.showToast('启用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('启用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('启用失败: ' + res.message);
         });
     },
     unAudit: function() {
@@ -367,7 +367,7 @@ Ext.define('saas.view.document.bom.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._closeUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -375,13 +375,13 @@ Ext.define('saas.view.document.bom.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 // viewModel.set('base.editable', false);
-                showToast('关闭成功');
+                saas.util.BaseUtil.showToast('关闭成功');
             }
         })
         .catch(function(res) {
-            showToast('关闭失败: ' + res.message);
+            saas.util.BaseUtil.showToast('关闭失败: ' + res.message);
         });
     }
 });

+ 8 - 8
frontend/saas-web/app/view/document/customer/FormController.js

@@ -21,22 +21,22 @@ Ext.define('saas.view.document.customer.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._openUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('启用成功');
+                saas.util.BaseUtil.showToast('启用成功');
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('启用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('启用失败: ' + res.message);
         });
     },
     unAudit: function() {
@@ -44,7 +44,7 @@ Ext.define('saas.view.document.customer.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._closeUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -52,13 +52,13 @@ Ext.define('saas.view.document.customer.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('禁用成功');
+                saas.util.BaseUtil.showToast('禁用成功');
             }
         })
         .catch(function(res) {
-            showToast('禁用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('禁用失败: ' + res.message);
         });
     }
 });

+ 8 - 8
frontend/saas-web/app/view/document/employee/FormController.js

@@ -152,7 +152,7 @@ Ext.define('saas.view.document.employee.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._openUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -160,14 +160,14 @@ Ext.define('saas.view.document.employee.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('启用成功');
+                saas.util.BaseUtil.showToast('启用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('启用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('启用失败: ' + res.message);
         });
     },
     unAudit: function() {
@@ -175,7 +175,7 @@ Ext.define('saas.view.document.employee.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._closeUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -183,14 +183,14 @@ Ext.define('saas.view.document.employee.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('禁用成功');
+                saas.util.BaseUtil.showToast('禁用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('禁用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('禁用失败: ' + res.message);
         });
     }
 });

+ 31 - 5
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -8,8 +8,6 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
     modal: true,
     width: 500,
     //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     height: 260,
     listeners:{
       show:function(w){
@@ -221,6 +219,34 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 maxLength: 200
             }]
         },
+        accountinformation:{
+            items:[{
+                xtype:'hidden',
+                name:'roleIds',
+                hidden:true,
+            },{
+                xtype:'datamulticombo',
+                dataUrl:'/api/account/role/list',
+                fieldLabel: '关联角色',
+                name: 'roleNames',
+                allowBlank:false,
+                maxLength: 20
+            },{
+                xtype:'textfield',
+                fieldLabel: '联系电话',
+                name: 'mobile',
+                allowBlank:true,
+                maxLength: 30,
+                beforeLabelTextTpl: "",
+            },{
+                xtype:'textfield',
+                fieldLabel: '联系邮件',
+                name: 'email',
+                allowBlank:true,
+                maxLength: 30,
+                beforeLabelTextTpl: "",
+            }]
+        },
         warehouse:{
             items:[{
                 xtype:'hidden',
@@ -370,7 +396,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
         var idField = form.down('[name='+belong.keyField+']');
         params[belong.keyField] = idField.value || 0;
         //保存接口
-        this.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: belong.reqUrl,
             params: JSON.stringify(params),
             method: 'POST'
@@ -378,7 +404,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
         .then(function(localJson) {
             me.setLoading(false);
             if(localJson.success){
-                showToast('保存成功');
+                saas.util.BaseUtil.showToast('保存成功');
                 var grid = form.ownerCt._parent.lookup('document-kind-Grid');
                 if(grid){
                     grid.store.load();
@@ -394,7 +420,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
         .catch(function(res) {
             me.setLoading(false);
             console.error(res);
-            showToast('保存失败: ' + res.message);
+            saas.util.BaseUtil.showToast('保存失败: ' + res.message);
         });
     },
     onCancel:function(){

+ 3 - 6
frontend/saas-web/app/view/document/kind/Kind.js

@@ -10,9 +10,6 @@ Ext.define('saas.view.document.kind.Kind', {
     viewModel: {
         type: 'document-kind'
     },
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     defaultType:'',
     requires: [
         'Ext.button.Segmented'
@@ -287,20 +284,20 @@ Ext.define('saas.view.document.kind.Kind', {
                         //  禁用/启用
                         var form = this.ownerCt.ownerCt.ownerCt;
                         var grid = this.ownerCt.ownerCt;
-                        form.BaseUtil.request({
+                        saas.util.BaseUtil.request({
                             url: (!type?form._openUrl:form._closeUrl)+'/'+rec.get('id'),
                             params: '',
                             method: 'POST',
                         })
                         .then(function(localJson) {
                             if(localJson.success){
-                                showToast('操作成功');
+                                saas.util.BaseUtil.showToast('操作成功');
                                 grid.store.load();
                             }
                         })
                         .catch(function(res) {
                             console.error(res);
-                            showToast('操作失败: ' + res.message);
+                            saas.util.BaseUtil.showToast('操作失败: ' + res.message);
                         });
                     }
                 }]

+ 4 - 6
frontend/saas-web/app/view/document/kind/KindController.js

@@ -4,9 +4,7 @@
 Ext.define('saas.view.document.kind.KindController', {
     extend: 'Ext.app.ViewController',
     alias: 'controller.document-kind',
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    
     loadDefualt:function(grid){
         var me=this,view = me.getView(),vm = me.getViewModel(),defaultKind;
         if(view.defaultType!=''){
@@ -78,19 +76,19 @@ Ext.define('saas.view.document.kind.KindController', {
         rec = grid.getStore().getAt(row);
         var keyV=rec.get(view.etc[dataKind].keyField);
         //删除接口
-        this.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: view.etc[dataKind].delUrl+'/'+keyV,
             method: 'POST'
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('删除成功');
+                saas.util.BaseUtil.showToast('删除成功');
                 grid.store.load();
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('删除失败: ' + res.message);
+            saas.util.BaseUtil.showToast('删除失败: ' + res.message);
         });
     },
     createDialog: function(dataKind,record) {

+ 8 - 8
frontend/saas-web/app/view/document/product/FormController.js

@@ -212,7 +212,7 @@ Ext.define('saas.view.document.product.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._openUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -220,14 +220,14 @@ Ext.define('saas.view.document.product.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('启用成功');
+                saas.util.BaseUtil.showToast('启用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('启用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('启用失败: ' + res.message);
         });
     },
     unAudit: function() {
@@ -235,7 +235,7 @@ Ext.define('saas.view.document.product.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._closeUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -243,14 +243,14 @@ Ext.define('saas.view.document.product.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('禁用成功');
+                saas.util.BaseUtil.showToast('禁用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('禁用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('禁用失败: ' + res.message);
         });
     },
     amount_change:function() {

+ 8 - 8
frontend/saas-web/app/view/document/vendor/FormController.js

@@ -20,7 +20,7 @@ Ext.define('saas.view.document.vendor.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._openUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -28,14 +28,14 @@ Ext.define('saas.view.document.vendor.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('启用成功');
+                saas.util.BaseUtil.showToast('启用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('启用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('启用失败: ' + res.message);
         });
     },
     unAudit: function() {
@@ -43,7 +43,7 @@ Ext.define('saas.view.document.vendor.FormController', {
         form = this.getView(),
         viewModel = me.getViewModel();
         
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._closeUrl+'/'+viewModel.data.id,
             params: '',
             method: 'POST',
@@ -51,14 +51,14 @@ Ext.define('saas.view.document.vendor.FormController', {
         .then(function(localJson) {
             if(localJson.success){
                 form.initId = localJson.data.id;
-                form.FormUtil.loadData(form);
+                saas.util.FormUtil.loadData(form);
                 viewModel.set('base.editable', false);
-                showToast('禁用成功');
+                saas.util.BaseUtil.showToast('禁用成功');
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('禁用失败: ' + res.message);
+            saas.util.BaseUtil.showToast('禁用失败: ' + res.message);
         });
     }
 });

+ 1 - 1
frontend/saas-web/app/view/home/InfoCard.js

@@ -146,7 +146,7 @@ Ext.define('saas.view.home.InfoCard', {
                 itemSelector: 'div.x-box',
                 listeners: {
                     itemclick: function(th, record, item, index, e, eOpts) {
-                        openTab(record.get('viewType'), record.get('title'), record.get('id'), {
+                        saas.util.BaseUtil.openTab(record.get('viewType'), record.get('title'), record.get('id'), {
                             simpleMode: true,
                             defaultCondition: record.get('condition')
                         });

+ 1 - 1
frontend/saas-web/app/view/main/Main.js

@@ -76,7 +76,7 @@ Ext.define('saas.view.main.Main', {
                             text: '新手导航',
                             iconCls:'x-fa fa-comment-o',
                             handler:function(){
-                               openTab('sys-guide-formpanel','新手导航', 'sys-guide-formpanel-nav');
+                               saas.util.BaseUtil.openTab('sys-guide-formpanel','新手导航', 'sys-guide-formpanel-nav');
                             }
                         },{
                             text: '用户手册',

+ 2 - 2
frontend/saas-web/app/view/main/Navigation.js

@@ -152,7 +152,7 @@ Ext.define('saas.view.main.Navigation', {
                                     tabId = 'maintab-' + type + '-' + id;
 
                                     menu.navItem.classList.remove(menu.navView.overItemCls);
-                                    openTab(viewType, tabTitle, tabId,config);
+                                    saas.util.BaseUtil.openTab(viewType, tabTitle, tabId,config);
                                     menu.hide();
                                 });
                             });
@@ -169,7 +169,7 @@ Ext.define('saas.view.main.Navigation', {
                                     tabId = viewType + '-add';
 
                                     menu.navItem.classList.remove(menu.navView.overItemCls);
-                                    openTab(viewType, tabTitle, tabId);
+                                    saas.util.BaseUtil.openTab(viewType, tabTitle, tabId);
                                     menu.hide();
                                 });
                             });

+ 1 - 1
frontend/saas-web/app/view/money/othreceipts/FormPanelController.js

@@ -200,7 +200,7 @@ Ext.define('saas.view.money.othreceipts.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 

+ 1 - 1
frontend/saas-web/app/view/money/othspendings/FormPanelController.js

@@ -174,7 +174,7 @@ Ext.define('saas.view.money.othspendings.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 

+ 1 - 1
frontend/saas-web/app/view/money/payBalance/FormPanel.js

@@ -399,7 +399,7 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
+            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
             .then(function(y) {
                 if(y == 'yes') {
                     controller.audit();

+ 5 - 5
frontend/saas-web/app/view/money/payBalance/FormPanelController.js

@@ -295,19 +295,19 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnInUrl+id.value,
             method: 'GET',
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('转单成功');
+                saas.util.BaseUtil.showToast('转单成功');
               
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      },
 
@@ -320,7 +320,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 
@@ -333,7 +333,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存?')
+            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存?')
             .then(function(y) {
                 if(y == 'yes') {
                     me.save();

+ 1 - 1
frontend/saas-web/app/view/money/recBalance/FormPanel.js

@@ -369,7 +369,7 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
+            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
             .then(function(y) {
                 if(y == 'yes') {
                     controller.audit();

+ 5 - 5
frontend/saas-web/app/view/money/recBalance/FormPanelController.js

@@ -373,19 +373,19 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnInUrl+id.value,
             method: 'GET',
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('转单成功');
+                saas.util.BaseUtil.showToast('转单成功');
               
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      },
     onSave: function() {
@@ -397,7 +397,7 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast(form.invalidText);
+            saas.util.BaseUtil.showToast(form.invalidText);
             return false;
         }
 
@@ -411,7 +411,7 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            showConfirm('提示', '收款金额' + t + '于本次折扣后核销金额,是否仍要保存?')
+            saas.util.BaseUtil.showConfirm('提示', '收款金额' + t + '于本次折扣后核销金额,是否仍要保存?')
                 .then(function(y) {
                     if(y == 'yes') {
                         me.save();

+ 7 - 3
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -27,6 +27,7 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
      toolBtns: [{
          xtype: 'button',
          text: '转采购验收单',
+         hidden: true,
          bind: {
             hidden: '{turnHidden}'
         },
@@ -36,9 +37,12 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
     defaultItems: [{
         xtype: 'hidden',
         name: 'id',
-        fieldLabel: 'id',
-        columnWidth: 0
-    }, {
+        fieldLabel: 'id'
+    },{
+        xtype: 'numberfield',
+        name: 'pi_ioid',
+        fieldLabel: 'pi_ioid'
+    },{
         xtype : "hidden", 
         name : "pu_vendid", 
         fieldLabel : "供应商ID"

+ 4 - 4
frontend/saas-web/app/view/purchase/purchase/FormPanelController.js

@@ -288,7 +288,7 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnInUrl+id.value,
             method: 'POST',
         })
@@ -297,15 +297,15 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
                 var intValue = localJson.data.id,
                     codeValue= localJson.data.code,
                     name = localJson.data.name;
-                openTab('purchase-purchasein-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                saas.util.BaseUtil.openTab('purchase-purchasein-formpanel',name+"("+codeValue+")",codeValue+intValue, {
                     initId: intValue
                 });
-                showToast('转单成功');    
+                saas.util.BaseUtil.showToast('转单成功');    
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      }
 });

+ 2 - 1
frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js

@@ -27,6 +27,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
     toolBtns: [{
         xtype: 'button',
         text: '转采购验退单',
+        hidden: true,
         bind: {
            hidden: '{turnHidden}'
        },
@@ -392,7 +393,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
         data = grid.getTrueData();
         Ext.Array.each(data,function(item){
             if(item.pd_orderprice==0){
-                showToast(item.pd_pdno+'行'+item.pd_prodcode+'物料单价为0');
+                saas.util.BaseUtil.showToast(item.pd_pdno+'行'+item.pd_prodcode+'物料单价为0');
             }
         });
         return true;

+ 4 - 4
frontend/saas-web/app/view/purchase/purchaseIn/FormPanelController.js

@@ -309,7 +309,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnOutUrl+id.value,
             method: 'POST',
         })
@@ -318,16 +318,16 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanelController', {
                 var intValue = localJson.data.id,
                 codeValue= localJson.data.code,
                 name = localJson.data.name;
-                openTab('purchase-purchaseout-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                saas.util.BaseUtil.openTab('purchase-purchaseout-formpanel',name+"("+codeValue+")",codeValue+intValue, {
                     initId: intValue
                 });
-                showToast('转单成功');
+                saas.util.BaseUtil.showToast('转单成功');
               
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      }
 });

+ 4 - 0
frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js

@@ -29,6 +29,10 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
         fieldLabel: 'id',
         allowBlank: true,
         columnWidth: 0
+    },{
+        xtype: 'hidden',
+        name: 'pi_ioid',
+        fieldLabel: 'pi_ioid'
     },{
         xtype : "textfield", 
         name : "pi_class", 

+ 2 - 12
frontend/saas-web/app/view/purchase/report/Purchase.js

@@ -36,6 +36,8 @@ Ext.define('saas.view.purchase.report.Purchase', {
         ]
     }],
 
+    reportModel: 'saas.model.report.Purchase',
+
     reportColumns: [
     {
         text: 'id',
@@ -74,27 +76,15 @@ Ext.define('saas.view.purchase.report.Purchase', {
     }, {
         text: '物料名称',
         dataIndex: 'pr_detail', 
-        renderer: function (v, m, r) {
-            return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
-        }
     }, {
         text: '物料规格',
         dataIndex: 'pr_spec', 
-        renderer: function (v, m, r) {
-            return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
-        }
     }, {
         text: '品牌',
         dataIndex: 'pr_brand', 
-        renderer: function (v, m, r) {
-            return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
-        }
     }, {
         text: '单位',
         dataIndex: 'pr_unit', 
-        renderer: function (v, m, r) {
-            return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
-        }
     }, {
         text: '采购数量',
         dataIndex: 'pd_qty',

+ 2 - 1
frontend/saas-web/app/view/sale/sale/FormPanel.js

@@ -27,6 +27,7 @@ Ext.define('saas.view.sale.sale.FormPanel', {
      toolBtns: [{
          xtype: 'button',
          text: '转出货单',
+         hidden: true,
          handler: 'turnOut',
          bind: {
              hidden: '{sa_statuscode!="AUDITED"}'
@@ -59,7 +60,7 @@ Ext.define('saas.view.sale.sale.FormPanel', {
         fieldLabel : "交货地址", 
         allowBlank : false, 
         columnWidth : 0.5,
-        hiddenBtn:false,//true 则会关闭新增按钮功能
+        hiddenBtn:true,//true 则会关闭新增按钮功能
         addHandler:function(b){
             var document = Ext.create('saas.view.document.kind.Kind',{});
             var form = this.ownerCmp.ownerCt;

+ 5 - 5
frontend/saas-web/app/view/sale/sale/FormPanelController.js

@@ -291,7 +291,7 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnOutUrl+id.value,
             method: 'POST',
         })
@@ -300,16 +300,16 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
                 var intValue = localJson.data.id,
                     codeValue= localJson.data.code,
                     name = localJson.data.name;
-                openTab('sale-saleout-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                saas.util.BaseUtil.openTab('sale-saleout-formpanel',name+"("+codeValue+")",codeValue+intValue, {
                     initId: intValue
                 });
-                showToast('转单成功');  
-                form.FormUtil.loadData(form);
+                saas.util.BaseUtil.showToast('转单成功');  
+                saas.util.FormUtil.loadData(form);
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      }
 });

+ 1 - 0
frontend/saas-web/app/view/sale/saleOut/FormPanel.js

@@ -28,6 +28,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
         xtype: 'button',
         text: '转销售退货',
         handler: 'turnProdIn',
+        hidden: true,
         bind: {
             hidden: '{pi_statuscode!="AUDITED"}'
         }

+ 5 - 5
frontend/saas-web/app/view/sale/saleOut/FormPanelController.js

@@ -289,7 +289,7 @@ Ext.define('saas.view.sale.saleout.FormPanelController', {
         var me = this,
         form = me.getView(),
         id = form.getForm().findField(form._idField);
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._turnInUrl+id.value,
             method: 'POST',
         })
@@ -298,16 +298,16 @@ Ext.define('saas.view.sale.saleout.FormPanelController', {
                 var intValue = localJson.data.id,
                     codeValue= localJson.data.code,
                     name = localJson.data.name;
-                openTab('sale-salein-formpanel',name+"("+codeValue+")",codeValue+intValue, {
+                saas.util.BaseUtil.openTab('sale-salein-formpanel',name+"("+codeValue+")",codeValue+intValue, {
                     initId: intValue
                 });
-                showToast('转单成功');  
-                form.FormUtil.loadData(form);  
+                saas.util.BaseUtil.showToast('转单成功');  
+                saas.util.FormUtil.loadData(form);  
             }
         })
         .catch(function(res) {
             console.error(res);
-            showToast('转单失败: ' + res.message);
+            saas.util.BaseUtil.showToast('转单失败: ' + res.message);
         });
      }
 });

+ 2 - 2
frontend/saas-web/app/view/stock/make/FormPanelController.js

@@ -389,7 +389,7 @@ Ext.define('saas.view.stock.make.FormPanelController', {
         store = viewModel.get('detail0').detailStore,
         loadData = new Array();;
         //请求bom资料
-        form.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._getBomUrl+v,
             method: 'GET',
         })
@@ -417,7 +417,7 @@ Ext.define('saas.view.stock.make.FormPanelController', {
         })
         .catch(function(res) {
             console.error(res);
-            showToast('获取BOM资料失败: ' + res.message);
+            saas.util.BaseUtil.showToast('获取BOM资料失败: ' + res.message);
         });
      }
 });

+ 12 - 16
frontend/saas-web/app/view/sys/account/DataList.js

@@ -9,9 +9,6 @@ Ext.define('saas.view.sys.account.DataList', {
     autoScroll: true,
     frame:true,
     layout:'fit',
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     dataUrl:'http://192.168.253.31:8560/api/account/account/accountRole/list',                 
 
     tbar: [{
@@ -76,7 +73,7 @@ Ext.define('saas.view.sys.account.DataList', {
     },{
         text : '联系邮箱', 
         dataIndex : 'email', 
-        width : 120.0, 
+        width : 220.0, 
         xtype : '', 
     },{
         text : '关联角色id', 
@@ -87,7 +84,7 @@ Ext.define('saas.view.sys.account.DataList', {
     },{
         text : '关联角色', 
         dataIndex : 'roleNames', 
-        width : 120.0, 
+        flex:1,
         xtype : '', 
     }],
 
@@ -149,26 +146,26 @@ Ext.define('saas.view.sys.account.DataList', {
         var grid = this;
         var data = grid.getGridSelected(type);
         if(!data){
-            showToast('请勾选符合条件的行进行操作。');
+            saas.util.BaseUtil.showToast('请勾选符合条件的行进行操作。');
             return false;
         }
         if(data&&data.length>0){
             var params = JSON.stringify({baseDTOs:data});
-            form.BaseUtil.request({
+            saas.util.BaseUtil.request({
                     url: url,
                     params: params,
                     method: 'POST',
                     async:false
                 })
                 .then(function() {
-                    showToast('操作成功');
+                    saas.util.BaseUtil.showToast('操作成功');
                     grid.store.load();
                 })
                 .catch(function(response) {
-                    showToast('操作失败');
+                    saas.util.BaseUtil.showToast('操作失败');
                 });
         }else{
-            showToast('请勾选至少一条明细。');
+            saas.util.BaseUtil.showToast('请勾选至少一条明细。');
         }
     },
 
@@ -188,15 +185,14 @@ Ext.define('saas.view.sys.account.DataList', {
             if(classList.indexOf('fa-pencil')>-1){
                 var document = Ext.create('saas.view.document.kind.Kind',{});
                 var form = this.ownerCt;
-                this.dialog = form.getController().getView().add({
+                this.dialog = this.getController().getView().add({
                     xtype: 'document-kind-childwin',
                     bind: {
-                        title: '修改单据编码规则'
+                        title: '修改账户信息'
                     },
-                    dataKind:'maxnumbers',
-                    belong:document.etc['maxnumbers'],
-                    _parent:form,
-                    _combo:this,
+                    dataKind:'accountinformation',
+                    belong:document.etc['accountinformation'],
+                    _parent:this,
                     record:record,
                     session: true
                 });

+ 321 - 0
frontend/saas-web/app/view/sys/baseconfig/FormPanel.js

@@ -0,0 +1,321 @@
+Ext.define('saas.view.sys.baseconfig.FormPanel', {
+    extend: 'Ext.form.Panel',
+    xtype: 'sys-baseconfig-formpanel',
+
+    controller: 'sys-baseconfig-formpanel',
+    viewModel: 'sys-baseconfig-formpanel',
+    //工具类
+    FormUtil: Ext.create('saas.util.FormUtil'),
+    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    
+    //字段属性
+    _idField: 'id',
+    _readUrl:'http://192.168.253.31:8560/api/account/company/read/current',
+    _saveUrl:'http://192.168.253.31:8560/api/account/company/save',
+
+    //基础属性
+    frame:true,
+    initId: 0,
+    layout: 'vbox',
+    autoScroll: true,
+    border: 1,
+    bodyPadding: 5,
+
+    fieldDefaults: {
+        margin: '0 5 5 30',
+        labelAlign: 'right',
+        labelWidth: 90,
+        width:300,
+        blankText: '该字段不能为空'
+    },
+
+    bbar:{
+        frame:true,
+        items:['->',{
+            text:'保存',
+            formBind:true,
+            name:'save'
+        },'->']
+    },
+
+    items: [{
+        bind:'{id}',
+        xtype: 'hidden',
+        name: 'id',
+        fieldLabel: 'id',
+        allowBlank: true,
+        width:600
+    },{
+        bind:'{name}',
+        xtype: 'textfield',
+        name: 'name',
+        fieldLabel: '公司名称',
+        allowBlank: true,
+        editable:false,
+        readOnly:true,
+        width:600
+    },{
+        bind:'{address}',
+        xtype: 'textfield',
+        name: 'address',
+        fieldLabel: '公司地址',
+        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
+        allowBlank: false,
+        width:600
+    },{
+        bind:'{tel}',
+        xtype: 'textfield',
+        name: 'tel',
+        fieldLabel: '电话',
+        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
+        allowBlank: false,
+        width:500
+    },{
+        bind:'{fax}',
+        xtype: 'textfield',
+        name: 'fax',
+        fieldLabel: '传真',
+        allowBlank: true,
+        width:500
+    }
+    // ,{
+    //     bind:'{en_begindate}',
+    //     xtype : "datefield", 
+    //     name : "en_begindate",
+    //     format:'Y-m-d H:i:s', 
+    //     fieldLabel : "开账日期", 
+    //     allowBlank : true, 
+    //     editable:false,
+    //     hideTrigger:true,
+    //     readOnly:true,
+    //     width:500
+    // }
+    // ,{ 
+    //     bind:'{en_pricemethod}',
+    //     displayField : "display", 
+    //     editable:false,
+    //     hideTrigger : false, 
+    //     maxLength : 100.0, 
+    //     width:500,
+    //     minValue : null, 
+    //     queryMode : "local", 
+    //     valueField : "value", 
+    //     xtype : "combo",
+    //     value:'WACC',
+    //     store:{
+    //         fields: ['display', 'value'],
+    //         data : [
+    //             {"display":"加权平均法", "value":'WACC'},
+    //             {"display":"先进先出法", "value":'FIFO'}
+    //         ]
+    //     },
+    //     name : "en_pricemethod", 
+    //     beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
+    //     fieldLabel : "库存计算方式", 
+    //     allowBlank : false, 
+    // }
+    // ,{  
+    //     ignore:true,
+    //     bind:'{updateTime}',
+    //     xtype : "datefield", 
+    //     name : "updateTime", 
+    //     fieldLabel : "更新时间", 
+    //     allowBlank : true, 
+    //     hideTrigger:true,
+    //     format:'Y-m-d H:i:s',
+    //     editable:false,
+    //     readOnly:true,
+    //     width:500,
+    // }
+    ,{
+        xtype: 'form',
+		width:600,
+		frame: false,
+		border: false,
+		minHeight: 22,
+		bodyStyle: 'padding:2px;',
+        layout: 'hbox',
+        items:[{
+            bind:'{signet}',
+            name : "signet", 
+            allowBlank : true, 
+            hidden:true,
+            xtype:'numberfield'
+        },{
+            allowBlank : true, 
+            width:500,
+            fieldLabel:'打印章上传',
+            xtype: 'filefield',
+            emptyText: '请选择图片',
+            buttonText: '',
+            buttonConfig: {
+                iconCls: 'x-fa fa-picture-o',
+            },
+            createFileInput : function() {
+                    var me = this;
+                    me.fileInputEl = me.button.el.createChild({
+                    name: me.getName(),
+                    cls: Ext.baseCSSPrefix + 'form-file-input',
+                    tag: 'input',
+                    type: 'file',
+                    size: 1,
+                    accept:"image/*"
+                }).on('change', me.onFileChange, me);
+            },
+            listeners: {
+                afterrender:function(field,ops){
+                    var fileEl = field.fileInputEl.dom;
+                    fileEl.setAttribute("accept","image/*");
+                },
+                change: function(field){
+                    var form = field.ownerCt.ownerCt;
+                    var myForm = field.ownerCt;
+                    var fileEl = field.fileInputEl.dom;
+                    var fd = new FormData();
+                    fd.append('file', fileEl.files[0]);
+                    form.setLoading(true);
+                    Ext.Ajax.request({
+                        url: 'http://192.168.253.31:8560/api/file/upload',//这里是填写需要跨域访问的URL
+                        cors: true,
+                        useDefaultXhrHeader: false,
+                        method: 'post',
+                        rawData: fd,
+                        headers: {
+                            'Access-Control-Allow-Origin': '*',
+                            'Authorization':  saas.util.State.get('session').token,
+                            //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
+                            "Content-Type":null
+                        },
+                        success: function (response, opts) {
+                            form.setLoading(false);
+                            saas.util.BaseUtil.showToast('上传成功');
+                            var res = Ext.decode(response.responseText);
+                            if(res.success){
+                                var data = res.data;
+                                var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
+                                myForm.down('[name=signet]').setValue(data.id);
+                                field.setRawValue(name);
+                            }else{
+                                saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                            }
+                        },
+                        failure: function (response, opts) {
+                            form.setLoading(false);
+                            var res = Ext.decode(response.responseText);
+                            saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                        }
+                    });
+                }
+            }
+        },{
+            hidden:true,
+            name:'showSignetPhoto',
+            xtype:'button',
+            iconCls: 'x-fa fa-picture-o'
+        }]
+    },{
+        xtype: 'form',
+		width:600,
+		frame: false,
+		border: false,
+		minHeight: 22,
+		bodyStyle: 'padding:2px;',
+        layout: 'hbox',
+        items:[{
+            bind:'{logoUrl}',
+            name : "logoUrl", 
+            allowBlank : true, 
+            hidden:true,
+            xtype:'numberfield'
+        },{
+            allowBlank : true, 
+            width:500,
+            fieldLabel:'Logo上传',
+            xtype: 'filefield',
+            emptyText: '请选择图片',
+            buttonText: '',
+            buttonConfig: {
+                iconCls: 'x-fa fa-picture-o',
+            },
+            createFileInput : function() {
+                    var me = this;
+                    me.fileInputEl = me.button.el.createChild({
+                    name: me.getName(),
+                    cls: Ext.baseCSSPrefix + 'form-file-input',
+                    tag: 'input',
+                    type: 'file',
+                    size: 1,
+                    accept:"image/*"
+                }).on('change', me.onFileChange, me);
+            },
+            listeners: {
+                change: function(field){
+                    var form = field.ownerCt.ownerCt;
+                    var myForm = field.ownerCt;
+                    var fileEl = field.fileInputEl.dom;
+                    var fd = new FormData();
+                    fd.append('file', fileEl.files[0]);
+                    form.setLoading(true);
+                    Ext.Ajax.request({
+                        url: 'http://192.168.253.31:8560/api/file/upload',//这里是填写需要跨域访问的URL
+                        cors: true,
+                        useDefaultXhrHeader: false,
+                        method: 'post',
+                        rawData: fd,
+                        headers: {
+                            'Access-Control-Allow-Origin': '*',
+                            'Authorization':  saas.util.State.get('session').token,
+                            //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
+                            "Content-Type":null
+                        },
+                        success: function (response, opts) {
+                            form.setLoading(false);
+                            saas.util.BaseUtil.showToast('上传成功');
+                            var res = Ext.decode(response.responseText);
+                            if(res.success){
+                                var data = res.data;
+                                var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
+                                myForm.down('[name=logoUrl]').setValue(data.id);
+                                field.setRawValue(name);
+                            }else{
+                                saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                            }
+                        },
+                        failure: function (response, opts) {
+                            form.setLoading(false);
+                            var res = Ext.decode(response.responseText);
+                            saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                        }
+                    });
+                }
+            }
+        },{
+            hidden:true,
+            name:'showLogoPhoto',
+            xtype:'button',
+            iconCls: 'x-fa fa-picture-o'
+        }]
+    }],
+
+    initComponent: function () {
+        var me = this,
+        viewModel = me.getViewModel();
+        var url = me._readUrl;
+        me.BaseUtil.request({url })
+        .then(function(res) {
+            if(res.success) {
+                var d = res.data;
+                viewModel.setData(d)
+            }
+        })
+        .catch(function(response) {
+            console.error(response);
+        });
+
+        me.callParent(arguments);
+    },
+
+    refresh:function(){
+        this.ownerCt.setTitle('参数设置')
+    }
+});

+ 66 - 0
frontend/saas-web/app/view/sys/baseconfig/FormPanelController.js

@@ -0,0 +1,66 @@
+Ext.define('saas.view.sys.baseconfig.FormPanelController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.sys-baseconfig-formpanel',
+
+    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    FormUtil: Ext.create('saas.util.FormUtil'),
+
+    init: function (form) {
+        var me = this;
+        this.control({
+            'button[name=save]':{
+                click:function(){
+                    me.onSave();
+                }
+            }
+        });
+    },
+
+    onSave: function() {
+        var me = this,
+        form = this.getView();
+
+        var valid = form.isValid();
+        if(!valid) {
+            saas.util.BaseUtil.showToast('表单校验有误,请检查');
+            return false;
+        }
+
+        if(form.getForm().wasDirty==false){
+            saas.util.BaseUtil.showToast('未修改数据,请修改后保存');
+            return false;
+        }
+        
+        viewModel = me.getViewModel();
+        var formData = viewModel.data;
+        formData.en_name = null;
+        formData.updateTime = null;
+        me.BaseUtil.request({
+            url: form._saveUrl,
+            params: JSON.stringify(formData),
+            method: 'POST',
+        })
+        .then(function(localJson) {
+            if(localJson.success){
+                saas.util.BaseUtil.showToast('保存成功');
+                viewModel = form.getViewModel();
+                var url = form._readUrl;
+                form.BaseUtil.request({url })
+                .then(function(res) {
+                    if(res.success) {
+                        var d = res.data;
+                        viewModel.setData(d)
+                    }
+                })
+                .catch(function(response) {
+                    console.error(response);
+                });
+            }
+        })
+        .catch(function(res) {
+            console.error(res);
+            saas.util.BaseUtil.showToast('保存失败: ' + res.message);
+        });
+    }
+
+});

+ 5 - 0
frontend/saas-web/app/view/sys/baseconfig/FormPanelModel.js

@@ -0,0 +1,5 @@
+Ext.define('saas.view.sys.baseconfig.FormPanelModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.sys-baseconfig-formpanel',
+
+});

+ 233 - 86
frontend/saas-web/app/view/sys/config/FormPanel.js

@@ -4,14 +4,11 @@ Ext.define('saas.view.sys.config.FormPanel', {
 
     controller: 'sys-config-formpanel',
     viewModel: 'sys-config-formpanel',
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     
     //字段属性
     _idField: 'id',
-    _readUrl:'/api/commons/enterprise/read',
-    _saveUrl:'/api/commons/enterprise/save',
+    _readUrl:'http://192.168.253.31:8560/api/account/company/read/current',
+    _saveUrl:'http://192.168.253.31:8560/api/account/company/save',
 
     //基础属性
     frame:true,
@@ -39,123 +36,273 @@ Ext.define('saas.view.sys.config.FormPanel', {
     },
 
     items: [{
-        bind:'{companyId}',
+        bind:'{id}',
         xtype: 'hidden',
-        name: 'companyId',
+        name: 'id',
         fieldLabel: 'id',
         allowBlank: true,
         width:600
     },{
-        bind:'{en_name}',
+        bind:'{name}',
         xtype: 'textfield',
-        name: 'en_name',
+        name: 'name',
         fieldLabel: '公司名称',
         allowBlank: true,
         editable:false,
         readOnly:true,
         width:600
     },{
-        bind:'{en_address}',
+        bind:'{address}',
         xtype: 'textfield',
-        name: 'en_address',
+        name: 'address',
         fieldLabel: '公司地址',
         beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         allowBlank: false,
         width:600
     },{
-        bind:'{en_tel}',
+        bind:'{tel}',
         xtype: 'textfield',
-        name: 'en_tel',
+        name: 'tel',
         fieldLabel: '电话',
         beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         allowBlank: false,
         width:500
     },{
-        bind:'{en_fax}',
+        bind:'{fax}',
         xtype: 'textfield',
-        name: 'en_fax',
+        name: 'fax',
         fieldLabel: '传真',
         allowBlank: true,
         width:500
-    },{
-        bind:'{en_begindate}',
-        xtype : "datefield", 
-        name : "en_begindate",
-        format:'Y-m-d H:i:s', 
-        fieldLabel : "开账日期", 
-        allowBlank : true, 
-        editable:false,
-        hideTrigger:true,
-        readOnly:true,
-        width:500
-    },{ 
-        bind:'{en_pricemethod}',
-        displayField : "display", 
-        editable:false,
-        hideTrigger : false, 
-        maxLength : 100.0, 
-        width:500,
-        minValue : null, 
-        queryMode : "local", 
-        valueField : "value", 
-        xtype : "combo",
-        value:'WACC',
-        store:{
-            fields: ['display', 'value'],
-            data : [
-                {"display":"加权平均法", "value":'WACC'},
-                {"display":"先进先出法", "value":'FIFO'}
-            ]
-        },
-        name : "en_pricemethod", 
-        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
-        fieldLabel : "库存计算方式", 
-        allowBlank : false, 
-    },{  
-        bind:'{en_signet}',
-        name : "en_signet", 
-        fieldLabel : "打印章上传", 
-        allowBlank : false, 
-        width:500,
-        xtype: 'filefield',
-        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
-        emptyText: '请选择图片',
-        buttonText: '',
-        buttonConfig: {
+    }
+    // ,{
+    //     bind:'{en_begindate}',
+    //     xtype : "datefield", 
+    //     name : "en_begindate",
+    //     format:'Y-m-d H:i:s', 
+    //     fieldLabel : "开账日期", 
+    //     allowBlank : true, 
+    //     editable:false,
+    //     hideTrigger:true,
+    //     readOnly:true,
+    //     width:500
+    // }
+    // ,{ 
+    //     bind:'{en_pricemethod}',
+    //     displayField : "display", 
+    //     editable:false,
+    //     hideTrigger : false, 
+    //     maxLength : 100.0, 
+    //     width:500,
+    //     minValue : null, 
+    //     queryMode : "local", 
+    //     valueField : "value", 
+    //     xtype : "combo",
+    //     value:'WACC',
+    //     store:{
+    //         fields: ['display', 'value'],
+    //         data : [
+    //             {"display":"加权平均法", "value":'WACC'},
+    //             {"display":"先进先出法", "value":'FIFO'}
+    //         ]
+    //     },
+    //     name : "en_pricemethod", 
+    //     beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
+    //     fieldLabel : "库存计算方式", 
+    //     allowBlank : false, 
+    // }
+    // ,{  
+    //     ignore:true,
+    //     bind:'{updateTime}',
+    //     xtype : "datefield", 
+    //     name : "updateTime", 
+    //     fieldLabel : "更新时间", 
+    //     allowBlank : true, 
+    //     hideTrigger:true,
+    //     format:'Y-m-d H:i:s',
+    //     editable:false,
+    //     readOnly:true,
+    //     width:500,
+    // }
+    ,{
+        xtype: 'form',
+		width:600,
+		frame: false,
+		border: false,
+		minHeight: 22,
+		bodyStyle: 'padding:2px;',
+        layout: 'hbox',
+        items:[{
+            bind:'{signet}',
+            name : "signet", 
+            allowBlank : true, 
+            hidden:true,
+            xtype:'numberfield'
+        },{
+            allowBlank : true, 
+            width:500,
+            fieldLabel:'打印章上传',
+            xtype: 'filefield',
+            emptyText: '请选择图片',
+            buttonText: '',
+            buttonConfig: {
+                iconCls: 'x-fa fa-picture-o',
+            },
+            createFileInput : function() {
+                    var me = this;
+                    me.fileInputEl = me.button.el.createChild({
+                    name: me.getName(),
+                    cls: Ext.baseCSSPrefix + 'form-file-input',
+                    tag: 'input',
+                    type: 'file',
+                    size: 1,
+                    accept:"image/*"
+                }).on('change', me.onFileChange, me);
+            },
+            listeners: {
+                afterrender:function(field,ops){
+                    var fileEl = field.fileInputEl.dom;
+                    fileEl.setAttribute("accept","image/*");
+                },
+                change: function(field){
+                    var form = field.ownerCt.ownerCt;
+                    var myForm = field.ownerCt;
+                    var fileEl = field.fileInputEl.dom;
+                    var fd = new FormData();
+                    fd.append('file', fileEl.files[0]);
+                    form.setLoading(true);
+                    Ext.Ajax.request({
+                        url: 'http://192.168.253.31:8560/api/file/upload',//这里是填写需要跨域访问的URL
+                        cors: true,
+                        useDefaultXhrHeader: false,
+                        method: 'post',
+                        rawData: fd,
+                        headers: {
+                            'Access-Control-Allow-Origin': '*',
+                            'Authorization':  saas.util.State.get('session').token,
+                            //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
+                            "Content-Type":null
+                        },
+                        success: function (response, opts) {
+                            form.setLoading(false);
+                            saas.util.BaseUtil.showToast('上传成功');
+                            var res = Ext.decode(response.responseText);
+                            if(res.success){
+                                var data = res.data;
+                                var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
+                                myForm.down('[name=signet]').setValue(data.id);
+                                field.setRawValue(name);
+                            }else{
+                                saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                            }
+                        },
+                        failure: function (response, opts) {
+                            form.setLoading(false);
+                            var res = Ext.decode(response.responseText);
+                            saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                        }
+                    });
+                }
+            }
+        },{
+            hidden:true,
+            name:'showSignetPhoto',
+            xtype:'button',
             iconCls: 'x-fa fa-picture-o'
-        }
-    },{  
-        bind:'{en_logo}',
-        name : "en_logo", 
-        fieldLabel : "Logo上传", 
-        allowBlank : false, 
-        width:500,
-        xtype: 'filefield',
-        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
-        emptyText: '请选择图片',
-        buttonText: '',
-        buttonConfig: {
+        }]
+    },{
+        xtype: 'form',
+		width:600,
+		frame: false,
+		border: false,
+		minHeight: 22,
+		bodyStyle: 'padding:2px;',
+        layout: 'hbox',
+        items:[{
+            bind:'{logoUrl}',
+            name : "logoUrl", 
+            allowBlank : true, 
+            hidden:true,
+            xtype:'numberfield'
+        },{
+            allowBlank : true, 
+            width:500,
+            fieldLabel:'Logo上传',
+            xtype: 'filefield',
+            emptyText: '请选择图片',
+            buttonText: '',
+            buttonConfig: {
+                iconCls: 'x-fa fa-picture-o',
+            },
+            createFileInput : function() {
+                    var me = this;
+                    me.fileInputEl = me.button.el.createChild({
+                    name: me.getName(),
+                    cls: Ext.baseCSSPrefix + 'form-file-input',
+                    tag: 'input',
+                    type: 'file',
+                    size: 1,
+                    accept:"image/*"
+                }).on('change', me.onFileChange, me);
+            },
+            listeners: {
+                afterrender:function(field,ops){
+                    var fileEl = field.fileInputEl.dom;
+                    fileEl.setAttribute("accept","image/*");
+                },
+                change: function(field){
+                    var form = field.ownerCt.ownerCt;
+                    var myForm = field.ownerCt;
+                    var fileEl = field.fileInputEl.dom;
+                    var fd = new FormData();
+                    fd.append('file', fileEl.files[0]);
+                    form.setLoading(true);
+                    Ext.Ajax.request({
+                        url: 'http://192.168.253.31:8560/api/file/upload',//这里是填写需要跨域访问的URL
+                        cors: true,
+                        useDefaultXhrHeader: false,
+                        method: 'post',
+                        rawData: fd,
+                        headers: {
+                            'Access-Control-Allow-Origin': '*',
+                            'Authorization':  saas.util.State.get('session').token,
+                            //"Content-Type": 'multipart/form-data'  //文件上传的格式, 
+                            "Content-Type":null
+                        },
+                        success: function (response, opts) {
+                            form.setLoading(false);
+                            saas.util.BaseUtil.showToast('上传成功');
+                            var res = Ext.decode(response.responseText);
+                            if(res.success){
+                                var data = res.data;
+                                var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
+                                myForm.down('[name=logoUrl]').setValue(data.id);
+                                field.setRawValue(name);
+                            }else{
+                                saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                            }
+                        },
+                        failure: function (response, opts) {
+                            form.setLoading(false);
+                            var res = Ext.decode(response.responseText);
+                            saas.util.BaseUtil.showToast('上传失败: ' + res.message);
+                        }
+                    });
+                }
+            }
+        },{
+            hidden:true,
+            name:'showLogoPhoto',
+            xtype:'button',
             iconCls: 'x-fa fa-picture-o'
-        }
-    },{  
-        ignore:true,
-        bind:'{updateTime}',
-        xtype : "datefield", 
-        name : "updateTime", 
-        fieldLabel : "更新时间", 
-        allowBlank : true, 
-        hideTrigger:true,
-        format:'Y-m-d H:i:s',
-        editable:false,
-        readOnly:true,
-        width:500,
+        }]
     }],
 
     initComponent: function () {
         var me = this,
         viewModel = me.getViewModel();
         var url = me._readUrl;
-        me.BaseUtil.request({url })
+        saas.util.BaseUtil.request({url })
         .then(function(res) {
             if(res.success) {
                 var d = res.data;

+ 6 - 9
frontend/saas-web/app/view/sys/config/FormPanelController.js

@@ -2,9 +2,6 @@ Ext.define('saas.view.sys.config.FormPanelController', {
     extend: 'Ext.app.ViewController',
     alias: 'controller.sys-config-formpanel',
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-    FormUtil: Ext.create('saas.util.FormUtil'),
-
     init: function (form) {
         var me = this;
         this.control({
@@ -22,12 +19,12 @@ Ext.define('saas.view.sys.config.FormPanelController', {
 
         var valid = form.isValid();
         if(!valid) {
-            showToast('表单校验有误,请检查');
+            saas.util.BaseUtil.showToast('表单校验有误,请检查');
             return false;
         }
 
         if(form.getForm().wasDirty==false){
-            showToast('未修改数据,请修改后保存');
+            saas.util.BaseUtil.showToast('未修改数据,请修改后保存');
             return false;
         }
         
@@ -35,17 +32,17 @@ Ext.define('saas.view.sys.config.FormPanelController', {
         var formData = viewModel.data;
         formData.en_name = null;
         formData.updateTime = null;
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: form._saveUrl,
             params: JSON.stringify(formData),
             method: 'POST',
         })
         .then(function(localJson) {
             if(localJson.success){
-                showToast('保存成功');
+                saas.util.BaseUtil.showToast('保存成功');
                 viewModel = form.getViewModel();
                 var url = form._readUrl;
-                form.BaseUtil.request({url })
+                saas.util.BaseUtil.request({url })
                 .then(function(res) {
                     if(res.success) {
                         var d = res.data;
@@ -59,7 +56,7 @@ Ext.define('saas.view.sys.config.FormPanelController', {
         })
         .catch(function(res) {
             console.error(res);
-            showToast('保存失败: ' + res.message);
+            saas.util.BaseUtil.showToast('保存失败: ' + res.message);
         });
     }
 

+ 1 - 1
frontend/saas-web/app/view/sys/feedback/FormPanelController.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.sys.feedback.FormPanelController', {
         });
     },
     onSubmit:function(){
-        showToast('提交成功!');
+        saas.util.BaseUtil.showToast('提交成功!');
         Ext.destroy(Ext.getCmp("feedbackWin"));
     },
     onClose:function(){

+ 7 - 9
frontend/saas-web/app/view/sys/finish/DataList.js

@@ -1,9 +1,7 @@
 Ext.define('saas.view.sys.finish.DataList', {
     extend: 'Ext.grid.Panel',
     xtype: 'sys-finish-datalist',
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    
     autoScroll: true,
     frame:true,
     layout:'fit',
@@ -21,20 +19,20 @@ Ext.define('saas.view.sys.finish.DataList', {
         listeners: {
             click:function(b){
                 var grid = b.ownerCt.ownerCt;
-                grid.BaseUtil.request({
+                saas.util.BaseUtil.request({
                     url: grid.endAccount,
                     params: '',
                     method: 'POST',
                 })
                 .then(function(localJson) {
                     if(localJson.success){
-                        showToast('结账成功');
+                        saas.util.BaseUtil.showToast('结账成功');
                         grid.store.loadPage(1);
                     }
                 })
                 .catch(function(res) {
                     console.error(res);
-                    showToast('结账失败: ' + res.message);
+                    saas.util.BaseUtil.showToast('结账失败: ' + res.message);
                 });
             }
         }
@@ -44,20 +42,20 @@ Ext.define('saas.view.sys.finish.DataList', {
         listeners: {
             click:function(b){
                 var grid = b.ownerCt.ownerCt;
-                grid.BaseUtil.request({
+                saas.util.BaseUtil.request({
                     url: grid.unEndAccount,
                     params: '',
                     method: 'POST',
                 })
                 .then(function(localJson) {
                     if(localJson.success){
-                        showToast('反结账成功');
+                        saas.util.BaseUtil.showToast('反结账成功');
                         grid.store.loadPage(1);
                     }
                 })
                 .catch(function(res) {
                     console.error(res);
-                    showToast('反结账失败: ' + res.message);
+                    saas.util.BaseUtil.showToast('反结账失败: ' + res.message);
                 });
             }
         }

+ 1 - 1
frontend/saas-web/app/view/sys/guide/FormPanel.js

@@ -230,7 +230,7 @@ Ext.define('saas.view.sys.guide.FormPanel', {
                         me.ownerCt.close();
                         return true;
                     }
-                    openTab(xtype, title, xtype+'_add');
+                    saas.util.BaseUtil.openTab(xtype, title, xtype+'_add');
                     scope.close();
                 }
             },{

+ 5 - 0
frontend/saas-web/app/view/sys/manager/FormPanel.js

@@ -38,6 +38,11 @@ Ext.define('saas.view.sys.manager.FormPanel', {
         iconCls:'x-fa fa-user-circle-o',
         title: '权限设置',
         xtype:'sys-power-formpanel'
+    },{
+        cls:'sys-config-formpanel',
+        iconCls:'x-fa fa-cog',
+        title: '参数设置',
+        xtype:'sys-baseconfig-formpanel'
     }],
 
     initComponent: function () {

+ 9 - 11
frontend/saas-web/app/view/sys/maxnumbers/DataList.js

@@ -9,9 +9,7 @@ Ext.define('saas.view.sys.maxnumbers.DataList', {
     autoScroll: true,
     frame:true,
     layout:'fit',
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    
     dataUrl:'/api/commons/number/list',                 
     deleteUrl:'/api/commons/number/delete/',
 
@@ -167,26 +165,26 @@ Ext.define('saas.view.sys.maxnumbers.DataList', {
         var grid = this;
         var data = grid.getGridSelected(type);
         if(!data){
-            showToast('请勾选符合条件的行进行操作。');
+            saas.util.BaseUtil.showToast('请勾选符合条件的行进行操作。');
             return false;
         }
         if(data&&data.length>0){
             var params = JSON.stringify({baseDTOs:data});
-            form.BaseUtil.request({
+            saas.util.BaseUtil.request({
                     url: url,
                     params: params,
                     method: 'POST',
                     async:false
                 })
                 .then(function() {
-                    showToast('操作成功');
+                    saas.util.BaseUtil.showToast('操作成功');
                     grid.store.load();
                 })
                 .catch(function(response) {
-                    showToast('操作失败');
+                    saas.util.BaseUtil.showToast('操作失败');
                 });
         }else{
-            showToast('请勾选至少一条明细。');
+            saas.util.BaseUtil.showToast('请勾选至少一条明细。');
         }
     },
 
@@ -223,19 +221,19 @@ Ext.define('saas.view.sys.maxnumbers.DataList', {
                 //删除
                 var id = record.get('id');
                 if(id){
-                    grid.BaseUtil.request({
+                    saas.util.BaseUtil.request({
                         url: grid.deleteUrl+id,
                         method: 'POST',
                     })
                     .then(function(localJson) {
                         if(localJson.success){
                             //解析参数
-                            showToast('删除成功');
+                            saas.util.BaseUtil.showToast('删除成功');
                             view.ownerCt.store.load();
                         }
                     })
                     .catch(function() {
-                        showToast('删除失败');
+                        saas.util.BaseUtil.showToast('删除失败');
                     });
                 }
             }

+ 4 - 7
frontend/saas-web/app/view/sys/power/FormPanelController.js

@@ -2,9 +2,6 @@ Ext.define('saas.view.sys.power.FormPanelController', {
     extend: 'Ext.app.ViewController',
     alias: 'controller.sys-power-formpanel',
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-    FormUtil: Ext.create('saas.util.FormUtil'),
-
     init: function (form) {
         var me = this;
         this.control({
@@ -47,23 +44,23 @@ Ext.define('saas.view.sys.power.FormPanelController', {
             })
             params.powerSetList = datas;
 
-            me.BaseUtil.request({
+            saas.util.BaseUtil.request({
                 url: form.saveUrl,
                 params: JSON.stringify(params),
                 method: 'POST',
             })
             .then(function(localJson) {
                 if(localJson.success){
-                    showToast('保存成功');
+                    saas.util.BaseUtil.showToast('保存成功');
                     viewModel.data.powergrid.load();
                 }
             })
             .catch(function(res) {
                 console.error(res);
-                showToast('保存失败: ' + res.message);
+                saas.util.BaseUtil.showToast('保存失败: ' + res.message);
             });
         }else{
-            showToast('没有修改数据,请修改后保存');
+            saas.util.BaseUtil.showToast('没有修改数据,请修改后保存');
         }
     },
 

+ 6 - 9
frontend/saas-web/app/view/sys/power/TreePanel.js

@@ -2,9 +2,6 @@ Ext.define('saas.view.sys.power.TreePanel', {
     extend: 'Ext.tree.Panel',
     xtype: 'sys-power-treepanel',
 
-    //工具类
-    FormUtil: Ext.create('saas.util.FormUtil'),
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
     dataUrl:'/api/account/role/list',
     deleteUrl:'/api/account/role/delete/',
 
@@ -171,7 +168,7 @@ Ext.define('saas.view.sys.power.TreePanel', {
                 var idField = form.down('[name='+belong.keyField+']');
                 params[belong.keyField] = idField.value || 0;
                 //保存接口
-                this.BaseUtil.request({
+                saas.util.BaseUtil.request({
                     url: idField.value?belong.updateUrl:belong.reqUrl,
                     params: JSON.stringify(params),
                     method: 'POST'
@@ -179,7 +176,7 @@ Ext.define('saas.view.sys.power.TreePanel', {
                 .then(function(localJson) {
                     me.setLoading(false);
                     if(localJson.success){
-                        showToast('保存成功');
+                        saas.util.BaseUtil.showToast('保存成功');
                         me._parent.setTree();
                         form.ownerCt.close();
                     }
@@ -187,7 +184,7 @@ Ext.define('saas.view.sys.power.TreePanel', {
                 .catch(function(res) {
                     me.setLoading(false);
                     console.error(res);
-                    showToast('保存失败: ' + res.message);
+                    saas.util.BaseUtil.showToast('保存失败: ' + res.message);
                 });
             }
         });
@@ -199,7 +196,7 @@ Ext.define('saas.view.sys.power.TreePanel', {
         }
         var me = this;
         me.setLoading(true);
-        me.BaseUtil.request({
+        saas.util.BaseUtil.request({
             url: me.deleteUrl + rec.get('id'),
             params: '',
             method: 'POST'
@@ -207,14 +204,14 @@ Ext.define('saas.view.sys.power.TreePanel', {
         .then(function(localJson) {
             me.setLoading(false);
             if(localJson.success){
-                showToast('删除成功');
+                saas.util.BaseUtil.showToast('删除成功');
                 me.setTree();
             }
         })
         .catch(function(res) {
             me.setLoading(false);
             console.error(res);
-            showToast('删除失败: ' + res.message);
+            saas.util.BaseUtil.showToast('删除失败: ' + res.message);
         });
     }
 });

+ 2 - 2
frontend/saas-web/app/view/viewport/ViewportController.js

@@ -142,7 +142,7 @@ Ext.define('saas.view.viewport.ViewportController', {
 
         view.mask();
         session.logout().catch(function(error) {
-            showToast(error.message);
+            saas.util.BaseUtil.showToast(error.message);
         }).then(function() {
             me.originalRoute = Ext.History.getToken();
             me.terminateSession();
@@ -164,7 +164,7 @@ Ext.define('saas.view.viewport.ViewportController', {
                     me.initiateSession(newSession);
                 })
                 .catch(function(error) {
-                    showToast(error.message);
+                    saas.util.BaseUtil.showToast(error.message);
                 })
                 .then(function() {
                     view.isMasked() && view.unmask();

+ 106 - 103
frontend/saas-web/overrides/i18n.js

@@ -1,112 +1,115 @@
-/**
- * 打开/切换到新页签
- * @param xtype: view xtype
- * @param title: 标题
- * @param id: id
- * @param config: 绑定到view的其他配置
- */
-function openTab(xtype, title, id, config) {
-    var mainTab = Ext.getCmp('main-tab-panel');
-    var panel = mainTab.query('[tabId="' + id + '"]')[0];
-    if(!panel) {
-        panel = Ext.create('saas.view.core.tab.Panel', {
-            tabId: id,
-            title: title,
-            viewType: xtype,
-            viewConfig: config
-        });
+// /**
+//  * 打开/切换到新页签
+//  * @param xtype: view xtype
+//  * @param title: 标题
+//  * @param id: id
+//  * @param config: 绑定到view的其他配置
+//  */
+// function openTab(xtype, title, id, config) {
+//     var mainTab = Ext.getCmp('main-tab-panel');
+//     var panel = mainTab.query('[tabId="' + id + '"]')[0];
+//     if(!panel) {
+//         panel = Ext.create('saas.view.core.tab.Panel', {
+//             tabId: id,
+//             title: title,
+//             viewType: xtype,
+//             viewConfig: config
+//         });
 
-        Ext.suspendLayouts();
-        mainTab.setActiveTab(mainTab.add(panel));
-        Ext.resumeLayouts(true);
-    }else {
-        panel.viewConfig = config;
-        mainTab.setActiveTab(panel);
-    }
-}
+//         Ext.suspendLayouts();
+//         mainTab.setActiveTab(mainTab.add(panel));
+//         Ext.resumeLayouts(true);
+//     }else {
+//         panel.viewConfig = config;
+//         mainTab.setActiveTab(panel);
+//     }
+// }
 
-/**
- * 重设tab标题
- */
-function refreshTabTitle(id, title) {
-    var currentTab = getCurrentTab();
-    currentTab.tabId = id;
-    currentTab.setTitle(title);
-}
+// /**
+//  * 重设tab标题
+//  */
+// function refreshTabTitle(id, title) {
+//     var currentTab = getCurrentTab();
+//     currentTab.tabId = id;
+//     currentTab.setTitle(title);
+// }
 
-/**
- * 获得当前Tab
- */
-function getCurrentTab() {
-    var mainTab = Ext.getCmp('main-tab-panel');
-    var currentTab = mainTab.getActiveTab();
+// /**
+//  * 获得当前Tab
+//  */
+// function getCurrentTab() {
+//     var mainTab = Ext.getCmp('main-tab-panel');
+//     var currentTab = mainTab.getActiveTab();
 
-    return currentTab;
-}
+//     return currentTab;
+// }
 
-/**
- * 显示toast提示(无需用户操作)
- * @param content: 内容
- * @param title: 标题
- * 
- */
-function showToast(content, title) {
-    Ext.toast({
-        html: content,
-        title: title,
-        closable: false,
-        align: 't',
-        slideDUration: 400,
-        maxWidth: 400
-    });
-}
+// /**
+//  * 显示toast提示(无需用户操作)
+//  * @param content: 内容
+//  * @param title: 标题
+//  * 
+//  */
+// function showToast(content, title) {
+//     Ext.toast({
+//         html: content,
+//         title: title,
+//         closable: false,
+//         align: 't',
+//         slideDUration: 400,
+//         maxWidth: 400
+//     });
+// }
 
-/**
- * 显示警告(需要选择是、否)
- * @param title: 标题
- * @param message: 内容
- * @return : Promise
- */
-function showConfirm(title, message) {
-    return new Ext.Promise(function (resolve, reject) {
-        Ext.MessageBox.confirm(title, message, function(buttonId) {
-            return resolve(buttonId);
-        });
-    })
-}
+// /**
+//  * 显示警告(需要选择是、否)
+//  * @param title: 标题
+//  * @param message: 内容
+//  * @return : Promise
+//  */
+// function showConfirm(title, message) {
+//     return new Ext.Promise(function (resolve, reject) {
+//         Ext.MessageBox.confirm(title, message, function(buttonId) {
+//             return resolve(buttonId);
+//         });
+//     })
+// }
 
-function warnMsg(msg, fn){
-	Ext.MessageBox.show({
-     	title: '提示',
-     	msg: msg,
-     	buttons: Ext.Msg.YESNO,
-     	icon: Ext.Msg.WARNING,
-     	fn: fn
-	});
-}
+// function warnMsg(msg, fn){
+// 	Ext.MessageBox.show({
+//      	title: '提示',
+//      	msg: msg,
+//      	buttons: Ext.Msg.YESNO,
+//      	icon: Ext.Msg.WARNING,
+//      	fn: fn
+// 	});
+// }
 
-function deleteWarn(msg, fn){
-	Ext.MessageBox.show({
-     	title: '提示',
-     	msg: msg || '确定要删除当前表单?',
-     	buttons: Ext.Msg.YESNO,
-     	icon: Ext.Msg.WARNING,
-         fn: fn,
-         renderTo: Ext.getCmp('main-tab-panel').getActiveTab().getEl()
-	});
-}
+// function deleteWarn(msg, fn){
+// 	Ext.MessageBox.show({
+//      	title: '提示',
+//      	msg: msg || '确定要删除当前表单?',
+//      	buttons: Ext.Msg.YESNO,
+//      	icon: Ext.Msg.WARNING,
+//          fn: fn,
+//          renderTo: Ext.getCmp('main-tab-panel').getActiveTab().getEl()
+// 	});
+// }
 
-/**
- * 判断字符串是否日期字符串
- * 需要满足格式 yyyy-MM-dd hh:mm:ss
- * 或者yyyy-M-d h:m:s
- * @param str: 字符串
- * @returns Boolean
- */
-function isDateString(str) {
-    return (/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/).test(str);
-}
-
-function getCurrentUse() {
-    return Ext.getCmp('mainView').getViewModel().get('account');
-}
+// /**
+//  * 判断字符串是否日期字符串
+//  * 需要满足格式 yyyy-MM-dd hh:mm:ss
+//  * 或者yyyy-M-d h:m:s
+//  * @param str: 字符串
+//  * @returns Boolean
+//  */
+// function isDateString(str) {
+//     return (/^(\d{4})-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/).test(str);
+// }
+// function getCurrentUse() {
+//     if(typeof saas == 'undefined') {
+//         return JSON.parse(window.localStorage["app-state-session"]).account;
+//     }else {
+//         return saas.util.State.get('session').account;
+//     }
+// }