Browse Source

Merge remote-tracking branch 'origin/dev' into dev

heqinwei 7 years ago
parent
commit
ed46af2f2d
51 changed files with 302 additions and 88 deletions
  1. 5 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Operation.java
  2. 1 0
      applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties
  3. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java
  4. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java
  5. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  6. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  7. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java
  9. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java
  10. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  11. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  12. 13 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java
  13. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  14. 15 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  15. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  16. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  17. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  18. 12 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java
  19. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java
  20. 3 0
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  21. 3 0
      applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml
  22. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  23. 3 0
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  24. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  25. 3 0
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  26. 6 3
      frontend/saas-web/app/view/core/base/BasePanel.js
  27. 29 18
      frontend/saas-web/app/view/core/base/GridPanel.js
  28. 7 4
      frontend/saas-web/app/view/core/form/DataMultiCombo.js
  29. 1 1
      frontend/saas-web/app/view/core/form/FormPanel.js
  30. 30 1
      frontend/saas-web/app/view/core/form/FormPanelController.js
  31. 1 0
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  32. 3 0
      frontend/saas-web/app/view/document/customer/BasePanel.js
  33. 7 2
      frontend/saas-web/app/view/document/kind/ChildForm.js
  34. 2 1
      frontend/saas-web/app/view/document/product/FormModel.js
  35. 2 0
      frontend/saas-web/app/view/document/product/FormPanel.js
  36. 6 6
      frontend/saas-web/app/view/main/Main.js
  37. 31 22
      frontend/saas-web/app/view/main/Main.scss
  38. 0 1
      frontend/saas-web/app/view/main/MainController.js
  39. 1 1
      frontend/saas-web/app/view/money/fundtransfer/FormPanelController.js
  40. 3 0
      frontend/saas-web/app/view/money/othreceipts/FormPanelModel.js
  41. 3 0
      frontend/saas-web/app/view/money/othspendings/FormPanelModel.js
  42. 4 0
      frontend/saas-web/app/view/money/payBalance/FormPanelModel.js
  43. 3 0
      frontend/saas-web/app/view/purchase/purchase/FormPanelModel.js
  44. 10 8
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanelModel.js
  45. 4 3
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanelModel.js
  46. 4 0
      frontend/saas-web/app/view/sale/sale/FormPanelModel.js
  47. 4 0
      frontend/saas-web/app/view/sale/saleIn/FormPanelModel.js
  48. 4 0
      frontend/saas-web/app/view/sale/saleOut/FormPanelModel.js
  49. 3 2
      frontend/saas-web/app/view/stock/otherIn/FormPanelModel.js
  50. 3 2
      frontend/saas-web/app/view/stock/otherOut/FormPanelModel.js
  51. 3 3
      frontend/saas-web/app/view/sys/feedback/FormPanel.js

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

