Browse Source

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

heqinwei 7 years ago
parent
commit
aa92a96b63
84 changed files with 1337 additions and 224 deletions
  1. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersMapper.java
  2. 12 7
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  3. 13 0
      applications/commons/commons-server/src/main/resources/mapper/MaxnumbersMapper.xml
  4. 4 4
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Vendor.java
  5. 1 1
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendorList.java
  6. 1 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustomerkindController.java
  7. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/AddressMapper.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/CustomerkindMapper.java
  9. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/FundinouttypeMapper.java
  10. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  11. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  12. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  13. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/VendorkindMapper.java
  14. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/AddressService.java
  15. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustomerkindService.java
  16. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/FundinouttypeService.java
  17. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductbrandService.java
  18. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProducttypeService.java
  19. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductunitService.java
  20. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/VendorkindService.java
  21. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/AddressServiceImpl.java
  22. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerkindServiceImpl.java
  23. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/FundinouttypeServiceImpl.java
  24. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  25. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  26. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  27. 5 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorkindServiceImpl.java
  28. 1 1
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  29. 1 1
      applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml
  30. 1 1
      applications/document/document-server/src/main/resources/mapper/FundinouttypeMapper.xml
  31. 2 1
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  32. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  33. 1 1
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  34. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  35. 1 1
      applications/document/document-server/src/main/resources/mapper/VendorMapper.xml
  36. 1 1
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  37. 1 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  38. 1 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  39. 16 5
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/MakeMaterial.java
  40. 7 3
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  41. 1 1
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/ProdInOutServiceImpl.java
  42. 6 9
      applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml
  43. 1 1
      base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/cache/AccountCache.java
  44. 1 1
      base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/cache/ResourceCache.java
  45. 1 1
      base-servers/account/account-server/src/main/resources/application.yml
  46. 2 1
      base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java
  47. 1 1
      base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtHelper.java
  48. 21 12
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java
  49. 6 0
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/WebConfig.java
  50. 28 0
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/interceptor/ServiceFeignInterceptor.java
  51. 2 0
      base-servers/gateway-server/src/main/resources/application.yml
  52. 16 2
      framework/core/src/main/java/com/usoftchina/saas/cache/BaseRedisCache.java
  53. 2 1
      frontend/saas-web/app/model/document/productDTO.js
  54. 49 34
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  55. 49 34
      frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js
  56. 1 0
      frontend/saas-web/app/view/core/form/FormPanel.js
  57. 12 0
      frontend/saas-web/app/view/core/form/FormPanelController.js
  58. 27 17
      frontend/saas-web/app/view/core/form/field/DetailGridField.js
  59. 1 1
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  60. 453 0
      frontend/saas-web/app/view/core/report/ReportPanel.js
  61. 29 0
      frontend/saas-web/app/view/core/report/ReportPanelController.js
  62. 4 0
      frontend/saas-web/app/view/core/report/ReportPanelModel.js
  63. 1 1
      frontend/saas-web/app/view/document/bom/FormPanel.js
  64. 1 1
      frontend/saas-web/app/view/document/customer/FormPanel.js
  65. 3 1
      frontend/saas-web/app/view/document/kind/ChildForm.js
  66. 1 1
      frontend/saas-web/app/view/document/product/BasePanel.js
  67. 1 1
      frontend/saas-web/app/view/document/product/FormController.js
  68. 34 34
      frontend/saas-web/app/view/document/product/FormPanel.js
  69. 1 1
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  70. 8 0
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  71. 8 3
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  72. 94 0
      frontend/saas-web/app/view/purchase/report/Purchase.js
  73. 4 0
      frontend/saas-web/app/view/purchase/report/PurchaseController.js
  74. 4 0
      frontend/saas-web/app/view/purchase/report/PurchaseModel.js
  75. 66 0
      frontend/saas-web/app/view/sale/report/SaleIn.js
  76. 4 0
      frontend/saas-web/app/view/sale/report/SaleInController.js
  77. 4 0
      frontend/saas-web/app/view/sale/report/SaleInModel.js
  78. 0 8
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  79. 0 8
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  80. 0 8
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  81. 5 3
      frontend/saas-web/app/view/stock/make/FormPanel.js
  82. 252 4
      frontend/saas-web/app/view/stock/make/FormPanelController.js
  83. 1 1
      frontend/saas-web/app/view/sys/messagelog/DataList.js
  84. 6 2
      frontend/saas-web/resources/json/navigation.json

+ 2 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersMapper.java

@@ -33,4 +33,6 @@ public interface MaxnumbersMapper extends CommonBaseMapper<Maxnumbers>{
     int updateByPrimaryKey(Maxnumbers record);
 
     List<Maxnumbers> getListDataByCondition(@Param("condition") String condition, @Param("companyId") Long companyId);
+
+    Maxnumbers selectByCaller(@Param("caller")String caller, @Param("companyId") Long companyId);
 }

+ 12 - 7
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java

@@ -246,11 +246,8 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
     * @Date: 2018/10/19
     */
     private Maxnumbers getMaxnumbers(String caller) {
-        MaxnumbersExample example = new MaxnumbersExample();
-        MaxnumbersExample.Criteria cta = example.createCriteria();
-        cta.andCompanyIdEqualTo(BaseContextHolder.getCompanyId());
-        cta.andMn_callerEqualTo(caller);
-        return maxnumbersMapper.selectByExample(example);
+       Long companyId = BaseContextHolder.getCompanyId();
+        return maxnumbersMapper.selectByCaller(caller, companyId);
     }
     /**
     * @Description
@@ -280,8 +277,16 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
         String rulecode = maxnumbers.getMn_leadcode();
         String mn_rule = maxnumbers.getMn_rule();
         mn_rule = mn_rule == null ? "" : mn_rule.toUpperCase();
-        String date = "YYYYMM".equals(mn_rule) ? DateUtils.format(new Date(), "yyyyMM") :
-                DateUtils.format(new Date(), "yyyyMMdd");
+        String date = null;
+        if ("YYYYMM".equals(mn_rule)) {
+            date = DateUtils.format(new Date(), "yyyyMM");
+        } else if ("YYYYMMDD".equals(mn_rule)) {
+            date =  DateUtils.format(new Date(), "yyyyMMdd");
+        } else {
+            date = "";
+        }
+/*        String date = "YYYYMM".equals(mn_rule) ? DateUtils.format(new Date(), "yyyyMM") :
+                DateUtils.format(new Date(), "yyyyMMdd");*/
         return rulecode += date;
     }
 

+ 13 - 0
applications/commons/commons-server/src/main/resources/mapper/MaxnumbersMapper.xml

@@ -12,6 +12,7 @@
     <result column="creatorId" property="creatorId" jdbcType="INTEGER" />
     <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
     <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
+    <result column="mn_rule" property="mn_rule" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Example_Where_Clause" >
     <where >
@@ -292,4 +293,16 @@
         </where>
         ORDER BY MN_ID DESC
     </select>
+  <select id="selectByCaller" resultMap="BaseResultMap">
+    SELECT * FROM MAXNUMBERS
+    <where>
+      <if test="caller">
+        and mn_caller=#{caller}
+      </if>
+      <if test="companyId">
+        and COMPANYID=#{companyId}
+      </if>
+    </where>
+    ORDER BY MN_ID DESC
+  </select>
 </mapper>

+ 4 - 4
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Vendor.java

@@ -35,19 +35,19 @@ public class Vendor extends CommonBaseEntity implements Serializable{
     /**
      * 期初应付
      */
-    private long ve_beginapamount;
+    private Long ve_beginapamount;
     /**
      * 期初预付
      */
-    private long ve_beginprepayamount;
+    private Long ve_beginprepayamount;
     /**
      * 承付天数
      */
-    private long ve_promisedays;
+    private Long ve_promisedays;
     /**
      * 税率
      */
-    private double ve_taxrate;
+    private Double ve_taxrate;
     /**
      * 纳税人识别号
      */

+ 1 - 1
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendorList.java

@@ -111,7 +111,7 @@ public class VendorList implements Serializable {
 
     private String vc_name;
 
-    private Integer vc_tel;
+    private String vc_tel;
 
     private String vc_qq;
 

+ 1 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/CustomerkindController.java

@@ -31,7 +31,7 @@ public class CustomerkindController {
 
     @GetMapping("/list")
     public Result getAll(){
-        List<Customerkind> customerkindList = customerkindService.findAll();
+        List<Customerkind> customerkindList = customerkindService.selectAll();
         return Result.success(customerkindList);
     }
 

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

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

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

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

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

@@ -24,4 +24,6 @@ public interface FundinouttypeMapper extends CommonBaseMapper<Fundinouttype> {
     int selectCountByName(@Param("name") String name, @Param("companyId") Long companyId, @Param("id") Long id);
 
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
+
+    List<Fundinouttype> selectAll(@Param("companyId") Long companyId);
 }

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

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

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

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

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

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

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

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

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/AddressService.java

@@ -12,4 +12,6 @@ public interface AddressService extends CommonBaseService<AddressMapper, Address
     void removeByIds(String ids);
 
     List<ComboDTO> getCombo();
+
+    List<Address> selectAll();
 }

+ 1 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/CustomerkindService.java

@@ -11,4 +11,5 @@ public interface CustomerkindService extends CommonBaseService<CustomerkindMappe
 
     List<ComboDTO> getCombo();
 
+    List<Customerkind> selectAll();
 }

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/FundinouttypeService.java

@@ -4,6 +4,7 @@ import com.usoftchina.saas.base.service.CommonBaseService;
 import com.usoftchina.saas.commons.dto.ComboDTO;
 import com.usoftchina.saas.document.entities.Fundinouttype;
 import com.usoftchina.saas.document.mapper.FundinouttypeMapper;
+import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
@@ -11,4 +12,5 @@ public interface FundinouttypeService extends CommonBaseService<FundinouttypeMap
 
     List<ComboDTO> getCombo();
 
+    List<Fundinouttype> selectAll();
 }

