Browse Source

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

rainco 7 years ago
parent
commit
d2b4a95075
47 changed files with 419 additions and 80 deletions
  1. 4 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/CommonServiceImpl.java
  3. 1 0
      applications/commons/commons-server/src/main/resources/i18n/messages_zh_CN.properties
  4. 8 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductMapper.java
  5. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductbrandMapper.java
  6. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProducttypeMapper.java
  7. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductunitMapper.java
  8. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductbrandService.java
  9. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProducttypeService.java
  10. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductunitService.java
  11. 70 5
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  12. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductbrandServiceImpl.java
  13. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProducttypeServiceImpl.java
  14. 10 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductunitServiceImpl.java
  15. 12 0
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  16. 4 0
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  17. 3 0
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  18. 3 0
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  19. 1 1
      applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml
  20. 4 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java
  21. 3 1
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  22. 2 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/ProdInOutMapper.java
  23. 3 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  24. 2 2
      applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml
  25. 44 7
      frontend/saas-portal-web/package-lock.json
  26. 1 0
      frontend/saas-portal-web/package.json
  27. 92 15
      frontend/saas-portal-web/src/components/conenter/company.vue
  28. 8 3
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  29. 4 0
      frontend/saas-portal-web/src/pages/index/index.js
  30. 2 1
      frontend/saas-portal-web/src/store/index.js
  31. 62 18
      frontend/saas-portal-web/static/css/gongsi.css
  32. 3 0
      frontend/saas-portal-web/static/css/main.css
  33. BIN
      frontend/saas-portal-web/static/img/shezhi.png
  34. 9 2
      frontend/saas-web/app/view/core/form/FormPanel.js
  35. 5 2
      frontend/saas-web/app/view/core/form/FormPanelController.js
  36. 4 0
      frontend/saas-web/app/view/core/report/ReportPanel.js
  37. 6 6
      frontend/saas-web/app/view/document/customer/FormPanel.js
  38. 3 3
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  39. 1 1
      frontend/saas-web/app/view/money/report/AccountBalance.js
  40. 1 1
      frontend/saas-web/app/view/money/report/OtherIODetail.js
  41. 1 1
      frontend/saas-web/app/view/money/report/PayDetail.js
  42. 1 1
      frontend/saas-web/app/view/money/report/RecDetail.js
  43. 5 1
      frontend/saas-web/app/view/money/verification/FormPanelController.js
  44. 1 1
      frontend/saas-web/app/view/purchase/report/PurchasePay.js
  45. 1 1
      frontend/saas-web/app/view/sale/report/SaleRec.js
  46. 1 1
      frontend/saas-web/app/view/stock/report/Prodiodetail.js
  47. 1 1
      frontend/saas-web/app/view/viewport/ViewportController.js

+ 4 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -41,6 +41,10 @@ public enum BizExceptionCode implements BaseExceptionCode {
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
+    PRODUCT_HASSTOCK(79401, "当前物料库存大于0,不允许禁用"),
+    PRODUCT_EXISTS_PRODIO(79402, "存在未审核出入库单据使用了当前物料"),
+    PRODUCT_EXISTS_SALE(79403, "存在未关闭且状态非已出库销售订单使用了当前物料"),
+    PRODUCT_EXISTS_PURCHASE(79404, "存在未关闭且状态非已入库采购订单使用了当前物料"),
 
     BOM_SAVE(79401, "产品编号+版本号已存在"),
     BOM_CODE_REPEAT(74002, "组合件和子件不允许相同"),

+ 1 - 1
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/CommonServiceImpl.java

@@ -32,7 +32,7 @@ public class CommonServiceImpl implements CommonService {
         if (count > 0){
             result.setProduct(true);
         }
-        count = commonMapper.getCountProduct(companyId);
+        count = commonMapper.getCountCustomer(companyId);
         if (count > 0){
             result.setCustomer(true);
         }

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

@@ -2,6 +2,7 @@
 msg.detail=  \u660e\u7ec6\u884c:
 msg.save=\u4fdd\u5b58\u64cd\u4f5c 
 msg.delete=\u5220\u9664\u64cd\u4f5c
+msg.deleteDetail=\u5220\u9664\u660e\u7ec6
 msg.update=\u4fee\u6539\u64cd\u4f5c
 msg.commit=\u63d0\u4ea4\u64cd\u4f5c
 msg.resCommit=\u53cd\u63d0\u4ea4\u64cd\u4f5c

+ 8 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductMapper.java

@@ -54,4 +54,12 @@ public interface ProductMapper extends CommonBaseMapper<Product> {
     List<ProductReserveCostDTO> selectReserveCostByIgnoreWarehouse(@Param("con") String con, @Param("companyId") Long companyId);
 
     String selectCalculateFields(@Param("fields") String fields, @Param("con") String con, @Param("companyId") Long companyId);
+
+    int selectStockById(Long id);
+
+    int selectProdIOCount(Long id);
+
+    int selectSale(Long id);
+
+    int selectPurchase(Long id);
 }

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

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

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

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

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

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

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

@@ -15,4 +15,6 @@ public interface ProductbrandService extends CommonBaseService<ProductbrandMappe
     List<Productbrand> selectAll();
 
     DocBaseDTO saveData(Productbrand productbrand);
+
+    Productbrand getComboByName(String name);
 }

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

@@ -15,4 +15,6 @@ public interface ProducttypeService extends CommonBaseService<ProducttypeMapper,
     List<Producttype> selectAll();
 
     DocBaseDTO saveData(Producttype producttype);
+
+    Producttype getTypeByName(String name);
 }

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

