Przeglądaj źródła

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

zhuth 7 lat temu
rodzic
commit
da40bb5214
36 zmienionych plików z 812 dodań i 231 usunięć
  1. 1 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  2. 0 3
      applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.xml
  3. 0 3
      applications/money/money-server/src/main/resources/mapper/RecbalancedetailMapper.xml
  4. 16 12
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/ProdInOutServiceImpl.java
  5. 8 4
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  6. 6 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SaleProfitView.java
  7. 16 11
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  8. 8 4
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  9. 3 0
      applications/sale/sale-server/src/main/resources/mapper/SaleProfitViewMapper.xml
  10. 26 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/controller/MakeController.java
  11. 4 2
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/MakeService.java
  12. 64 8
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  13. 1 1
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/ProdInOutServiceImpl.java
  14. 3 0
      frontend/saas-web/app/view/core/base/BasePanel.js
  15. 33 0
      frontend/saas-web/app/view/core/base/BasePanel.scss
  16. 13 0
      frontend/saas-web/app/view/core/base/GridPanel.js
  17. 1 1
      frontend/saas-web/app/view/document/kind/ChildForm.js
  18. 6 2
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  19. 1 1
      frontend/saas-web/app/view/sale/report/SaleProfit.js
  20. 1 1
      frontend/saas-web/app/view/sale/report/SaleProfitController.js
  21. 12 4
      frontend/saas-web/app/view/stock/report/Prodiodetail.js
  22. 100 99
      frontend/saas-web/app/view/stock/report/ProdiodetailController.js
  23. 0 24
      frontend/saas-web/app/view/sys/account/AccountInformation.js
  24. 358 0
      frontend/saas-web/app/view/sys/account/DataList.js
  25. 10 0
      frontend/saas-web/app/view/sys/account/DataListController.js
  26. 4 0
      frontend/saas-web/app/view/sys/account/DataListlModel.js
  27. 12 12
      frontend/saas-web/app/view/sys/config/FormPanel.js
  28. 12 0
      frontend/saas-web/app/view/sys/finish/DataList.js
  29. 10 5
      frontend/saas-web/app/view/sys/manager/FormPanel.js
  30. 48 0
      frontend/saas-web/app/view/sys/manager/FormPanel.scss
  31. 9 0
      frontend/saas-web/app/view/sys/maxnumbers/DataList.js
  32. 12 0
      frontend/saas-web/app/view/sys/messagelog/DataList.js
  33. 0 2
      frontend/saas-web/app/view/sys/power/FormPanel.js
  34. 13 19
      frontend/saas-web/app/view/sys/power/GroupGrid.js
  35. 0 1
      frontend/saas-web/app/view/sys/power/TreePanel.js
  36. 1 11
      frontend/saas-web/resources/json/navigation.json

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

@@ -526,7 +526,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
      * @Author: chenwei
      * @Date: 2018/10/26
      */