+ 1 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductbrandService.java

@@ -11,4 +11,5 @@ public interface ProductbrandService extends CommonBaseService<ProductbrandMappe
 
     List<ComboDTO> getCombo();
 
+    List<Productbrand> selectAll();
 }

+ 1 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProducttypeService.java

@@ -11,4 +11,5 @@ public interface ProducttypeService extends CommonBaseService<ProducttypeMapper,
 
     List<ComboDTO> getCombo();
 
+    List<Producttype> selectAll();
 }

+ 1 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductunitService.java

@@ -11,4 +11,5 @@ public interface ProductunitService extends CommonBaseService<ProductunitMapper,
 
     List<ComboDTO> getCombo();
 
+    List<Productunit> selectAll();
 }

+ 1 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/VendorkindService.java

@@ -11,4 +11,5 @@ public interface VendorkindService extends CommonBaseService<VendorkindMapper, V
 
     List<ComboDTO> getCombo();
 
+    List<Vendorkind> selectAll();
 }

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

@@ -84,6 +84,11 @@ public class AddressServiceImpl extends CommonBaseServiceImpl<AddressMapper, Add
        return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
 
+    @Override
+    public List<Address> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
+
     private DocBaseDTO generateMsgObj(Long id){
         return new DocBaseDTO(id, "", "Address");
     }

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

@@ -81,6 +81,11 @@ public class CustomerkindServiceImpl extends CommonBaseServiceImpl<CustomerkindM
         return customerkindList;
     }
 