@@ -15,4 +15,6 @@ public interface ProductunitService extends CommonBaseService<ProductunitMapper,
     List<Productunit> selectAll();
 
     DocBaseDTO saveData(Productunit productunit);
+
+    Productunit getComboByName(String name);
 }

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

@@ -26,8 +26,7 @@ import com.usoftchina.saas.document.mapper.DataImportMapper;
 import com.usoftchina.saas.document.mapper.ProductDetailMapper;
 import com.usoftchina.saas.document.mapper.ProductMapper;
 import com.usoftchina.saas.document.mapper.WarehouseMapper;
-import com.usoftchina.saas.document.service.ProductService;
-import com.usoftchina.saas.document.service.WarehouseService;
+import com.usoftchina.saas.document.service.*;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.CollectionUtils;
@@ -55,6 +54,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     private DataImportMapper dataImportMapper;
     @Autowired
     private WarehouseMapper warehouseMapper;
+    @Autowired
+    private ProductbrandService productbrandService;
+    @Autowired
+    private ProductunitService productunitService;
+    @Autowired
+    private ProducttypeService producttypeService;
 
     @Override
     public PageInfo<ProductDTO> getProductsByCondition(PageRequest page, ListReqDTO listReqDTO) {
@@ -336,6 +341,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!Status.ENABLE.getDisplay().equals(product.getPr_status())){
                 throw new BizException(BizExceptionCode.BIZ_BANNED);
             }
+            beforeClose(id);
             product.setPr_status(Status.BANNED.getDisplay());
             product.setPr_statuscode(Status.BANNED.name());
             product.setUpdaterId(BaseContextHolder.getUserId());
@@ -350,6 +356,33 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         }
     }
 