@@ -51,6 +51,11 @@ public enum Operation {
      */
     BANNED("msg.banned", "msg.bannedSuccess"),
 
+    /**
+     * 启用操作
+     */
+    ENABLE("msg.enable", "msg.enableSuccess"),
+
     /**
      * 记账
      */

+ 1 - 0
applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties

@@ -33,6 +33,7 @@ msg.resHungSuccess=\u89e3\u6302\u6210\u529f
 msg.checkSuccess=\u6838\u5bf9\u6210\u529f
 msg.printSuccess=\u6253\u5370\u6210\u529f
 msg.bannedSuccess=\u7981\u7528\u6210\u529f
+msg.enableSuccess=\u542f\u7528\u6210\u529f
 msg.resBannedSuccess=\u53cd\u7981\u7528\u6210\u529f
 msg.modifySuccess=\u6570\u636e\u66f4\u65b0\u6210\u529f
 msg.modifyDetailSuccess=\u66f4\u65b0\u660e\u7ec6\u6570\u636e\u6210\u529f

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java

@@ -30,4 +30,6 @@ public interface AddressMapper extends CommonBaseMapper<Address> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Address> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromPurchase(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java

@@ -25,4 +25,6 @@ public interface CustomerkindMapper extends CommonBaseMapper<Customerkind> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Customerkind> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromCustomer(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java

@@ -26,4 +26,6 @@ public interface ProductbrandMapper extends CommonBaseMapper<Productbrand> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Productbrand> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java

@@ -25,4 +25,6 @@ public interface ProducttypeMapper extends CommonBaseMapper<Producttype> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Producttype> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java

@@ -25,4 +25,6 @@ public interface ProductunitMapper extends CommonBaseMapper<Productunit> {
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
 
     List<Productunit> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromProduct(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java

@@ -26,4 +26,6 @@ public interface VendorkindMapper extends CommonBaseMapper<Vendorkind> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<Vendorkind> selectAll(@Param("companyId") Long companyId);
+
+    int getCountFromVendor(@Param("id") Long id, @Param("companyId") Long companyId);
 }

+ 13 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java

@@ -65,12 +65,25 @@ public class AddressServiceImpl extends CommonBaseServiceImpl<AddressMapper, Add
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            //校验是否有采购单使用了这个地址
+            validUse(id);
             addressMapper.deleteByPrimaryKey(id);
             messageLogService.delete(generateMsgObj(id));
         }
         return true;
     }
 
+    /**
+     * 校验采购地址是否已经被使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromPurchase(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 批量删除
      * @param ids

+ 3 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java

@@ -10,6 +10,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.entities.Bom;
@@ -200,7 +201,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             getMapper().updateByPrimaryKeySelective(bom);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -226,7 +227,7 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
                 getMapper().updateByPrimaryKeySelective(bom);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

+ 3 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java

@@ -10,6 +10,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.dto.CustomerDTO;
@@ -365,7 +366,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
         }
         return docBaseDTO;
     }
@@ -400,7 +401,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             getMapper().updateByPrimaryKeySelective(customer);
             docBaseDTO = getBaseDTOById(id);
             //日志
-        messageLogService.open(docBaseDTO);
+        messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
         }
         return docBaseDTO;
     }

+ 13 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java

@@ -60,12 +60,25 @@ public class CustomerkindServiceImpl extends CommonBaseServiceImpl<CustomerkindM
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            //查找客户资料里是否用了该客户类型
+            validUse(id);
             customerkindMapper.deleteByPrimaryKey(id);
             messageLogService.delete(generateMsgObj(id));
         }
         return true;
     }
 
+    /**
+     * 校验客户资料里是否已使用这个客户类型
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromCustomer(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

+ 3 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java

@@ -12,6 +12,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.dto.ProductDTO;
@@ -309,7 +310,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             getMapper().updateByPrimaryKeySelective(product);
             //记录LOG
             docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -336,7 +337,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 getMapper().updateByPrimaryKeySelective(product);
                 //记录LOG
                 docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }
         }else{

+ 15 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java

@@ -56,6 +56,10 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
 
     @Override
     public boolean removeByPrimaryKey(Long id){
+        if (id == null || id < 0){
+            throw new BizException(BizExceptionCode.ILLEGAL_ID);
+        }
+        validUse(id);
         productbrandMapper.deleteByPrimaryKey(id);
         //记录日志
         DocBaseDTO docBaseDTO = new DocBaseDTO(id, null, LOG_NAME);
@@ -63,6 +67,17 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
         return true;
     }
 
+    /**
+     * 校验物料品牌是否已经在使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     @Override
     public List<ComboDTO> getCombo() {
         return getMapper().getCombo(BaseContextHolder.getCompanyId());

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java

@@ -64,6 +64,7 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             producttypeMapper.deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -71,6 +72,17 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
         return true;
     }
 
+    /**
+     * 校验物料类型是否已经被物料资料所使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java

@@ -52,6 +52,7 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             getMapper().deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -59,6 +60,17 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
         return true;
     }
 
+    /**
+     * 校验物料单位是否已使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromProduct(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     @Override
     public List<Productunit> findAll(){
         List<Productunit> productunitList = getMapper().selectAll();

+ 3 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.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.dto.VendorDTO;
@@ -303,7 +304,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             getMapper().updateByPrimaryKeySelective(vendor);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -331,7 +332,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
                 getMapper().updateByPrimaryKeySelective(vendor);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

+ 12 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java

@@ -54,6 +54,7 @@ public class VendorkindServiceImpl extends CommonBaseServiceImpl<VendorkindMappe
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){
+            validUse(id);
             vendorkindMapper.deleteByPrimaryKey(id);
             //记录LOG
             messageLogService.delete(generateMsgObj(id));
@@ -61,6 +62,17 @@ public class VendorkindServiceImpl extends CommonBaseServiceImpl<VendorkindMappe
         return true;
     }
 
+    /**
+     * 校验供应商类型是否已被供应商资料使用
+     * @param id
+     */
+    private void validUse(Long id) {
+        int count = getMapper().getCountFromVendor(id, BaseContextHolder.getCompanyId());
+        if (count > 0){
+            throw new BizException(BizExceptionCode.BIZ_RELDELETE);
+        }
+    }
+
     /**
      * 构造 记录日志对象
      * @param id

+ 3 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/WarehouseServiceImpl.java

@@ -10,6 +10,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.entities.Warehouse;
@@ -180,7 +181,7 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
             getMapper().updateByPrimaryKeySelective(warehouse);
             //记录LOG
             DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-            messageLogService.close(docBaseDTO);
+            messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
             throw new BizException(BizExceptionCode.ILLEGAL_ID);
@@ -206,7 +207,7 @@ public class WarehouseServiceImpl extends CommonBaseServiceImpl<WarehouseMapper,
                 getMapper().updateByPrimaryKeySelective(warehouse);
                 //记录LOG
                 DocBaseDTO docBaseDTO = generateMsgObj(id, code);
-                messageLogService.open(docBaseDTO);
+                messageLogService.customizeLog(docBaseDTO, Operation.ENABLE);
                 return docBaseDTO;
             }else {
                 throw new BizException(BizExceptionCode.BIZ_OPEN);

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/AddressMapper.xml

@@ -198,4 +198,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT AD_ADDRESS display,AD_ADDRESS value FROM ADDRESS WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromPurchase" resultType="int">
+        SELECT COUNT(*) FROM PURCHASE WHERE PU_SHIPADDRESSCODE = (SELECT AD_ADDRESS FROM ADDRESS WHERE AD_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml

@@ -139,4 +139,7 @@
             </if>
         </where>
     </select>
+    <select id="getCountFromCustomer" resultType="int">
+        SELECT COUNT(*) FROM CUSTOMER WHERE CU_TYPE = (SELECT CK_NAME FROM CUSTOMERKIND WHERE CK_ID = #{id}) AND companyid = #{companyId};
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml

@@ -146,4 +146,7 @@
         </if>
     </where>
   </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_BRAND = (SELECT PB_NAME FROM PRODUCTBRAND WHERE PB_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml

@@ -145,4 +145,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT PT_NAME display,PT_NAME value FROM PRODUCTTYPE WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_KIND = (SELECT PT_NAME FROM PRODUCTTYPE WHERE PT_ID = #{id}) AND companyId=#{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml

@@ -139,4 +139,7 @@
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
         SELECT PU_NAME display,PU_NAME value FROM PRODUCTUNIT WHERE COMPANYID=#{companyId}
     </select>
+    <select id="getCountFromProduct" resultType="int">
+        SELECT COUNT(*) FROM PRODUCT WHERE PR_UNIT = (SELECT PU_NAME FROM PRODUCTUNIT WHERE PU_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 3 - 0
applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml

@@ -145,4 +145,7 @@
         </if>
     </where>
   </select>
+    <select id="getCountFromVendor" resultType="int">
+        SELECT COUNT(*) FROM VENDOR WHERE VE_TYPE = (SELECT VK_NAME FROM VENDORKIND WHERE VK_ID = #{id}) AND companyId = #{companyId}
+    </select>
 </mapper>

+ 6 - 3
frontend/saas-web/app/view/core/base/BasePanel.js

@@ -28,7 +28,8 @@ Ext.define('saas.view.core.base.BasePanel', {
     searchField:[],
     gridColumns: [],
 
-    _deleteMsg: '是否删除所选单据?',
+    deleteMoreMsg: '确认删除所选单据?',
+    deleteOneMsg: '确认删除该单据?',
 
     initComponent: function() {
 
@@ -38,7 +39,8 @@ Ext.define('saas.view.core.base.BasePanel', {
         gridIdField = gridConfig.idField,
         gridCodeField = gridConfig.codeField,
         gridStatusCodeField = gridConfig.statusCodeField,
-        gridColumns = gridConfig.columns;
+        gridColumns = gridConfig.columns,
+        deleteMsg = gridConfig.deleteMsg;
 
         Ext.apply(me, {
             dockedItems: [{
@@ -65,7 +67,8 @@ Ext.define('saas.view.core.base.BasePanel', {
                 idField: gridIdField,
                 codeField: gridCodeField,
                 columns: gridColumns,
-                statusCodeField : gridStatusCodeField
+                statusCodeField : gridStatusCodeField,
+                deleteMsg: deleteMsg
             }]
         });
         me.callParent(arguments);

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

@@ -123,11 +123,17 @@ Ext.define('saas.view.core.base.GridPanel', {
                         text: '删除',
                         handler: function(){
                             var form = this.ownerCt.ownerCt.ownerCt;
-                            saas.util.BaseUtil.deleteWarn(form._deleteMsg,function(btn){
-                                if(btn == 'yes'){
-                                    me.onVastDeal(form._batchDeleteUrl);
-                                }
-                            });
+
+                            var data = me.getGridSelected(form._batchDeleteUrl);
+                            if(data && data.length > 0) {
+                                saas.util.BaseUtil.deleteWarn(form.deleteMoreMsg,function(btn){
+                                    if(btn == 'yes'){
+                                        me.onVastDeal(form._batchDeleteUrl);
+                                    }
+                                });
+                            }else {
+                                saas.util.BaseUtil.showToast('请至少选择一条明细');
+                            }
                         }
                     }, {
                         text: '刷新',
@@ -199,20 +205,25 @@ Ext.define('saas.view.core.base.GridPanel', {
                 //删除
                 var id = record.get('id');
                 if(id){
-                    saas.util.BaseUtil.request({
-                        url: form._deleteUrl+id,
-                        method: 'POST',
-                    })
-                    .then(function(localJson) {
-                        if(localJson.success){
-                            //解析参数
-                            saas.util.BaseUtil.showToast('删除成功');
-                            view.ownerCt.store.load();
+                    saas.util.BaseUtil.showConfirm('警告', form.deleteOneMsg)
+                    .then(function(yes) {
+                        if(yes == 'yes') {
+                            saas.util.BaseUtil.request({
+                                url: form._deleteUrl+id,
+                                method: 'POST',
+                            })
+                            .then(function(localJson) {
+                                if(localJson.success){
+                                    //解析参数
+                                    saas.util.BaseUtil.showToast('删除成功');
+                                    view.ownerCt.store.load();
+                                }
+                            })
+                            .catch(function(res) {
+                                console.error(res);
+                                saas.util.BaseUtil.showToast('删除失败: ' + res.message);
+                            });
                         }
-                    })
-                    .catch(function(res) {
-                        console.error(res);
-                        saas.util.BaseUtil.showToast('删除失败: ' + res.message);
                     });
                 }
             }

+ 7 - 4
frontend/saas-web/app/view/core/form/DataMultiCombo.js

@@ -123,9 +123,10 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
     setValue: function(items) {
         var me = this, rawV = '',
         datas = me.datas,
-        menu = me.menu;
+        menu = me.menu,
+        items = items==null?[]:items;
         if(!Ext.isArray(items)) {
-            if(items.indexOf(',')>0){
+            if(items&&items.indexOf(',')>0){
                 items = items.split(',')
             }else{
                 items = [items]
@@ -183,8 +184,10 @@ Ext.define('saas.view.core.form.DataMultiCombo', {
     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();
+            if(target){
+                if(!((target.className && target.className.indexOf('x-menu')!=-1) || (target.name && target.name.indexOf(this.name)!=-1))){
+                    this.menu.hide();
+                }
             }
         }
         return this;

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

@@ -100,7 +100,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text:'打印',
             hidden: true,
             bind: {
-                // hidden: '{!id}'
+                hidden: '{!showPrintBtn || !id}'
             },
             handler:"onPrint"
         }, {

+ 30 - 1
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -368,6 +368,35 @@ Ext.define('saas.view.core.form.FormPanelController', {
     },
 
     onPrint: function() {
-        console.log('print');
+        var me = this,
+        form = me.getView(),
+        viewModel = me.getViewModel(),
+        caller = form.caller,
+        id = viewModel.get(form._idField);
+
+        saas.util.BaseUtil.request({
+            url: '/api/commons/jasperReport/printByDefault',
+            // url: 'http://192.168.253.58:8920/jasperReport/printByDefault',
+            method: 'POST',
+            headers: {
+                "Content-Type": 'application/x-www-form-urlencoded;charset=UTF-8'
+            },
+            params: {
+                caller: caller,
+                id: id
+            }
+        }).then(function(res) {
+            var data = res.data,
+            printurl = data.printurl,
+            printtype = data.printtype,
+            reportName = data.reportName,
+            title = data.title,
+            whereCondition = data.whereCondition,
+            companyId = saas.util.BaseUtil.getCurrentUser().companyId;
+
+            var url = printurl + '?' + 'reportName=' + reportName + '&' + 'companyId=' + companyId + '&whereCondition=' + whereCondition
+
+            window.open(url);
+        });
     },
 });

+ 1 - 0
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -11,6 +11,7 @@ Ext.define('saas.view.core.form.FormPanelModel', {
             codeEditable: false, // 单据编号是否可编辑
         },
         auditBtnText: '审核', // 审核按钮默认text
+        showPrintBtn: false, // 显示打印按钮
         showAuditBtn: true, // 显示审核、反审核按钮
         detailBindeFields: [], // 从表绑定列
         detailStore: null, // 从表store

+ 3 - 0
frontend/saas-web/app/view/document/customer/BasePanel.js

@@ -5,6 +5,9 @@ Ext.define('saas.view.document.customer.BasePanel', {
     controller: 'document-customer-basepanel',
     viewModel: 'document-customer-basepanel',
 
+    deleteMoreMsg: '删除的客户资料将不能恢复,请确认是否删除?',
+    deleteOneMsg: '删除的客户资料将不能恢复,请确认是否删除?',
+
     searchField:[{
         xtype:'customerDbfindTrigger',
         name : "cu_code", 

+ 7 - 2
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -229,8 +229,9 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 dataUrl:'/api/account/role/list',
                 fieldLabel: '关联角色',
                 name: 'roleNames',
-                allowBlank:false,
-                maxLength: 20
+                allowBlank:true,
+                maxLength: 20,
+                beforeLabelTextTpl: "",
             },{
                 xtype:'textfield',
                 fieldLabel: '联系电话',
@@ -464,6 +465,10 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
         });
         o = o.substring(0,o.length-1);
 
+        if(o==""){
+            saas.util.BaseUtil.showToast('关联角色未选择,无法保存!')
+        }
+
         var _params = {
             accountId:Number(params['accountId']),
             roleIds:o,

+ 2 - 1
frontend/saas-web/app/view/document/product/FormModel.js

@@ -18,7 +18,8 @@ Ext.define('saas.view.document.product.FormModel', {
             get: function(v) {
                 var form = this.getView(),
                 detailGrid = form.down('detailGridField');
-                
+                //detailGrid.allowEmpty = !v;
+                //form.isValid();
                 form.getForm().findField('qcsz').resetOriginalValue();
                 detailGrid.setHidden(!v);
             }

+ 2 - 0
frontend/saas-web/app/view/document/product/FormPanel.js

@@ -372,6 +372,8 @@ Ext.define('saas.view.document.product.FormPanel', {
             trueData = detailGrid.getTrueData();
 
             viewModel.set('qcsz', trueData.length > 0);
+            viewModel.notify();
+            form.getForm().findField('qcsz').resetOriginalValue();
         }
     }
 });

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

@@ -74,25 +74,25 @@ Ext.define('saas.view.main.Main', {
                         cls:'x-main-menu',
                         items: [{
                             text: '新手导航',
-                            iconCls:'x-fa fa-comment-o',
+                            iconCls:'x-fa fa-comment-o sa-navicon',
                             handler:function(){
                                saas.util.BaseUtil.openTab('sys-guide-formpanel','新手导航', 'sys-guide-formpanel-nav');
                             }
                         },{
                             text: '用户手册',
-                            iconCls:'x-fa fa-comment-o',
+                            iconCls:'x-fa fa-address-book-o sa-navicon',
                             handler:function(){
                                 window.open('http://www.usoftchina.com','_blank');
                             }
                         },{
                             text: '常见问题',
-                            iconCls:'x-fa fa-question-circle-o',
+                            iconCls:'x-fa fa-question-circle-o sa-navicon',
                             handler:function(){
                                 window.open('http://www.usoftchina.com','_blank');
                             }
                         },{
                             text: '客服热线',
-                            iconCls:'x-fa fa-comment-o',
+                            iconCls:'x-fa fa-comment-o sa-navicon',
                             menu:{
                                 items:[{
                                     text:'<span onclick="javascript:window.open(\'http://www.usoftchina.com\');" style="text-decoration:underline;color:blue;">优软科技官网</span>'
@@ -130,13 +130,13 @@ Ext.define('saas.view.main.Main', {
                         cls:'x-main-menu2',
                         items: [ {  
                             text: '账户中心',
-                            iconCls:'x-fa x-fa fa-user-o',
+                            iconCls:'x-fa fa-user-o sa-navicon',
                             handler:function(){
                                 window.open('http://www.usoftchina.com','_blank');
                             }
                         },{  
                             text: '意见反馈',
-                            iconCls:'x-fa fa-comment-o',
+                            iconCls:'x-fa fa-comment-o sa-navicon',
                             handler:'feedbackMsg'
                         }, {
                             text: '退出',

+ 31 - 22
frontend/saas-web/app/view/main/Main.scss

@@ -223,40 +223,49 @@ body > .x-mask {
 }
  .x-main-menu{
     background: #f8fbff;
-    border: 2px solid #34baf6;
+    border: 1px solid #34baf6;
+    margin-top: 10px;
  }
- .x-main-menu .x-menu-item-text-default{
-    font-family: PingFangSC-Regular;
+ .x-main-menu .x-menu-item-text-default {
+    //font-family: PingFangSC-Regular;
     //font-size: 14px;
     color: #34BAF6;
     letter-spacing: 0;
     text-align: center;
  }
+ .x-menu.x-main-menu .x-menu-bodyWrap{
+    margin-left: -0.5px;
+ }
+.x-main-menu .x-fa.sa-navicon{
+    color: #34BAF6;
+} 
+.x-main-menu .x-menu-item-text-default.x-menu-item.x-menu-item-default-focus,
+.x-main-menu .x-menu-item-text-default.x-menu-item.x-menu-item-active{
+    color: white;
+}
+.x-main-menu .x-fa.sa-navicon.x-menu-item-default-focus,
+.x-main-menu .x-fa.sa-navicon.x-menu-item-active{
+    color: #34BAF6;
+} 
 .x-main-menu::before{
     content: ' ';
     display: block;
     border-style: solid;
-    background-color: white;
+    background-color: #f8fbff;
     transform: rotate(45deg);
-    box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(15, 136, 232, 0.6);
-    box-shadow: aliceblue;
-    border-width: 2px;
-    border-color: #34BAF6;
-    /* border-color: #cccccc #6e838e #9c9d9e #bdc3c5; */
+    border-color: #34baf6;
     position: fixed;
-    width: 14px;
-    height: 14px;
-    /* left: 100%; */
-    top: 25px;
-    -moz-clip-path: polygon(100% 0px, 0 50%, 100% 100%);
-    /* -webkit-clip-path: polygon(100% 0px, 0 50%, 100% 100%); */
-    -o-clip-path: polygon(100% 0px, 0 50%, 100% 100%);
-    -ms-clip-path: polygon(100% 0px, 0 50%, 100% 100%);
-    -khtml-clip-path: polygon(100% 0px, 0 50%, 100% 100%);
-    clip-path: polygon(0% 0,100% 0%,0 100%);
-    margin-top: 17px;
-    margin-left: 7px;
-    z-index: 99;
+    width: 15px;
+    height: 15px;
+    clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    -moz-clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    -webkit-clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    -o-clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    -ms-clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    -khtml-clip-path: polygon(0% 0, 100% 0%, 0 100%);
+    border-width: 1px 0px 0px 1px !important;
+    margin-top: -7.5px;
+    margin-left: 16px;
 }
 .x-main-menu2::before{
     content: ' ';

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

@@ -127,7 +127,6 @@ Ext.define('saas.view.main.MainController', {
                 constrain: true,
                 closable: true,
                 layout: 'fit',
-
                 items: [{
                     xtype: 'sys-feedback-formpanel'
                 }]

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

@@ -32,7 +32,7 @@ Ext.define('saas.view.money.fundtransfer.FormPanelController', {
                         },{
                             from:'id',to:'ftd_inbankid',ignore:true
                         },{
-                            from:'bk_inthisamount',to:'bk_inthisamount'
+                            from:'bk_thisamount',to:'bk_inthisamount'
                         }],
                     }) ;   
 

+ 3 - 0
frontend/saas-web/app/view/money/othreceipts/FormPanelModel.js

@@ -2,4 +2,7 @@ Ext.define('saas.view.money.othreceipts.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-othreceipts-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
 });

+ 3 - 0
frontend/saas-web/app/view/money/othspendings/FormPanelModel.js

@@ -2,4 +2,7 @@ Ext.define('saas.view.money.othspendings.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-othspendings-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
 });