+    @Override
+    public List<Customerkind> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
+
     /**
      * 校验
      * @param name

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

@@ -89,4 +89,9 @@ public class FundinouttypeServiceImpl extends CommonBaseServiceImpl<Fundinouttyp
     public List<ComboDTO> getCombo() {
         return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
+
+    @Override
+    public List<Fundinouttype> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
 }

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

@@ -67,6 +67,11 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
         return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
 
+    @Override
+    public List<Productbrand> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
+
     /**
      * 校验
      * @param name

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

@@ -93,4 +93,9 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
     public List<ComboDTO> getCombo() {
         return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
+
+    @Override
+    public List<Producttype> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
 }

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

@@ -88,4 +88,9 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
     public List<ComboDTO> getCombo() {
         return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
+
+    @Override
+    public List<Productunit> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
 }

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

@@ -71,6 +71,11 @@ public class VendorkindServiceImpl extends CommonBaseServiceImpl<VendorkindMappe
         return getMapper().getCombo(BaseContextHolder.getCompanyId());
     }
 
+    @Override
+    public List<Vendorkind> selectAll() {
+        return getMapper().selectAll(BaseContextHolder.getCompanyId());
+    }
+
     /**
      * 校验
      * @param name

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

@@ -179,7 +179,7 @@
     where ad_id in (#{ids,jdbcType=VARCHAR})
   </delete>
   <select id="selectAll" resultMap="ResultMapWithBLOBs">
-    SELECT * FROM ADDRESS
+    SELECT * FROM ADDRESS where COMPANYID=#{companyId}
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT count(*) FROM ADDRESS

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

@@ -120,7 +120,7 @@
     where ck_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM CUSTOMERKIND
+    SELECT * FROM CUSTOMERKIND WHERE COMPANYID=#{companyId}
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
     SELECT ck_name display,ck_name value FROM CUSTOMERKIND WHERE COMPANYID=#{companyId}

+ 1 - 1
applications/document/document-server/src/main/resources/mapper/FundinouttypeMapper.xml

@@ -140,7 +140,7 @@
     where ft_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM FUNDINOUTTYPE
+    SELECT * FROM FUNDINOUTTYPE where companyId=#{companyId}
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT COUNT(*) FROM FUNDINOUTTYPE

+ 2 - 1
applications/document/document-server/src/main/resources/mapper/ProductMapper.xml

@@ -472,7 +472,7 @@
         <result column="pr_detail" property="rc_prodDetail" jdbcType="VARCHAR" />
         <result column="pr_unit" property="rc_prodUnit" jdbcType="VARCHAR" />
         <result column="wh_code" property="rc_whCode" jdbcType="VARCHAR" />
-        <result column="wh_name" property="rc_whName" jdbcType="VARCHAR" />
+        <result column="wh_description" property="rc_whName" jdbcType="VARCHAR" />
         <result column="pw_onhand" property="rc_number" jdbcType="DOUBLE" />
         <result column="pw_avprice" property="rc_price" jdbcType="DOUBLE" />
         <result column="pw_amount" property="rc_amount" jdbcType="DOUBLE" />
@@ -485,6 +485,7 @@
           </if>
           <if test="companyId!=null">
               and tab.companyId=#{companyId} and Product.companyId=#{companyId} and warehouse.companyId=#{companyId}
+              and pw_onhand!=0
           </if>
         </where>
         ORDER BY PR_ID DESC

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

@@ -126,7 +126,7 @@
     where pb_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTBRAND
+    SELECT * FROM PRODUCTBRAND where companyId = #{companyId}
   </select>
 
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">

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

@@ -126,7 +126,7 @@
     where pt_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTTYPE
+    SELECT * FROM PRODUCTTYPE where companyId=#{companyId}
   </select>
     <select id="selectCountByName" resultType="int">
         SELECT COUNT(*) FROM PRODUCTTYPE

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

@@ -120,7 +120,7 @@
     where pu_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTUNIT
+    SELECT * FROM PRODUCTUNIT where companyId=#{companyId}
   </select>
     <select id="selectCountByName" resultType="int">
         SELECT COUNT(*) FROM productunit

+ 1 - 1
applications/document/document-server/src/main/resources/mapper/VendorMapper.xml

@@ -81,7 +81,7 @@
         <result column="vc_veid" property="vc_veid" jdbcType="INTEGER" />
         <result column="vc_detno" property="vc_detno" jdbcType="INTEGER" />
         <result column="vc_name" property="vc_name" jdbcType="VARCHAR" />
-        <result column="vc_tel" property="vc_tel" jdbcType="INTEGER" />
+        <result column="vc_tel" property="vc_tel" jdbcType="VARCHAR" />
         <result column="vc_qq" property="vc_qq" jdbcType="VARCHAR" />
         <result column="vc_email" property="vc_email" jdbcType="VARCHAR" />
         <result column="vc_text1" property="vc_text1" jdbcType="VARCHAR" />

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

@@ -126,7 +126,7 @@
     where vk_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM VENDORKIND
+    SELECT * FROM VENDORKIND where companyId = #{companyId}
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
     SELECT VK_NAME display, VK_NAME value FROM VENDORKIND WHERE COMPANYID=#{companyId}

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

@@ -235,8 +235,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 id = baseDTO.getId();
             }
             singleAudit(formData.getMain());
+            baseDTO = getBaseDTOById(id,formData.getMain().getPi_class(),formData.getMain().getPi_inoutno());
         }
-        baseDTO.setId(id);
         return baseDTO;
     }
 

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

@@ -426,6 +426,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         targetPi.setPi_custname(sourcePi.getPi_custname());
         targetPi.setPi_said(sourcePi.getPi_said());
         targetPi.setPi_sacode(sourcePi.getPi_sacode());
+        targetPi.setPi_address(sourcePi.getPi_address());
         //保存数据
         getMapper().insertSelective(targetPi);
         //插入销售退货单从表

+ 16 - 5
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/MakeMaterial.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.storage.po;
 
 import com.usoftchina.saas.base.entity.CommonBaseEntity;
+import com.usoftchina.saas.document.dto.ProductDTO;
 import com.usoftchina.saas.document.entities.Product;
 
 import java.io.Serializable;
@@ -24,6 +25,8 @@ public class MakeMaterial extends CommonBaseEntity implements Serializable {
 
     private String mm_whcode;
 
+    private String mm_whname;
+
     private Double mm_price;
 
     private Double mm_oneuseqty;
@@ -36,14 +39,22 @@ public class MakeMaterial extends CommonBaseEntity implements Serializable {
 
     private String mm_remark;
 
-    private Product product;
+    private ProductDTO productDTO;
+
+    public String getMm_whname() {
+        return mm_whname;
+    }
+
+    public void setMm_whname(String mm_whname) {
+        this.mm_whname = mm_whname;
+    }
 
-    public Product getProduct() {
-        return product;
+    public ProductDTO getProductDTO() {
+        return productDTO;
     }
 
-    public void setProduct(Product product) {
-        this.product = product;
+    public void setProductDTO(ProductDTO productDTO) {
+        this.productDTO = productDTO;
     }
 
     public Long getMm_maid() {

+ 7 - 3
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java

@@ -89,7 +89,6 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                     makeMaterial.setCompanyId(BaseContextHolder.getCompanyId());
                     makeMaterial.setCreatorId(BaseContextHolder.getUserId());
                     makeMaterial.setCreateTime(new Date());
-
                 }
                 makeMaterialMapper.batchInsert(makeMaterialList);
             }
@@ -109,6 +108,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                 //更新从表
                 for (MakeMaterial makeMaterial : makeMaterialList) {
                     if (makeMaterial.getId() == 0) {
+                        makeMaterial.setMm_maid(make.getId());
                         makeMaterial.setCreatorId(BaseContextHolder.getUserId());
                         makeMaterial.setCreateTime(new Date());
                         makeMaterial.setCompanyId(BaseContextHolder.getCompanyId());
@@ -121,8 +121,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
                     }
                 }
                 //执行插入、更新
-                makeMaterialMapper.batchInsert(insertItems);
-                makeMaterialMapper.batchUpdate(updateItems);
+                if (insertItems.size() > 0) {
+                    makeMaterialMapper.batchInsert(insertItems);
+                }
+                if (updateItems.size() > 0) {
+                    makeMaterialMapper.batchUpdate(updateItems);
+                }
             }
             //记录LOG
             docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());

+ 1 - 1
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/ProdInOutServiceImpl.java

@@ -228,8 +228,8 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 id = baseDTO.getId();
             }
             singleAudit(formData.getMain());
+            baseDTO = getBaseDTOById(id,formData.getMain().getPi_class(),formData.getMain().getPi_inoutno());
         }
-        baseDTO.setId(id);
         return baseDTO;
     }
 

+ 6 - 9
applications/storage/storage-server/src/main/resources/mapper/MakematerialMapper.xml

@@ -18,7 +18,7 @@
     <result column="companyId" property="companyId" jdbcType="INTEGER" />
     <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
     <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
-    <association property="product" jdbcType="com.usoftchina.saas.document.entities.Product">
+    <association property="productDTO" javaType="com.usoftchina.saas.document.dto.ProductDTO">
         <id column="pr_id" property="id" jdbcType="INTEGER" />
         <result column="pr_code" property="pr_code" jdbcType="VARCHAR" />
         <result column="pr_detail" property="pr_detail" jdbcType="VARCHAR" />
@@ -43,14 +43,11 @@
         <result column="pr_recordman" property="pr_recordman" jdbcType="VARCHAR" />
         <result column="pr_status" property="pr_status" jdbcType="VARCHAR" />
         <result column="pr_statuscode" property="pr_statuscode" jdbcType="VARCHAR" />
-        <result column="companyId" property="companyId" jdbcType="INTEGER" />
-        <result column="updaterId" property="updaterId" jdbcType="INTEGER" />
         <result column="updateTime" property="updateTime" jdbcType="TIMESTAMP" />
         <result column="pr_text1" property="pr_text1" jdbcType="VARCHAR" />
         <result column="pr_text2" property="pr_text2" jdbcType="VARCHAR" />
         <result column="pr_text3" property="pr_text3" jdbcType="VARCHAR" />
         <result column="pr_text4" property="pr_text4" jdbcType="VARCHAR" />
-        <result column="pr_text5" property="pr_text5" jdbcType="VARCHAR" />
     </association>
   </resultMap>
   <sql id="Base_Column_List" >
@@ -249,18 +246,18 @@
     where mm_id = #{id}
   </update>
   <select id="selectByFK" resultMap="BaseResultMap">
-    SELECT * FROM MAKEMATERIAL LEFT JOIN PRODUCT ON PR_ID=MA_PRODID AND MAKEMATERIAL.COMPANYID=PRODUCT.COMPANYID WHERE MM_MAID=#{id} AND MAKEMATERIAL.COMPANYID={companyId}
+    SELECT * FROM MAKEMATERIAL LEFT JOIN PRODUCT ON PR_ID=MM_PRODID AND MAKEMATERIAL.COMPANYID=PRODUCT.COMPANYID WHERE MM_MAID=#{id} AND MAKEMATERIAL.COMPANYID=#{companyId}
   </select>
   <delete id="deleteByFK">
-    DELETE FROM MAKEMATERIAL WHERE MM_MAID=#{id} AND COMPANYID={companyId}
+    DELETE FROM MAKEMATERIAL WHERE MM_MAID=#{id} AND COMPANYID=#{companyId}
   </delete>
   <insert id="batchInsert" parameterType="java.util.List">
       INSERT INTO MAKEMATERIAL (mm_maid, mm_detno,
       mm_prodid, mm_prodcode, mm_whid,
-      mm_whcode, mm_price, mm_oneuseqty,
+      mm_whcode, mm_price, mm_oneuseqty
       mm_qty, mm_amount, mm_repprodcode,
       mm_remark, companyId, updaterId,
-      updateTime)
+      updateTime,mm_whname)
       VALUES
     <foreach collection="list" item="item" index="index" open="" close="" separator=",">
       (
@@ -269,7 +266,7 @@
       #{item.mm_whcode,jdbcType=VARCHAR}, #{item.mm_price,jdbcType=DOUBLE}, #{item.mm_oneuseqty,jdbcType=DOUBLE},
       #{item.mm_qty,jdbcType=DOUBLE}, #{item.mm_amount,jdbcType=DOUBLE}, #{item.mm_repprodcode,jdbcType=VARCHAR},
       #{item.mm_remark,jdbcType=VARCHAR}, #{item.companyId,jdbcType=INTEGER}, #{item.updaterId,jdbcType=INTEGER},
-      #{item.updateTime,jdbcType=TIMESTAMP}
+      #{item.updateTime,jdbcType=TIMESTAMP},#{item.mm_whname,jdbcType=VARCHAR}
       )
     </foreach>
   </insert>

+ 1 - 1
base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/cache/AccountCache.java

@@ -38,7 +38,7 @@ public class AccountCache extends RedisHashCache<String, String, String> {
 
     @Override
     protected String key() {
-        return generateKey("account", "account");
+        return generatePublicKey("account", "account");
     }
 
     @Override

+ 1 - 1
base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/cache/ResourceCache.java

@@ -40,7 +40,7 @@ public class ResourceCache extends RedisHashCache<String, String, String> {
 
     @Override
     protected String key() {
-        return generateKey("account", "resource");
+        return generatePublicKey("account", "resource");
     }
 
     @Override

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

@@ -50,7 +50,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: 8580
   tomcat:

+ 2 - 1
base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java

@@ -44,7 +44,8 @@ public class AuthRestInterceptor extends HandlerInterceptorAdapter {
                 BaseContextHolder.setUserId(infoFromToken.getUserId());
                 BaseContextHolder.setCompanyId(infoFromToken.getCompanyId());
                 BaseContextHolder.setToken(token);
-                log.info("token={} \\r\\n userName={}", token, infoFromToken.getUserName());
+                log.info("request={} token={} \\r\\n userName={}", request.getRequestURI(),
+                        token, infoFromToken.getUserName());
             }
         } else {
             // no mapping

+ 1 - 1
base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtHelper.java

@@ -95,8 +95,8 @@ public class JwtHelper {
         Claims body = claimsJws.getBody();
         return new JwtInfo(
                 ObjectUtils.getStringValue(body.get("appId")),
-                ObjectUtils.getLongValue(body.get("userId")),
                 ObjectUtils.getLongValue(body.get("companyId")),
+                ObjectUtils.getLongValue(body.get("userId")),
                 ObjectUtils.getStringValue(body.get("userName"))
         );
     }

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

@@ -6,6 +6,7 @@ import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.account.dto.UrlResourceDTO;
 import com.usoftchina.saas.auth.common.jwt.JwtHelper;
 import com.usoftchina.saas.auth.common.jwt.JwtInfo;
+import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.gateway.error.PermissionException;
@@ -40,17 +41,26 @@ public class AuthFilter implements GlobalFilter, Ordered {
 
     @Override
     public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-        if (!isIgnore(exchange.getRequest())) {
-            // 鉴别身份信息
-            JwtInfo jwt = getJwtInfoFromHeader(exchange.getRequest());
-            AccountDTO accountDTO = AccountCache.of(jwt.getUserId()).getAccount();
-            if (null == accountDTO) {
-                throw new BizException(ExceptionCode.USER_NOT_EXIST);
+        try {
+            if (!isIgnore(exchange.getRequest())) {
+                // 鉴别身份信息
+                String token = getAuthHeaderToken(exchange.getRequest());
+                JwtInfo jwt = JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
+                BaseContextHolder.setAppId(jwt.getAppId());
+                BaseContextHolder.setUserId(jwt.getUserId());
+                BaseContextHolder.setCompanyId(jwt.getCompanyId());
+                BaseContextHolder.setToken(token);
+                AccountDTO accountDTO = AccountCache.of(jwt.getUserId()).getAccount();
+                if (null == accountDTO) {
+                    throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                }
+                // 鉴别角色权限
+                checkPermission(exchange.getRequest(), jwt, accountDTO);
             }
-            // 鉴别角色权限
-            checkPermission(exchange.getRequest(), jwt, accountDTO);
+            return chain.filter(exchange);
+        } finally {
+            BaseContextHolder.remove();
         }
-        return chain.filter(exchange);
     }
 
     /**
@@ -97,7 +107,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
         return authConfig.getIgnores().stream().anyMatch(ignore -> ignore.equals(path));
     }
 
-    private JwtInfo getJwtInfoFromHeader(ServerHttpRequest request) {
+    private String getAuthHeaderToken(ServerHttpRequest request) {
         if (!request.getHeaders().containsKey(authConfig.getAuthHeader())) {
             throw new BizException(ExceptionCode.JWT_ILLEGAL_ARGUMENT);
         }
@@ -105,8 +115,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
         if (headers.isEmpty()) {
             throw new BizException(ExceptionCode.JWT_ILLEGAL_ARGUMENT);
         }
-        String token = headers.get(0).trim();
-        return JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
+        return headers.get(0).trim();
     }
 
     @Override

+ 6 - 0
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/WebConfig.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.gateway.config;
 
+import com.usoftchina.saas.gateway.interceptor.ServiceFeignInterceptor;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.HttpHeaders;
@@ -46,4 +47,9 @@ public class WebConfig {
             return chain.filter(ctx);
         };
     }
+	
+	@Bean
+    public ServiceFeignInterceptor serviceFeignInterceptor() {
+        return new ServiceFeignInterceptor();
+    }
 }

+ 28 - 0
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/interceptor/ServiceFeignInterceptor.java

@@ -0,0 +1,28 @@
+package com.usoftchina.saas.gateway.interceptor;
+
+import com.usoftchina.saas.gateway.config.AuthConfig;
+import com.usoftchina.saas.context.BaseContextHolder;
+import feign.RequestInterceptor;
+import feign.RequestTemplate;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * @author yingp
+ * @date 2018/10/2
+ */
+public class ServiceFeignInterceptor implements RequestInterceptor {
+    @Autowired
+    private AuthConfig authConfig;
+
+    public ServiceFeignInterceptor() {
+    }
+
+    @Override
+    public void apply(RequestTemplate requestTemplate) {
+        requestTemplate.header(authConfig.getAuthHeader(), BaseContextHolder.getToken());
+    }
+
+    public void setAuthConfig(AuthConfig authConfig) {
+        this.authConfig = authConfig;
+    }
+}

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