+    /**
+     * 物料禁用前校验
+     * @param id
+     */
+    private void beforeClose(Long id){
+        //1.库存大于0
+        int count = getMapper().selectStockById(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_HASSTOCK);
+        }
+        //2.存在未审核出入库单据
+        count = getMapper().selectProdIOCount(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PRODIO);
+        }
+        //3.存在未关闭且状态非已出库销售订单
+        count = getMapper().selectSale(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_SALE);
+        }
+        //4.存在未关闭且状态非已入库采购订单
+        count = getMapper().selectPurchase(id);
+        if (count > 0){
+            throw new BizException(BizExceptionCode.PRODUCT_EXISTS_PURCHASE);
+        }
+    }
+
     @Override
     public DocBaseDTO open(Long id) {
         DocBaseDTO docBaseDTO = null;
@@ -576,6 +609,9 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         if (!CollectionUtils.isEmpty(details)) {
             Map<String, List<DataImportDetail>> datas = CollectionUtils.groupBy(details, DataImportDetail::getDd_codevalue);
             Integer detno = null;
+            String brand = null;
+            String unit = null;
+            String kind = null;
             for (String code : datas.keySet()) {
                 listDTO = new ProductListDTO();
                 List<ProductDetail> productDetails = new ArrayList<>();
@@ -588,13 +624,42 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 if (!StringUtils.isEmpty(product.getPr_whcode())) {
                     warehouse = warehouseMapper.selectWareHouse(product.getPr_whcode(), companyId);
                     if (null == warehouse) {
-                        err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在,请确认数据是否正确");
+                        err.append("物料编号为: " + product.getPr_code() + " 的物料仓库: "+ product.getPr_whname() +" 在系统中不存在");
                         break;
                     }
                     product.setPr_whid(warehouse.getId());
-                    product.setPr_status(Status.ENABLE.getDisplay());
-                    product.setPr_statuscode(Status.ENABLE.name());
+                    product.setPr_whname(warehouse.getWh_description());
+                }
+                //验证品牌
+                brand = product.getPr_brand();
+                if (!StringUtils.isEmpty(brand)) {
+                    Productbrand pr_brand = productbrandService.getComboByName(brand);
+                    if (null == pr_brand) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的品牌: "+ product.getPr_brand() +" 在系统中不存在");
+                        break;
+                    }
+                }
+                //验证单位
+                unit = product.getPr_unit();
+                if (!StringUtils.isEmpty(unit)) {
+                    Productunit pr_unit = productunitService.getComboByName(unit);
+                    if (null == pr_unit) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的单位: "+ product.getPr_unit() +" 在系统中不存在");
+                        break;
+                    }
+                }
+                //验证类型
+                kind = product.getPr_kind();
+                if (!StringUtils.isEmpty(kind)) {
+                    Producttype pr_kind = producttypeService.getTypeByName(kind);
+                    if (null == pr_kind) {
+                        err.append("物料编号为: " + product.getPr_code() + " 的类型: "+ product.getPr_kind() +" 在系统中不存在");
+                        break;
+                    }
                 }
+                product.setPr_status(Status.ENABLE.getDisplay());
+                product.setPr_statuscode(Status.ENABLE.name());
+
                 //编号不存在
                 if (i == 0) {
                     product.setId(0l);

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Productbrand;
 import com.usoftchina.saas.document.mapper.ProductbrandMapper;
 import com.usoftchina.saas.document.service.ProductbrandService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -55,6 +56,15 @@ public class ProductbrandServiceImpl extends CommonBaseServiceImpl<ProductbrandM
         return docBaseDTO;
     }
 
+    @Override
+    public Productbrand getComboByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Productbrand brand = productbrandMapper.getComboByName(name, BaseContextHolder.getCompanyId());
+        return brand;
+    }
+
     @Override
     public boolean removeByPrimaryKey(Long id){
         if (id == null || id < 0){

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Producttype;
 import com.usoftchina.saas.document.mapper.ProducttypeMapper;
 import com.usoftchina.saas.document.service.ProducttypeService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -57,6 +58,15 @@ public class ProducttypeServiceImpl extends CommonBaseServiceImpl<ProducttypeMap
         return docBaseDTO;
     }
 
+    @Override
+    public Producttype getTypeByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Producttype type = producttypeMapper.getTypeByName(name, BaseContextHolder.getCompanyId());
+        return type;
+    }
+
     /**
      * 删除
      * @param id

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

@@ -10,6 +10,7 @@ import com.usoftchina.saas.document.entities.Productunit;
 import com.usoftchina.saas.document.mapper.ProductunitMapper;
 import com.usoftchina.saas.document.service.ProductunitService;
 import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -50,6 +51,15 @@ public class ProductunitServiceImpl extends CommonBaseServiceImpl<ProductunitMap
         return docBaseDTO;
     }
 
+    @Override
+    public Productunit getComboByName(String name) {
+        if (StringUtils.isEmpty(name)) {
+            return null;
+        }
+        Productunit unit = getMapper().getComboByName(name, BaseContextHolder.getCompanyId());
+        return unit;
+    }
+
     @Override
     public boolean removeByPrimaryKey(Long id){
         if(id != null && id > 0){

+ 12 - 0
applications/document/document-server/src/main/resources/mapper/ProductMapper.xml

@@ -934,5 +934,17 @@
     <select id="selectIdByCode" resultType="long">
         select pr_id from product where pr_code=#{code} and companyId=#{companyId}
     </select>
+    <select id="selectStockById" resultType="int">
+        SELECT COUNT(*) FROM PRODUCTONHAND WHERE PO_PRODID = #{id}
+    </select>
+    <select id="selectProdIOCount" resultType="int">
+        SELECT COUNT(*) FROM PRODIODETAIL WHERE PD_STATUS != 99 AND PD_PRODID = #{id}
+    </select>
+    <select id="selectSale" resultType="int">
+        SELECT COUNT(*) FROM SALE LEFT JOIN SALEDETAIL ON SA_ID = SD_SAID WHERE SA_SENDSTATUS != '已出库' AND SA_SENDSTATUS != '已关闭' AND IFNULL(SD_PRODID,0) = #{id}
+    </select>
+    <select id="selectPurchase" resultType="int">
+        SELECT COUNT(*) FROM PURCHASE LEFT JOIN PURCHASEDETAIL ON PU_ID = PD_PUID WHERE PU_ACCEPTSTATUS != '已出库' AND PU_ACCEPTSTATUSCODE != '已关闭' AND IFNULL(PD_PRODID,0) = #{id}
+    </select>
 </mapper>
 

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

@@ -134,4 +134,8 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_BRAND = (SELECT PB_NAME FROM PRODUCTBRAND WHERE PB_ID = #{id}) AND companyId = #{companyId}
     </select>
+
+  <select id="getComboByName" resultMap="BaseResultMap">
+    select * from PRODUCTBRAND where pb_name = #{name} and companyId = #{companyId}
+  </select>
 </mapper>

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

@@ -133,4 +133,7 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_KIND = (SELECT PT_NAME FROM PRODUCTTYPE WHERE PT_ID = #{id}) AND companyId=#{companyId}
     </select>
+  <select id="getTypeByName" resultMap="BaseResultMap">
+    select * from PRODUCTTYPE where pt_name=#{name} and companyId=#{companyId}
+  </select>
 </mapper>

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

@@ -125,4 +125,7 @@
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_UNIT = (SELECT PU_NAME FROM PRODUCTUNIT WHERE PU_ID = #{id}) AND companyId = #{companyId}
     </select>
+  <select id="getComboByName" resultMap="BaseResultMap">
+    select * from PRODUCTUNIT where pu_name=#{name} and companyId = #{companyId}
+  </select>
 </mapper>

+ 1 - 1
applications/money/money-server/src/main/resources/mapper/AcountbalanceViewMapper.xml

@@ -27,7 +27,7 @@
         and  companyId = #{companyId}
       </if>
     </where>
-    order by bankname asc, date desc, bankid desc
+    order by bankname asc, date desc
   </select>
 
   <select id="selectCalculateFields" resultType="string">

+ 4 - 0
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchaseReportDetail.java

@@ -97,6 +97,10 @@ public class PurchaseReportDetail extends CommonBaseEntity implements Serializab
 
     private Double pd_acceptqty;
 
+    private Double pd_pdacceptqty;
+
+    private Double pd_pdaccepttotal;
+
     private Date pd_delivery;
 
     private String pd_salecode;

+ 3 - 1
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml

@@ -60,6 +60,8 @@
     <result column="PD_TOTAL" property="pd_total" jdbcType="DOUBLE" />
     <result column="PD_TAXTOTAL" property="pd_taxtotal" jdbcType="DOUBLE" />
     <result column="PD_ACCEPTQTY" property="pd_acceptqty" jdbcType="DOUBLE" />
+    <result column="pd_pdacceptqty" property="pd_pdacceptqty" jdbcType="DOUBLE" />
+    <result column="pd_pdaccepttotal" property="pd_pdaccepttotal" jdbcType="DOUBLE" />
     <result column="PD_DELIVERY" property="pd_delivery" jdbcType="TIMESTAMP" />
     <result column="PD_SALECODE" property="pd_salecode" jdbcType="VARCHAR" />
     <result column="PD_SALEDETNO" property="pd_saledetno" jdbcType="INTEGER" />
@@ -112,7 +114,7 @@
   </select>
 
   <select id="selectDetailByCondition"  resultMap="ListMap">
-    select  *,ifnull(purchasedetail.PD_ACCEPTQTY,0)*ifnull(purchasedetail.PD_PRICE,0) pd_accepttotal  from purchase left join purchasedetail on pu_id=pd_puid
+    select  * from purchase left join purchasedetail on pu_id=pd_puid
     left join product on pd_prodid=pr_id
     <where>
       <if test="con != null">

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

@@ -26,9 +26,9 @@ public interface ProdInOutMapper extends CommonBaseMapper<ProdInOut> {
 
     String selectCodeById(Long pi_id);
 
-    int validateCodeWhenInsert(@Param("code") String code,@Param("pi_class") String pi_class );
+    int validateCodeWhenInsert(@Param("code") String code, @Param("companyId") Long companyId);
 
-    int validateCodeWhenUpdate(@Param("code") String code,@Param("id") Long id );
+    int validateCodeWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("companyId") Long companyId);
 
     String validateUnAudit(Long id);
 

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

@@ -629,13 +629,14 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         String code = baseDTO.getCode();
         Long id = baseDTO.getId();
         String pi_class = baseDTO.getName();
+        Long companyId = BaseContextHolder.getCompanyId();
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
         String billCode = null;
         synchronized (ProdInOutServiceImpl.class) {
-            Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code,pi_class) :
-                    prodInOutMapper.validateCodeWhenUpdate(code, id);
+            Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code, companyId) :
+                    prodInOutMapper.validateCodeWhenUpdate(code, id, companyId);
             String caller = "出货单".equals(pi_class) ? BillCodeSeq.SALEOUT.getCaller() : BillCodeSeq.SALEIN.getCaller();
            /* if(pi_class.equals("出货单")){
                 caller = BillCodeSeq.SALEOUT.getCaller();

+ 2 - 2
applications/sale/sale-server/src/main/resources/mapper/ProdInOutMapper.xml

@@ -512,10 +512,10 @@
     select pi_inoutno from prodinout where pi_id=#{id}
   </select>
   <select id="validateCodeWhenInsert"  resultType="int">
-    select count(1) from prodinout where pi_inoutno = #{code} and pi_class = #{pi_class}
+    select count(1) from prodinout where pi_inoutno = #{code} and companyId = #{companyId}
   </select>
   <select id="validateCodeWhenUpdate" resultType="int" >
-    select count(1) from prodinout where pi_inoutno = #{code} and pi_id != #{id}
+    select count(1) from prodinout where pi_inoutno = #{code} and pi_id != #{id} and companyId = #{companyId}
   </select>
   <select id="validateUnAudit" parameterType="long" resultType="java.lang.String">
     select pi_inoutno from prodinout where pi_id = #{id} and IFNULL(pi_statuscode,' ')!='AUDITED'

+ 44 - 7
frontend/saas-portal-web/package-lock.json

@@ -688,6 +688,14 @@
       "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==",
       "dev": true
     },
+    "async-validator": {
+      "version": "1.8.5",
+      "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz",
+      "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==",
+      "requires": {
+        "babel-runtime": "6.x"
+      }
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
@@ -985,8 +993,7 @@
     "babel-helper-vue-jsx-merge-props": {
       "version": "2.0.3",
       "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz",
-      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==",
-      "dev": true
+      "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg=="
     },
     "babel-helpers": {
       "version": "6.24.1",
@@ -1612,7 +1619,6 @@
       "version": "6.26.0",
       "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
       "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
-      "dev": true,
       "requires": {
         "core-js": "^2.4.0",
         "regenerator-runtime": "^0.11.0"
@@ -2798,8 +2804,7 @@
     "core-js": {
       "version": "2.5.7",
       "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
-      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==",
-      "dev": true
+      "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
     },
     "core-util-is": {
       "version": "1.0.2",
@@ -3334,6 +3339,11 @@
       "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
       "dev": true
     },
+    "deepmerge": {
+      "version": "1.5.2",
+      "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz",
+      "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ=="
+    },
     "default-require-extensions": {
       "version": "1.0.0",
       "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-1.0.0.tgz",
@@ -3713,6 +3723,19 @@
       "integrity": "sha512-IYhbzJYOopiTaNWMBp7RjbecUBsbnbDneOP86f3qvS0G0xfzwNSvMJpTrvi5/Y1gU7tg2NAgeg8a8rCYvW9Whw==",
       "dev": true
     },
+    "element-ui": {
+      "version": "2.4.11",
+      "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.4.11.tgz",
+      "integrity": "sha512-RtgK0t840NAFTajGMWvylzZRSX1EkZ7V4YgAoBxhv4TtkeMscLuk/IdYOzPdlQq6IN0byx1YVBxCX+u4yYkGvw==",
+      "requires": {
+        "async-validator": "~1.8.1",
+        "babel-helper-vue-jsx-merge-props": "^2.0.0",
+        "deepmerge": "^1.2.0",
+        "normalize-wheel": "^1.0.1",
+        "resize-observer-polyfill": "^1.5.0",
+        "throttle-debounce": "^1.0.1"
+      }
+    },
     "elliptic": {
       "version": "6.4.1",
       "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz",
@@ -7772,6 +7795,11 @@
         "sort-keys": "^1.0.0"
       }
     },
+    "normalize-wheel": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz",
+      "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU="
+    },
     "npm-run-path": {
       "version": "2.0.2",
       "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
@@ -11115,8 +11143,7 @@
     "regenerator-runtime": {
       "version": "0.11.1",
       "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
-      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==",
-      "dev": true
+      "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
     },
     "regenerator-transform": {
       "version": "0.10.1",
@@ -11300,6 +11327,11 @@
       "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=",
       "dev": true
     },
+    "resize-observer-polyfill": {
+      "version": "1.5.1",
+      "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+      "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+    },
     "resolve": {
       "version": "1.1.7",
       "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz",
@@ -12539,6 +12571,11 @@
       "integrity": "sha1-iQN8vJLFarGJJua6TLsgDhVnKmo=",
       "dev": true
     },
+    "throttle-debounce": {
+      "version": "1.1.0",
+      "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz",
+      "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg=="
+    },
     "through2": {
       "version": "2.0.5",
       "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",

+ 1 - 0
frontend/saas-portal-web/package.json

@@ -16,6 +16,7 @@
   },
   "dependencies": {
     "axios": "^0.18.0",
+    "element-ui": "^2.4.11",
     "v-distpicker": "^1.0.20",
     "vue": "^2.5.2",
     "vue-router": "^3.0.1",

+ 92 - 15
frontend/saas-portal-web/src/components/conenter/company.vue

@@ -60,7 +60,6 @@
             <div class="gs-xiangqing dotted">
                 <router-link to="/addenterprise">
                     <div class="gs-tianja" @click= "addEnterprise">
-                        <!-- <div class="gs-tj"></div> -->
                         <img src="/static/img/Fill 1.png" alt="">
                         <p>添加企业</p>
                     </div>
@@ -68,28 +67,32 @@
             </div>
             <!-- 点击查看企业详情 -->
             <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing">
-                <div class="gs-morentop" :class= "{gsqiye:nowindex == (i+1)}">
-                    <span v-if = "d.default_" class="gs-btn2 xs">取消默认</span>
-                    <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
-                </div>
                 <!-- 上 -->
-                <div class="gs-shang" @click.stop @mousemove="setismoren">
-                    <span @click="setmoren(i)" class="xs">设置</span>
+                <div class="gs-shang">
                     <img v-if = "d.default_" class="gs-morenimg" src="/static/img/moren2x.png" alt="">
                 </div>
                 <!-- 中 -->
-                <div class="gs-xqleft" >
+                <div class="gs-xqleft" @click.stop>
                     <p class="gs-qynema xs" @click= "getEnterpriseInfo(d)">{{d.name}}</p>
+                    <img @mouseenter="setismoren" @click="setmoren(i)" class="shezhi xs" src="/static/img/shezhi.png" alt="设置">
+                    <div class="gs-morentop" :class= "{gsqiye:nowindex == (i+1)}">
+                        <span v-if = "d.default_" @click="hideDefaultWin(i)" class="gs-btn2 xs">取消默认</span>
+                        <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
+                    </div>
                 </div>
                 <!-- 下 -->
                 <div class="gs-xqright over">
-                    <div v-if= "d.saas_" class="gs-xqright-left left">
-                        <p><span>saas管理员:</span>{{d.admin}}</p>
-                        <p><span>联系方式:</span>{{d.adminMobile}}</p>
-                        <p v-if= "d.time"><span>开通日期:</span>{{d.time}}</p>
+                    <div class="gs-xqright-left left" style="margin-top: 8%;" @click.stop >
+                        <p class="saasfuwu"><span>SaaS服务</span></p>
+                        <p v-if= "d.saas_"  class="saasgengduo xs"><span @mouseenter="setissaasxiangxi" @click="gengduo(i)">更多 ></span></p>
+                        <div class="saasxiangxi" :class= "{gssaasxiangxi:nowindex2 == (i+1)}">
+                            <p><span>saas管理员:</span>{{d.admin}}</p>
+                            <p><span>联系方式:</span>{{d.adminMobile}}</p>
+                            <!-- <p><span>开通日期:</span></p> -->
+                        </div>
                     </div>
                     <div class="gs-border gs-xqright-right right">
-                        <span v-if= "d.saas_" class="gs-btn1 dianji" @click="selectServe(d.id)">进入服务</span>
+                        <span v-if= "d.saas_" class="gs-btn1 xs" @click="selectServe(d.id)">进入服务</span>
                         <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs">开通服务</span>
                     </div>
                 </div>
@@ -119,6 +122,7 @@
                 admin: '',
                 adminMobile: '',
                 ismoren:true,
+                issaasxiangxi:true,
             }
         },
         computed :{
@@ -127,7 +131,10 @@
             },
             nowindex() {
                 return this.$store.state.ismoren
-            }
+            },
+            nowindex2() {
+                return this.$store.state.issaasxiangxi
+            },
         },
         watch:{
             arr:function(){
@@ -202,10 +209,28 @@
                     this.isDefault = false;
                     this.$router.go(0);
                 })
+            },
+            // 取消默认企业
+            hideDefaultWin(i){
+                let token = this.mytoken.token;
+                this.$ajax({
+                    url: this.$url.api+'/api/account/accountCenter/unBind/defaultCompany',
+                    method: 'post',
+                    data:{
+                        companyId: this.arr[i].id,
+                        accountId: this.mytoken.account.id
+                    },
+                    headers: {
+                        "Authorization":token,
+                    }
+                })
+                .then(res=>{
+                    // console.log('请求成功',res);
+                    this.$router.go(0);
+                })
                 .catch(err=>{
                     // console.log('请求失败',err);
                 });
-                
             },
             //进入服务
             selectServe(id){
@@ -329,9 +354,21 @@
                 }
                 this.ismoren = !this.ismoren
             },
+            // 弹出更多
+            gengduo(i){
+                if (this.issaasxiangxi) {
+                    this.$store.state.issaasxiangxi = i+1
+                } else {
+                    this.$store.state.issaasxiangxi = ''
+                }
+                this.issaasxiangxi = !this.issaasxiangxi
+            },
             setismoren(){
                 this.ismoren = true
             },
+            setissaasxiangxi(){
+                this.issaasxiangxi = true
+            },
             //没有内容也要有一定的高度
             boxheight(){
                 let H = this.$refs.qiyebox.offsetHeight;
@@ -349,4 +386,44 @@
 .heigh {
     height: 500px;
 }
+.gs-xqright {
+    -webkit-user-select: none;
+    -moz-user-select: none;
+    -ms-user-select: none;
+    -khtml-user-select: none;
+    user-select: none;
+}
+.shezhi {
+    margin-left: 92%;
+    margin-top: 23%;
+}
+.gs-morentop {
+    position: absolute;
+    margin-top: 5px;
+    right: 11px;
+    display: none;
+}
+.saasfuwu {
+    font-size: 16px;
+    color: #677897;
+}
+.saasgengduo {
+    font-family: PingFangSC-Regular;
+    font-size: 12px;
+    color: #1E88F5;
+    letter-spacing: 0;
+}
+.saasxiangxi {
+    display: none;
+    position: absolute;
+    background: #F8FBFF;
+    border: 1px solid #1E88F5;
+    border-radius: 4px;
+    padding: 10px;
+    font-size: 14px;
+    color: #1E88F5 !important;
+}
+.gssaasxiangxi {
+    display: block;
+}
 </style>

+ 8 - 3
frontend/saas-portal-web/src/components/conenter/enterprise.vue

@@ -118,8 +118,11 @@
                         </div>
                     </div>
                 </div>
+    <!-- 消息 ------------------------------------------------------------------>
+                <div :class="{gsqiye:nowindex == 3}">
+                    我是消息页面
+                </div>
             </div>
-            
         </div>
     </div>
 </template>
@@ -140,7 +143,8 @@ import { setTimeout } from 'timers';
                 tab: [
                     {name: '企业信息'},
                     {name: '个人信息'},
-                    {name: '安全信息'},
+                    {name: '安全设置'},
+                    // {name: '消息'},
                     ],
             }
         },
@@ -206,7 +210,8 @@ import { setTimeout } from 'timers';
                 }
             },
             onshezhi(){
-                this.$store.state.ismoren = ''
+                this.$store.state.ismoren = '';
+                this.$store.state.issaasxiangxi = ''
             },
         },
     }

+ 4 - 0
frontend/saas-portal-web/src/pages/index/index.js

@@ -4,6 +4,10 @@ import App from './index.vue'
 import router from '../../router'
 import Axios from 'axios'
 import store from '../../store'
+import ElementUI from 'element-ui';
+import 'element-ui/lib/theme-chalk/index.css';
+
+Vue.use(ElementUI);
 
 Axios.defaults.withCredentials=true;
 Axios.interceptors.request.use(function (config) {

+ 2 - 1
frontend/saas-portal-web/src/store/index.js

@@ -7,7 +7,8 @@ export default new Vuex.Store({
         isAutoLogin: false,
         isproblem: '',//常见问题
         isloading:false,
-        ismoren:''
+        ismoren:'',
+        issaasxiangxi:''
     },
     mutations:{
          Logintrue(state) {

+ 62 - 18
frontend/saas-portal-web/static/css/gongsi.css

@@ -1,7 +1,5 @@
 .xs:hover {
     cursor:pointer;
-    /* border-bottom: 1px solid #2868c8; */
-    /* box-shadow: 1px 1px 1px #ccc; */
 }
 .dianji:hover{
     border-bottom: 1px solid #2868c8;
@@ -106,7 +104,7 @@
     margin-left: -22%;
 }
 .gs-xiangqing {
-    height: 200px;
+    height: 240px;
     background: #FFFFFF;
     border: 1px solid rgba(30,136,245,0.32);
     box-shadow: 0 20px 60px 8px #F4F8FC;
@@ -120,6 +118,7 @@
     font-weight: 600;
     color: #243A52;
     letter-spacing: 0;
+    font-size: 18px;
 }
 .dotted {
     border: 1px dashed rgba(30,136,245,0.32);
@@ -139,10 +138,17 @@
     width: 70%;
 }
 .gs-shang {
-    height: 30%;
+    height: 25%;
     padding: 10px;
     position: relative;
 }