+ 4 - 0
frontend/saas-web/app/view/money/payBalance/FormPanelModel.js

@@ -2,6 +2,10 @@ Ext.define('saas.view.money.payBalance.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-paybalance-formpanel',
 
+    data: {
+        showPrintBtn: true
+    },
+    
     formulas: {
         pb_vendname_change: {
             bind: '{pb_vendid}',

+ 3 - 0
frontend/saas-web/app/view/purchase/purchase/FormPanelModel.js

@@ -2,6 +2,9 @@ Ext.define('saas.view.purchase.purchase.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchase-formpanel',
 
+    data: {
+        showPrintBtn: true
+    },
 
     formulas:{
         turnHidden:{

+ 10 - 8
frontend/saas-web/app/view/purchase/purchaseIn/FormPanelModel.js

@@ -1,15 +1,17 @@
 Ext.define('saas.view.purchase.purchaseIn.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchasein-formpanel',
-    
+
     data: {
-        pi_class: '采购验收单'
-     },
-     formulas:{
-        turnHidden:{
-            bind:'{pi_statuscode}',
-            get:function(value){
-                return value!='AUDITED';
+        pi_class: '采购验收单',
+        showPrintBtn: true
+    },
+
+    formulas: {
+        turnHidden: {
+            bind: '{pi_statuscode}',
+            get: function (value) {
+                return value != 'AUDITED';
             }
         }
     }

+ 4 - 3
frontend/saas-web/app/view/purchase/purchaseOut/FormPanelModel.js

@@ -1,8 +1,9 @@
 Ext.define('saas.view.purchase.purchaseOut.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.purchase-purchaseout-formpanel',
-    
+
     data: {
-        pi_class: '采购验退单'
-     }
+        pi_class: '采购验退单',
+        showPrintBtn: true
+    }
 });

+ 4 - 0
frontend/saas-web/app/view/sale/sale/FormPanelModel.js

@@ -1,4 +1,8 @@
 Ext.define('saas.view.sale.sale.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-sale-formpanel',
+
+    data: {
+        showPrintBtn: true
+    }
 });

+ 4 - 0
frontend/saas-web/app/view/sale/saleIn/FormPanelModel.js

@@ -1,4 +1,8 @@
 Ext.define('saas.view.sale.saleIn.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-salein-formpanel',
+
+    data: {
+        showPrintBtn: true
+    }
 });

+ 4 - 0
frontend/saas-web/app/view/sale/saleOut/FormPanelModel.js

@@ -2,4 +2,8 @@ Ext.define('saas.view.sale.saleout.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.sale-saleout-formpanel',
 
+    data: {
+        showPrintBtn: true
+    }
+
 });

+ 3 - 2
frontend/saas-web/app/view/stock/otherIn/FormPanelModel.js

@@ -3,6 +3,7 @@ Ext.define('saas.view.stock.otherIn.FormPanelModel', {
     alias: 'viewmodel.stock-otherin-formpanel',
     
     data: {
-        pi_class: '其它入库单'
-     }
+        pi_class: '其它入库单',
+        showPrintBtn: true
+    }
 });

+ 3 - 2
frontend/saas-web/app/view/stock/otherOut/FormPanelModel.js

@@ -3,6 +3,7 @@ Ext.define('saas.view.stock.otherOut.FormPanelModel', {
     alias: 'viewmodel.stock-otherout-formpanel',
     
     data: {
-        pi_class: '其它出库单'
-     }
+        pi_class: '其它出库单',
+        showPrintBtn: true
+    }
 });

+ 3 - 3
frontend/saas-web/app/view/sys/feedback/FormPanel.js

@@ -31,12 +31,12 @@ Ext.define('saas.view.sys.feedback.FormPanel', {
         name : "fb_name", 
         fieldLabel : "姓名",
         readOnly:true,
-        defaultVale:saas.util.BaseUtil.getCurrentUser() ? saas.util.BaseUtil.getCurrentUser().realname:null
+       defaultVale:saas.util.BaseUtil.getCurrentUser() ? saas.util.BaseUtil.getCurrentUser().realname:null
     }, {
         xtype : "textfield", 
         name : "fb_mobile", 
         fieldLabel : "手机号",
-        defaultVale:saas.util.BaseUtil.getCurrentUser() ? saas.util.BaseUtil.getCurrentUser().mobile:null
+       defaultVale:saas.util.BaseUtil.getCurrentUser() ? saas.util.BaseUtil.getCurrentUser().mobile:null
     }, {
         xtype : "textfield", 
         name : "fb_QQ", 
@@ -46,7 +46,7 @@ Ext.define('saas.view.sys.feedback.FormPanel', {
         name : "fb_wechat", 
         fieldLabel : "微信"
     }, {
-        xtype : "html", 
+        xtype : "htmleditor", 
         name : "fb_msg", 
         fieldLabel : "反馈内容",
         flex: 1