@@ -172,3 +172,5 @@ auth:
   public-key: auth/pub.key
   ignores:
     - /api/auth/authorize
+    - /api/account/account/register
+    - /api/account/company/register

+ 16 - 2
framework/core/src/main/java/com/usoftchina/saas/cache/BaseRedisCache.java

@@ -101,17 +101,31 @@ public abstract class BaseRedisCache<K, V> implements Cache<V> {
     }
 
     /**
-     * 产生key
+     * 产生key (每个应用会不一样)
      * 规则:[env profile]:[application name]:[business key]
      *
      * @param values
      * @return
      */
-    protected String generateKey(CharSequence... values) {
+    protected String generatePrivateKey(CharSequence... values) {
         return new StringJoiner(":")
                 .add(SpringContextHolder.getActiveProfile())
                 .add(SpringContextHolder.getApplicationName())
                 .add(String.join(":", values))
                 .toString();
     }
+
+    /**
+     * 产生key (所有应用一样)
+     * 规则:[env profile]:[business key]
+     *
+     * @param values
+     * @return
+     */
+    protected String generatePublicKey(CharSequence... values) {
+        return new StringJoiner(":")
+                .add(SpringContextHolder.getActiveProfile())
+                .add(String.join(":", values))
+                .toString();
+    }
 }

+ 2 - 1
frontend/saas-web/app/model/document/productDTO.js

@@ -3,6 +3,7 @@ Ext.define('saas.model.document.ProductDTO', {
     fields: [
         { name: 'pr_detail', type: 'string' },
         { name: 'pr_unit', type: 'string' },
-        { name: 'pr_spec', type: 'string' }
+        { name: 'pr_spec', type: 'string' },
+        { name: 'pr_zxbzs', type: 'float' }
     ]
 });