-    private String pushMaxnubmer(String code, Long id) {
+    private synchronized String pushMaxnubmer(String code, Long id) {
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }

+ 0 - 3
applications/money/money-server/src/main/resources/mapper/RecbalancedetMapper.xml

@@ -236,9 +236,6 @@
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.Recbalancedet">
     update recbalancedet
     <set>
-      <if test="id != null">
-        rd_rbid = #{id,jdbcType=INTEGER},
-      </if>
       <if test="rd_detno != null">
         rd_detno = #{rd_detno,jdbcType=INTEGER},
       </if>

+ 0 - 3
applications/money/money-server/src/main/resources/mapper/RecbalancedetailMapper.xml

@@ -183,9 +183,6 @@
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.money.po.Recbalancedetail" >
     update recbalancedetail
     <set >
-      <if test="id != null" >
-        rbd_rbid = #{id,jdbcType=INTEGER},
-      </if>
       <if test="rbd_detno != null" >
         rbd_detno = #{rbd_detno,jdbcType=INTEGER},
       </if>

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

@@ -229,7 +229,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    private void singleDelete(Long id) {
+    public void singleDelete(Long id) {
 
             ProdInOut prodInOut = checkAndReturnOrder(id);;
             //删除主键
@@ -261,7 +261,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     }
 
     @Transactional(propagation = Propagation.REQUIRED)
-    private void singleAudit(ProdInOutDTO prodInOutDTO) {
+    public void singleAudit(ProdInOutDTO prodInOutDTO) {
         String pi_class= prodInOutDTO.getPi_class();
         String pi_inoutno = prodInOutDTO.getPi_inoutno();
         String pi_statuscode = prodInOutDTO.getPi_statuscode();
@@ -603,7 +603,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         return pushMaxnubmer(base);
     }
 
-    public synchronized String pushMaxnubmer(DocBaseDTO baseDTO) {
+    public String pushMaxnubmer(DocBaseDTO baseDTO) {
         String pi_inoutno = baseDTO.getCode();
         String pi_class = baseDTO.getName();
         Long id = baseDTO.getId();
@@ -611,14 +611,18 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
         Long companyId = BaseContextHolder.getCompanyId();
-        Integer count = "0".equals(String.valueOf(id)) ? getMapper().validateCodeWhenInsert(pi_inoutno, companyId) :
-                getMapper().validateCodeWhenUpdate(pi_inoutno, id, companyId);
-        String caller ="";
-        if("采购验收单".equals(pi_class)){
-            caller = BillCodeSeq.PURCHASEIN.getCaller();
-        }else if("采购验退单".equals(pi_class)) {
-            caller = BillCodeSeq.PURCHASEOUT.getCaller();
-        }
-        return maxnumberService.pushMaxnubmer(count, pi_inoutno, caller).getData();
+        String billCode = null;
+        synchronized (ProdInOutServiceImpl.class) {
+            Integer count = "0".equals(String.valueOf(id)) ? getMapper().validateCodeWhenInsert(pi_inoutno, companyId) :
+                    getMapper().validateCodeWhenUpdate(pi_inoutno, id, companyId);
+            String caller ="";
+            if("采购验收单".equals(pi_class)){
+                caller = BillCodeSeq.PURCHASEIN.getCaller();
+            }else if("采购验退单".equals(pi_class)) {
+                caller = BillCodeSeq.PURCHASEOUT.getCaller();
+            }
+            billCode = maxnumberService.pushMaxnubmer(count, pi_inoutno, caller).getData();
+        }
+        return billCode;
     }
 }

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

@@ -561,14 +561,18 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     * @Author: guq
     * @Date: 2018/10/19
     */
-    private synchronized String pushMaxnubmer(String code, Long id) {
+    private String pushMaxnubmer(String code, Long id) {
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
         Long companyId = BaseContextHolder.getCompanyId();
-        Integer count = "0".equals(String.valueOf(id)) ? purchaseMapper.validateCodeWhenInsert(code, companyId) :
-                purchaseMapper.validateCodeWhenUpdate(code, id, companyId);
-        return maxnumberService.pushMaxnubmer(count, code, BillCodeSeq.PURCHASE.getCaller()).getData();
+        String billCode = null;
+        synchronized (PurchaseServiceImpl.class) {
+            Integer count = "0".equals(String.valueOf(id)) ? purchaseMapper.validateCodeWhenInsert(code, companyId) :
+                    purchaseMapper.validateCodeWhenUpdate(code, id, companyId);
+            billCode = maxnumberService.pushMaxnubmer(count, code, BillCodeSeq.PURCHASE.getCaller()).getData();
+        }
+        return billCode;
     }
     
     /** 

+ 6 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SaleProfitView.java

@@ -49,5 +49,11 @@ public class SaleProfitView {
 
     private Double pd_profit;
 
+    private Double pd_price;
+
+    private Double pd_netprice;
+
+    private String pd_remark;
+
     private Double pd_profitpresent;
 }

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

@@ -231,7 +231,6 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
     }
 
     @Override
-    @Transactional
     public DocBaseDTO audit(ProdInOutFormDTO formData) {
         Long id = null;
         DocBaseDTO baseDTO = new DocBaseDTO();
@@ -247,7 +246,9 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         baseDTO.setCode(formData.getMain().getPi_inoutno());
         return baseDTO;
     }
-    private void singleAudit(ProdInOutDTO prodInOutDTO) {
+
+    @Transactional
+    public void singleAudit(ProdInOutDTO prodInOutDTO) {
         String pi_class= prodInOutDTO.getPi_class();
         String pi_inoutno = prodInOutDTO.getPi_inoutno();
         String pi_statuscode = prodInOutDTO.getPi_statuscode();
@@ -561,22 +562,26 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
      * @Author: guq
      * @Date: 2018/10/19
      */
-    private synchronized String pushMaxnubmer(DocBaseDTO baseDTO) {
+    private String pushMaxnubmer(DocBaseDTO baseDTO) {
         String code = baseDTO.getCode();
         Long id = baseDTO.getId();
         String pi_class = baseDTO.getName();
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
-        Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code,pi_class) :
-                prodInOutMapper.validateCodeWhenUpdate(code, id);
-        String caller ="";
-        if(pi_class.equals("出货单")){
-            caller = BillCodeSeq.SALEOUT.getCaller();
-        }else {//销售退货单
-            caller = BillCodeSeq.SALEIN.getCaller();
+        String billCode = null;
+        synchronized (ProdInOutServiceImpl.class) {
+            Integer count = "0".equals(String.valueOf(id)) ? prodInOutMapper.validateCodeWhenInsert(code,pi_class) :
+                    prodInOutMapper.validateCodeWhenUpdate(code, id);
+            String caller ="";
+            if(pi_class.equals("出货单")){
+                caller = BillCodeSeq.SALEOUT.getCaller();
+            }else {//销售退货单
+                caller = BillCodeSeq.SALEIN.getCaller();
+            }
+            billCode = maxnumberService.pushMaxnubmer(count, code, caller).getData();
         }
-        return maxnumberService.pushMaxnubmer(count, code, caller).getData();
+        return billCode;
     }
 
     @Override

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

@@ -557,14 +557,18 @@ public class SaleServiceImpl implements SaleService{
      * @Author: guq
      * @Date: 2018/10/19
      */
-    private synchronized String pushMaxnubmer(String code, Long id) {
+    private String pushMaxnubmer(String code, Long id) {
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }
         Long companyId = BaseContextHolder.getCompanyId();
-        Integer count = "0".equals(String.valueOf(id)) ? saleMapper.validateCodeWhenInsert(code, companyId) :
-                saleMapper.validateCodeWhenUpdate(code, id, companyId);
-        return maxnumberService.pushMaxnubmer(count, code, BillCodeSeq.SALE.getCaller()).getData();
+        String billCode = null;
+        synchronized(SaleServiceImpl.class) {
+            Integer count = "0".equals(String.valueOf(id)) ? saleMapper.validateCodeWhenInsert(code, companyId) :
+                    saleMapper.validateCodeWhenUpdate(code, id, companyId);
+            billCode = maxnumberService.pushMaxnubmer(count, code, BillCodeSeq.SALE.getCaller()).getData();
+        }
+        return billCode;
     }
 
     /**

+ 3 - 0
applications/sale/sale-server/src/main/resources/mapper/SaleProfitViewMapper.xml

@@ -20,8 +20,11 @@
     <result column="pd_ordertotal" property="pd_ordertotal" jdbcType="DOUBLE" />
     <result column="pd_total" property="pd_total" jdbcType="DOUBLE" />
     <result column="pd_profit" property="pd_profit" jdbcType="DOUBLE" />
+    <result column="pd_price" property="pd_price" jdbcType="DOUBLE" />
+    <result column="pd_netprice" property="pd_netprice" jdbcType="DOUBLE" />
     <result column="pd_profitpresent" property="pd_profitpresent" jdbcType="DOUBLE" />
     <result column="companyid" property="companyid" jdbcType="INTEGER" />
+      <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
   </resultMap>
   <select id="selectByCondition" resultMap="BaseResultMap">
     select  *  from Sale_Profit_View

+ 26 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/controller/MakeController.java

@@ -40,6 +40,32 @@ public class MakeController {
         return Result.success(docBaseDTO);
     }
 
+    /**
+     * 制造单批量审核
+     *
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchAudit")
+    public Result batchAudit(@RequestBody BatchDealBaseDTO baseDTOs) {
+        String res = makeService.batchAudit(baseDTOs);
+        return Result.success(res);
+    }
+
+    /**
+     * 制造单批量反审核
+     *
+     * @param baseDTOs
+     * @return
+     */
+    @PostMapping("/batchUnAudit")
+    public Result batchUnAudit(@RequestBody BatchDealBaseDTO baseDTOs) {
+        String res = makeService.batchUnAudit(baseDTOs);
+        return Result.success(res);
+    }
+
+
+
     @PostMapping("/save")
     public Result save(@RequestBody MakeListDTO makeListDTO){
         DocBaseDTO docBaseDTO = makeService.saveOrUpdate(makeListDTO);

+ 4 - 2
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/MakeService.java

@@ -11,8 +11,6 @@ import com.usoftchina.saas.storage.dto.MakeListDTO;
 import com.usoftchina.saas.storage.mapper.MakeMapper;
 import com.usoftchina.saas.storage.po.Make;
 
-import java.util.List;
-
 public interface MakeService extends CommonBaseService<MakeMapper, Make> {
 
     /**
@@ -100,4 +98,8 @@ public interface MakeService extends CommonBaseService<MakeMapper, Make> {
      * @return
      */
     boolean batchDelete(BatchDealBaseDTO batchDealBaseDTO);
+
+    String batchAudit(BatchDealBaseDTO baseDTOs);
+
+    String batchUnAudit(BatchDealBaseDTO baseDTOs);
 }

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

@@ -27,6 +27,7 @@ import com.usoftchina.saas.storage.po.ProdInOut;
 import com.usoftchina.saas.storage.service.MakeService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
@@ -246,21 +247,29 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public DocBaseDTO audit(MakeListDTO makeListDTO) {
-        //1.获取主从表数据
+        Long id = makeListDTO.getMain().getId();
+        DocBaseDTO baseDTO = new DocBaseDTO();
         Make make = makeListDTO.getMain();
-        List<MakeMaterial> items = makeListDTO.getItems();
         //如果ID为0,先执行保存
-        if (makeListDTO.getMain().getId() == 0){
+        if (make.getId() == 0 || StringUtils.isEmpty(id)){
             DocBaseDTO docBaseDTO = saveOrUpdate(makeListDTO);
             make.setId(docBaseDTO.getId());
         }
+        //审核
+        singleAudit(makeListDTO);
+        baseDTO = generateMsgObj(make.getId(), make.getMa_code());
+        return baseDTO;
+    }
+
+    @Transactional(propagation = Propagation.REQUIRED)
+    public void singleAudit(MakeListDTO makeListDTO) {
+        //1.获取主从表数据
+        Make make = makeListDTO.getMain();
         //2.校验库存是否足够
         validStorage(makeListDTO);
         //3.生成  完工入库单和领料单 并 过账
         generateProdIO(makeListDTO);
-
         //4.修改单据状态
         Make updateMake = new Make();
         updateMake.setId(make.getId());
@@ -274,9 +283,33 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         DocBaseDTO docBaseDTO = generateMsgObj(make.getId(), make.getMa_code());
         //5.记录LOG
         messageLogService.audit(docBaseDTO);
-        return docBaseDTO;
     }
 
+
+    @Override
+    public String batchAudit(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return "没有可审核单据。";
+        }
+        StringBuffer errorMsg = new StringBuffer();
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            try {
+                Long id =  base.getId();
+                Make make = getMapper().selectByPrimaryKey(id);
+                List<MakeMaterial> makeMaterials = makeMaterialMapper.selectByFK(id,BaseContextHolder.getCompanyId());
+                MakeListDTO makeListDTO = new MakeListDTO();
+                makeListDTO.setMain(make);
+                makeListDTO.setItems(makeMaterials);
+                singleAudit(makeListDTO);
+            } catch (Exception e){
+                errorMsg.append("编号:" + base.getCode() + "处理失败," + e.getMessage());
+            }
+        }
+        return errorMsg.toString();
+    }
+
+
     /**
      * 1.生成  完工入库单和生产领料单
      * 2.过账
@@ -518,8 +551,12 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
     public DocBaseDTO resAudit(Long id) {
+        return singleUnAudit(id);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public DocBaseDTO singleUnAudit(Long id) {
         //1.获取主从表数据
         Make make = getMapper().selectByPrimaryKey(id);
         List<MakeMaterial> items = makeMaterialMapper.selectByFK(id, BaseContextHolder.getCompanyId());
@@ -541,6 +578,24 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         //6.记录LOG
         messageLogService.unAudit(docBaseDTO);
         return docBaseDTO;
+    };
+
+    @Override
+    public String batchUnAudit(BatchDealBaseDTO baseDTOs) {
+        if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
+                baseDTOs.getBaseDTOs().size() == 0) {
+            return "无可反审核单据。";
+        }
+        StringBuffer errorMsg = new StringBuffer();
+        for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
+            try {
+                Long id =  base.getId();
+                singleUnAudit(id);
+            }catch (Exception e) {
+                errorMsg.append("编号:" + base.getCode() + "处理失败," + e.getMessage());
+            }
+        }
+        return errorMsg.toString();
     }
 
     @Override
@@ -581,6 +636,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         return true;
     }
 
+
     /**
      * 1.查找制造单关联的出入库单据
      * 2.反过账
@@ -649,7 +705,7 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
      * @Author: chenwei
      * @Date: 2018/10/26
      */
-    private String pushMaxnubmer(String code, Long id) {
+    private synchronized String pushMaxnubmer(String code, Long id) {
         if (null == code) {
             throw new BizException(BizExceptionCode.NULL_CODE);
         }

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

@@ -441,7 +441,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
         return baseDTO;
     }
 
-    private String pushMaxnubmer(ProdInOut prodInOut) {
+    private synchronized String pushMaxnubmer(ProdInOut prodInOut) {
         String pi_inoutno = prodInOut.getPi_inoutno();
         String pi_class = prodInOut.getPi_class();
         Long id = prodInOut.getId();

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

@@ -5,11 +5,13 @@ Ext.define('saas.view.core.base.BasePanel', {
     controller: 'core-base-basepanel',
     viewModel: 'core-base-basepanel',
 
+    cls:'core-base-basepanel',
     //工具类
     FormUtil: Ext.create('saas.util.FormUtil'),
     BaseUtil: Ext.create('saas.util.BaseUtil'),
 
     //基础属性
+    frame:false,
     autoScroll: true,
     border: 1,
     bodyPadding: 5,
@@ -38,6 +40,7 @@ Ext.define('saas.view.core.base.BasePanel', {
 
         Ext.apply(me, {
             dockedItems: [{
+                frame:false,
                 xtype: 'toolbar',
                 dock: 'top',
                 style: {

+ 33 - 0
frontend/saas-web/app/view/core/base/BasePanel.scss

@@ -0,0 +1,33 @@
+.core-base-basepanel{
+    .x-panel-default-outer-border-trl {
+        border-top-color: #fff !important;
+        border-top-width: 1px !important;
+        border-right-color: #fff !important;
+        border-right-width: 1px !important;
+        border-left-color: #fff !important;
+        border-left-width: 1px !important;
+    }
+    .x-panel-default-outer-border-rbl {
+        border-top-color: #fff !important;
+        border-top-width: 1px !important;
+        border-right-color: #fff !important;
+        border-right-width: 1px !important;
+        border-left-color: #fff !important;
+        border-left-width: 1px !important;
+        border-bottom-color: #fff !important;
+        border-bottom-width: 1px !important;
+    }
+}
+.core-base-gridpanel{
+    .x-grid-body{
+        border:1px solid #abdaff !important;
+        border-top-width: 0 !important;
+    }
+    .x-grid-header-ct{
+        border:1px solid #abdaff !important;
+    }
+}
+.x-basepanel-pagingtoolbar{
+    border:1px solid #abdaff !important;
+    border-top-width: 0 !important;
+}

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

@@ -8,6 +8,8 @@ Ext.define('saas.view.core.base.GridPanel', {
         mode : "MULTI" ,
         ignoreRightMouseSelection : false
     },
+
+    cls:'core-base-gridpanel',
     
     dataUrl: '',
     dbSearchFields: [],
@@ -15,6 +17,7 @@ Ext.define('saas.view.core.base.GridPanel', {
 
     initComponent: function() {
         var me = this;
+        me.frame = false;
         if(me.columns){
             var fields = me.columns.map(column => column.dataIndex);
             me.columns = me.insertFirstColumn(me.columns);
@@ -129,6 +132,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                 },{
                     xtype: 'pagingtoolbar',
                     dock: 'bottom',
+                    cls:'x-basepanel-pagingtoolbar',
                     displayInfo: true,
                     store: me.store
                 }]
@@ -171,6 +175,15 @@ Ext.define('saas.view.core.base.GridPanel', {
     },
 
     listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
         itemClick: function(view,record,a,index,c) {
             var classList = c.target.classList.value;
             var form = view.ownerCt.ownerCt;

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

@@ -260,7 +260,7 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
             },{
                 readOnly:true,
                 xtype:'textfield',
-                fieldLabel: '状态',
+                fieldLabel: '仓库状态',
                 name: 'wh_status',   
                 value:'已开启',
                 maxLength: 20

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

@@ -159,11 +159,15 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
                 valueField: 'value',
                 store:Ext.create('Ext.data.Store', {
                     fields: ['value', 'display'],
-                    data : [{value:"信用卡", display:"信用卡"},
+                    data : [
+                        {value:"信用卡", display:"信用卡"},
                         {value:"支票", display:"支票"},
                         {value:"汇票", display:"汇票"},
                         {value:"现金", display:"现金"},
-                        {value:"银行转账", display:"银行转账"}]
+                        {value:"银行转账", display:"银行转账"},
+                        {value:"支付宝转账", display:"支付宝转账"},
+                        {value:"微信转账", display:"微信转账"}
+                    ]
                 })
             }
         }, {

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

@@ -20,7 +20,7 @@ Ext.define('saas.view.sale.report.SaleProfit', {
         columnWidth: 0.2
     }, {
         xtype: 'dbfindtrigger',
-        name: 'sd_prodcode',
+        name: 'pr_code',
         fieldLabel: '物料',
         columnWidth: 0.2
     }, {

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

@@ -112,7 +112,7 @@ Ext.define('saas.view.sale.report.SaleProfitController', {
                 }
             },
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=sd_prodcode]':{
+            'dbfindtrigger[name=pr_code]':{
                 beforerender:function(f){
                     Ext.apply(f,{
                         dataUrl:'/api/document/product/list',

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

@@ -33,10 +33,14 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
             ["库存初始化","库存初始化"]
         ]
     }, {		
-        xtype: 'dbfindtrigger',
+        xtype: 'textfield',
         name: 'pd_prodcode',
-        fieldLabel: '物料编号',
-        columnWidth: 0.2
+        fieldLabel: '',
+        emptyText:'输入单号,订单号或物料编号',
+        columnWidth: 0.2,
+        getCondition:function(v){
+            return "pd_prodcode='"+v+"' or pi_inoutno='"+v+"' or pd_ordercode='"+v+"'";
+        }
     }, {
         xtype: 'condatefield',
         name: 'pi_date',
@@ -119,7 +123,11 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
         xtype: 'numbercolumn',
         dataIndex: 'pd_price',
         xtype: 'numbercolumn'
-    }, {
+    },{
+        text: '订单号',
+        dataIndex: 'pd_ordercode',
+        width: 200
+    },{
         text: '备注',
         dataIndex: 'pd_text1',
         width: 250

+ 100 - 99
frontend/saas-web/app/view/stock/report/ProdiodetailController.js

@@ -3,107 +3,108 @@ Ext.define('saas.view.stock.report.ProdiodetailController', {
     alias: 'controller.stock-report-prodiodetail',
     init: function (form) {
         this.control({
+
             //放大镜赋值关系 以及 tpl模板
-            'dbfindtrigger[name=pd_prodcode]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dataUrl:'/api/document/product/list',
-                        addXtype: 'document-product-formpanel',
-                        addTitle: '物料资料',
-                        dbfinds:[
-                        {
-                            from:'pr_code',to:'pd_prodcode'
-                        }, {
-                            from:'pr_detail',to:'pr_detail'
-                        }, {
-                            from:'pr_spec',to:'pr_spec'
-                        }],
-                        dbtpls:[{
-                            field:'pr_code',width:100
-                        },{
-                            field:'pr_detail',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_unit",
-                            "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,
-                            xtype: 'numbercolumn',
-                            align:'end'
-                        },{
-                            "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,
-                            xtype: 'numbercolumn',
-                            align:'end'
-                        },{
-                            "text": "L/T",
-                            "dataIndex": "pr_leadtime",
-                            "width": 100,
-                        }]
-                    }) ;   
+            // 'dbfindtrigger[name=pd_prodcode]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dataUrl:'/api/document/product/list',
+            //             addXtype: 'document-product-formpanel',
+            //             addTitle: '物料资料',
+            //             dbfinds:[
+            //             {
+            //                 from:'pr_code',to:'pd_prodcode'
+            //             }, {
+            //                 from:'pr_detail',to:'pr_detail'
+            //             }, {
+            //                 from:'pr_spec',to:'pr_spec'
+            //             }],
+            //             dbtpls:[{
+            //                 field:'pr_code',width:100
+            //             },{
+            //                 field:'pr_detail',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_unit",
+            //                 "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,
+            //                 xtype: 'numbercolumn',
+            //                 align:'end'
+            //             },{
+            //                 "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,
+            //                 xtype: 'numbercolumn',
+            //                 align:'end'
+            //             },{
+            //                 "text": "L/T",
+            //                 "dataIndex": "pr_leadtime",
+            //                 "width": 100,
+            //             }]
+            //         }) ;   
 
-                }
-            }
+            //     }
+            // }            
          });
         }
 });

+ 0 - 24
frontend/saas-web/app/view/sys/account/AccountInformation.js

@@ -1,24 +0,0 @@
-/**
- * Created by zhouy on 2018/10/18.
- */
-Ext.define('saas.view.sys.account.AccountInformation', {
-    extend: 'saas.view.document.kind.Kind',
-    xtype: 'sys-account-accountinformation',
-    autoScroll: true,
-    layout:'fit',
-    defaultType:'accountinformation',
-    tbar: ['->',{
-        xtype:'button',
-        text:'刷新',
-        listeners: {
-            click: 'onRefresh'
-        }
-    }],
-    listeners:{
-        afterrender:function(p){
-            p.getViewModel().setData({title:'账户信息'});
-        }
-    }
-})
-
-

+ 358 - 0
frontend/saas-web/app/view/sys/account/DataList.js

@@ -0,0 +1,358 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.sys.account.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'sys-account-datalist',
+    controller: 'sys-account-datalist',
+    viewModel: 'sys-account-datalist',
+    autoScroll: true,
+    frame:true,
+    layout:'fit',
+    //工具类
+    FormUtil: Ext.create('saas.util.FormUtil'),
+    BaseUtil: Ext.create('saas.util.BaseUtil'),
+    dataUrl:'http://192.168.253.31:8560/api/account/account/accountRole/list',                 
+
+    tbar: [{
+        width: 150,
+        name: 'username',
+        xtype: 'textfield',
+        emptyText : '账户名称'
+    },{
+        width: 150,
+        name: 'mobile',
+        xtype: 'textfield',
+        emptyText : '电话'
+    },{
+        cls:'x-formpanel-btn-orange',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click:function(b){
+                var grid = b.ownerCt.ownerCt;
+                var tbar = b.ownerCt;
+                grid.condition = '';
+                var items = [];
+                var fields = tbar.items.items.map(f => f.name);
+                Ext.each(fields, function(f, index){
+                    var field = tbar.down('[name='+f+']');
+                    if(field){
+                        items.push(field);
+                    }
+                });
+                grid.condition = grid.getCondition(items);
+                grid.store.loadPage(1);
+            }
+        }
+    },'->'],
+
+    columns : [{
+        text : 'id', 
+        hidden:true,
+        dataIndex : 'id', 
+        xtype : 'numbercolumn',   
+    },{
+        text : 'accountId', 
+        hidden:true,
+        dataIndex : 'accountId', 
+        xtype : 'numbercolumn',   
+    },{
+        text : '账户名称', 
+        width : 200.0, 
+        dataIndex : 'username', 
+        xtype : '', 
+    }, 
+    {
+        text : '真实姓名', 
+        dataIndex : 'realname', 
+        width : 120.0, 
+        xtype : '', 
+    }, 
+    {
+        text : '联系电话', 
+        dataIndex : 'mobile', 
+        width : 220.0,
+    },{
+        text : '联系邮箱', 
+        dataIndex : 'email', 
+        width : 120.0, 
+        xtype : '', 
+    },{
+        text : '关联角色id', 
+        hidden:true,
+        dataIndex : 'roleIds', 
+        width : 120.0, 
+        xtype : '', 
+    },{
+        text : '关联角色', 
+        dataIndex : 'roleNames', 
+        width : 120.0, 
+        xtype : '', 
+    }],
+
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.columns = me.insertFirstColumn(me.columns);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 11,
+                data: [],
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = '';
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            number: op._page,
+                            size: store.pageSize,
+                            condition: JSON.stringify(condition)
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: me.store
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    onVastDeal:function(url,type){
+        var form = this.ownerCt;
+        var grid = this;
+        var data = grid.getGridSelected(type);
+        if(!data){
+            showToast('请勾选符合条件的行进行操作。');
+            return false;
+        }
+        if(data&&data.length>0){
+            var params = JSON.stringify({baseDTOs:data});
+            form.BaseUtil.request({
+                    url: url,
+                    params: params,
+                    method: 'POST',
+                    async:false
+                })
+                .then(function() {
+                    showToast('操作成功');
+                    grid.store.load();
+                })
+                .catch(function(response) {
+                    showToast('操作失败');
+                });
+        }else{
+            showToast('请勾选至少一条明细。');
+        }
+    },
+
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
+        itemClick: function(view,record,a,index,c) {
+            var classList = c.target.classList.value;
+            var grid = this;
+            if(classList.indexOf('fa-pencil')>-1){
+                var document = Ext.create('saas.view.document.kind.Kind',{});
+                var form = this.ownerCt;
+                this.dialog = form.getController().getView().add({
+                    xtype: 'document-kind-childwin',
+                    bind: {
+                        title: '修改单据编码规则'
+                    },
+                    dataKind:'maxnumbers',
+                    belong:document.etc['maxnumbers'],
+                    _parent:form,
+                    _combo:this,
+                    record:record,
+                    session: true
+                });
+                this.dialog.show();
+            }
+        }
+    },
+
+    insertFirstColumn:function(columns){
+        var me=this;
+        if(columns.length>0 && columns[0].xtype!='actioncolumn'){
+            return Ext.Array.insert(columns,0,[{
+                xtype:'actioncolumn',
+                width:50,
+                dataIndex:'actioncolumn',
+                text:'操作',
+                items: [{
+                    tooltip: '编辑',
+                    iconCls: 'x-fa fa-pencil fa-fw',
+                    scope:this
+                }]
+            }]);
+        }
+        return columns;
+    },
+
+    getGridSelected:function(type){
+        var isErrorSelect = false;
+        var checkField = this.statusCodeField;
+        var me = this,
+        items = me.selModel.getSelection(),
+        data = new Array() ;
+        Ext.each(items, function(item, index){
+            if(!Ext.isEmpty(item.data[me.idField])){
+                var o = new Object();
+                if(me.idField){
+                    o['id'] = item.data[me.idField];
+                }
+                if(me.codeField){
+                    o['code'] = item.data[me.codeField];
+                }
+                if(type&&type==item.data[checkField]){
+                    isErrorSelect = true
+                }
+                data.push(o);
+            }
+        });
+        if(isErrorSelect){
+            return false;
+        }
+		return data;
+    },
+
+    /**
+     * 获得过滤条件
+     */
+    getCondition: function(items) {
+        var me = this,
+        conditions = [];
+
+        for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            var field = item.name,
+            func = item.getCondition,
+            value = item.value,
+            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;
+    },
+
+    refresh:function(){
+        //debugger
+    }
+
+})
+
+

+ 10 - 0
frontend/saas-web/app/view/sys/account/DataListController.js

@@ -0,0 +1,10 @@
+Ext.define('saas.view.sys.account.DataListController', {
+    extend: 'saas.view.core.base.BasePanelController',
+    alias: 'controller.sys-account-datalist',
+
+    init: function (form) {
+        var me = this;
+        this.control({
+        });
+    }
+});

+ 4 - 0
frontend/saas-web/app/view/sys/account/DataListlModel.js

@@ -0,0 +1,4 @@
+Ext.define('saas.view.sys.account.DataListModel', {
+    extend: 'saas.view.core.base.BasePanelModel',
+    alias: 'viewmodel.sys-account-datalist'
+});

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

@@ -29,16 +29,13 @@ Ext.define('saas.view.sys.config.FormPanel', {
         blankText: '该字段不能为空'
     },
 
-    tbar:{
-        style: {
-            'border-bottom': '1px solid #35baf6 !important'
-        },
+    bbar:{
         frame:true,
         items:['->',{
             text:'保存',
             formBind:true,
             name:'save'
-        }]
+        },'->']
     },
 
     items: [{
@@ -72,14 +69,14 @@ Ext.define('saas.view.sys.config.FormPanel', {
         fieldLabel: '电话',
         beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         allowBlank: false,
-        columnWidth: 0.25
+        width:500
     },{
         bind:'{en_fax}',
         xtype: 'textfield',
         name: 'en_fax',
         fieldLabel: '传真',
         allowBlank: true,
-        columnWidth: 0.5
+        width:500
     },{
         bind:'{en_begindate}',
         xtype : "datefield", 
@@ -89,13 +86,15 @@ Ext.define('saas.view.sys.config.FormPanel', {
         allowBlank : true, 
         editable:false,
         hideTrigger:true,
-        readOnly:true
+        readOnly:true,
+        width:500
     },{ 
         bind:'{en_pricemethod}',
         displayField : "display", 
         editable:false,
         hideTrigger : false, 
         maxLength : 100.0, 
+        width:500,
         minValue : null, 
         queryMode : "local", 
         valueField : "value", 
@@ -112,14 +111,14 @@ Ext.define('saas.view.sys.config.FormPanel', {
         beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         fieldLabel : "库存计算方式", 
         allowBlank : false, 
-        columnWidth : 0.25
     },{  
         bind:'{en_signet}',
         name : "en_signet", 
         fieldLabel : "打印章上传", 
         allowBlank : false, 
-        columnWidth : 0.33,
+        width:500,
         xtype: 'filefield',
+        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         emptyText: '请选择图片',
         buttonText: '',
         buttonConfig: {
@@ -130,8 +129,9 @@ Ext.define('saas.view.sys.config.FormPanel', {
         name : "en_logo", 
         fieldLabel : "Logo上传", 
         allowBlank : false, 
-        columnWidth : 0.33,
+        width:500,
         xtype: 'filefield',
+        beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         emptyText: '请选择图片',
         buttonText: '',
         buttonConfig: {
@@ -148,7 +148,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
         format:'Y-m-d H:i:s',
         editable:false,
         readOnly:true,
-        columnWidth : 0.25
+        width:500,
     }],
 
     initComponent: function () {

+ 12 - 0
frontend/saas-web/app/view/sys/finish/DataList.js

@@ -109,6 +109,18 @@ Ext.define('saas.view.sys.finish.DataList', {
 
     condition:'',
 
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        }
+    },
+
     initComponent: function() {
         var me = this;
         if(me.columns){

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

@@ -4,6 +4,8 @@ Ext.define('saas.view.sys.manager.FormPanel', {
     
     layout:'fit',
 
+    cls:'sys-manager-formpanel',
+
     bodyCls:'x-manager-background',
     //工具类
     FormUtil: Ext.create('saas.util.FormUtil'),
@@ -11,7 +13,7 @@ Ext.define('saas.view.sys.manager.FormPanel', {
 
     tabBar: {
         layout: {
-            pack: 'left'
+            pack: 'center'
         },
         border: false
     },
@@ -22,15 +24,18 @@ Ext.define('saas.view.sys.manager.FormPanel', {
     },
 
     items: [{
-        icon:'x-fa fa-key',
+        cls:'sys-config-formpanel',
+        iconCls:'x-fa fa-building',
         title: '公司设置',
         xtype:'sys-config-formpanel'
     }, {
-        icon:'x-fa fa-key',
+        cls:'sys-account-datalist',
+        iconCls:'x-fa fa-key',
         title: '账户设置',
-        xtype:'panel' 
+        xtype:'sys-account-datalist' 
     }, {
-        icon:'x-fa fa-key',
+        cls:'sys-power-formpanel',
+        iconCls:'x-fa fa-user-circle-o',
         title: '权限设置',
         xtype:'sys-power-formpanel'
     }],

+ 48 - 0
frontend/saas-web/app/view/sys/manager/FormPanel.scss

@@ -0,0 +1,48 @@
+.sys-manager-formpanel{
+    .x-tab-bar-default-top > .x-tab-bar-body-default {
+        padding: 8px 4px 8px 8px;
+    }
+    .x-tab-bar-default {
+        border-color: #35baf6;
+        border-width: 2px !important;
+        border: 1px solid #35baf6;
+        background-color: #ffffff;
+        border-bottom-width: 0 !important;
+    }
+    .x-tab.x-tab-active.x-tab-default{
+        background-color: #35baf6;
+    }
+    .x-tab.x-tab-active.x-tab-default .x-tab-icon-el {
+        color: #ffffff;
+    }
+    .x-tab.x-tab-active.x-tab-default .x-tab-inner-default {
+        color: #ffffff;
+    }
+    .x-tab-icon-el-default {
+        color: #a7a7a7;
+    }
+    .x-tab-inner-default {
+        color: #969696;
+    }
+}
+.sys-config-formpanel{
+    .x-form-item-label-default{
+        width:120px !important;
+        .x-form-item-label-inner{
+            width:100px !important;
+        }
+    }
+}
+.sys-account-datalist{
+    .x-grid-body{
+        padding:0 !important;
+    }
+}
+.sys-power-formpanel{
+    .x-panel-body-default-framed{
+        padding:0 !important;
+    }
+    .x-keyboard-mode .x-grid-item-focused .x-grid-cell-inner:before{
+        border:1px solid #ffffff;
+    }
+}

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

@@ -191,6 +191,15 @@ Ext.define('saas.view.sys.maxnumbers.DataList', {
     },
 
     listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
         itemClick: function(view,record,a,index,c) {
             var classList = c.target.classList.value;
             var grid = this;

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

@@ -85,6 +85,18 @@ Ext.define('saas.view.sys.messagelog.DataList', {
 
     condition:'',
 
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        }
+    },
+
     initComponent: function() {
         var me = this;
         if(me.columns){

+ 0 - 2
frontend/saas-web/app/view/sys/power/FormPanel.js

@@ -18,7 +18,6 @@ Ext.define('saas.view.sys.power.FormPanel', {
     saveUrl:'http://192.168.253.31:8560/api/account/role/save/bind/resource',
 
     items: [{
-        title:'角色列表',
         region:'west',
         xtype: 'sys-power-treepanel',
         layout:'fit',
@@ -26,7 +25,6 @@ Ext.define('saas.view.sys.power.FormPanel', {
         width: '20%',
         useArrows: true
     },{
-        title:'权限列表',
         margin:'0 0 0 5',
         region:'center',
         layout:'fit',

+ 13 - 19
frontend/saas-web/app/view/sys/power/GroupGrid.js

@@ -3,18 +3,16 @@
  */
 Ext.define('saas.view.sys.power.GroupGrid', {
     extend: 'Ext.grid.Panel',
-    requires: [
-        'saas.view.sys.power.OtherField'
-    ],
     xtype: 'power-grid',
     bind:{
         store: '{powergrid}'
     },
-    tools:[{
+    tbar:['->',{
         xtype:'button',				
         text:'保存',
         name:'savepower',
-        margin:'0 0 0 2',
+        margin:'0 10 0 2',
+        cls:'x-formpanel-btn-orange',
         style:'background:#da8282;border-color:#cccccc'
     }],
     features : [Ext.create('Ext.grid.feature.Grouping',{
@@ -27,18 +25,19 @@ Ext.define('saas.view.sys.power.GroupGrid', {
 	})],
     initId:0,
     dataUrl:'http://192.168.253.31:8560/api/account/role/power/resource',
-    selModel:Ext.create('Ext.selection.CheckboxModel', {
-        checkOnly: true,
+    selModel: {
         showHeaderCheckbox:false,
-        listeners: {
-            'select': function (selModel, record) {
+        checkOnly:true,
+        type:'checkboxmodel',
+        listeners:{
+            select:function(selModel,record,c,d){
                 selModel.view.ownerCt.selectAllPower(record);
             },
-            'deselect': function (selModel, record) {
+            deselect:function(selModel,record){
                 selModel.view.ownerCt.deselectAllPower(record);
             }
-        }
-    }),
+         }
+    },
     viewConfig: {
      stripeRows: false,
      enableTextSelection: false,
@@ -50,7 +49,8 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         dataIndex: 'groupName',
         xtype: '',
         flex: 2,
-        stopSelection: false
+        stopSelection: false,
+        menuDisabled:true,
     },{
         header: '查询',
         dataIndex: 'query',
@@ -406,12 +406,6 @@ Ext.define('saas.view.sys.power.GroupGrid', {
         me.callParent(arguments);
     },
 
-    defaultListenerScope: true,
-
-    listeners: {
-        columnshow: 'onColumnToggle',
-        columnhide: 'onColumnToggle',
-    },
     selectAllPower: function(record){
         var me = this;
         me.setAllOthers(record,true);

+ 0 - 1
frontend/saas-web/app/view/sys/power/TreePanel.js

@@ -92,7 +92,6 @@ Ext.define('saas.view.sys.power.TreePanel', {
                 var grid = view.ownerCt.ownerCt.query('power-grid')[0];
                 grid.initId = id;
                 grid.store.load();
-                grid.store.group('moduleName', 'ASC');
             }
         }
     },

+ 1 - 11
frontend/saas-web/resources/json/navigation.json

@@ -288,21 +288,11 @@
             "text": "新手导航",
             "viewType": "sys-guide-formpanel",
             "leaf": true
-        },{  
+        }, {  
             "id":"sys-manager-formpanel",
             "text": "系统管理",
             "viewType": "sys-manager-formpanel",
             "leaf": true
-        }, {  
-            "id":"sys-config-formpanel",
-            "text": "公司设置",
-            "viewType": "sys-config-formpanel",
-            "leaf": true
-        }, {
-            "id":"sys-power-formpanel",
-            "text": "权限设置",
-            "viewType": "sys-power-formpanel",
-            "leaf": true
         }, {
             "id":"sys-messagelog-datalist",
             "text": "操作日志",