Browse Source

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

guq 7 years ago
parent
commit
89878313da
51 changed files with 566 additions and 403 deletions
  1. 1 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ShareController.java
  2. 9 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/ProductController.java
  3. 1 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BankinformationMapper.java
  4. 7 11
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java
  5. 7 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  6. 3 3
      applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml
  7. 19 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendorAcountView.java
  8. 1 1
      applications/money/money-server/src/main/resources/mapper/PayablesdetailMapper.xml
  9. 1 1
      applications/money/money-server/src/main/resources/mapper/ReceivablesdetailMapper.xml
  10. 2 0
      applications/money/money-server/src/main/resources/mapper/VendorAcountViewMapper.xml
  11. 2 2
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  12. 1 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  13. 3 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/Account.java
  14. 30 21
      frontend/saas-portal-web/src/pages/invitation_mobile_join/invitation_mobile_join.html
  15. 12 0
      frontend/saas-portal-web/static/css/invitation_mobile_join.css
  16. BIN
      frontend/saas-portal-web/static/img/error.png
  17. 7 0
      frontend/saas-web/app/model/report/Purchase.js
  18. 35 0
      frontend/saas-web/app/model/report/Sale.js
  19. 1 1
      frontend/saas-web/app/view/core/base/BasePanel.scss
  20. 0 1
      frontend/saas-web/app/view/core/base/ImportWindow.js
  21. 1 1
      frontend/saas-web/app/view/core/chart/ChartBase.js
  22. 6 6
      frontend/saas-web/app/view/core/chart/ChartBase.scss
  23. 1 1
      frontend/saas-web/app/view/core/form/FormPanel.js
  24. 1 1
      frontend/saas-web/app/view/core/query/QueryPanel.scss
  25. 5 4
      frontend/saas-web/app/view/core/report/ReportPanel.js
  26. 7 0
      frontend/saas-web/app/view/core/tab/Panel.js
  27. 5 0
      frontend/saas-web/app/view/core/tab/Panel.scss
  28. 1 1
      frontend/saas-web/app/view/document/kind/ChildForm.js
  29. 1 0
      frontend/saas-web/app/view/document/kind/KindController.js
  30. 2 4
      frontend/saas-web/app/view/home/Home.js
  31. 1 1
      frontend/saas-web/app/view/home/Home.scss
  32. 6 7
      frontend/saas-web/app/view/home/InfoCard.js
  33. 72 51
      frontend/saas-web/app/view/home/InfoCard.scss
  34. 12 20
      frontend/saas-web/app/view/home/charts/KeyData.js
  35. 111 85
      frontend/saas-web/app/view/home/charts/KeyData.scss
  36. 8 8
      frontend/saas-web/app/view/home/charts/SaleTrend.js
  37. 3 1
      frontend/saas-web/app/view/main/Main.scss
  38. 4 3
      frontend/saas-web/app/view/main/MainContainerWrap.js
  39. 1 1
      frontend/saas-web/app/view/main/MainController.js
  40. 12 20
      frontend/saas-web/app/view/main/Navigation.scss
  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. 55 45
      frontend/saas-web/app/view/purchase/report/Purchase.js
  44. 25 23
      frontend/saas-web/app/view/purchase/report/PurchasePay.js
  45. 56 49
      frontend/saas-web/app/view/sale/report/Sale.js
  46. 25 14
      frontend/saas-web/app/view/sale/report/SaleRec.js
  47. 1 1
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  48. BIN
      frontend/saas-web/resources/images/home/balanceTotal.png
  49. BIN
      frontend/saas-web/resources/images/home/payTotal.png
  50. BIN
      frontend/saas-web/resources/images/home/receiveTotal.png
  51. BIN
      frontend/saas-web/resources/images/home/storageTotal.png

+ 1 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ShareController.java

@@ -144,8 +144,7 @@ public class ShareController {
     private void buildQrcode(String basePath, String username, Long companyId, Long delay, String companyName, OutputStream outputStream) throws WriterException, IOException {
         String params = "username=" + username + "&companyId=" + companyId + "&timestamp=" + new Date().getTime() + "&delay=" + delay + "&companyName=" + companyName;
         String encodeParams = new String(UrlBase64.encode(params.getBytes()));
-//        String text = basePath + "/xxx.html" + "?param=" + encodeParams;
-        String text = "https://www.baidu.com";
+        String text = basePath + "/invitation_mobile.html" + "?param=" + encodeParams;
         int width = 140;
         int height = 140;
         String format = "png";

+ 9 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/ProductController.java

@@ -13,6 +13,7 @@ import com.usoftchina.saas.document.dto.ProductListDTO;
 import com.usoftchina.saas.document.entities.Product;
 import com.usoftchina.saas.document.service.ProductService;
 import com.usoftchina.saas.page.PageRequest;
+import com.usoftchina.saas.utils.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -85,13 +86,19 @@ public class ProductController {
 
     @PostMapping("/batchClose")
     public Result batchClose(@RequestBody BatchDealBaseDTO baseDTOs){
-        productService.batchClose(baseDTOs);
+        String result = productService.batchClose(baseDTOs);
+        if (!StringUtils.isEmpty(result)){
+            return Result.error(result);
+        }
         return Result.success();
     }
 
     @PostMapping("/batchOpen")
     public Result batchOpen(@RequestBody BatchDealBaseDTO baseDTOs){
-        productService.batchOpen(baseDTOs);
+        String result = productService.batchOpen(baseDTOs);
+        if (!StringUtils.isEmpty(result)){
+            return Result.error(result);
+        }
         return Result.success();
     }
 

+ 1 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BankinformationMapper.java

@@ -25,7 +25,7 @@ public interface BankinformationMapper extends CommonBaseMapper<Bankinformation>
     List<Bankinformation> selectBankinformationBycondition(@Param("con") String con, @Param("companyId") Long companyId);
 
     List<ComboDTO> getCombo(@Param("companyId") Long companyId);
-    String selectBankcode(@Param("bk_bankcode") String bk_bankcode, @Param("companyId") Long companyId);
+    int selectBankcode(@Param("bk_bankcode") String bk_bankcode, @Param("id") Long id);
     Long selectBankId(@Param("bk_bankcode") String bk_bankcode, @Param("companyId") Long companyId);
 
     void check(Map<String, Object> map);

+ 7 - 11
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java

@@ -61,15 +61,13 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
         DocBaseDTO docBaseDTO = new DocBaseDTO();
 
         String bk_code = RegexpUtils.replaceSpecCharacter(bankinformation.getBk_bankcode());
-        String code = pushMaxnubmer(bk_code, bankinformation.getId());
+        String code = null;
 
-        String bktion = bankinformationMapper.selectBankcode(bankinformation.getBk_bankcode() ,BaseContextHolder.getCompanyId());
+        int bktion = bankinformationMapper.selectBankcode(bankinformation.getBk_bankcode() ,bankinformation.getId());
         //先判断ID,再判断编号
         if (bankinformation.getId() == 0)
         {
-            if (bktion != null){
-                throw new BizException(500, BizExceptionCode.ACCOUNT_EXISTS.getMessage());
-            }
+            code = pushMaxnubmer(bk_code, bankinformation.getId());
             bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
             bankinformation.setBk_bankcode(code);
             bankinformationMapper.insertSelective(bankinformation);
@@ -103,15 +101,13 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
                 }
             }
 
-            Long id = bankinformationMapper.selectBankId(bankinformation.getBk_bankcode(), BaseContextHolder.getCompanyId());
-            if (bktion != null){
-                if (id.equals(bankinformation.getId())){
+//            Long id = bankinformationMapper.selectBankId(bankinformation.getBk_bankcode(), BaseContextHolder.getCompanyId());
+            if (bktion > 0){
                     bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
                     messageLogService.update(docBaseDTO);
-                }else {
-                    throw new BizException(500, BizExceptionCode.ACCOUNT_EXISTS.getMessage());
-                }
             }else {
+                code = pushMaxnubmer(bk_code, bankinformation.getId());
+                bankinformation.setBk_bankcode(code);
                 bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
                 messageLogService.update(docBaseDTO);
             }

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

@@ -202,6 +202,9 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             if (insertDetail2.size()>0) {
                 customeraddressMapper.batchInsert(insertDetail2);
             }
+            baseDTO = getBaseDTOById(cu_id);
+            //日志记录
+            messageLogService.save(baseDTO);
             //更新
         }else {
             //检查名称和编号
@@ -291,6 +294,9 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             if (updateDetail2.size() > 0) {
                 customeraddressMapper.batchUpdate(updateDetail2);
             }
+            baseDTO = getBaseDTOById(cu_id);
+            //日志记录
+            messageLogService.update(baseDTO);
         }
 
         //更新应收余额
@@ -336,10 +342,6 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         }else {
             subledgerMapper.insertSelective(subledger);
         }
-
-        baseDTO = getBaseDTOById(cu_id);
-        //日志记录
-        messageLogService.save(baseDTO);
         return baseDTO;
     }
 