+.gs-shang span {
+    font-size: 12px;
+    color: #9EA8B2;
+    letter-spacing: 0;
+    text-align: center;
+    line-height: 30px;
+}
 .gs-morenimg {
     width: 20%;
     position: absolute;
@@ -150,12 +156,12 @@
     right: 0;
 }
 .gs-xqleft {
-    height: 30%;
+    height: 40%;
     position: relative;
     padding: 0px 10px;
 }
 .gs-xqright {
-    height: 40%;
+    height: 35%;
     background: #F4F9FE;
     padding: 10px;
 }
@@ -164,17 +170,12 @@
 }
 .gs-xqright div p{
     font-size: 12px;
-    color: #677897;
     letter-spacing: 0;
 }
 .gs-border {
     margin-top: 8%;
 }
-.gs-morentop {
-    position: absolute;
-    margin-top: -27px;
-    display: none;
-}
+
 .gs-btn1 {
     padding: 5px;
     background: #4EC66B;;
@@ -217,9 +218,9 @@
     color: red;
 }
 .qy-anniu {
-    position: absolute;
-    top: 0;
-    right: 40px;
+    margin-left: 56%;
+    margin-top: 30px;
+    margin-bottom: 45px;
 }
 .qy-conent input {
     border: 1px solid #1E88F5;
@@ -243,14 +244,11 @@
 }
 .addbiaoqian {
     width: 59%;
-    /* float: right;
-    margin-right: 102px; */
     float: left;
     margin-left: 4px;
 }
 .qy-xiangxi {
     width: 100% !important;
-    margin-top: 10px;
     font-size: 12px;
     padding-left: 10px;
 }