+ 49 - 34
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -104,7 +104,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                     method: 'GET',
                     success: function(response, opts) {
                         data = Ext.decode(response.responseText);
-                        data = data.data.list;
+                        data = data.data?data.data.list:[];
                         if(data!=null && data.length>0 && me.store && field.length>0){
                             me.store.loadData(data,false);
                             me.expand();
@@ -122,6 +122,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
     	}
     },
     onTriggerClick:function(f){
+        f.blur(f);
         //判断dbfindtrigger归属
         f.judge(f);//form
         var panel = f.up('core-tab-panel'),panelEl;
@@ -176,46 +177,60 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
         blur:function(f,e){
             var me = f;
             var count = f.store.getCount();
+            var searchCount = false;//校验数据库是否有该字段
             var dbfinds = me.dbfinds;
-            // if(count==1){
-            //     record = f.store.data.items[0];
-            //     if(dbfinds&&dbfinds.length>0){
-            //         if(me.belong=='grid'){
-            //             for (let index = 0; index < dbfinds.length; index++) {
-            //                 var item = dbfinds[index];
-            //                 var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
-            //                 var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
-            //                 nowRec.set(item.to,record.get(item.from));
-            //                 if(me.name==item.to){
-            //                     me.column.getEditor().setValue(record.get(item.from));
-            //                 }
-            //             }
-            //         }else if(me.belong=='form'){
-            //             for (let index = 0; index < dbfinds.length; index++) {
-            //                 var item = dbfinds[index];
-            //                 var field = me.ownerCt.down('[name='+item.to+']');
-            //                 if(field){
-            //                     var val = record.get(item.from);
-            //                     if(field.xtype=='dbfindtrigger'){
-            //                         field.setRawValue(val);
-            //                         field.value = val;
-            //                         field.lastTriggerValue=val;
-            //                     }else{
-            //                         field.setValue(val);
-            //                     }    
-            //                 }
-            //             }
-            //         }
-            //     }
-            // }else 
-            if(!f.value||f.value==''){
+            if(count>0){
+                //添加默认条件
+                var searchField = null;
+                var dbCondition = [];
+                if(me.defaultCondition) {
+                    dbCondition.push({
+                        type: 'condition',
+                        value: me.defaultCondition
+                    });
+                }
+                for (let index = 0; index < dbfinds.length; index++) {
+                    var item = dbfinds[index].to;
+                    if(item==me.name){
+                        searchField = dbfinds[index].from;
+                    }
+                }
+                dbCondition.push({
+                    type: 'condition',
+                    value: searchField + "='"+me.value+"'"
+                });
+                Ext.Ajax.request({
+                    url: me.dataUrl,
+                    async:false,
+                    params: {
+                        number: 1,
+                        size: 1,
+                        condition:JSON.stringify(dbCondition),
+                        page: 1,
+                        start: 0,
+                        limit: 10
+                    },
+                    method: 'GET',
+                    success: function(response, opts) {
+                        data = Ext.decode(response.responseText);
+                        data = data.data?data.data.list:[];
+                        if(data.length>0){
+                            searchCount = true
+                        }
+                    },
+                    failure: function(response, opts) {}
+                }); 
+            }
+            if(!f.value||f.value==''||count==0||!searchCount){
                 if(dbfinds&&dbfinds.length>0){
                     if(me.belong=='grid'){
                         for (let index = 0; index < dbfinds.length; index++) {
                             var item = dbfinds[index];
                             var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
                             var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
-                            nowRec.set(item.to,'');
+                            if(nowRec.get(item.to)&&nowRec.get(item.to)!=""){
+                                nowRec.set(item.to,'');
+                            }
                             if(me.name==item.to){
                                 me.column.getEditor().setValue('');
                             }

+ 49 - 34
frontend/saas-web/app/view/core/dbfind/MultiDbfindTrigger.js

@@ -111,7 +111,7 @@ Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
                     method: 'GET',
                     success: function(response, opts) {
                         data = Ext.decode(response.responseText);
-                        data = data.data.list;
+                        data = data.data?data.data.list:[];
                         if(data!=null && data.length>0 && me.store && field.length>0){
                             me.store.loadData(data,false);
                             me.expand();
@@ -129,6 +129,7 @@ Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
     	}
     },
     onTriggerClick:function(f){
+        f.blur(f);
         //判断dbfindtrigger归属
         f.judge(f);
         var panel = f.up('core-tab-panel'),panelEl;
@@ -170,46 +171,60 @@ Ext.define('saas.view.core.dbfind.MultiDbfindTrigger', {
         blur:function(f,e){
             var me = f;
             var count = f.store.getCount();
+            var searchCount = false;//校验数据库是否有该字段
             var dbfinds = me.dbfinds;
-            // if(count==1){
-            //     record = f.store.data.items[0];
-            //     if(dbfinds&&dbfinds.length>0){
-            //         if(me.belong=='grid'){
-            //             for (let index = 0; index < dbfinds.length; index++) {
-            //                 var item = dbfinds[index];
-            //                 var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
-            //                 var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
-            //                 nowRec.set(item.to,record.get(item.from));
-            //                 if(me.name==item.to){
-            //                     me.column.getEditor().setValue(record.get(item.from));
-            //                 }
-            //             }
-            //         }else if(me.belong=='form'){
-            //             for (let index = 0; index < dbfinds.length; index++) {
-            //                 var item = dbfinds[index];
-            //                 var field = me.ownerCt.down('[name='+item.to+']');
-            //                 if(field){
-            //                     var val = record.get(item.from);
-            //                     if(field.xtype=='dbfindtrigger'){
-            //                         field.setRawValue(val);
-            //                         field.value = val;
-            //                         field.lastTriggerValue=val;
-            //                     }else{
-            //                         field.setValue(val);
-            //                     }    
-            //                 }
-            //             }
-            //         }
-            //     }
-            // }else 
-            if(!f.value||f.value==''){
+            if(count>0){
+                //添加默认条件
+                var searchField = null;
+                var dbCondition = [];
+                if(me.defaultCondition) {
+                    dbCondition.push({
+                        type: 'condition',
+                        value: me.defaultCondition
+                    });
+                }
+                for (let index = 0; index < dbfinds.length; index++) {
+                    var item = dbfinds[index].to;
+                    if(item==me.name){
+                        searchField = dbfinds[index].from;
+                    }
+                }
+                dbCondition.push({
+                    type: 'condition',
+                    value: searchField + "='"+me.value+"'"
+                });
+                Ext.Ajax.request({
+                    url: me.dataUrl,
+                    async:false,
+                    params: {
+                        number: 1,
+                        size: 1,
+                        condition:JSON.stringify(dbCondition),
+                        page: 1,
+                        start: 0,
+                        limit: 10
+                    },
+                    method: 'GET',
+                    success: function(response, opts) {
+                        data = Ext.decode(response.responseText);
+                        data = data.data?data.data.list:[];
+                        if(data.length>0){
+                            searchCount = true
+                        }
+                    },
+                    failure: function(response, opts) {}
+                }); 
+            }
+            if(!f.value||f.value==''||count==0||!searchCount){
                 if(dbfinds&&dbfinds.length>0){
                     if(me.belong=='grid'){
                         for (let index = 0; index < dbfinds.length; index++) {
                             var item = dbfinds[index];
                             var rec = me.column.ownerCt.ownerCt.selModel.getLastSelected();
                             var nowRec = me.column.ownerCt.ownerCt.store.getData().getByKey(rec.id);
-                            nowRec.set(item.to,'');
+                            if(nowRec.get(item.to)&&nowRec.get(item.to)!=""){
+                                nowRec.set(item.to,'');
+                            }
                             if(me.name==item.to){
                                 me.column.getEditor().setValue('');
                             }

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

@@ -122,6 +122,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             width: 150,
             cls: 'x-codeeditor',
             hidden: true,
+            allowBlank: false,
             bind: {
                 value: '{' + me._codeField + '}',
                 hidden: '{!base.codeEditable}'

+ 12 - 0
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -123,6 +123,18 @@ Ext.define('saas.view.core.form.FormPanelController', {
         viewModel = me.getViewModel(),
         modelData = viewModel.getData();
 
+        var dirty = form.isDirty();
+
+        if(dirty) {
+            showConfirm('提示', '表单数据有修改,是否先保存修改?')
+            .then(function(yes) {
+                if(yes == 'yes') {
+                    me.onSave();
+                }
+            });
+            return;
+        }
+
         var valid = form.isValid();
 
         if(!valid) {

+ 27 - 17
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -224,6 +224,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         if(!me.editable) {
             return;
         }
+
         var detnoColumn = me.detnoColumn,
         store = me.getStore(),
         records = store.getData().items,
@@ -232,24 +233,33 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         });
 
         var id = selectedRecord.data.id;
-        if(id&&id!=0&&(typeof id) == 'number'){
-            me.BaseUtil.request({
-                url: me.deleteDetailUrl+id,
-                params: '',
-                method: 'POST',
-            })
-            .then(function() {
-                store.remove(selectedRecord);
-                me.fireEvent('validChange');
-                //解析参数
-                showToast('删除成功');
+
+        if(id&&id!=0&&(typeof id) == 'number') {
+            showConfirm('警告', '确定删除该条明细')
+            .then(function(yes) {
+                if(yes == 'yes') {
+                    me.BaseUtil.request({
+                        url: me.deleteDetailUrl+id,
+                        params: '',
+                        method: 'POST',
+                    })
+                    .then(function() {
+                        store.remove(selectedRecord);
+                        me.fireEvent('validChange');
+                        //解析参数
+                        showToast('删除成功');
+                    })
+                    .catch(function() {
+                        me.fireEvent('validChange');
+                        //失败
+                        showToast('删除失败');
+                    });
+                }else {
+                    throw new Error();
+                }
             })
-            .catch(function() {
-                me.fireEvent('validChange');
-                //失败
-                showToast('删除失败');
-            });
-        }else{
+            .catch()
+        }else {
             store.remove(selectedRecord);
             me.fireEvent('validChange');
         }

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

@@ -63,7 +63,7 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
                                 }
                             }else {
                                 console.error('exception: ', response.responseJson);
-                                showToast('exception:' + response.responseJson);
+                                showToast('请求错误:' + response.responseJson);
                             }
                         }
                     }

+ 453 - 0
frontend/saas-web/app/view/core/report/ReportPanel.js

@@ -0,0 +1,453 @@
+Ext.define('saas.view.core.report.ReportPanel', {
+    extend: 'Ext.panel.Panel',
+    xtype: 'core-report-reportpanel',
+
+    controller: 'core-report-reportpanel',
+    viewModel: 'core-report-reportpanel',
+
+    requires: [
+        'Ext.grid.plugin.Exporter'
+    ],
+
+    layout: 'vbox',
+    autoScroll: true,
+    border: 1,
+    bodyPadding: 5,
+
+    groupField: null, // 分组字段
+    listUrl: null, // 列表查询URL
+    defaultCondition: null, // 默认查询条件
+    searchItems: [], // 查询字段
+
+    initComponent: function() {
+        var me = this;
+
+        var store = me.initStore();
+
+        Ext.apply(me, {
+            items: [{
+                xtype: 'form',
+                width: '100%',
+                layout: 'column',
+                defaults:{
+                    margin: '0 5 5 0',
+                    labelAlign: 'right',
+                    labelWidth: 90,
+                    columnWidth: 0.25,
+                },
+                items: me.initSearchItems(),
+                dockedItems: [{
+                    xtype: 'toolbar',
+                    dock: 'bottom',
+                    items: ['->', {
+                        xtype: 'button',
+                        text: '查询',
+                        handler: 'onQuery'
+                    }, '->']
+                }]
+            }, {
+                xtype: 'grid',
+                width: '100%',
+                flex: 1,
+                border: 1,
+                plugins: {
+                    gridexporter: true
+                },
+                features: [{
+                    ftype: 'groupingsummary',
+                    hideGroupedHeader: false,
+                    enableGroupingMenu: false,
+                    collapsible: false
+                }, {
+                    ftype: 'summary',
+                    dock: 'bottom'
+                }],
+                store: store,
+                columns: me.initColumns(),
+                dockedItems: [{
+                    xtype: 'toolbar',
+                    dock: 'top',
+                    items: ['->', {
+                        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
+                                }
+                            }]
+                        }
+                    }]
+                }, {
+                    style: {
+                        'border-top': '1px solid #35baf6 !important'
+                    },
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: store
+                }],
+            }]
+        });
+
+        me.callParent(arguments);
+    },
+
+    getListGrid: function() {
+        var me = this,
+        grid = me.items.items[1];
+
+        return grid;
+    },
+
+    initStore: function() {
+        var me = this;
+        var store = Ext.create('Ext.data.Store', {
+            fields: me.getFields(),
+            autoLoad: true,
+            pageSize: 15,
+            data: [],
+            proxy: {
+                type: 'ajax',
+                url: me.listUrl,
+                timeout: 8000,
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total',
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                showToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response.responseJson);
+                            showToast('请求错误:' + response.responseJson);
+                        }
+                    }
+                }
+            },
+            listeners: {
+                beforeload: function (store, op) {
+                    condition = me.getConditions(),
+                    defaultCondition = me.defaultCondition;
+    
+                    if(defaultCondition) {
+                        condition.push({
+                            type: 'condition',
+                            value: defaultCondition
+                        });
+                    }
+                    Ext.apply(store.proxy.extraParams, {
+                        number: store.exportNumber?store.exportNumber:op._page,
+                        size: store.exportPageSize?store.exportPageSize:store.pageSize,
+                        mode: 'MAIN',
+                        condition: JSON.stringify(condition)
+                    });
+    
+                }
+            }
+        });
+
+        if(me.groupField) {
+            store.setGrouper({
+                property: me.groupField
+            });
+        }
+
+        return store;
+    },
+
+    getFields: function() {
+        var me = this;
+        return me.reportColumns.filter(function(c) {
+            return !!c.dataIndex;
+        }).map(function(c) {
+            return c.dataIndex;
+        });
+    },
+
+    initColumns: function() {
+        var me = this,
+        columns = me.reportColumns;
+
+        Ext.Array.each(columns, function(c) {
+            Ext.applyIf(c, {
+                width: 120
+            });
+
+            if(c.xtype == 'datecolumn') {
+                Ext.applyIf(c, {
+                    format: 'Y-m-d'
+                })
+            }
+        })
+
+        return columns;
+    },
+
+    initSearchItems: function() {
+        var me = this,
+        items = me.searchItems,
+        viewModel = me.getViewModel();
+
+        Ext.Array.each(items, function(item) {
+            var bind = item.bind,
+            name = item.name,
+            ignore = item.ignore,
+            defaultValue = item.defaultValue;
+
+            if(item.xtype == 'numberfield') {
+                Ext.applyIf(item, {
+                    hideTrigger: true, // 隐藏trigger
+                    mouseWheelEnabled: false // 取消滚轮事件
+                });
+            }
+            // 设置model绑定
+            if(!ignore) {
+                if(bind) {
+                    if(!Ext.isString(bind)) {
+                        bind = name;
+                        Ext.apply(bind, {
+                            value: '{form.' + bind + '}'
+                        });
+                    }else {
+                        bind = name;
+                        item.bind = '{form.' + bind + '}';
+                    }
+                }else {
+                    bind = name;
+                    item.bind = '{form.' + bind + '}';
+                }
+                // 设置默认值
+                if(defaultValue) {
+                    viewModel.set('form.' + bind, defaultValue);
+                }
+            }
+        });
+
+        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,
+        viewModel = me.getViewModel(),
+        viewModelData = viewModel.getData(),
+        bindItems = viewModelData['form'],
+        condition,
+        conditions = [];
+
+        for(k in bindItems) {
+            var item = Ext.Array.findBy(formItems, function(i) {
+                return i.name == k;
+            });
+            var field = item.name,
+            func = item.getCondition,
+            value = bindItems[k],
+            condition;
+
+            if(typeof func == 'function') {
+                condition = {
+                    type: 'condition',
+                    value: func(value)
+                }
+            }else {
+                var xtype = item.xtype || 'textfield',
+                type = item.fieldType || me.getDefaultFieldType(xtype),
+                operation = item.operation || me.getDefaultFieldOperation(xtype),
+                conditionValue = me.getConditionValue(xtype, value);
+    
+                if(!conditionValue) {
+                    continue;
+                }
+                condition = {
+                    type: type,
+                    field: field,
+                    operation: operation,
+                    value: conditionValue
+                }
+            }
+            conditions.push(condition);
+        }
+
+        return conditions;
+    },
+
+    getDefaultFieldType: function(xtype) {
+        var type;
+
+        if(Ext.Array.contains(['numberfield'], xtype)) {
+            type = 'number';
+        }else if(Ext.Array.contains(['datefield', 'condatefield'], xtype)) {
+            type = 'date';
+        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo', 'radiofield', 'radio'], xtype)) {
+            type = 'enum';
+        }else {
+            type = 'string';
+        }
+
+        return type;
+    },
+
+    getDefaultFieldOperation: function(xtype) {
+        var operation;
+
+        if(Ext.Array.contains(['numberfield'], xtype)) {
+            operation = '=';
+        }else if(Ext.Array.contains(['datefield'], xtype)) {
+            operation = '=';
+        }else if(Ext.Array.contains(['condatefield'], xtype)) {
+            operation = 'between';
+        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo'], xtype)) {
+            operation = 'in';
+        }else {
+            operation = 'like';
+        }
+
+        return operation;
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function(xtype, value) {
+        var conditionValue;
+        if(xtype == 'datefield') {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        }else if(xtype == 'condatefield') {
+            var from = value.from,
+            to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        }else if(xtype == 'combobox' || xtype == 'combo') {
+            conditionValue = '\'' + value + '\'';
+        }else if(xtype == 'multicombo') {
+            conditionValue = value.map(function(v) {
+                return '\'' + v.value + '\'';
+            }).join(',');
+        }else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    },
+});

+ 29 - 0
frontend/saas-web/app/view/core/report/ReportPanelController.js

@@ -0,0 +1,29 @@
+Ext.define('saas.view.core.report.ReportPanelController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.core-report-reportpanel',
+
+    requires: [
+        'Ext.exporter.text.CSV',
+        'Ext.exporter.text.TSV',
+        'Ext.exporter.text.Html',
+        'Ext.exporter.excel.Xml',
+        'Ext.exporter.excel.Xlsx'
+    ],
+
+    onQuery: function (btn) {
+        var me = this,
+        reportPanel = me.getView(),
+        grid = reportPanel.getListGrid();
+
+        grid.store.loadPage(1);
+    },
+
+    exportTo: function(btn){
+        var cfg = Ext.merge({
+            title: 'Grid export demo',
+            fileName: 'GridExport' + '.' + (btn.cfg.ext || btn.cfg.type)
+        }, btn.cfg);
+
+        this.getView().saveDocumentAs(cfg);
+    }
+});

+ 4 - 0
frontend/saas-web/app/view/core/report/ReportPanelModel.js

@@ -0,0 +1,4 @@
+Ext.define('saas.view.core.report.ReportPanelModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.core-report-reportpanel'
+});

+ 1 - 1
frontend/saas-web/app/view/document/bom/FormPanel.js

@@ -63,7 +63,7 @@ Ext.define('saas.view.document.bom.FormPanel', {
         xtype: 'textfield',
         name: 'bo_mothercode',
         fieldLabel: 'BOM编号',
-        allowBlank: true
+        allowBlank: false
     },{
         xtype: 'textfield',
         name: 'bo_status',

+ 1 - 1
frontend/saas-web/app/view/document/customer/FormPanel.js

@@ -38,7 +38,7 @@ Ext.define('saas.view.document.customer.FormPanel', {
         xtype: 'textfield',
         name: 'cu_code',
         fieldLabel: '客户编号',
-        allowBlank: true,
+        allowBlank: false,
         columnWidth: 0.25
     },{
         xtype : "remotecombo", 

+ 3 - 1
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -246,7 +246,8 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                     fields: ['display', 'value'],
                     data : [
                         {"display":"年月日", "value":'yyyymmdd'},
-                        {"display":"年月", "value":'yyyymm'}
+                        {"display":"年月", "value":'yyyymm'},
+                        {"display":"无", "value":'无'}
                     ]
                 }
             },{
@@ -254,6 +255,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 hideTrigger : true, 
                 fieldLabel: '流水长度',
                 name: 'mn_number',
+                minValue : 0, 
                 allowBlank:false
             }]
         }

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

@@ -59,7 +59,7 @@ Ext.define('saas.view.document.product.BasePanel', {
             dataIndex : "pr_detail", 
             width : 120.0, 
             xtype : "", 
-        }, 
+        },
         {
             text : "状态", 
             dataIndex : "pr_status", 

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

@@ -12,7 +12,7 @@ Ext.define('saas.view.document.product.FormController', {
                         dataUrl:'/api/document/vendor/getVendorsByCondition',
                         //赋值 
                         dbfinds:[{
-                            from:'id',to:'pr_vendid'
+                            from:'id',to:'pr_vendid',ignore:true
                         },{
                             from:'ve_code',to:'pr_vendcode'
                         },{

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

@@ -60,24 +60,25 @@ Ext.define('saas.view.document.product.FormPanel', {
         fieldLabel: '规格',
         allowBlank: false,
         columnWidth: 0.25
-    },{
+    },{  
         editable:false,
         xtype : "remotecombo", 
-        storeUrl:'/api/document/producttype/getCombo',
-        name : "pr_kind", 
-        fieldLabel : "物料类型", 
+        storeUrl:'/api/document/productunit/getCombo',
+        name : "pr_unit", 
+        fieldLabel : "单位", 
         allowBlank : false, 
         columnWidth : 0.25,
+        editable:false,
         addHandler:function(b){
             var document = Ext.create('saas.view.document.kind.Kind',{});
             var form = this.ownerCmp.ownerCt;
             this.dialog = form.getController().getView().add({
                 xtype: 'document-kind-childwin',
                 bind: {
-                    title: '新增物料类型'
+                    title: '新增物料单位'
                 },
-                dataKind:'productkind',
-                belong:document.etc['productkind'],
+                dataKind:'productunit',
+                belong:document.etc['productunit'],
                 _parent:form,
                 _combo:this.ownerCmp,
                 record:null,
@@ -86,30 +87,37 @@ Ext.define('saas.view.document.product.FormPanel', {
             this.dialog.show();
         }
     },{
-        xtype: 'textfield',
-        name: 'pr_orispeccode',
-        fieldLabel: '型号',
-        allowBlank: true,
-        columnWidth: 0.25
-    },{  
+        xtype : "dbfindtrigger",   
+        name : "pr_vendcode", 
+        bind : "{pr_vendcode}", 
+        fieldLabel : "供应商编号", 
+        allowBlank : true, 
+        columnWidth : 0.25, 
+    }, {
+        xtype : "textfield", 
+        name : "pr_vendname", 
+        bind : "{pr_vendname}", 
+        fieldLabel : "供应商名称", 
+        allowBlank : true, 
+        columnWidth : 0.25
+    },{
         editable:false,
         xtype : "remotecombo", 
-        storeUrl:'/api/document/productunit/getCombo',
-        name : "pr_unit", 
-        fieldLabel : "物料单位", 
+        storeUrl:'/api/document/producttype/getCombo',
+        name : "pr_kind", 
+        fieldLabel : "类型", 
         allowBlank : false, 
         columnWidth : 0.25,
-        editable:false,
         addHandler:function(b){
             var document = Ext.create('saas.view.document.kind.Kind',{});
             var form = this.ownerCmp.ownerCt;
             this.dialog = form.getController().getView().add({
                 xtype: 'document-kind-childwin',
                 bind: {
-                    title: '新增物料单位'
+                    title: '新增物料类型'
                 },
-                dataKind:'productunit',
-                belong:document.etc['productunit'],
+                dataKind:'productkind',
+                belong:document.etc['productkind'],
                 _parent:form,
                 _combo:this.ownerCmp,
                 record:null,
@@ -117,6 +125,12 @@ Ext.define('saas.view.document.product.FormPanel', {
             });
             this.dialog.show();
         }
+    },{
+        xtype: 'textfield',
+        name: 'pr_orispeccode',
+        fieldLabel: '型号',
+        allowBlank: true,
+        columnWidth: 0.25
     },{
         editable:false,
         xtype : "remotecombo", 
@@ -142,20 +156,6 @@ Ext.define('saas.view.document.product.FormPanel', {
             });
             this.dialog.show();
         }
-    },{
-        xtype : "dbfindtrigger",   
-        name : "pr_vendcode", 
-        bind : "{pr_vendcode}", 
-        fieldLabel : "供应商编号", 
-        allowBlank : true, 
-        columnWidth : 0.25, 
-    }, {
-        xtype : "textfield", 
-        name : "pr_vendname", 
-        bind : "{pr_vendname}", 
-        fieldLabel : "供应商名称", 
-        allowBlank : true, 
-        columnWidth : 0.25
     },{
         xtype : "hidden", 
         name : "pr_vendid", 

+ 1 - 1
frontend/saas-web/app/view/document/vendor/FormPanel.js

@@ -38,7 +38,7 @@ Ext.define('saas.view.document.vendor.FormPanel', {
         xtype: 'textfield',
         name: 've_code',
         fieldLabel: '供应商编号',
-        allowBlank: true,
+        allowBlank: false,
         columnWidth: 0.25
     },{
         xtype: 'hidden',

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

@@ -128,6 +128,14 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                     return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
                 }
             },
+            {
+                text : "最小包装数", 
+                dataIndex : "pr_zxbzs",
+                ignore:true,
+                renderer: function (v, m, r) {
+                    return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:v;
+                }
+            },            
             {
                 text : "数量", 
                 dataIndex : "pd_qty", 

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

@@ -221,10 +221,15 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
                     xtype : "numberfield",
                     decimalPrecision: 8,
                     minValue:0
-                },  
+                },
                 dataIndex : "pd_orderprice", 
-                width : 120.0, 
-                xtype : "numbercolumn"
+                width : 120.0,
+                renderer : function(v) {
+                    var arr = (v + '.').split('.');
+                    var xr = (new Array(arr[1].length)).fill('0');
+                    var format = '0,000.' + xr.join();
+                    return Ext.util.Format.number(v, format);
+                },
             },{
                 text : "税率", 
                 dataIndex : "pd_taxrate", 

+ 94 - 0
frontend/saas-web/app/view/purchase/report/Purchase.js

@@ -0,0 +1,94 @@
+Ext.define('saas.view.purchase.report.Purchase', {
+    extend: 'saas.view.core.report.ReportPanel',
+    xtype: 'purchase-report-purchase',
+
+    controller: 'purchase-report-purchase',
+    viewModel: 'purchase-report-purchase',
+
+    viewName: 'purchase-report-purchase',
+
+    groupField: null,
+    listUrl: '/api/purchase/purchase/list',
+    defaultCondition: null,
+
+    searchItems: [{
+        xtype: 'condatefield',
+        name: 'pu_date',
+        fieldLabel: '单据日期',
+        columnWidth: 0.5
+    }],
+
+    reportColumns: [{
+        text: 'id',
+        dataIndex: 'id',
+        hidden: true
+    }, {
+        text: '采购单号',
+        dataIndex: 'pu_code',
+        summaryType: 'count',
+        width: 200
+    }, {
+        text: '供应商编号',
+        dataIndex: 'PU_VENDCODE',
+        width: 200
+    }, {
+        text: '供应商名称',
+        dataIndex: 'PU_VENDNAME',
+        width: 200
+    }, {
+        text: '业务状态',
+        dataIndex: 'PU_STATUS'
+    }, {
+        text: '采购员',
+        dataIndex: 'PU_BUYERNAME'
+    }, {
+        text: '单据日期',
+        xtype: 'datecolumn',
+        dataIndex: 'pu_date'
+    }, {
+        text: '序号',
+        dataIndex: 'PD_DETNO'
+    }, {
+        text: '物料编号',
+        dataIndex: 'pr_code'
+    }, {
+        text: '物料名称',
+        dataIndex: 'pr_detail'
+    }, {
+        text: '物料规格',
+        dataIndex: 'pr_spec'
+    }, {
+        text: '品牌',
+        dataIndex: 'pr_brand'
+    }, {
+        text: '单位',
+        dataIndex: 'pr_unit'
+    }, {
+        text: '采购数量',
+        dataIndex: 'PD_QTY'
+    }, {
+        text: '单价',
+        dataIndex: 'PD_PRICE'
+    }, {
+        text: '税率',
+        dataIndex: 'PD_TAXRATE'
+    }, {
+        text: '金额',
+        dataIndex: 'PD_TOTAL'
+    }, {
+        text: '不含税单价',
+        dataIndex: 'rbd_remark'
+    }, {
+        text: '不含税金额',
+        dataIndex: 'PD_TAXPRICE'
+    }, {
+        text: '收货数量',
+        dataIndex: 'PD_YQTY'
+    }, {
+        text: '收货金额',
+        dataIndex: 'PD_TOTAL'
+    }, {
+        text: '备注'
+    }]
+
+});

+ 4 - 0
frontend/saas-web/app/view/purchase/report/PurchaseController.js

@@ -0,0 +1,4 @@
+Ext.define('saas.view.purchase.report.PurchaseController', {
+    extend: 'saas.view.core.report.ReportPanelController',
+    alias: 'controller.purchase-report-purchase'
+});

+ 4 - 0
frontend/saas-web/app/view/purchase/report/PurchaseModel.js

@@ -0,0 +1,4 @@
+Ext.define('saas.view.purchase.report.PurchaseModel', {
+    extend: 'saas.view.core.report.ReportPanelModel',
+    alias: 'viewmodel.purchase-report-purchase'
+});

+ 66 - 0
frontend/saas-web/app/view/sale/report/SaleIn.js

@@ -0,0 +1,66 @@
+Ext.define('saas.view.sale.report.SaleIn', {
+    extend: 'saas.view.core.report.ReportPanel',
+    xtype: 'sale-report-salein',
+
+    controller: 'sale-report-salein',
+    viewModel: 'sale-report-salein',
+
+    viewName: 'sale-report-salein',
+
+    groupField: 'rb_custname',
+    listUrl: '/api/money/recbalance/list',
+    defaultCondition: null,
+
+    searchItems: [{
+        xtype: 'condatefield',
+        name: 'rb_date',
+        fieldLabel: '日期',
+        columnWidth: 0.5
+    }],
+
+    reportColumns: [{
+        text: 'id',
+        dataIndex: 'id',
+        hidden: true
+    }, {
+        text: '收款单号',
+        dataIndex: 'rb_code',
+        summaryType: 'count',
+        width: 200
+    }, {
+        text: '客户编号',
+        dataIndex: 'rb_custcode',
+        width: 200
+    }, {
+        text: '客户名称',
+        dataIndex: 'rb_custname',
+        width: 200
+    }, {
+        text: '业务员',
+        dataIndex: 'rb_manname'
+    }, {
+        text: '日期',
+        dataIndex: 'rb_date',
+        xtype: 'datecolumn'
+    }, {
+        text: '来源单号',
+        dataIndex: 'rbd_slcode'
+    }, {
+        text: '类型',
+        dataIndex: 'rbd_slkind'
+    }, {
+        text: '销售金额',
+        dataIndex: 'rbd_amount'
+    }, {
+        text: '本次收款',
+        dataIndex: 'rbd_nowbalance'
+    }, {
+        text: '应收余额'
+    }, {
+        text: '回款比例'
+    }, {
+        text: '备注',
+        dataIndex: 'rbd_remark'
+    }]
+
+});

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

@@ -0,0 +1,4 @@
+Ext.define('saas.view.sale.report.SaleInController', {
+    extend: 'saas.view.core.report.ReportPanelController',
+    alias: 'controller.sale-report-salein'
+});

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

@@ -0,0 +1,4 @@
+Ext.define('saas.view.sale.report.SaleInModel', {
+    extend: 'saas.view.core.report.ReportPanelModel',
+    alias: 'viewmodel.sale-report-salein'
+});

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

@@ -184,10 +184,6 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                 text : "含税金额", 
                 dataIndex : "sd_total", 
                 width : 120.0,
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');
@@ -205,10 +201,6 @@ Ext.define('saas.view.sale.sale.FormPanel', {
             {
                 text : "未税金额", 
                 dataIndex : "sd_nettotal",
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');

+ 0 - 8
frontend/saas-web/app/view/sale/saleIn/FormPanel.js

@@ -174,10 +174,6 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                 text : "含税金额", 
                 dataIndex : "pd_ordertotal", 
                 width : 120.0, 
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');
@@ -205,10 +201,6 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
             {
                 text : "未税金额", 
                 dataIndex : "pd_nettotal", 
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');

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

@@ -185,10 +185,6 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
                 text : "含税金额", 
                 dataIndex : "pd_ordertotal", 
                 width : 120.0, 
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');
@@ -216,10 +212,6 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
             {
                 text : "未税金额", 
                 dataIndex : "pd_nettotal", 
-                editor : {
-                    xtype : "numberfield",
-                    decimalPrecision: 2
-                },
                 renderer : function(v) {
                     var arr = (v + '.').split('.');
                     var xr = (new Array(arr[1].length)).fill('0');

+ 5 - 3
frontend/saas-web/app/view/stock/make/FormPanel.js

@@ -46,7 +46,7 @@ Ext.define('saas.view.stock.make.FormPanel', {
         fieldLabel: '产品id',
         columnWidth: 0
     },{
-        xtype : "textfield", 
+        xtype : "dbfindtrigger", 
         name : "ma_prodcode", 
         fieldLabel : "产品编号",
         columnWidth: 0.2
@@ -103,12 +103,14 @@ Ext.define('saas.view.stock.make.FormPanel', {
             {
                 text : "id", 
                 dataIndex : "id", 
-                xtype : "numbercolumn"
+                xtype : "numbercolumn",
+                hidden:true
             },
             {
                 text : "mm_prodidid", 
                 dataIndex : "mm_prodid", 
-                xtype : "numbercolumn"
+                xtype : "numbercolumn",
+                hidden:true
             },
             {
                 text : "物料编号", 

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

@@ -67,9 +67,132 @@ Ext.define('saas.view.stock.make.FormPanelController', {
             //             }]
             //         }) ;   
             //     }
-            // },
-            //从表单选放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=mm_prodcode]':{
+
+            //放大镜赋值关系 以及 tpl模板
+            'dbfindtrigger[name=ma_whname]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'/api/document/warehouse/list',
+                        // dataUrl:'http://localhost:9480/warehouse/list',
+                        addXtype: 'other-warehouse',
+                        addTitle: '仓库资料',
+                        defaultCondition:"wh_statuscode='OPEN'",
+                        dbfinds:[{
+                            from:'id',to:'ma_whid',ignore:true                          
+                        },{
+                            from:'wh_code',to:'ma_whcode'                          
+                        },{
+                            from:'wh_description',to:'ma_whname'
+                        }],
+                        dbtpls:[{
+                            field:'pd_whcode',width:100
+                        },{
+                            field:'pd_whname',width:100
+                        }],
+                        dbSearchFields:[{
+                            emptyText:'输入仓库编号或名称',
+                            xtype : "textfield", 
+                            name : "wh_code", 
+                            allowBlank : true, 
+                            columnWidth : 0.25,
+                            getCondition:function(v){
+                                return "(upper(wh_code) like '%"+v.toUpperCase()+"%' or upper(wh_description) like '%"+v.toUpperCase()+"%')";
+                            }
+                        }],                        
+                        dbColumns:[{
+                            "text": "仓库ID",
+                            "flex": 0,
+                            "dataIndex": "id",
+                            "width": 0,
+                            "xtype": "",
+                            "items": null
+                        },{
+                            "text": "仓库编号",
+                            "flex": 1,
+                            "dataIndex": "wh_code",
+                            "width": 100,
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "仓库名称",
+                            "flex": 1,
+                            "dataIndex": "wh_description",
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "仓库类型",
+                            "flex": 1,
+                            "dataIndex": "wh_type",
+                            "xtype": "",
+                            "items": null
+                        }]
+                    }) ;   
+
+                }
+            },            
+            //放大镜赋值关系 以及 tpl模板
+            'dbfindtrigger[name=mm_whname]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        dataUrl:'/api/document/warehouse/list',
+                        // dataUrl:'http://localhost:9480/warehouse/list',
+                        addXtype: 'other-warehouse',
+                        addTitle: '仓库资料',
+                        defaultCondition:"wh_statuscode='OPEN'",
+                        dbfinds:[{
+                            from:'id',to:'mm_whid',ignore:true                          
+                        },{
+                            from:'wh_code',to:'mm_whcode'                          
+                        },{
+                            from:'wh_description',to:'mm_whname'
+                        }],
+                        dbtpls:[{
+                            field:'pd_whcode',width:100
+                        },{
+                            field:'pd_whname',width:100
+                        }],
+                        dbSearchFields:[{
+                            emptyText:'输入仓库编号或名称',
+                            xtype : "textfield", 
+                            name : "wh_code", 
+                            allowBlank : true, 
+                            columnWidth : 0.25,
+                            getCondition:function(v){
+                                return "(upper(wh_code) like '%"+v.toUpperCase()+"%' or upper(wh_description) like '%"+v.toUpperCase()+"%')";
+                            }
+                        }],                        
+                        dbColumns:[{
+                            "text": "仓库ID",
+                            "flex": 0,
+                            "dataIndex": "id",
+                            "width": 0,
+                            "xtype": "",
+                            "items": null
+                        },{
+                            "text": "仓库编号",
+                            "flex": 1,
+                            "dataIndex": "wh_code",
+                            "width": 100,
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "仓库名称",
+                            "flex": 1,
+                            "dataIndex": "wh_description",
+                            "xtype": "",
+                            "items": null
+                        }, {
+                            "text": "仓库类型",
+                            "flex": 1,
+                            "dataIndex": "wh_type",
+                            "xtype": "",
+                            "items": null
+                        }]
+                    }) ;   
+
+                }
+            },
+            'multidbfindtrigger[name=mm_prodcode]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         //数据接口
@@ -80,13 +203,21 @@ Ext.define('saas.view.stock.make.FormPanelController', {
                         dbfinds:[{
                             from:'pr_code',to:'mm_prodcode'
                         },{
-                            from:'pr_unit',to:'pd_unit'
+                            from:'id',to:'mm_prodid'
+                        },{
+                            from:'pr_detail',to:'pr_detail'
+                        },{
+                            from:'pr_spec',to:'pr_spec'
+                        },{
+                            from:'pr_unit',to:'pr_spec'
                         }],
                         //联想设置
                         dbtpls:[{
                             field:'pr_code',width:100
                         },{
                             field:'pr_detail',width:100
+                        },{
+                            field:'pr_spec',width:100
                         }],
                         defaultCondition:"pr_statuscode='OPEN'",
                         //窗口字段设置
@@ -167,6 +298,123 @@ Ext.define('saas.view.stock.make.FormPanelController', {
 
                 }
             },
+            'dbfindtrigger[name=ma_prodcode]':{
+                beforerender:function(f){
+                    Ext.apply(f,{
+                        //数据接口
+                        dataUrl:'/api/document/product/list',
+                        addXtype: 'document-product-formpanel',
+                        addTitle: '物料资料',
+                        //放大镜赋值设置
+                        dbfinds:[{
+                            from:'pr_code',to:'ma_prodcode'
+                        },{
+                            from:'id',to:'ma_prodid'
+                        },{
+                            from:'pr_detail',to:'ma_proddetail'
+                        },{
+                            from:'pr_spec',to:'ma_prodspec'
+                        },{
+                            from:'pr_unit',to:'ma_produnit'
+                        }],
+                        //联想设置
+                        dbtpls:[{
+                            field:'pr_code',width:100
+                        },{
+                            field:'pr_detail',width:100
+                        },{
+                            field:'pr_spec',width:100
+                        }],
+                        defaultCondition:"pr_statuscode='OPEN'",
+                        //窗口字段设置
+                        dbSearchFields:[{
+                            emptyText:'输入物料编号、名称或规格',
+                            xtype : "textfield", 
+                            name : "search", 
+                            width: 200,
+                            getCondition: function(v) {
+                                return "(upper(pr_spec) like '%" + v.toUpperCase()+"%' or upper(pr_code) like '%"+v.toUpperCase()+"%' or upper(pr_detail) like '%"+v.toUpperCase()+"%')";
+                            },
+                            allowBlank : true, 
+                            columnWidth : 0.25
+                        }],
+                        //窗口列设置
+                        dbColumns:[{
+                            "text": "物料ID",
+                            "hidden": true,
+                            "dataIndex": "id",
+                        }, {
+                            "text": "物料编号",       
+                            "dataIndex": "pr_code",
+                            "width": 200,
+                        }, {
+                            "text": "物料名称",
+                            "width": 200,
+                            "dataIndex": "pr_detail",
+                        }, {
+                            "text": "规格",
+                            "dataIndex": "pr_spec",
+                            "width": 100,
+                        }, {
+                            "text": "单位",
+                            "dataIndex": "pr_spec",
+                            "width": 100,
+                        },{
+                            "text": "仓库id",
+                            "dataIndex": "pr_whid",
+                            "hidden": true,
+                        },{
+                            "text": "仓库编号",
+                            "dataIndex": "pr_whcode",
+                            "hidden": true,
+                        },{
+                            "text": "仓库",
+                            "dataIndex": "pr_whname",
+                            "width": 200,
+                        },{
+                            "text": "总库存数",
+                            "dataIndex": "po_onhand",
+                            "width": 100,
+                        },{
+                            "text": "类型",
+                            "dataIndex": "pr_kind",
+                            "width": 100,
+                        },{
+                            "text": "型号",
+                            "dataIndex": "pr_orispeccode",
+                            "width": 100,
+                        },{
+                            "text": "品牌",
+                            "dataIndex": "pr_brand",
+                            "width": 100,
+                        },{
+                            "text": "供应商",
+                            "dataIndex": "pr_vendname",
+                            "width": 100,
+                        },{
+                            "text": "最小包装",
+                            "dataIndex": "pr_zxbzs",
+                            "width": 100,
+                        },{
+                            "text": "L/T",
+                            "dataIndex": "pr_leadtime",
+                            "width": 100,
+                        }]
+                    }) ;   
+
+                }
+            },
+
+
+
+
+
+
+
+
+
+
+
             //从表多选放大镜赋值关系 以及 tpl模板
             'multidbfindtrigger[name=pd_prodcode]':{
                 beforerender:function(f){

+ 1 - 1
frontend/saas-web/app/view/sys/messagelog/DataList.js

@@ -78,7 +78,7 @@ Ext.define('saas.view.sys.messagelog.DataList', {
         width : 120.0, 
     }, 
     {
-        text : "处理人", 
+        text : "操作人员", 
         dataIndex : "ml_man", 
         width : 200, 
     }],

+ 6 - 2
frontend/saas-web/resources/json/navigation.json

@@ -27,7 +27,9 @@
     }, {
         "text": "报表",
         "items": [{
-            "text": "采购明细表"
+            "id": "report-purchase",
+            "text": "采购明细表",
+            "viewType": "purchase-report-purchase"
         }, {
             "text": "采购付款一览表"
         }]
@@ -63,7 +65,9 @@
         "items": [{
             "text": "销售明细表"
         }, {
-            "text": "销售收款一览表"
+            "id": "report-salein",
+            "text": "销售收款一览表",
+            "viewType": "sale-report-salein"
         }, {
             "text": "销售利润表"
         }]