@@ -358,6 +360,7 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             map.put("v_type","cust");
             map.put("v_companyid",BaseContextHolder.getCompanyId());
             map.put("v_res","");
+            //删除前检查
             customerMapper.check(map);
             Object result =  map.get("v_res");
             if(!StringUtils.isEmpty(result)){

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

@@ -324,9 +324,9 @@
     </select>
 
 
-  <select id="selectBankcode" resultType="java.lang.String">
-        select bk_bankcode from bankinformation where
-        bk_bankcode = #{bk_bankcode,jdbcType=VARCHAR} and companyId = #{companyId}
+  <select id="selectBankcode" resultType="java.lang.Integer">
+        select count(0) from bankinformation where
+        bk_bankcode = #{bk_bankcode,jdbcType=VARCHAR} and bk_id = #{id}
     </select>
 
   <select id="selectBankId" resultType="java.lang.Long">

+ 19 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VendorAcountView.java

@@ -21,6 +21,9 @@ public class VendorAcountView {
 
     private String pr_spec;
 
+    private String pr_orispeccode;
+    private String pr_brand;
+
     private String pd_unit;
 
     private Double qty;
@@ -38,6 +41,22 @@ public class VendorAcountView {
     private String pd_remark;
     private int ym;
 
+    public String getPr_orispeccode() {
+        return pr_orispeccode;
+    }
+
+    public void setPr_orispeccode(String pr_orispeccode) {
+        this.pr_orispeccode = pr_orispeccode;
+    }
+
+    public String getPr_brand() {
+        return pr_brand;
+    }
+
+    public void setPr_brand(String pr_brand) {
+        this.pr_brand = pr_brand;
+    }
+
     public int getYm() {
         return ym;
     }

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

@@ -36,7 +36,7 @@
         and  companyId = #{companyId} and pd_query =1 and (pd_addpay + pd_addpre + pd_remain) != 0
       </if>
     </where>
-    order by pd_vendname asc, pd_detno asc, pd_date desc
+    order by pd_vendid desc, pd_detno asc, pd_date desc
   </select>
 
   <select id="selectCalculateFields" resultType="string">

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

@@ -36,7 +36,7 @@
         and  companyId = #{companyId} and rd_query = 1 and (rd_addrec + rd_addpre + rd_remain) != 0
       </if>
     </where>
-    order by rd_custname asc, rd_detno asc, rd_date desc
+    order by rd_custid desc, rd_detno asc, rd_date desc
   </select>
 
   <select id="selectCalculateFields" resultType="string">

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

@@ -12,6 +12,8 @@
     <result column="pr_detail" property="pr_detail" jdbcType="VARCHAR" />
     <result column="pr_spec" property="pr_spec" jdbcType="VARCHAR" />
     <result column="pd_unit" property="pd_unit" jdbcType="VARCHAR" />
+    <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR" />
+    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />
     <result column="qty" property="qty" jdbcType="DOUBLE" />
     <result column="pd_orderprice" property="pd_orderprice" jdbcType="DOUBLE" />
     <result column="pd_taxrate" property="pd_taxrate" jdbcType="DOUBLE" />

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

@@ -198,7 +198,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         //计算金额,未税单价,未税金额等
         calcPurchase(pu_id);
         //日志
-        messageLogService.save(baseDTO);
+        messageLogService.update(baseDTO);
         return baseDTO;
     }
 
@@ -579,11 +579,11 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Transactional
     public void singleDelete(Long id) {
         if (null != id) {
+            DocBaseDTO docBaseDTO = getBaseDTOById(id);
             //从表删除
             purchasedetailMapper.deleteByForeignKey(id);
             //主表删除
             purchaseMapper.deleteByPrimaryKey(id);
-            DocBaseDTO docBaseDTO = getBaseDTOById(id);
             //日志
             messageLogService.delete(docBaseDTO);
         }

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

@@ -350,11 +350,11 @@ public class SaleServiceImpl implements SaleService{
 
     private void singleDelete(Long id) {
         if (null != id) {
+            DocBaseDTO docBaseDTO = getBaseDTOById(id);
             //从表删除
             saledetailMapper.deleteByForeignKey(id);
             //主表删除
             saleMapper.deleteByPrimaryKey(id);
-            DocBaseDTO docBaseDTO = getBaseDTOById(id);
             //日志
             messageLogService.delete(docBaseDTO);
         }

+ 3 - 3
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/Account.java

@@ -25,7 +25,7 @@ public class Account implements Serializable {
      * 账号类型 0 - 管理员
      */
     private Integer type;
-    private boolean enabled;
+    private Boolean enabled;
     private Date createTime;
     private long creatorId;
     private Date updateTime;
@@ -96,11 +96,11 @@ public class Account implements Serializable {
         this.type = type;
     }
 
-    public boolean isEnabled() {
+    public Boolean isEnabled() {
         return enabled;
     }
 
-    public void setEnabled(boolean enabled) {
+    public void setEnabled(Boolean enabled) {
         this.enabled = enabled;
     }
 

+ 30 - 21
frontend/saas-portal-web/src/pages/invitation_mobile_join/invitation_mobile_join.html

@@ -26,26 +26,30 @@
                   data: "param="+param,
                   async:false,
                   success: function(data){
-                        var data = data.data;
-                        if(data){
-                            $("#joinBtn").val(data.companyId);
-                            $("#sendman").text(data.username + ' 邀请您加入 ');
-                            $("#sendmsg").text(data.companyName);
-                            document.getElementsByClassName('x-join-center')[0].hidden = false;
-                            $.ajax({
-                                url:"https://saas-api.usoftchina.com/api/account/role/list/"+data.companyId,
-                                type: "GET",
-                                async:false,
-                                success: function(data){
-                                    var data = data.data;
-                                    $("#selectJob").prepend("<option value='0'>请选择岗位</option>");//添加第一个option值
-                                 for (var i = 0; i < data.length; i++) {
-                                    $("#selectJob").append("<option value='"+data[i].id+"'>"+data[i].name+"</option>");
-                                    }
-                                },
-                                error: function(err) {     
-                                } 
-                            });
+                        if(data.success){
+                            var data = data.data;
+                            if(data){
+                                $("#joinBtn").val(data.companyId);
+                                $("#sendman").text(data.username + ' 邀请您加入 ');
+                                $("#sendmsg").text(data.companyName);
+                                document.getElementsByClassName('x-join-center')[0].hidden = false;
+                                $.ajax({
+                                    url:"https://saas-api.usoftchina.com/api/account/role/list/"+data.companyId,
+                                    type: "GET",
+                                    async:false,
+                                    success: function(data){
+                                        var data = data.data;
+                                        $("#selectJob").prepend("<option value='0'>请选择岗位</option>");//添加第一个option值
+                                     for (var i = 0; i < data.length; i++) {
+                                        $("#selectJob").append("<option value='"+data[i].id+"'>"+data[i].name+"</option>");
+                                        }
+                                    },
+                                    error: function(err) {     
+                                    } 
+                                });
+                            }
+                        }else{
+                            document.getElementsByClassName('x-join-error')[0].hidden = false;
                         }
                   },
                   error: function(err) {     
@@ -180,10 +184,15 @@
             <input class="input_style" id="selectName" type="text" placeholder="请输入姓名"></input>
             <select class="input_style" id="selectJob" style="padding-top: 0px;" placeholder="请选择岗位"></select>
 			<button class="btn-submit" type="button" id="joinBtn" onclick="join();">提 交</button>
-        <div class="x-join-bottom">
+            <div class="x-join-bottom">
             <span style="font-size:16px;padding:0 0 0 5px;color: #999;">U企云服 | 电子行业企业管理云端方案</span>
             </br>
             <span style="font-size:16px;padding:0 0 0 5px;color: #999;">深圳市优软科技有限公司</span>
+            </div>
+        </div>
+        <div class="x-join-error" hidden>
+            </br></br></br></br>
+            <span id="error_code" style="padding:0 0 0 5px;color: #2f2c27;">访问链接已失效</span>
         </div>
     </body>
 </html>

+ 12 - 0
frontend/saas-portal-web/static/css/invitation_mobile_join.css

@@ -18,6 +18,18 @@ body {
 	text-align: center;
 	background-color: #fff;
 }
+.x-join-error{
+    background: url("../img/error.png") no-repeat;
+    width: 281px;
+    height: 100px;
+    background-position: center;
+    position: absolute;
+    top: 55%;
+    left: 50%;
+    margin-top: -200px;
+    margin-left: -140px;
+	text-align: center;
+}
 .x-join-center {
 	width: 281px;
     height: 400px;

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


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

@@ -22,6 +22,13 @@ Ext.define('saas.model.report.Purchase', {
         { name: 'pd_total', type: 'float' },
         { name: 'pd_taxprice', type: 'float' },
         { name: 'pd_taxtotal', type: 'float' },
+        { name: 'pd_taxamount', type: 'float',
+            convert: function(v, rec) {
+                var t = (rec.get('pd_total') || 0.0) - (rec.get('pd_taxtotal') || 0.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pd_total', 'pd_taxtotal']
+        },
         { name: 'pd_acceptqty', type: 'float' },
         { name: 'pd_accepttotal', type: 'float' },
         { name: 'pd_remark', type: 'string' },

+ 35 - 0
frontend/saas-web/app/model/report/Sale.js

@@ -0,0 +1,35 @@
+Ext.define('saas.model.report.Sale', {
+    extend: 'saas.model.Base',
+
+    fields: [
+        { name: 'id', type: 'int' },
+        { name: 'sa_code', type: 'string' },
+        { name: 'sa_custname', type: 'string' },
+        { name: 'sa_sendstatus', type: 'string' },
+        { name: 'sa_seller', type: 'string' },
+        { name: 'sa_date', type: 'date' },
+        { name: 'sd_prodcode', type: 'string' },
+        { name: 'pr_brand', type: 'string' },
+        { name: 'pr_detail', type: 'string' },
+        { name: 'pr_orispeccode', type: 'string' },
+        { name: 'pr_spec', type: 'string' },
+        { name: 'sd_qty', type: 'float' },
+        { name: 'pr_unit', type: 'string' },
+        { name: 'sd_price', type: 'float' },
+        { name: 'sd_netprice', type: 'float' },
+        { name: 'sd_price', type: 'float' },
+        { name: 'sd_nettotal', type: 'float' },
+        { name: 'sd_taxrate', type: 'float' },
+        { name: 'sd_taxamount', type: 'float',
+            convert: function(v, rec) {
+                debugger;
+                var t = (rec.get('sd_total') || 0.0) - (rec.get('sd_nettotal') || 0.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['sd_total', 'sd_nettotal']
+        },
+        { name: 'sd_total', type: 'float' },
+        { name: 'sd_pdsendqty', type: 'float' },
+        { name: 'sd_remark', type: 'string' },
+    ],
+});

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

@@ -1,5 +1,5 @@
 .core-base-basepanel{
-    background: #EEF4F9;
+    background: $panel-body-background;
 
     .x-panel-default-outer-border-trl {
         border-top-color: #fff !important;

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

@@ -241,7 +241,6 @@ Ext.define('saas.view.core.base.ImportWindow', {
                                 failure: function(response, opts) {}
                             }); 
                             if(!hasPower){
-                                field.reset();
                                 saas.util.BaseUtil.showErrorToast('上传失败:没有 导入 权限');
                                 return false;
                             }

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

@@ -1,7 +1,7 @@
 Ext.define('saas.view.core.chart.ChartBase', {
     extend: 'Ext.panel.Panel',
 
-    height: 300,
+    height: 280,
     bodyPadding: '16 16 16 0',
 
     layout: 'fit',

+ 6 - 6
frontend/saas-web/app/view/core/chart/ChartBase.scss

@@ -17,12 +17,12 @@
                 &:before {
                     content: ' ';
                     position: absolute;
-                    width: 9px;
-                    height: 9px;
-                    background: #2C82BE;
-                    // border-radius: 50%;
-                    left: 0px;
-                    top: 5px;
+                    width: 5px;
+                    height: 16px;
+                    border-radius: 4px;
+                    background: #33B4EE;
+                    left: 4px;
+                    top: 1px;
                 }
             }
         }

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

@@ -17,7 +17,7 @@ Ext.define('saas.view.core.form.FormPanel', {
     initId: 0,
     layout: 'column',
     autoScroll: true,
-    bodyPadding: 0,
+    bodyPadding: '8 12 8 12',
 
     fieldDefaults: {
         margin: '0 0 10 0',

+ 1 - 1
frontend/saas-web/app/view/core/query/QueryPanel.scss

@@ -8,7 +8,7 @@
 
             .x-box-inner {
                 cursor: default;
-                background: #EEF4F9;
+                background: $panel-body-background;
 
                 .x-box-target {
                     .x-queryform {

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

@@ -196,8 +196,8 @@ Ext.define('saas.view.core.report.ReportPanel', {
             }
         }
         var store = Ext.create('Ext.data.Store', Ext.Object.merge({
-            fields: me.getFields(),
-            // model: me.reportModel,
+            //fields: me.getFields(),
+            model: me.reportModel,
             autoLoad: me.autoLoad,
             pageSize: 15,
             data: [],
@@ -320,11 +320,11 @@ Ext.define('saas.view.core.report.ReportPanel', {
             }
 
             if (c.summaryType) {
-                me.initSummaryType(c);
                 summarys.push({
                     field: c.dataIndex,
-                    operation: c._summaryType == 'last' ? 'customize_last' : c._summaryType,
+                    operation: c.summaryType,
                 });
+                me.initSummaryType(c);
             }
         })
 
@@ -336,6 +336,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
     initSummaryType: function (column) {
         var summaryType = column.summaryType;
         if (Ext.isString(summaryType)) {
+            summaryType = summaryType.replace('customize_','');
             column.summaryTypeName = summaryType;
         }
         if (summaryType == 'sum') {

+ 7 - 0
frontend/saas-web/app/view/core/tab/Panel.js

@@ -2,7 +2,14 @@ Ext.define('saas.view.core.tab.Panel', {
     extend: 'Ext.panel.Panel',
     xtype: 'core-tab-panel',
     controller: 'core-tab-controller',
+
+    cls: 'x-core-tab',
     layout: 'fit',
+    margin: '16 0 16 16',
+    defaults: {
+        padding: '0 16 0 0'
+    },
+    closable: true,
     
     listeners: {
         activate: 'onTabActivate',

+ 5 - 0
frontend/saas-web/app/view/core/tab/Panel.scss

@@ -0,0 +1,5 @@
+.x-core-tab {
+    &>div>.x-panel-body {
+        background: $panel-body-background;
+    }
+}

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

@@ -244,7 +244,7 @@ Ext.define('saas.view.document.kind.ChildForm', {
                         //重新设置combo高度
                         var count = combo.store.getCount();
                         var newHeight = count>5?248-(combo.hiddenBtn?50:0):(33*count+(combo.hiddenBtn?0:50));
-                        combo.picker.setHeight(newHeight);
+                        combo.picker && combo.picker.setHeight(newHeight);
                     });
                 }
                 saas.util.BaseUtil.showSuccessToast('保存成功');

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

@@ -48,6 +48,7 @@ Ext.define('saas.view.document.kind.KindController', {
             return Ext.Array.insert(columns,0,[{
                 xtype:'actioncolumn',
                 text:'操作',
+                align: 'center',
                 items: [{
                     tooltip: '编辑',
                     iconCls: 'x-fa fa-pencil fa-fw',

+ 2 - 4
frontend/saas-web/app/view/home/Home.js

@@ -14,9 +14,8 @@ Ext.define('saas.view.home.Home', {
     },
 
     cls: 'x-home-panel',
-
+    padding: '0 16 0 0',
     layout: 'responsivecolumn',
-
     scrollable: true,
 
     REFRESH_INTERVALS: 5 * 60 * 1000, // 刷新间隔
@@ -51,8 +50,7 @@ Ext.define('saas.view.home.Home', {
             padding: '0 0 0 14',
         }, {
             xtype: 'key-data',
-            margin: 0,
-            padding: '0 0 8 14',
+            margin: 0
         }]
     }, {
         xtype: 'panel',

+ 1 - 1
frontend/saas-web/app/view/home/Home.scss

@@ -114,7 +114,7 @@ $unaudit-purc-container-color: dynamic(#e91e63);
     }
 
     & > .x-panel-bodyWrap > .x-panel-body >.x-autocontainer-outerCt > .x-autocontainer-innerCt {
-        background: #EEF4F9;
+        background: $panel-body-background;
         display: flex;
         justify-content: space-around;
 

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

@@ -8,10 +8,8 @@ Ext.define('saas.view.home.InfoCard', {
         'Ext.layout.container.Card'
     ],
 
-    BaseUtil: Ext.create('saas.util.BaseUtil'),
-
     layout: 'card',
-    height: 150,
+    height: 110,
 
     cardTpl: [
         '<div class="x-row">',
@@ -22,8 +20,8 @@ Ext.define('saas.view.home.InfoCard', {
         '<tpl if="color"> x-bg-{color}</tpl>',
         '<tpl else"> x-bg-default</tpl>',
         '">',
-        '<h3>{title}</h3>',
-        '<p>{content}</p>',
+        '<div class="title">{title}</div>',
+        '<div class="value">{content}</div>',
         '</div>',
         '</div>',
         '</div>',
@@ -71,9 +69,10 @@ Ext.define('saas.view.home.InfoCard', {
             lbar: [{
                 itemId: 'card-prev',
                 hidden: true,
+                margin: '0 8 0 0',
                 cls: 'x-scroller-button x-scroller-button-left',
                 handler: function() {
-                    me. showPrevious();
+                    me.showPrevious();
                 },
                 disabled: true
             }],
@@ -109,7 +108,7 @@ Ext.define('saas.view.home.InfoCard', {
         cards = me.cards,
         datas = [],
         items = [];
-        size = Math.ceil(me.body.el.getBox().width / 235);
+        size = Math.ceil(me.body.el.getBox().width / 230);
 
         me.removeAll();
 

+ 72 - 51
frontend/saas-web/app/view/home/InfoCard.scss

@@ -1,53 +1,68 @@
-$max-card-width: 235px;
+$max-card-width: 230px;
+$card-box-height: 110px;
 
 .x-info-card {
+    .x-panel-body {
+        background: transparent;
 
-    .x-panel-bodyWrap {
-        .x-autocontainer-innerCt {
-            .x-component {
-                display: flex;
-                flex-direction: column;
-                justify-content: center;
-                height: 100%;
+        .x-panel-bodyWrap {
+            .x-autocontainer-innerCt {
+                .x-component {
+                    height: 100%;
+                    .x-row {
+                        background: $panel-body-background;
+                        display: flex;
+                        height: 100%;
+                        width: 100%;
+                        justify-content: flex-start;
+                    
+                        .x-col {
+                    
+                            flex: 1;
+                            max-width: $max-card-width;
+                            color: #fff;
+                            padding: 0 8px;
+                            display: flex;
 
-                .x-row {
-                    display: flex;
-                    width: 100%;
-                    justify-content: flex-start;
-                
-                    .x-col {
-                
-                        flex: 1;
-                        max-width: $max-card-width;
-                        color: #fff;
-                        padding: 10px;
-                
-                        .x-box {
-                            padding: 16px;
-                            height: 120px;
-                            border-radius: 0.5rem;
-                            position: relative;
-                            display: block;
-                            cursor: pointer;
-                
-                            &:hover {
-                                opacity: 0.7;
+                            &:first-child {
+                                padding: 0 8px 0 0;
                             }
+                    
+                            &> div {
+                                flex: 1;
+                                display: flex;
+                                align-items: center;
     
-                            h3 {
-                                text-align: center;
-                                font-size: 16px;
+                                .x-box {
+                                    padding: 24px;
+                                    height: $card-box-height;
+                                    border-radius: 6px;
+                                    position: relative;
+                                    display: flex;
+                                    cursor: pointer;
+                                    flex: 1;
+                                    flex-direction: column;
+                        
+                                    &:hover {
+                                        opacity: 0.7;
+                                    }
+            
+                                    .title {
+                                        font-size: 16px;
+                                        font-weight: bold;
+                                    }
+                        
+                                    .value {
+                                        font-size: 24px;
+                                        text-align: center;
+                                        margin-top: 22px;
+                                    }
+                        
+                                }
+                                .x-box.x-view-item-focused {
+                                    outline: none !important;
+                                }
                             }
-                
-                            p {
-                                font-size: 24px;
-                                text-align: center;
-                                margin-top: 32px;
-                            }
-                
-                        }
-                        .x-box.x-view-item-focused {
-                            outline: none !important;
                         }
                     }
                 }
@@ -57,6 +72,11 @@ $max-card-width: 235px;
 
     .x-toolbar-default-vertical {
         padding: 0;
+        background-color: transparent;
+
+        .x-box-target {
+            height: 100%;
+        }
     }
 
     .x-mask {
@@ -69,15 +89,16 @@ $max-card-width: 235px;
     z-index: 1;
     width: 44px !important;
     min-width: 44px !important;
-    height: 145px !important;
+    height: 100% !important;
     padding: 0 !important;
-    background-color: white !important;
+    background-color: transparent !important;
     border: none !important;
     box-shadow: none !important;
     background-repeat: no-repeat !important;
     background-size: 30px !important;
     background-position-y: center !important;
     background-position-x: 6px !important;
+    cursor: pointer;
 }
 
 .x-scroller-button-left {
@@ -102,22 +123,22 @@ $max-card-width: 235px;
 }
 
 .x-bg-default {
-    background: linear-gradient(to right, #25CBDB , #5161F1);
+    background: linear-gradient(to right, #19C0D5 , #7AEBF8);
 }
 .x-bg-yellow {
-    background: linear-gradient(to right, #F4BF59 , #F99A50);
+    background: linear-gradient(to right, #FA964D , #FCC002);
 }
 .x-bg-purple {
-    background: linear-gradient(to right, #946DFF , #7460FF);
+    background: linear-gradient(to right, #6B73FD , #B195FF);
 }
 .x-bg-red {
-    background: linear-gradient(to right, #FA8B86 , #F36487);
+    background: linear-gradient(to right, #F25F88 , #FFA4BA);
 }
 .x-bg-blue {
-    background: linear-gradient(to right, #1AD0C5 , #26CBDB);
+    background: linear-gradient(to right, #6B6CFA , #58C5F6);
 }
 .x-bg-pink {
-    background: linear-gradient(to right, #FA8A86 , #F26187);
+    background: linear-gradient(to right, #F66F6D , #FD9C8D);
 }
 .x-bg-gray {
     background: linear-gradient(to right, #D8D8D8 , #D8D8D8);

+ 12 - 20
frontend/saas-web/app/view/home/charts/KeyData.js

@@ -5,38 +5,30 @@ Ext.define('saas.view.home.charts.KeyData', {
     id: 'key_data',
     cls: 'quick-graph-panel',
 
-    title: '关键数据',
+    // title: '关键数据',
 
     layout: 'fit',
-    height: 300,
+    height: 280,
+    padding: 0,
 
     cardTpl: [
         '<div class="x-container">',
             '<tpl for=".">',
-                '<div class="x-box x-box-{color}">',
-                    '<div class="x-box-content">',
-                        '<tpl if="showIcon">',
-                            '<div class="x-icon x-icon-{icon}"></div>',
-                        '</tpl>',
-                        '<div class="x-text',
-                            '<tpl if="!showIcon">',
-                                ' x-text-small',
-                            '</tpl>',
-                        '">',
-                            '<tpl if="!showIcon">',
-                                '<div class="x-icon-small x-icon-{icon}"></div>',
-                            '</tpl>',
-                            '<div class="x-key"><span>{label}</span></div>',
-                            '<div class="x-value"><span>{value}</span></div>',
-                        '</div>',
+            '<div class="x-box x-box-{color}">',
+                '<div class="x-box-content">',
+                    '<div class="x-title">{label}</div>',
+                    '<div class="x-contain">',
+                        '<div class="x-icon x-icon-{icon}"></div>',
+                        '<div class="x-value">¥{value}元</div>',
                     '</div>',
                 '</div>',
+            '</div>',
             '</tpl>',
         '</div>'
     ],
 
     cards: [{
-        color: 'green',
+        color: 'yellow',
         showIcon: true,
         icon: 'storageTotal',
         name: 'storageTotal',
@@ -46,7 +38,7 @@ Ext.define('saas.view.home.charts.KeyData', {
         title: '物料库存数量金额表查询',
         id: 'stock-report-datalist',
     }, {
-        color: 'yellow',
+        color: 'purple',
         showIcon: true,
         icon: 'receiveTotal',
         name: 'receiveTotal',

+ 111 - 85
frontend/saas-web/app/view/home/charts/KeyData.scss

@@ -6,126 +6,152 @@
         height: 100%;
         display: flex;
         flex-wrap: wrap;
+        background: $panel-body-background;
 
         .x-box {
-            width: calc(50% - 16px);
-            border-width: 5px 1px 1px;
-            border-style: solid;
-            border-color: #1EC09F;
+            width: calc(50% - 9px);
+            background: #fff;
             cursor: pointer;
-            transition: all 0.4s ease;
+            transition: all 0.3s ease;
+            outline: none !important;
 
-            &:nth-of-type(odd) {
-                margin: 8px 8px 8px 0;
+            // &:hover {
+            //     box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+            //     transform: translate3d(0, -2px, 0);
+            // }
+
+            &:nth-child(1) {
+                margin: 0 8px 8px 0;
 
                 &:hover {
-                    margin: 2px 8px 14px 0;
-                    box-shadow: 0 2px 2px 2px rgba(0, 0, 0, 0.12);
+                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+                    transform: translate3d(2px, 2px, 0);
                 }
             }
 
-            &:nth-of-type(even) {
-                margin: 8px 0 8px 8px;
+            &:nth-child(2) {
+                margin: 0 0 8px 8px;
 
                 &:hover {
-                    margin: 2px 0 14px 8px;
-                    box-shadow: 0 2px 2px 2px rgba(0, 0, 0, 0.12);
+                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+                    transform: translate3d(-2px, 2px, 0);
                 }
             }
 
-            .x-box-content {
-                display: flex;
-                height: 100%;
-                padding: 16px;
+            &:nth-child(3) {
+                margin: 8px 8px 0 0;
 
-                .x-icon {
-                    flex: 4;
-                    max-width: 48px;
-                    background-repeat: no-repeat;
-                    background-size: contain;
-                    background-position: center;
+                &:hover {
+                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+                    transform: translate3d(2px, -2px, 0);
+                }
+            }
 
-                    &-small {
-                        opacity: 0.7;
-                        width: 36px;
-                        height: 36px;
-                        position: relative;
-                        background-repeat: no-repeat;
-                        background-size: contain; 
-                    }
+            &:nth-child(4) {
+                margin: 8px 0 0 8px;
 
-                    &-storageTotal {
-                        background-image: url(get-resource-path('images/home/storageTotal.png'));
-                    }
-                    &-receiveTotal {
-                        background-image: url(get-resource-path('images/home/receiveTotal.png'));
-                    }
-                    &-payTotal {
-                        background-image: url(get-resource-path('images/home/payTotal.png'));
-                    }
-                    &-balanceTotal {
-                        background-image: url(get-resource-path('images/home/balanceTotal.png'));
-                    }
+                &:hover {
+                    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.2);
+                    transform: translate3d(-2px, -2px, 0);
                 }
+            }
 
-                .x-text {
-                    flex: 6;
-                    display: flex;
-                    color: #485465;
-                    flex-direction: column;
-                    align-items: flex-end;
-                    overflow: hidden;
+            .x-box-content {
+                display: flex;
+                flex-direction: column;
+                height: 100%;
+
+                .x-title {
+                    flex: 1;
+                    height: 30px;
+                    line-height: 30px;
+                    font-size: 14px;
+                    padding: 0 20px;
+                    color: #fff;
+                    border-radius: 4px 4px 0 0;
+                }
+                .x-contain {
+                    border-style: solid;
+                    border-width: 0 1px 1px 1px;
+                    border-radius: 0 0 4px 4px;
+                    height: 100%;
 
-                    .x-key {
-                        flex: 1;
-                        display: flex;
-                        align-items: flex-end;
-                        margin-bottom: 5px;
-                        font-size: 14px;
-                        color: #485465;
+                    .x-icon {
+                        background-repeat: no-repeat;
+                        background-size: contain;
+                        background-position: center;
+                        width: 100%;
+                        height: 40px;
+                        margin: 14px 0 7px 0;
+    
+                        &-storageTotal {
+                            background-image: url(get-resource-path('images/home/storageTotal.png'));
+                        }
+                        &-receiveTotal {
+                            background-image: url(get-resource-path('images/home/receiveTotal.png'));
+                        }
+                        &-payTotal {
+                            background-image: url(get-resource-path('images/home/payTotal.png'));
+                        }
+                        &-balanceTotal {
+                            background-image: url(get-resource-path('images/home/balanceTotal.png'));
+                        }
                     }
-                
+    
                     .x-value {
-                        flex: 1;
-                        display: flex;
-                        align-items: flex-start;
+                        text-align: center;
                         font-size: 16px;
                         color: #1E2429;
-                        text-overflow: ellipsis;
+                        letter-spacing: 0.19px;
+                        padding: 0 20px;
                         overflow: hidden;
-                    }
-
-                    &-small {
-                        display: block;
-
-                        .x-key {
-                            text-align: end;
-                            display: block;
-                            padding-left: 54px;
-                            margin-top: -17px;
-                            margin-bottom: 14px;
-                        }
-
-                        .x-value {
-                            display: block;
-                            text-align: end;
-                        }
+                        text-overflow: ellipsis;
+                        white-space: nowrap;
                     }
                 }
             }
         }
 
-        .x-box-green {
-            border-color: #1EC09F;
-        }
         .x-box-yellow {
-            border-color: #FDC200;
+            .x-box-content {
+                .x-title {
+                    background-image: linear-gradient(270deg, #FFE300 0%, #FBAC27 100%);
+                }
+                .x-contain {
+                    border-color: #FDC200;
+                }
+            }
+        }
+        .x-box-purple {
+            .x-box-content {
+                .x-title {
+                    background-image: linear-gradient(270deg, #A58FFF 0%, #7477FE 100%);
+                }
+                .x-contain {
+                    border-color: #7477FE;
+                }
+            }
         }
         .x-box-red {
-            border-color: #FB6A83;
+
+            .x-box-content {
+                .x-title {
+                    background-image: linear-gradient(270deg, #FDA3B9 0%, #F2668C 100%);
+                }
+                .x-contain {
+                    border-color: #FB6A83;
+                }
+            }
         }
         .x-box-blue {
-            border-color: #62A3DF;
+            .x-box-content {
+                .x-title {
+                    background-image: linear-gradient(270deg, #87DBFF 0%, #27A7FF 100%);
+                }
+                .x-contain {
+                    border-color: #33AEFF;
+                }
+            }
         }
     }
 }

+ 8 - 8
frontend/saas-web/app/view/home/charts/SaleTrend.js

@@ -40,18 +40,18 @@ Ext.define('saas.view.home.charts.SaleTrend', {
             name: '销售额',
             type: 'line',
             data: sale,
-            symbolSize: 1,
-            areaStyle: {
-                color: '#EDF6FC',
-            }
+            symbolSize: 8,
+            // areaStyle: {
+            //     color: '#EDF6FC',
+            // }
         }, {
             name: '销售回款',
             type: 'line',
             data: saleBack,
-            symbolSize: 1,
-            areaStyle: {
-                color: '#FBEDEF',
-            }
+            symbolSize: 8,
+            // areaStyle: {
+            //     color: '#FBEDEF',
+            // }
         }]);
         return {
             color: [

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

@@ -7,6 +7,8 @@ $font-weight-bold: dynamic(500);
 $accordion-header-background-color: dynamic($lightest-color);
 $accordion-header-color: dynamic(#333);
 
+$panel-body-background: dynamic(#EEF4F9) !default;
+
 $treelist-nav-ui: (
         padding: 0 10px,
         background-color: $panel-navigation-background-color,
@@ -53,7 +55,7 @@ $treelist-nav-ui: (
         //     }
         // }
         #main-tab-panel-body {
-            background: #EEF4F9;
+            background: $panel-body-background;
 
         }
     }

+ 4 - 3
frontend/saas-web/app/view/main/MainContainerWrap.js

@@ -28,8 +28,7 @@ Ext.define('saas.view.main.MainContainerWrap', {
             cls: 'main-right-tabpanel',
             itemId: 'contentPanel',
             defaults: {
-                closable: true,
-                margin: 16
+                xtype: 'core-tab-panel',
             },
             plugins: [new Ext.ux.TabCloseMenu({
                 closeTabText: '关闭当前页',
@@ -37,10 +36,12 @@ Ext.define('saas.view.main.MainContainerWrap', {
                 closeOthersTabsText: '关闭其他页'
             })],
             items: [{
-                xtype: 'core-tab-panel',
                 iconCls: 'x-sa sa-home',
                 title: '首页',
                 closable: false,
+                // margin: '16 0 16 16',
+                // scrollable: true,
+                // bodyPadding: '0 16 0 0',
                 items: [{
                     xtype: 'home',
                 }]

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

@@ -278,7 +278,7 @@ Ext.define('saas.view.main.MainController', {
                                 var serverOptions = Ext.manifest.server;
                                 var delay = 1;//天
                                 var basePath = serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath;
-                                f.setSrc('/api/commons/share/qrcode?basePath='+basePath+'&delay='+delay)
+                                f.setSrc(basePath+'/api/commons/share/qrcode?basePath='+basePath+'&delay='+delay)
                             }
                         }
                     },{

+ 12 - 20
frontend/saas-web/app/view/main/Navigation.scss

@@ -107,7 +107,7 @@ $menu-body-background-color: #65678C;
 
 .x-nav-menu {
     border: none;
-    border-radius: 0 4px 4px 0;
+    border-radius: 0 2px 2px 0;
 }
 
 .x-navitem-menu {
@@ -143,14 +143,6 @@ $menu-body-background-color: #65678C;
                 }
                 .menu-content {
                     border-left: 1px solid #A4ABBC;
-                    // &:before {
-                    //     content: '';
-                    //     position: absolute;
-                    //     width: 2px;
-                    //     height: 22px;
-                    //     margin-left: -2px;
-                    //     background: $menu-body-background-color;
-                    // }
                     &:after {
                         content: '';
                         position: absolute;
@@ -202,11 +194,11 @@ $menu-body-background-color: #65678C;
 
                     .item-icon {
                         cursor: pointer;
-                        background: #64b448;
+                        background: #33B4EE;
                         color: #fff;
                         display: none;
                         padding: 3px 6px;
-                        // border-radius: 3px;
+                        border-radius: 2px;
                         margin-right: 5px;
                         height: 24px;
                         margin-top: 5px;
@@ -217,17 +209,17 @@ $menu-body-background-color: #65678C;
                     }
 
                     &:hover {
-                        // border-radius: 4px;
+                        border-radius: 2px;
                         background-color: #595B7E;
 
-                        &:before {
-                            content: ' ';
-                            position: absolute;
-                            width: 6px;
-                            height: 34px;
-                            background: #34baf6;
-                            margin-left: -25px;
-                        }
+                        // &:before {
+                        //     content: ' ';
+                        //     position: absolute;
+                        //     width: 6px;
+                        //     height: 34px;
+                        //     background: #34baf6;
+                        //     margin-left: -25px;
+                        // }
 
                         .item-icon {
                             display: block;

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

@@ -108,7 +108,7 @@ Ext.define('saas.view.money.report.PayDetail', {
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
-        summaryType: 'last',
+        summaryType: 'customize_last',
         summaryRenderer: function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');

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

@@ -116,7 +116,7 @@ Ext.define('saas.view.money.report.RecDetail', {
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
-        summaryType: 'last',
+        summaryType: 'customize_last',
         summaryRenderer: function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');

+ 55 - 45
frontend/saas-web/app/view/purchase/report/Purchase.js

@@ -47,34 +47,24 @@ Ext.define('saas.view.purchase.report.Purchase', {
         text: '采购单号',
         dataIndex: 'pu_code',
         width: 150
-    }, {
-        text: '供应商编号',
-        dataIndex: 'pu_vendcode',
-        hidden: true
     }, {
         text: '供应商名称',
         dataIndex: 'pu_vendname',
-        width: 250
+        width: 200
     }, {
         text: '业务状态',
         align: 'center',
         dataIndex: 'pu_acceptstatus',
-        width: 90
+        width: 80
     }, {
         text: '采购员',
         dataIndex: 'pu_buyername',
-        width: 110
+        width: 80
     }, {
         text: '单据日期',
         xtype: 'datecolumn',
         dataIndex: 'pu_date',
         width: 110
-    }, {
-        text: '序号',
-        dataIndex: 'pd_detno',
-        exportFormat: 'Integer',
-        xtype: 'numbercolumn',
-        width: 80
     }, {
         text: '物料编号',
         width: 150,
@@ -82,7 +72,7 @@ Ext.define('saas.view.purchase.report.Purchase', {
     }, {
         text: '品牌',
         dataIndex: 'pr_brand',
-        width: 200
+        width: 100
     }, {
         text: '名称',
         dataIndex: 'pr_detail',
@@ -94,7 +84,7 @@ Ext.define('saas.view.purchase.report.Purchase', {
     }, {
         text: '规格',
         dataIndex: 'pr_spec',
-        width: 150
+        width: 200
     }, {
         text: '采购数量',
         dataIndex: 'pd_qty',
@@ -117,12 +107,12 @@ Ext.define('saas.view.purchase.report.Purchase', {
     }, {
         text: '单位',
         dataIndex: 'pr_unit',
-        width: 80
+        width: 65
     }, {
         text: '单价(元)',
-        dataIndex: 'pd_price',
+        dataIndex: 'pd_taxprice',
         exportFormat: 'Price',
-        width: 110,
+        width: 120,
         xtype: 'numbercolumn',
         renderer: function(v) {
             var arr = (v + '.').split('.');
@@ -131,17 +121,20 @@ Ext.define('saas.view.purchase.report.Purchase', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '税率',
-        dataIndex: 'pd_taxrate',
-        exportFormat: 'Integer',
-        width: 80,
+        text: '含税单价(元)',
+        dataIndex: 'pd_price',
+        exportFormat: 'Price',
+        width: 120,
         xtype: 'numbercolumn',
         renderer: function(v) {
-            return Ext.util.Format.number(v, '0');
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 4 ? 4 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
         }
     }, {
         text: '金额(元)',
-        dataIndex: 'pd_total',
+        dataIndex: 'pd_taxtotal',
         exportFormat: 'Amount',
         width: 110,
         xtype: 'numbercolumn',
@@ -159,28 +152,58 @@ Ext.define('saas.view.purchase.report.Purchase', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '不含税单价(元)',
-        dataIndex: 'pd_taxprice',
-        exportFormat: 'Price',
-        width: 150,
+        text: '税率(%)',
+        dataIndex: 'pd_taxrate',
+        exportFormat: 'Integer',
+        width: 80,
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            return Ext.util.Format.number(v, '0');
+        }
+    }, {
+        text: '税额(元)',
+        dataIndex: 'pd_taxamount',
+        exportFormat: 'Amount',
+        width: 110,
         xtype: 'numbercolumn',
         renderer: function(v) {
             var arr = (v + '.').split('.');
-            var xr = (new Array(arr[1].length > 4 ? 4 : arr[1].length)).fill('0');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
+        },
+        summaryType: 'customize_sum',
+        summaryRenderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
+        mySummaryRenderer: function(grid, column, datas) {
+            var arr = [];
+            arr = datas.map(function(d) {
+                return d['pd_taxamount'];
+            });
+            return Ext.Array.sum(arr);
         }
     }, {
-        text: '不含税金额(元)',
+        text: '价税合计(元)',
+        dataIndex: 'pd_total',
         exportFormat: 'Amount',
-        width: 150,
-        dataIndex: 'pd_taxtotal',
+        width: 110,
         xtype: 'numbercolumn',
         renderer: function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
+        },
+        summaryType: 'sum',
+        summaryRenderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
         }
     }, {
         text: '收货数量',
@@ -201,19 +224,6 @@ Ext.define('saas.view.purchase.report.Purchase', {
             var format = '0.' + xr.join('');
             return Ext.util.Format.number(v, format);
         }
-    }, {
-        text: '收货金额(元)',
-        dataIndex: 'pd_pdaccepttotal',
-        exportFormat: 'Amount',
-        width: 110,
-        xtype: 'numbercolumn',
-        renderer: function(v) {
-            var arr = (v + '.').split('.');
-            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
-            var format = '0,000.' + xr.join('');
-            return Ext.util.Format.number(v, format);
-        }
-
     }, {
         text: '备注',
         dataIndex: 'pd_remark',

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

@@ -6,7 +6,6 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
     viewModel: 'purchase-report-purchasepay',
 
     viewName: 'purchase-report-purchasepay',
-//按供应商分组 付款金额合计
     groupField: 'pu_vendname',
     groupHeaderTpl: '供应商名称: {[values.rows[0].data.pu_vendname]}',
     listUrl: '/api/purchase/report/purchasePay',
@@ -38,7 +37,7 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
     }, {
         text: '供应商名称',
         dataIndex: 'pu_vendname',
-        width: 250
+        width: 200
     }, {
         text : "日期", 
         dataIndex : "createTime", 
@@ -49,29 +48,35 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
         dataIndex: 'pbd_slcode',
         width: 150
     }, {
-        text: '类型',
+        text: '业务类型',
         dataIndex: 'pbd_slkind',
-        width: 110
-    }, {//∑求和
-        text: '采购金额(元)',
+        width: 100
+    }, {
+        text: '金额(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        dataIndex: 'pbd_amount',
-        width: 110,
+        dataIndex: 'pi_nettotal',
+        width: 120,
         renderer: function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
-        // summaryRenderer: function(v) {
-        //     var arr = (v + '.').split('.');
-        //     var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
-        //     var format = '0,000.' + xr.join('');
-        //     return Ext.util.Format.number(v, format);
-        // }
-    }, {//∑求和
-        text: '本次付款',
+    }, {
+        text: '税额(元)',
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        dataIndex: 'pi_taxamount',
+        width: 120,
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
+    }, {
+        text: '付款金额(元)',
         dataIndex: 'pbd_nowbalance',
         exportFormat: 'Amount',
         xtype: 'numbercolumn',
@@ -89,13 +94,6 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         }
-    }, {
-        text: '应付余额',
-        xtype: 'numbercolumn',
-        exportFormat: 'Amount',
-        dataIndex: 'pb_pbdamount',
-        width: 110,
-        hidden:true
     }, {
         text: '付款比例%',
         //本次付款/采购金额*100%
@@ -108,6 +106,10 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
             var format = '0.' + xr.join('');
             return Ext.util.Format.number(v, format);
         }
+    }, {
+        text: '付款人',
+        dataIndex: 'pb_manname',
+        width: 80
     }, {
         text: '备注',
         dataIndex: 'pb_remark',

+ 56 - 49
frontend/saas-web/app/view/sale/report/Sale.js

@@ -36,7 +36,7 @@ Ext.define('saas.view.sale.report.Sale', {
             ["CLOSE", "已关闭"]
         ]
     }],
-
+    reportModel: 'saas.model.report.Sale',
     reportColumns: [
     {
         text: 'id',
@@ -46,35 +46,24 @@ Ext.define('saas.view.sale.report.Sale', {
         text: '销售单号',
         dataIndex: 'sa_code',
         width: 150
-    }, {
-        text: '客户编号',
-        dataIndex: 'sa_custcode',
-        hidden: true
     }, {
         text: '客户名称',
         dataIndex: 'sa_custname',
-        width: 250
+        width: 200
     }, {
         text: '业务状态',
         align: 'center',
-        dataIndex: 'sa_sendstatus'
-    }, {
-        text: '业务员编号',
-        dataIndex: 'sa_sellercode',
-        hidden:true
+        dataIndex: 'sa_sendstatus',
+        width: 80
     }, {
         text: '业务员',
-        dataIndex: 'sa_seller'
+        dataIndex: 'sa_seller',
+        width: 80
     }, {
         text: '单据日期',
         xtype: 'datecolumn',
-        dataIndex: 'sa_date'
-    }, {
-        text: '序号',
-        dataIndex: 'sd_detno',
-        exportFormat: 'Integer',
-        xtype: 'numbercolumn',
-        width: 80
+        dataIndex: 'sa_date',
+        width: 110
     }, {
         text: '物料编号',
         width: 150,
@@ -82,11 +71,11 @@ Ext.define('saas.view.sale.report.Sale', {
     }, {
         text: '品牌',
         dataIndex: 'pr_brand',
-        width: 200
+        width: 100
     }, {
         text: '名称',
         dataIndex: 'pr_detail',
-        width: 200
+        width: 150
     }, {
         text: '型号',
         dataIndex: 'pr_orispeccode',
@@ -94,12 +83,13 @@ Ext.define('saas.view.sale.report.Sale', {
     }, {
         text: '规格',
         dataIndex: 'pr_spec',
-        width: 150
+        width: 200
     }, {
-        text: '数量',
+        text: '销售数量',
         dataIndex: 'sd_qty',
         exportFormat: 'Quantity',
         xtype: 'numbercolumn',
+        width: 110,
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');
@@ -109,12 +99,13 @@ Ext.define('saas.view.sale.report.Sale', {
     }, {
         text: '单位',
         dataIndex: 'pr_unit',
-        width: 80
+        width: 65
     }, {
         text: '单价(元)',
-        dataIndex: 'sd_price',
+        dataIndex: 'sd_netprice',
         exportFormat: 'Price',
         xtype: 'numbercolumn',
+        width: 120,
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 4 ? 4 : arr[1].length)).fill('0');
@@ -122,11 +113,11 @@ Ext.define('saas.view.sale.report.Sale', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '含税单价(元)',
-        dataIndex: 'sd_netprice',
+        text: '含税单价(元)',
+        dataIndex: 'sd_price',
         exportFormat: 'Price',
         xtype: 'numbercolumn',
-        width: 150,
+        width: 120,
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 4 ? 4 : arr[1].length)).fill('0');
@@ -134,7 +125,26 @@ Ext.define('saas.view.sale.report.Sale', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '税率',
+        text: '金额(元)',
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        width: 120,
+        dataIndex: 'sd_nettotal',
+        renderer : function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
+        summaryType: 'sum',
+        summaryRenderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        }
+    }, {
+        text: '税率(%)',
         dataIndex: 'sd_taxrate',
         exportFormat: 'Integer',
         width: 80,
@@ -142,30 +152,39 @@ Ext.define('saas.view.sale.report.Sale', {
         renderer : function(v) {
             return Ext.util.Format.number(v, '0');
         }
-    }, {//∑金额
-        text: '额(元)',
+    }, {
+        text: '额(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        dataIndex: 'sd_total',
+        dataIndex: 'sd_taxamount',
+        width: 120,
         renderer : function(v) {
+            v = (r.data["sd_total"]||0.0) - (r.data["sd_nettotal"]||0.0);
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
-        summaryType: 'sum',
+        summaryType: 'customize_sum',
         summaryRenderer: function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
+        },
+        mySummaryRenderer: function(grid, column, datas) {
+            var arr = [];
+            arr = datas.map(function(d) {
+                return d['sd_taxamount'];
+            });
+            return Ext.Array.sum(arr);
         }
     }, {
-        text: '不含税金额(元)',
+        text: '价税合计(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        width: 150,
-        dataIndex: 'sd_nettotal',
+        dataIndex: 'sd_total',
+        width: 120,
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
@@ -184,25 +203,13 @@ Ext.define('saas.view.sale.report.Sale', {
         dataIndex: 'sd_pdsendqty',
         exportFormat: 'Quantity',
         xtype: 'numbercolumn',
+        width: 110,
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');
             var format = '0.' + xr.join('');
             return Ext.util.Format.number(v, format);
         }
-    }, {
-        text: '出货金额(元)',
-        dataIndex: 'sd_pdsendqtytotal',
-        exportFormat: 'Amount',
-        width: 110,
-        xtype: 'numbercolumn',
-        renderer: function(v) {
-            var arr = (v + '.').split('.');
-            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
-            var format = '0,000.' + xr.join('');
-            return Ext.util.Format.number(v, format);
-        }
-
     }, {
         text : "备注", 
         dataIndex : "sd_remark",

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

@@ -33,17 +33,10 @@ Ext.define('saas.view.sale.report.SaleRec', {
         text: '收款单号',
         dataIndex: 'rb_code',
         width: 150
-    }, {
-        text: '客户编号',
-        dataIndex: 'rb_custcode',
-        width: 150
     }, {
         text: '客户名称',
         dataIndex: 'rb_custname',
         width: 200
-    }, {
-        text: '业务员',
-        dataIndex: 'rb_manname'
     }, {
         text: '日期',
         dataIndex: 'rb_date',
@@ -53,13 +46,13 @@ Ext.define('saas.view.sale.report.SaleRec', {
         dataIndex: 'rbd_slcode',
         width: 150
     }, {
-        text: '类型',
+        text: '业务类型',
         dataIndex: 'rbd_slkind'
     }, {
-        text: '销售金额(元)',
+        text: '金额(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        dataIndex: 'rbd_amount',
+        dataIndex: 'pi_nettotal',
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
@@ -67,10 +60,10 @@ Ext.define('saas.view.sale.report.SaleRec', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '收款金额(元)',
+        text: '额(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        dataIndex: 'rbd_nowbalance',
+        dataIndex: 'rbd_taxamount',
         renderer : function(v) {
             var arr = (v + '.').split('.');
             var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
@@ -85,10 +78,28 @@ Ext.define('saas.view.sale.report.SaleRec', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '应收余额',
+        text: '价税合计(元)',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
-        dataIndex: 'rb_rbdamount',
+        dataIndex: 'pi_total',
+        renderer : function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        },
+        summaryType: 'sum',
+        summaryRenderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v, format);
+        }
+    }, {
+        text: '收款余额(元)',
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        dataIndex: 'rbd_nowbalance',
         hidden:true,
         renderer : function(v) {
             var arr = (v + '.').split('.');

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

@@ -327,7 +327,7 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                 }
             }, {
                 text : "出货单号", 
-                dataIndex : "pd_orderdetno", 
+                dataIndex : "pd_iocode", 
                 xtype : "numbercolumn",
                 width: 110.0,
                 format: '0',

BIN
frontend/saas-web/resources/images/home/balanceTotal.png


BIN
frontend/saas-web/resources/images/home/payTotal.png


BIN
frontend/saas-web/resources/images/home/receiveTotal.png


BIN
frontend/saas-web/resources/images/home/storageTotal.png