@@ -341,6 +339,17 @@
     font-size: 16px;
     font-weight: 600;
 }
+.qy-title>ul{
+    margin: 0;
+    padding: 0;
+    width: 100%;
+}
+.qy-title>ul>li{
+    margin: 0;
+    padding: 0;
+    width: 50%;
+    text-align: center;
+}
 .qy-xiugai {
     font-family: PingFangSC-Regular;
     font-size: 14px;
@@ -375,4 +384,39 @@
     background: #1E88F5;
     border-radius: 2px;
     margin-right: 8px;
+}
+.jr-conent {
+    padding: 60px 30px 30px 30px;
+    text-align: center;
+}
+.jr-conent input {
+    width: 30%;
+    padding-left: 10px;
+    border: 0;
+    border-bottom: 1px solid #BDBEBE;
+}
+.lookup {
+    width: 40%;
+    background: #FFFFFF;
+    border: 1px solid #1E88F5;
+    border-radius: 2px;
+    margin-left: 5%;
+    position: absolute;
+    /* display: none; */
+    margin-top: -20px;
+    z-index: 1;
+    text-align: left;
+}
+.lookup > ul {
+    padding: 20px;
+}
+.lookup > ul > li {
+    margin-bottom: 10px;
+} 
+.lookup > ul > li span{
+    width: 15%;
+    display: inline-block;
+} 
+.saasguanli {
+    width: 18% !important;
 }

+ 3 - 0
frontend/saas-portal-web/static/css/main.css

@@ -40,6 +40,9 @@ h1, h2, h3, h4, h5, h6,
 p {
     font-size: 15px;
 }
+li {
+    list-style: none;
+}
 main > section {
     /* padding: 70px 0; */
 }

BIN
frontend/saas-portal-web/static/img/shezhi.png


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

@@ -152,7 +152,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             }
         }, {
             xtype: 'textfield',
-            name: 'code',
+            name: me._codeField,
             minHeight: 24,
             maxHeight: 24,
             width: 200,
@@ -255,7 +255,14 @@ Ext.define('saas.view.core.form.FormPanel', {
     addItems: function (items) {
         var me = this;
         me.setBindFields(items);
-        var formItems = me.formItems = me.add(items);
+        var formItems = me.add(items);
+        var codeField = me.getForm().findField(me._codeField);
+        if(codeField && !Ext.Array.findBy(formItems, function(i) {
+            return i.name == me._codeField;
+        })) {
+            formItems.push(codeField);
+        }
+        me.formItems = formItems;
         return formItems;
     },
 

+ 5 - 2
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -164,9 +164,10 @@ Ext.define('saas.view.core.form.FormPanelController', {
     save:function(){
         var me = this,
         form = this.getView(),
+        codeField = form.getForm().findField(form._codeField),
         detailCount = form.detailCount,
         viewModel = me.getViewModel(),
-        modelData = viewModel.getData();
+        codeModified = codeField && codeField.isDirty();
 
         //form里面数据
         var formData = form.getSaveData();
@@ -185,6 +186,8 @@ Ext.define('saas.view.core.form.FormPanelController', {
             delete params.items1;
         }
 
+        params.codeModified = codeModified;
+
         form.setLoading(true);
         saas.util.BaseUtil.request({
             url: form._saveUrl,
@@ -377,7 +380,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
     codeEditorClick: function() {
         var me = this,
         form = me.getView(),
-        codeField = form.getForm().findField('code'),
+        codeField = form.getForm().findField(form._codeField),
         viewModel = me.getViewModel(),
         codeEditable = viewModel.get('base.codeEditable');
 

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

@@ -187,6 +187,10 @@ Ext.define('saas.view.core.report.ReportPanel', {
             autoLoad: me.autoLoad,
             pageSize: 15,
             data: [],
+            sorters: {
+                property: me.groupField || 'id',
+                direction: 'ASC'
+            },
             proxy: {
                 type: 'ajax',
                 url: me.listUrl,

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

@@ -260,13 +260,13 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 allowBlank:false,
                 text : "电话", 
                 editor : {
-                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
-                    regexText:'请输入正确的手机号码',
+                    // regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                    // regexText:'请输入正确的手机号码',
                     hideTrigger:true,
                     xtype : "textfield"
                 },
                 dataIndex : "cc_tel", 
-                width:110 
+                width:200 
             },
             {
                 allowBlank:true,
@@ -334,13 +334,13 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 allowBlank:true,
                 text : "联系电话", 
                 editor : {
-                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
-                    regexText:'请输入正确的手机号码',
+                    // regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                    // regexText:'请输入正确的手机号码',
                     xtype : "textfield",
                     hideTrigger:true,
                 },
                 dataIndex : "ca_phone", 
-                width:110  
+                width:200  
             },
             {
                 text : "默认地址", 

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

@@ -254,13 +254,13 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 allowBlank:false,
                 text : "电话", 
                 editor : {
-                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
-                    regexText:'请输入正确的手机号码',
+                    // regex:/^[\d | -]*$/,
+                    // regexText:'请输入正确的手机号码',
                     hideTrigger:true,
                     xtype : "textfield"
                 },
                 dataIndex : "vc_tel", 
-                width:110 
+                width:200 
             },
             {
                 allowBlank:true,

+ 1 - 1
frontend/saas-web/app/view/money/report/AccountBalance.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.money.report.AccountBalance', {
 
     viewName: 'money-report-accountbalance',
 
-    groupField: 'bankcode',
+    groupField: 'bankname',
     groupHeaderTpl: '账户名称: {[values.rows[0].data.bankname]}',
     listUrl: '/api/money/report/accountBalance',
     defaultCondition: null,

+ 1 - 1
frontend/saas-web/app/view/money/report/OtherIODetail.js

@@ -10,7 +10,7 @@ Ext.define('saas.view.money.report.OtherIODetail', {
 
     viewName: 'money-report-otheriodetail',
 
-    groupField: 'bl_bankcode',
+    groupField: 'bankname',
     groupHeaderTpl: '资金账户: {[values.rows[0].data.bankname]}',
     listUrl: '/api/money/report/otheriodetail',
     defaultCondition: null,

+ 1 - 1
frontend/saas-web/app/view/money/report/PayDetail.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.money.report.PayDetail', {
     viewName: 'money-report-paydetail',
 
     groupField:'pd_vendname',
-    groupHeaderTpl: '供应商名称: {[values.rows[0].data.pd_vendcode]}',
+    groupHeaderTpl: '供应商名称: {[values.rows[0].data.pd_vendname]}',
     listUrl: '/api/money/report/payDetail',
     defaultCondition: null,
     reportTitle: '应付账款明细表',

+ 1 - 1
frontend/saas-web/app/view/money/report/RecDetail.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.money.report.RecDetail', {
 
     viewName: 'money-report-recdetail',
 
-    groupField: 'rd_custcode',
+    groupField: 'rd_custname',
     groupHeaderTpl: '客户名称: {[values.rows[0].data.rd_custname]}',
     listUrl: '/api/money/report/recDetail',
     defaultCondition: null,

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

@@ -561,9 +561,11 @@ Ext.define('saas.view.money.verification.FormPanelController', {
     save:function(){
         var me = this,
         form = this.getView(),
+        codeField = form.getForm().findField(form._codeField),
         detailCount = form.detailCount,
         viewModel = me.getViewModel(),
-        modelData = viewModel.getData();
+        codeModified = codeField && codeField.isDirty();
+
 
         //form里面数据
         var formData = form.getSaveData();
@@ -576,6 +578,8 @@ Ext.define('saas.view.money.verification.FormPanelController', {
             params['items' + ( i + 1)] = formData['detail' + i];
         }
 
+        params.codeModified = codeModified;
+
         form.setLoading(true);
         saas.util.BaseUtil.request({
             url: form._saveUrl,

+ 1 - 1
frontend/saas-web/app/view/purchase/report/PurchasePay.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
 
     viewName: 'purchase-report-purchasepay',
 //按供应商分组 付款金额合计
-    groupField: 'pu_vendcode',
+    groupField: 'pu_vendname',
     groupHeaderTpl: '供应商名称: {[values.rows[0].data.pu_vendname]}',
     listUrl: '/api/purchase/report/purchasePay',
     defaultCondition: null,

+ 1 - 1
frontend/saas-web/app/view/sale/report/SaleRec.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.sale.report.SaleRec', {
 
     viewName: 'sale-report-salerec',
 
-    groupField: 'rb_custcode',
+    groupField: 'rb_custname',
     groupHeaderTpl: '客户名称: {[values.rows[0].data.rb_custname]}',
     listUrl: '/api/sale/report/saleRec',
     defaultCondition: null,

+ 1 - 1
frontend/saas-web/app/view/stock/report/Prodiodetail.js

@@ -7,7 +7,7 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
 
     viewName: 'stock-report-prodiodetail',
   //  按物料分组
-    groupField: 'pd_prodcode',
+    groupField: 'pr_detail',
     groupHeaderTpl: '物料名称: {[values.rows[0].data.pr_detail]}',
     listUrl: '/api/storage/report/prodioDetail',
     defaultCondition: null,

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

@@ -239,7 +239,7 @@ Ext.define('saas.view.viewport.ViewportController', {
      */
     syncSessionToPortal: function(session) {
         const frame = window.frames[window.frames.length - 1];
-        frame.postMessage(session ? JSON.stringify(session) : '', '*');
+        frame.postMessage(session ? JSON.stringify(session.data) : '', '*');
     },
     /**
      * 跳转门户