Forráskód Böngészése

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

rainco 7 éve
szülő
commit
f40629aaae
73 módosított fájl, 1599 hozzáadás és 165 törlés
  1. 2 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java
  2. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/ConfigsMapper.java
  3. 16 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java
  4. 3 0
      applications/commons/commons-server/src/main/resources/mapper/ConfigsMapper.xml
  5. 3 3
      applications/document/document-server/src/main/resources/application.yml
  6. 2 2
      applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml
  7. 3 0
      applications/money/money-dto/src/main/java/com/usoftchina/saas/money/dto/VerificationListDTO.java
  8. 36 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtransfer.java
  9. 3 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VerificationList.java
  10. 1 1
      applications/money/money-server/src/main/resources/application.yml
  11. 7 1
      applications/money/money-server/src/main/resources/mapper/FundtransferMapper.xml
  12. 3 1
      applications/money/money-server/src/main/resources/mapper/VerificationListMapper.xml
  13. 9 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  14. 3 3
      applications/purchase/purchase-server/src/main/resources/application.yml
  15. 3 3
      applications/sale/sale-server/src/main/resources/application.yml
  16. 0 28
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/B2BPurchaseApi.java
  17. 1 1
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/SearchUUApi.java
  18. 55 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseDetailEnd.java
  19. 1 1
      applications/transfers/mall-api/src/test/resources/application.yml
  20. 1 1
      applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApi.java
  21. 48 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/config/B2BConfig.java
  22. 5 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java
  23. 1 1
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/Executable.java
  24. 79 0
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseEndTask.java
  25. 27 5
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseTask.java
  26. 1 1
      applications/transfers/transfers-server/src/main/resources/application.yml
  27. 2 2
      base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/AccountApi.java
  28. 14 0
      frontend/saas-web/app/model/report/Purchase.js
  29. 16 2
      frontend/saas-web/app/model/report/Sale.js
  30. 29 6
      frontend/saas-web/app/model/report/SaleProfit.js
  31. 1 1
      frontend/saas-web/app/view/core/base/BasePanel.js
  32. 6 1
      frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js
  33. 4 4
      frontend/saas-web/app/view/core/form/FormPanel.js
  34. 6 2
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  35. 1 1
      frontend/saas-web/app/view/core/report/ReportPanel.js
  36. 7 1
      frontend/saas-web/app/view/document/customer/FormPanel.js
  37. 164 0
      frontend/saas-web/app/view/document/uusetting/UUSetting.js
  38. 79 0
      frontend/saas-web/app/view/document/uusetting/UUSettingController.js
  39. 83 0
      frontend/saas-web/app/view/document/uusetting/UUSettingModel.js
  40. 459 0
      frontend/saas-web/app/view/document/uusetting/UUSettingWin.js
  41. 7 1
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  42. 7 7
      frontend/saas-web/app/view/money/fundtransfer/FormPanel.js
  43. 53 8
      frontend/saas-web/app/view/money/fundtransfer/QueryPanel.js
  44. 7 1
      frontend/saas-web/app/view/money/othreceipts/FormPanel.js
  45. 24 0
      frontend/saas-web/app/view/money/othreceipts/QueryPanel.js
  46. 7 1
      frontend/saas-web/app/view/money/othspendings/FormPanel.js
  47. 24 0
      frontend/saas-web/app/view/money/othspendings/QueryPanel.js
  48. 7 1
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  49. 24 0
      frontend/saas-web/app/view/money/payBalance/QueryPanel.js
  50. 7 1
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  51. 24 0
      frontend/saas-web/app/view/money/recBalance/QueryPanel.js
  52. 4 1
      frontend/saas-web/app/view/money/report/AccountDetails.js
  53. 35 5
      frontend/saas-web/app/view/money/verification/FormPanel.js
  54. 13 1
      frontend/saas-web/app/view/money/verification/QueryPanel.js
  55. 7 1
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  56. 8 2
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js
  57. 7 1
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  58. 28 4
      frontend/saas-web/app/view/purchase/report/Purchase.js
  59. 5 5
      frontend/saas-web/app/view/sale/b2b/Business.js
  60. 2 2
      frontend/saas-web/app/view/sale/b2b/BusinessController.js
  61. 8 0
      frontend/saas-web/app/view/sale/b2b/BusinessModel.js
  62. 12 0
      frontend/saas-web/app/view/sale/b2b/MyBusiness.js
  63. 5 4
      frontend/saas-web/app/view/sale/b2b/Product.js
  64. 3 3
      frontend/saas-web/app/view/sale/b2b/QuoteWin.js
  65. 0 8
      frontend/saas-web/app/view/sale/business/BusinessModel.js
  66. 0 12
      frontend/saas-web/app/view/sale/business/MyBusiness.js
  67. 25 3
      frontend/saas-web/app/view/sale/report/Sale.js
  68. 15 2
      frontend/saas-web/app/view/sale/report/SaleProfit.js
  69. 7 1
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  70. 7 1
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  71. 7 1
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  72. 12 10
      frontend/saas-web/app/view/stock/report/Prodiodetail.js
  73. 12 6
      frontend/saas-web/resources/json/navigation.json

+ 2 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java

@@ -62,6 +62,8 @@ public enum  BillCodeSeq {
 
     BOM("BOM资料", "Bom"),
 
+    PURCHASEEND("采购单结案", "PURCHASEEND"),
+
     APCHECK("对账单", "APCHECK");
 
 

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

@@ -23,4 +23,6 @@ public interface ConfigsMapper {
     void updateCreator(@Param("userId") Long userId, @Param("userName") String userName, @Param("id") Long id);
 
     void updateByCodeSelective(Configs con);
+
+    int selectByCodeAndCompanyId(@Param("code") String code, @Param("companyId") Long companyId);
 }

+ 16 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -109,6 +110,21 @@ public class ConfigsServiceImpl implements ConfigsService{
                 currencyDTO.setCr_name(con.getData());
                 currencyDTO.setCr_standard(1L);
                 currencyApi.setStandard(currencyDTO);
+            } else if("enableB2B".equals(con.getCode())){
+                int count = configsMapper.selectByCodeAndCompanyId(con.getCode(), BaseContextHolder.getCompanyId());
+                if (count == 0){
+                    //不存在,则插入
+                    Configs configs = new Configs();
+                    configs.setCode(con.getCode());
+                    configs.setDescription("启用B2B");
+                    configs.setData(con.getData());
+                    configs.setCompanyId(BaseContextHolder.getCompanyId());
+                    configs.setCreateTime(new Date());
+                    configs.setCreatorName(BaseContextHolder.getUserName());
+                    configs.setCreatorId(Integer.parseInt(String.valueOf(BaseContextHolder.getUserId())));
+                    configsMapper.insertSelective(configs);
+                    continue;
+                }
             }
             configsMapper.updateByCodeSelective(con);
         }

+ 3 - 0
applications/commons/commons-server/src/main/resources/mapper/ConfigsMapper.xml

@@ -180,5 +180,8 @@
     </set>
     where code = #{code,jdbcType=VARCHAR} and companyid = #{companyId}
   </update>
+  <select id="selectByCodeAndCompanyId" resultType="int">
+    SELECT COUNT(*) FROM CONFIGS WHERE CODE = #{code} AND COMPANYID = #{companyId}
+  </select>
 
 </mapper>

+ 3 - 3
applications/document/document-server/src/main/resources/application.yml

@@ -75,8 +75,8 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 5000
-  ConnectTimeout: 5000
+  ReadTimeout: 10000
+  ConnectTimeout: 10000
 feign:
   hystrix:
     enabled: true
@@ -96,4 +96,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

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

@@ -32,7 +32,7 @@
   <sql id="Base_Column_List" >
     bk_id, bk_bankcode, bk_bankname, bk_date, bk_type, bk_beginamount, bk_thisamount, 
     bk_status, bk_statuscode, bk_ym, bankinformation.companyid companyid,
-    bankinformation.updaterId updaterId, bankinformation.updateTime updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark,bk_currency,cr_rate
+    bankinformation.updaterId updaterId, bankinformation.updateTime updateTime, bk_text1, bk_text2, bk_text3, bk_text4, bk_text5, bk_remark,bk_currency
   </sql>
   <sql id="Blob_Column_List" >
     bk_remark
@@ -319,7 +319,7 @@
 
   <select id="selectBankinformationBycondition" resultMap="BaseResultMap">
     select
-    <include refid="Base_Column_List" />
+    <include refid="Base_Column_List" /> ,cr_rate
     from bankinformation
     left join currencys on currencys.companyId = Bankinformation.companyid and cr_name = bk_currency
     <where>

+ 3 - 0
applications/money/money-dto/src/main/java/com/usoftchina/saas/money/dto/VerificationListDTO.java

@@ -128,4 +128,7 @@ public class VerificationListDTO implements Serializable {
     private String vcd_text4;
 
     private String vcd_text5;
+    private String vc_currency;
+
+    private Double vc_rate;
 }

+ 36 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtransfer.java

@@ -44,6 +44,42 @@ public class Fundtransfer extends CommonBaseEntity implements Serializable {
 
     private Date ft_auditdate;
 
+    private String ftd_currency;
+    private String ftd_incurrency;
+    private Double ftd_innowbalance;
+    private Double ftd_rate;
+
+    public String getFtd_currency() {
+        return ftd_currency;
+    }
+
+    public void setFtd_currency(String ftd_currency) {
+        this.ftd_currency = ftd_currency;
+    }
+
+    public String getFtd_incurrency() {
+        return ftd_incurrency;
+    }
+
+    public void setFtd_incurrency(String ftd_incurrency) {
+        this.ftd_incurrency = ftd_incurrency;
+    }
+
+    public Double getFtd_innowbalance() {
+        return ftd_innowbalance;
+    }
+
+    public void setFtd_innowbalance(Double ftd_innowbalance) {
+        this.ftd_innowbalance = ftd_innowbalance;
+    }
+
+    public Double getFtd_rate() {
+        return ftd_rate;
+    }
+
+    public void setFtd_rate(Double ftd_rate) {
+        this.ftd_rate = ftd_rate;
+    }
 
     public String getFtd_remark() {
         return ftd_remark;

+ 3 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/VerificationList.java

@@ -96,6 +96,9 @@ public class VerificationList extends CommonBaseEntity implements Serializable {
     private String vd_text4;
 
     private String vd_text5;
+    private String vc_currency;
+
+    private Double vc_rate;
 //
 //    private Integer vcd_id;
 //

+ 1 - 1
applications/money/money-server/src/main/resources/application.yml

@@ -82,4 +82,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

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

@@ -27,6 +27,11 @@
     <result column="ft_auditman" property="ft_auditman" jdbcType="VARCHAR" />
     <result column="ft_auditdate" property="ft_auditdate" jdbcType="TIMESTAMP" />
     <result column="createTime" property="createTime" jdbcType="TIMESTAMP" />
+
+    <result column="ftd_currency" property="ftd_currency" jdbcType="VARCHAR" />
+    <result column="ftd_incurrency" property="ftd_incurrency" jdbcType="VARCHAR" />
+    <result column="ftd_innowbalance" property="ftd_innowbalance" jdbcType="DOUBLE" />
+    <result column="ftd_rate" property="ftd_rate" jdbcType="DOUBLE" />
   </resultMap>
   <sql id="Base_Column_List" >
     ft_id, ft_code, ft_date, ft_status, ft_statuscode,
@@ -35,7 +40,8 @@
     ft_auditman, ft_auditdate
   </sql>
   <sql id="Detail_Column_List" >
-    ftd_bankname,ftd_inbankname,ftd_nowbalance,ftd_paymethod,ftd_paycode,ftd_remark
+    ftd_bankname,ftd_inbankname,ftd_nowbalance,ftd_paymethod,ftd_paycode,ftd_remark,ftd_currency,
+    ftd_incurrency,ftd_innowbalance,ftd_rate
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
     select 

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

@@ -40,11 +40,13 @@
         <result column="vd_amount" property="vd_amount" jdbcType="DOUBLE" />
         <result column="vd_nowbalance" property="vd_nowbalance" jdbcType="DOUBLE" />
         <result column="vd_remark" property="vd_remark" jdbcType="VARCHAR" />
+        <result column="vc_rate" property="vc_rate" jdbcType="DOUBLE" />
+        <result column="vc_currency" property="vc_currency" jdbcType="VARCHAR" />
 
     </resultMap>
     <sql id="Base_Column_List">
     vc_id, vc_code, vc_kind, vc_date, vc_vendid, vc_vendcode ,vc_custcode ,vc_custid ,vc_amount1,
-    vc_status,vc_statuscode,vc_vendname,vc_custname
+    vc_status,vc_statuscode,vc_vendname,vc_custname,vc_currency,vc_rate
   </sql>
     <select id="selectVerificationListByCondition"  resultMap="BaseResultMap">
         select

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

@@ -401,6 +401,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         DocBaseDTO docBaseDTO = getBaseDTOById(id);
         //日志
         messageLogService.close(docBaseDTO);
+        if (ConfigsCache.current().enableB2B()){
+            MessageInfo messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEEND.name(), String.valueOf(id), BaseContextHolder.getCompanyId());
+            sendMessageApi.sendMsg(messageInfo);
+        }
         return docBaseDTO;
     }
 
@@ -464,6 +468,11 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
             docBaseDTO = getBaseDTOById(id);
             //日志
             messageLogService.open(docBaseDTO);
+            //启用B2B,采购单结案反结案状态上传
+            if (ConfigsCache.current().enableB2B()){
+                MessageInfo messageInfo = new MessageInfo(BaseContextHolder.getUserId(), BillCodeSeq.PURCHASEEND.name(), String.valueOf(id), BaseContextHolder.getCompanyId());
+                sendMessageApi.sendMsg(messageInfo);
+            }
             return docBaseDTO;
         }
         return docBaseDTO;

+ 3 - 3
applications/purchase/purchase-server/src/main/resources/application.yml

@@ -75,8 +75,8 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 5000
-  ConnectTimeout: 5000
+  ReadTimeout: 10000
+  ConnectTimeout: 10000
 feign:
   hystrix:
     enabled: true
@@ -94,4 +94,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

+ 3 - 3
applications/sale/sale-server/src/main/resources/application.yml

@@ -75,8 +75,8 @@ mybatis:
 auth:
   public-key: auth/pub.key
 ribbon:
-  ReadTimeout: 5000
-  ConnectTimeout: 5000
+  ReadTimeout: 10000
+  ConnectTimeout: 10000
 feign:
   hystrix:
     enabled: true
@@ -94,4 +94,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

+ 0 - 28
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/B2BPurchaseApi.java

@@ -1,28 +0,0 @@
-package com.usoftchina.saas.inquiry.api;
-
-import com.usoftchina.saas.inquiry.po.purchase.SavePurchaseListResp;
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.RequestParam;
-
-@FeignClient(url = "${b2b.baseUrl.uu}", name = "b2b-server")
-@RequestMapping("/erp/purchase")
-public interface B2BPurchaseApi {
-    /**
-     * 上传采购单
-     * @param data
-     * @return
-     */
-    @RequestMapping(method = RequestMethod.POST)
-    SavePurchaseListResp savePurchase(@RequestParam("data") String data);
-
-    /**
-     * 结案、反结案采购单后,传到平台
-     * @param data
-     */
-    @PostMapping("/end")
-    void updatePurchaseDetailEnd(@RequestParam("data") String data);
-
-}

+ 1 - 1
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/api/SearchUUApi.java

@@ -8,7 +8,7 @@ import org.springframework.web.bind.annotation.RequestParam;
 
 import java.util.Map;
 
-@FeignClient(url = "${b2b.baseUrl.uu}", name = "b2b-server")
+@FeignClient(url = "${b2b.baseUrl.common}", name = "b2b-server")
 @RequestMapping("/public")
 public interface SearchUUApi {
     /**

+ 55 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/saas/inquiry/po/purchase/PurchaseDetailEnd.java

@@ -0,0 +1,55 @@
+package com.usoftchina.saas.inquiry.po.purchase;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/15
+ */
+public class PurchaseDetailEnd {
+
+    private String pd_code;
+    private short pd_detno;
+    private short pd_ended;
+    private Integer pd_id;
+
+    public String getPd_code() {
+        return pd_code;
+    }
+
+    public void setPd_code(String pd_code) {
+        this.pd_code = pd_code;
+    }
+
+    public short getPd_detno() {
+        return pd_detno;
+    }
+
+    public void setPd_detno(short pd_detno) {
+        this.pd_detno = pd_detno;
+    }
+
+    public short getPd_ended() {
+        return pd_ended;
+    }
+
+    public void setPd_ended(short pd_ended) {
+        this.pd_ended = pd_ended;
+    }
+
+    public Integer getPd_id() {
+        return pd_id;
+    }
+
+    public void setPd_id(Integer pd_id) {
+        this.pd_id = pd_id;
+    }
+
+    public PurchaseDetailEnd() {
+    }
+
+    public PurchaseDetailEnd(String pd_code, short pd_detno, short pd_ended, Integer pd_id) {
+        this.pd_code = pd_code;
+        this.pd_detno = pd_detno;
+        this.pd_ended = pd_ended;
+        this.pd_id = pd_id;
+    }
+}

+ 1 - 1
applications/transfers/mall-api/src/test/resources/application.yml

@@ -3,4 +3,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

+ 1 - 1
applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendMessageApi.java

@@ -17,7 +17,7 @@ public interface SendMessageApi {
     class SendMessageApiFallBack implements SendMessageApi {
         @Override
         public Result sendMsg(MessageInfo info) {
-            return null;
+            return Result.error("网络异常,请稍后重试!");
         }
     }
 }

+ 48 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/config/B2BConfig.java

@@ -0,0 +1,48 @@
+package com.usoftchina.saas.transfers.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/15
+ */
+@ConfigurationProperties(prefix = "b2b.baseUrl")
+public class B2BConfig {
+
+    private String inquiry;
+    private String Component;
+    private String product;
+    private String common;
+
+    public String getInquiry() {
+        return inquiry;
+    }
+
+    public void setInquiry(String inquiry) {
+        this.inquiry = inquiry;
+    }
+
+    public String getComponent() {
+        return Component;
+    }
+
+    public void setComponent(String component) {
+        Component = component;
+    }
+
+    public String getProduct() {
+        return product;
+    }
+
+    public void setProduct(String product) {
+        this.product = product;
+    }
+
+    public String getCommon() {
+        return common;
+    }
+
+    public void setCommon(String common) {
+        this.common = common;
+    }
+}

+ 5 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java

@@ -68,6 +68,11 @@ public class ReceiveService {
                case PRODUCT:        //物料库上传
                    task = new SendProductTask();
                    break;
+               case PURCHASEEND:
+                   task = new SendPurchaseEndTask();
+                   break;
+               default:
+                   break;
            }
 
            task.execute(info);

+ 1 - 1
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/Executable.java

@@ -20,5 +20,5 @@ public abstract class Executable {
     /**
      * 执行任务
      */
-    public abstract void execute(MessageInfo messageInfo);
+    public abstract void execute(MessageInfo messageInfo) throws Exception;
 }

+ 79 - 0
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseEndTask.java

@@ -0,0 +1,79 @@
+package com.usoftchina.saas.transfers.task;
+
+import com.usoftchina.saas.account.api.CompanyApi;
+import com.usoftchina.saas.inquiry.po.purchase.PurchaseDetailEnd;
+import com.usoftchina.saas.purchase.api.PurchaseApi;
+import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
+import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
+import com.usoftchina.saas.utils.CollectionUtils;
+import com.usoftchina.saas.utils.JsonUtils;
+import com.usoftchina.saas.utils.http.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Author chenwei
+ * @Date 2019/01/15
+ */
+public class SendPurchaseEndTask extends Executable {
+
+    @Autowired
+    private PurchaseApi purchaseApi;
+    @Autowired
+    private CompanyApi companyApi;
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SendPurchaseEndTask.class);
+    private final String purchaseEndUrl = "/erp/purchase/end";
+
+    @Override
+    public void execute(MessageInfo messageInfo) throws Exception {
+        String accessSecretKey = companyApi.getCompanyById(messageInfo.getCompanyId()).getData().getAccessKey();
+        PurchaseFormDTO purchaseFormDTO = purchaseApi.getFormData(Long.parseLong(messageInfo.getBizId())).getData();
+        short endStatus = 0;
+        //结案、反结案
+        if("CLOSE".equals(purchaseFormDTO.getMain().getPu_statuscode())) {
+            endStatus = 1;     //结案
+        } else {
+            endStatus = 0;     //反结案
+        }
+        List<PurchaseDetailDTO> purchaseDetailDTOList = purchaseFormDTO.getItems();
+        List<PurchaseDetailEnd> purchaseDetailEndList = new ArrayList<PurchaseDetailEnd>();
+        if (!CollectionUtils.isEmpty(purchaseDetailDTOList)) {
+            //构造需要发送的数据
+            for (PurchaseDetailDTO purchaseDetailDTO : purchaseDetailDTOList) {
+                PurchaseDetailEnd purchaseDetailEnd = new PurchaseDetailEnd(purchaseDetailDTO.getPd_code(),
+                        new BigDecimal(purchaseDetailDTO.getPd_detno()).shortValue(), endStatus,
+                        new BigDecimal(purchaseDetailDTO.getId()).intValue());
+                purchaseDetailEndList.add(purchaseDetailEnd);
+            }
+            //发送给b2b
+            sendPurchaseEndToB2B(purchaseEndUrl, Long.parseLong(String.valueOf(messageInfo.getBizId())),
+                    JsonUtils.toJsonString(purchaseDetailEndList), accessSecretKey);
+        }
+
+    }
+
+    /**
+     * 发送http请求,更新上传状态
+     * @param bizId
+     * @param data
+     * @param accessSecretKey
+     * @throws Exception
+     */
+    private void sendPurchaseEndToB2B(String url, Long bizId, String data, String accessSecretKey) throws Exception {
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("data", JsonUtils.toJsonString(data));
+        HttpUtil.Response response = HttpUtil.sendPostRequest(url, params, true, accessSecretKey);
+        if (response.getStatusCode() == 200){
+            purchaseApi.updateB2BStatus(bizId, "已上传");
+        }
+    }
+}

+ 27 - 5
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/task/SendPurchaseTask.java

@@ -1,21 +1,26 @@
 package com.usoftchina.saas.transfers.task;
 
 import com.usoftchina.saas.account.api.CompanyApi;
-import com.usoftchina.saas.inquiry.api.B2BPurchaseApi;
+import com.usoftchina.saas.account.dto.CompanyDTO;
 import com.usoftchina.saas.inquiry.po.purchase.Purchase;
 import com.usoftchina.saas.inquiry.po.purchase.PurchaseDetail;
 import com.usoftchina.saas.purchase.api.PurchaseApi;
 import com.usoftchina.saas.purchase.dto.PurchaseDTO;
 import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
+import com.usoftchina.saas.transfers.config.B2BConfig;
 import com.usoftchina.saas.transfers.dto.MessageInfo;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.JsonUtils;
 import com.usoftchina.saas.utils.ObjectUtils;
+import com.usoftchina.saas.utils.http.HttpUtil;
+import com.usoftchina.saas.utils.http.HttpUtil.Response;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author: guq
@@ -28,12 +33,14 @@ public class SendPurchaseTask extends Executable {
     @Autowired
     private PurchaseApi purchaseApi;
     @Autowired
-    private B2BPurchaseApi b2BPurchaseApi;
+    private B2BConfig b2bConfig;
 
     private static final Logger LOGGER = LoggerFactory.getLogger(SendProductTask.class);
+    private final String purchaseUrl = "/erp/purchase";
 
     @Override
-    public void execute(MessageInfo messageInfo) {
+    public void execute(MessageInfo messageInfo) throws Exception {
+        CompanyDTO companyDTO = companyApi.getCompanyById(messageInfo.getCompanyId()).getData();
         PurchaseFormDTO purchaseFormDTO = purchaseApi.getFormData(Long.parseLong(messageInfo.getBizId())).getData();
         if (!ObjectUtils.isEmpty(purchaseFormDTO)){
             //采购单主表数据
@@ -44,10 +51,25 @@ public class SendPurchaseTask extends Executable {
             List<PurchaseDetail> b2bPurchaseDetailList = BeanMapper.mapList(purchaseFormDTO.getItems(), PurchaseDetail.class);
             b2bPurchase.setPurchaseDetails(b2bPurchaseDetailList);
 
-            /*SavePurchaseListResp savePurchaseListResp = */
-            b2BPurchaseApi.savePurchase(JsonUtils.toJsonString(b2bPurchase));
+            sendPurchaseToB2B(b2bConfig.getCommon() + purchaseUrl, Long.parseLong(messageInfo.getBizId()), JsonUtils.toJsonString(b2bPurchase), companyDTO.getAccessKey());
             purchaseApi.updateB2BStatus(Long.parseLong(messageInfo.getBizId()), "已上传");
         }
 
     }
+
+    /**
+     * 发送http请求
+     * @param bizId
+     * @param data
+     * @param accessSecretKey
+     * @throws Exception
+     */
+    private void sendPurchaseToB2B(String url, Long bizId, String data, String accessSecretKey) throws Exception {
+        Map<String, String> params = new HashMap<String, String>();
+        params.put("data", JsonUtils.toJsonString(data));
+        Response response = HttpUtil.sendPostRequest(url, params, true, accessSecretKey);
+        if (response.getStatusCode() == 200){
+            purchaseApi.updateB2BStatus(bizId, "已上传");
+        }
+    }
 }

+ 1 - 1
applications/transfers/transfers-server/src/main/resources/application.yml

@@ -92,4 +92,4 @@ b2b:
     inquiry: https://test-inquiry.uuzcc.cn
     Component: https://test-mall.uuzcc.cn
     product: http://test-product.uuzcc.cn
-    uu: https://test-b2b.uuzcc.cn
+    common: https://test-b2b.uuzcc.cn

+ 2 - 2
base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/AccountApi.java

@@ -87,7 +87,7 @@ public interface AccountApi {
      * @param companyId
      * @return
      */
-    @PostMapping("/bind/company")
+    @PostMapping("/account/bind/company")
     Result bindCompany(@RequestParam("accountId") long accountId, @RequestParam("companyId") long companyId);
 
     /**
@@ -96,7 +96,7 @@ public interface AccountApi {
      * @param roleIds
      * @return
      */
-    @PostMapping("/bind/roles")
+    @PostMapping("/account/bind/roles")
     Result bindRoles(@RequestParam("accountId") Long accountId, @RequestParam("roleIds") String roleIds);
 
     /**

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

@@ -11,6 +11,13 @@ Ext.define('saas.model.report.Purchase', {
         { name: 'pd_taxprice', type: 'float' }, // 单价
         { name: 'pd_price', type: 'float' }, // 含税单价
         { name: 'pd_taxtotal', type: 'float' }, // 金额
+        { name: 'pd_taxtotal*pu_rate', type: 'float',
+            convert: function(v, rec) {
+                var t = (rec.get('pd_taxtotal') || 0.0) * (rec.get('pu_rate') || 1.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pu_rate', 'pd_taxtotal']
+         }, // 金额本位币
         { name: 'pd_taxrate', type: 'int' }, // 税率
         { name: 'pd_total-pd_taxtotal', type: 'float', // 税额
             convert: function(v, rec) {
@@ -20,6 +27,13 @@ Ext.define('saas.model.report.Purchase', {
             depends: ['pd_total', 'pd_taxtotal']
         },
         { name: 'pd_total', type: 'float' }, // 价税合计
+        { name: 'pd_total*pu_rate', type: 'float',
+            convert: function(v, rec) {
+                var t = (rec.get('pd_total') || 0.0) * (rec.get('pu_rate') || 1.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pu_rate', 'pd_total'] 
+        }, // 价税合计本位币
         { name: 'pd_pdacceptqty', type: 'float' }, // 收货数量
         { name: 'pu_currency', type:'string'},//币别
         { name: 'pu_rate', type:'float'},//汇率

+ 16 - 2
frontend/saas-web/app/model/report/Sale.js

@@ -18,7 +18,14 @@ Ext.define('saas.model.report.Sale', {
         { name: 'sd_price', type: 'float' },
         { name: 'sd_netprice', type: 'float' },
         { name: 'sd_price', type: 'float' },
-        { name: 'sd_nettotal', type: 'float' },
+        { name: 'sd_nettotal', type: 'float' },//金额
+        { name: 'sd_nettotal*sa_rate', type: 'float',
+            convert: function(v, rec) {
+                var t = (rec.get('sd_nettotal') || 0.0) * (rec.get('sa_rate') || 1.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['sa_rate', 'sd_nettotal']
+         },//金额本位币
         { name: 'sd_taxrate', type: 'float' },
         { name: 'sd_total - sd_nettotal', type: 'float',
             convert: function(v, rec) {
@@ -27,7 +34,14 @@ Ext.define('saas.model.report.Sale', {
             },
             depends: ['sd_total', 'sd_nettotal']
         },
-        { name: 'sd_total', type: 'float' },
+        { name: 'sd_total', type: 'float' },//价税合计
+        { name: 'sd_total*sa_rate', type: 'float' ,
+            convert: function(v, rec) {
+                var t = (rec.get('sd_total') || 0.0) * (rec.get('sa_rate') || 1.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['sd_total', 'sa_rate']
+        },//价税合计本位币
         { name: 'sd_pdsendqty', type: 'float' },
         { name: 'sa_currency', type: 'string' },//币别
         { name: 'sa_rate', type: 'float' },//税率

+ 29 - 6
frontend/saas-web/app/model/report/SaleProfit.js

@@ -15,9 +15,9 @@ Ext.define('saas.model.report.SaleProfit', {
         { name: 'pd_outqty', type: 'float' },
         { name: 'pr_unit', type: 'string' },
         { name: 'pd_netprice', type: 'float' },
-        { name: 'pd_sendprice', type: 'float' },
+        { name: 'pd_sendprice', type: 'float' },//含税单价
         { name: 'pd_nettotal', type: 'float' },
-        { name: 'pd_taxrate', type: 'int' },
+        { name: 'pd_taxrate', type: 'int' },//税率
         { name: 'pd_ordertotal-pd_nettotal', type: 'float',
             convert: function(v, rec) {
                 var t = (rec.get('pd_ordertotal') || 0.0) - (rec.get('pd_nettotal') || 0.0);
@@ -25,11 +25,34 @@ Ext.define('saas.model.report.SaleProfit', {
             },
             depends: ['pd_ordertotal', 'pd_nettotal']
         }, 
-        { name: 'pd_ordertotal', type: 'float' },
-        { name: 'pd_price', type: 'float' },
+        { name: 'pd_ordertotal', type: 'float' },//价税合计
+        { name: 'pd_ordertotal*pi_rate', type: 'float' ,
+            convert: function(v, rec) {
+                var t = (rec.get('pd_ordertotal') || 0.0) * (rec.get('pi_rate') || 1.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pd_ordertotal', 'pi_rate']
+        },//价税合计本位币
+        { name: 'pd_price', type: 'float' },//成本单价
         { name: 'pd_total', type: 'float' },
-        { name: 'pd_profit', type: 'float' },
-        { name: 'pd_profitpresent', type: 'float' },
+        { name: 'pd_profit', type: 'float' ,
+            convert: function(v, rec) {
+                var t = (((rec.get('pd_sendprice') || 0.0) * (rec.get('pi_rate') || 1.0) / (1 + (rec.get('pd_taxrate') || 0.0)/100 )) 
+                - (rec.get('pd_price') || 0.0) )*(rec.get('pd_outqty') || 0.0);
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pd_sendprice', 'pi_rate','pd_taxrate','pd_price','pd_outqty']
+        },//毛利润(元) = ( (含税单价 * 汇率) / (1+税率%) - 成本单价 ) *  
+        { name: 'pd_profitpresent', type: 'float',
+            convert: function(v, rec) {
+                var t = (((rec.get('pd_sendprice') || 0.0) * (rec.get('pi_rate') || 1.0) / (1 + (rec.get('pd_taxrate') || 0.0)/100 )) 
+                - (rec.get('pd_price') || 0.0)) 
+                /
+                (((rec.get('pd_sendprice') || 0.0) * (rec.get('pi_rate') || 1.0) / (1 + (rec.get('pd_taxrate') || 0.0)/100 )));
+                return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
+            },
+            depends: ['pd_sendprice', 'pi_rate','pd_taxrate','pd_price']
+        },//毛利润率 = (含税单价*汇率/(1+税率%) - 成本单价) / (含税单价*汇率/(1+税率%))
         { name: 'pd_remark', type: 'string' },
         { name: 'pi_currency', type: 'string' },
         { name: 'pi_rate', type: 'float' }

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

@@ -50,7 +50,7 @@ Ext.define('saas.view.core.base.BasePanel', {
                 frame:false,
                 xtype: 'toolbar',
                 dock: 'top',
-                // layout: 'column',
+                layout: 'column',
                 style: {
                     margin: '0 0 12px 0',
                     padding: '10px 0 14px 8px',

+ 6 - 1
frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js

@@ -69,13 +69,18 @@ Ext.define('saas.view.core.form.field.ConDbfindTrigger', {
             });
             field1.on('change', function(f) {
                 let field1 = me.items.items[1];
+                
                 if(f.dbValues) {
+                    f.ownerCt.dbValues = f.dbValues;
                     let value = f.dbValues[f.dbfinds[1].from];
                     field1.setValue(value);
                     field1.publishState('value', value);
+                }else {
+                    f.ownerCt.dbValues = {};
                 }
             });
-            field1.on('blur', function() {
+            field1.on('blur', function(f) {
+                f.ownerCt.dbValues = f.dbValues;
                 me.fireEvent('change', this)
             });
 

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

@@ -58,7 +58,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text: '新增',
             hidden: true,
             bind: {
-                hidden: '{!id}'
+                hidden: '{!showAddBtn || !id}'
             },
             handler: 'add'
         }, {
@@ -75,7 +75,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text: '保存',
             handler: 'onSave',
             bind: {
-                hidden: '{'+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}',
+                hidden: '{!showSaveBtn || '+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}',
                 // disabled: '{!base.valid || '+ me._statusCodeField + ' == "AUDITED" || ' + me._statusCodeField + ' == "OPEN"}'
                 disabled: '{!base.valid || '+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}'
             }
@@ -84,7 +84,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             xtype: 'button',
             text: '删除',
             bind: {
-                hidden: '{deleteHidden || ' + me._statusCodeField + '=="' + me.auditTexts.auditCode + '"}'
+                hidden: '{!showDeleteBtn || deleteHidden || ' + me._statusCodeField + '=="' + me.auditTexts.auditCode + '"}'
             },
             handler: 'delete'
         }, {
@@ -127,7 +127,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             target: 'main',
             handler: 'onSetting',
             bind: {
-                hidden: '{!isAdmin}'
+                hidden: '{!configurable || !isAdmin}'
             }
         }];
 

+ 6 - 2
frontend/saas-web/app/view/core/form/FormPanelModel.js

@@ -11,13 +11,17 @@ Ext.define('saas.view.core.form.FormPanelModel', {
             codeEditable: false, // 单据编号是否可编辑
         },
         auditBtnText: '审核', // 审核按钮默认text
+        showAddBtn: true, // 显示新增按钮
+        showSaveBtn: true, // 显示保存按钮
+        showDeleteBtn: true, // 显示删除按钮
         showCopyBtn: true, // 显示复制按钮
-        showPrintBtn: false, // 显示打印按钮
         showAuditBtn: true, // 显示审核、反审核按钮
+        showPrintBtn: false, // 显示打印按钮
+        configurable: true, // 显示界面设置按钮
+
         detailBindeFields: [], // 从表绑定列
         detailStore: null, // 从表store
 
-        configurable: true
     },
 
     formulas:{

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

@@ -27,7 +27,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
     exportAble: true,
     showMySummary: true,
     queryMode: 'DETAIL',
-
+   
     calculateProperty: 'data.calculate',
     rootProperty: 'data.list.list',
     totalProperty: 'data.list.total',

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

@@ -150,7 +150,13 @@ Ext.define('saas.view.document.customer.FormPanel', {
                     readOnly: false,
                     defaultReadOnly: false,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 },
                 group: '交易信息',
             // }, {

+ 164 - 0
frontend/saas-web/app/view/document/uusetting/UUSetting.js

@@ -0,0 +1,164 @@
+Ext.define('saas.view.document.uusetting.UUSetting', {
+    extend: 'Ext.panel.Panel',
+    xtype: 'document-uusetting',
+    autoScroll: true,
+    layout:'fit',
+    controller:'document-uusetting',
+    viewModel: {
+        type: 'document-uusetting'
+    },
+    defaultType:'vendorkind',
+    requires: [
+        'Ext.button.Segmented'
+    ],
+    
+    etc:{
+        common: {
+            columns: [{
+                xtype:'actioncolumn',
+                text:'操作',
+                align: 'center',
+                items: [{
+                    xtype: 'button',
+                    tooltip: 'UU设置',
+                    iconCls: 'x-sa sa-setting',
+                    handler: 'onUUSetting'
+                }]
+            }]
+        },
+        vendorkind:{
+            columns: [{
+                text: '供应商编号',
+                dataIndex: 've_code',
+                width: 120
+            }, {
+                text: '供应商名称',
+                dataIndex: 've_name',
+                width: 120
+            }, {
+                text: '状态',
+                dataIndex: 've_status',
+                width: 80,
+                align: 'center'
+            }, {
+                text: '类型',
+                dataIndex: 've_type',
+                width: 100,
+                align: 'center'
+            }, {
+                text: '采购员',
+                dataIndex: 've_buyername',
+                width: 120,
+            }, {
+                text: '供应商UU',
+                dataIndex: 've_uu',
+                width: 120
+            }],
+        },
+        customerkind:{
+            columns: [{
+                text: '客户编号',
+                dataIndex: 'cu_code',
+                width: 120
+            }, {
+                text: '客户名称',
+                dataIndex: 'cu_name',
+                width: 120
+            }, {
+                text: '状态',
+                dataIndex: 'cu_status',
+                width: 80,
+                align: 'center'
+            }, {
+                text: '类型',
+                dataIndex: 'cu_type',
+                width: 100,
+                align: 'center'
+            }, {
+                text: '业务员',
+                dataIndex: 'cu_sellername',
+                width: 120,
+            }, {
+                text: '客户UU',
+                dataIndex: 'cu_uu',
+                width: 120
+            }],
+        }
+    },
+
+    initComponent: function() {
+        var me = this;
+
+        Ext.apply(me, {
+            dockedItems: [{
+                xtype: 'toolbar',
+                dock: 'top',
+                padding: '12 5 0 12',
+                items: [{
+                    xtype: 'segmentedbutton',
+                    reference: 'dataKind',
+                    value: 'vendorkind',
+                    name : 'segmentedbutton',
+                    items: [{
+                        name:'vendorkind',
+                        text: '供应商',
+                        value: 'vendorkind',
+                    }, {
+                        name:'customerkind',
+                        text: '客户',
+                        value: 'customerkind',
+                    }],
+                    listeners: {
+                        toggle: 'onToggle'
+                    }
+                }, '->', {
+                    xtype: 'textfield',
+                    emptyText: '输入编号/名称'
+                }, {
+                    xtype: 'button',
+                    text: '查询',
+                    handler: 'onQuery'
+                }]
+            }],
+            items:[{
+                xtype:'grid',
+                margin: 12,
+                flex: 1,
+                border: 1,
+                plugins: [{
+                    ptype: 'menuclipboard'
+                }],
+                dockedItems: [{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    cls:'x-basepanel-pagingtoolbar',
+                    displayInfo: true,
+                    bind: {
+                        store: '{vendorkind}',
+                    },
+                    items: [{
+                        iconCls: 'x-sa sa-setting',
+                        text: '列设置',
+                        handler: 'onColSetting',
+                        bind: {
+                            hidden: '{!configurable || !isAdmin}'
+                        }
+                    }]
+                }],
+                listeners:{
+                    boxready: 'onBoxReady',
+                    render:'loadDefualt'
+                }
+            }],
+        });
+
+        me.callParent(arguments);
+    },
+
+    refresh: function() {
+        var store = this.down('grid').store;
+        store.load();
+    }
+})
+
+

+ 79 - 0
frontend/saas-web/app/view/document/uusetting/UUSettingController.js

@@ -0,0 +1,79 @@
+Ext.define('saas.view.document.uusetting.UUSettingController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.document-uusetting',
+    
+    onBoxReady: function(grid) {
+        var me = this,
+        vm = me.getViewModel();
+
+        var gridBodyBox = grid.body.dom.getBoundingClientRect(),
+        gridBodyBoxHeight = gridBodyBox.height;
+        var pageSize = Math.floor(gridBodyBoxHeight / 33);
+
+        vm.getStore('vendorkind').setPageSize(pageSize);
+        vm.getStore('customerkind').setPageSize(pageSize);
+    },
+
+    loadDefualt:function(grid){
+        var me = this,
+        view = me.getView(),
+        vm = me.getViewModel(),
+        defaultKind = view.defaultType;
+        
+        var etc = view.etc;
+        var columns = etc[defaultKind].columns;
+        var store = vm.getStore(defaultKind);
+        store.load();
+        grid.reconfigure(store, Ext.Array.merge(columns, etc.common.columns));
+        grid.kind = defaultKind
+    },
+
+    onToggle: function(container, button, pressed) {
+        var me = this,
+        view = me.getView(),
+        vm = me.getViewModel(),
+        kind = button.value,
+        grid = view.down('grid');
+        
+        var etc = view.etc;
+        var columns = etc[kind].columns;
+        var store = vm.getStore(kind);
+        store.load();
+        grid.reconfigure(store, Ext.Array.merge(columns, etc.common.columns));
+        grid.kind = kind;
+    },
+
+    onQuery: function() {
+        console.log('onQuery');
+    },
+
+    onUUSetting: function(tableView, rowIdx, colIdx, btn, e, record, tr) {
+        var me = this;
+        var grid = tableView.up('grid');
+        var kind = grid.kind;
+        var config = {
+            kind: kind
+        };
+        if(kind == 'vendorkind') {
+            config.cname = record.get('ve_name');
+        }else {
+            config.cname = record.get('cu_name');
+        }
+        this.getViewModel().setData(record.data);
+        this.showUUSettingWin(config);
+    },
+
+    showUUSettingWin: function(config) {
+        var me = this,
+        view = me.getView();
+
+        var win = Ext.getCmp();
+        if(!win) {
+            win = Ext.create('saas.view.document.uusetting.UUSettingWin', Ext.Object.merge({
+                listView: view,
+            }, config));
+            view.add(win);
+        }
+        win.show();
+    }    
+});

+ 83 - 0
frontend/saas-web/app/view/document/uusetting/UUSettingModel.js

@@ -0,0 +1,83 @@
+Ext.define('saas.view.document.uusetting.UUSettingModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.document-uusetting',
+    data: {
+        title: '客户类型'
+    },
+    stores: {
+        vendorkind:{
+            fields:['ve_code', 've_name', 've_status', 've_type', 've_buyername', 've_uu'],
+            proxy: {
+                type: 'ajax',
+                url: '/api/document/vendor/list',
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + (response.responseJson?response.responseJson.message:'请求超时'));
+                        }
+                    }
+                }
+            },
+            pageSize: null,
+            autoLoad: false,
+            listeners: {
+                beforeload: function (store, op) {
+                    Ext.apply(store.proxy.extraParams, {
+                        number: store.exportNumber?store.exportNumber:op._page,
+                        size: store.exportPageSize?store.exportPageSize:store.pageSize,
+                    });
+                }
+            }
+        },
+        customerkind: {
+            fields:['cu_code', 'cu_name', 'cu_status', 'cu_type', 'cu_sellername', 'cu_uu'],
+            proxy: {
+                type: 'ajax',
+                url: '/api/document/customer/list',
+                actionMethods: {
+                    read: 'GET'
+                },
+                reader: {
+                    type: 'json',
+                    rootProperty: 'data.list',
+                    totalProperty: 'data.total'
+                },
+                listeners: {
+                    exception: function(proxy, response, operation, eOpts) {
+                        if(operation.success) {
+                            if(response.timedout) {
+                                saas.util.BaseUtil.showErrorToast('请求超时');
+                            }
+                        }else {
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + (response.responseJson?response.responseJson.message:'请求超时'));
+                        }
+                    }
+                }
+            },
+            pageSize: null,
+            autoLoad: false,
+            listeners: {
+                beforeload: function (store, op) {
+                    Ext.apply(store.proxy.extraParams, {
+                        number: store.exportNumber?store.exportNumber:op._page,
+                        size: store.exportPageSize?store.exportPageSize:store.pageSize,
+                    });
+                }
+            }
+        }
+    }
+});

+ 459 - 0
frontend/saas-web/app/view/document/uusetting/UUSettingWin.js

@@ -0,0 +1,459 @@
+Ext.define('saas.view.document.uusetting.UUSettingWin', {
+    extend: 'Ext.window.Window',
+    xtype: 'uusettingwin',
+
+    title: '设置企业UU',
+    width: 680,
+    cls: 'x-window-dbfind',
+    closlayout: 'fit',
+    modal: true,
+    resizable: false,
+    bodyPadding: 20,
+
+    etc: {
+        vendorkind: {
+            uuName: 've_uu',
+            getUUUrl: '/api/document/vendor/getVendorUU',
+            saveUrl: '/api/document/vendor/save',
+            formItems: [{
+                xtype: 'hidden',
+                name: 'id',
+                bind: '{id}',
+                fieldLabel: 'id'
+            }, {
+                xtype: 'textfield',
+                name: 've_code',
+                bind: '{ve_code}',
+                fieldLabel: '供应商编号'
+            }, {
+                xtype: 'textfield',
+                name: 've_name',
+                bind: '{ve_name}',
+                fieldLabel: '供应商名称',
+                hidden: false
+            }, {
+                xtype: 'textfield',
+                name: 've_shortname',
+                bind: '{ve_shortname}',
+                fieldLabel: '供应商简称'
+            }, {
+                xtype: 'hidden',
+                name: 've_status',
+                bind: '{ve_status}',
+                fieldLabel: '状态'
+            }, {
+                xtype: 'hidden',
+                name: 've_statuscode',
+                bind: '{ve_statuscode}',
+                fieldLabel: '状态码'
+            }, {
+                xtype: "textfield",
+                name: "ve_type",
+                bind: '{ve_type}',
+                fieldLabel: "供应商类型"
+            }, {
+                xtype: "datefield",
+                name: "ve_begindate",
+                format: 'Y-m-d H:i:s',
+                bind: '{ve_begindate}',
+                fieldLabel: "期初日期"
+            }, {
+                xtype: "textfield",
+                name: "ve_currency",
+                bind: '{ve_currency}',
+                fieldLabel: "币别"
+            }, {
+                xtype: "numberfield",
+                name: "ve_taxrate",
+                bind: '{ve_taxrate}',
+                fieldLabel: "税率(%)"
+            },{
+                xtype: "numberfield",
+                name: "ve_beginapamount",
+                bind: '{ve_beginapamount}',
+                fieldLabel: "期初应付(元)"
+            }, {
+                xtype: "numberfield",
+                hideTrigger: true,
+                name: "ve_beginprepayamount",
+                bind: '{ve_beginprepayamount}',
+                fieldLabel: "期初预付(元)"
+            }, {
+                xtype: "numberfield",
+                name: "ve_leftamount",
+                bind: '{ve_leftamount}',
+                fieldLabel: "应付余额(元)",
+            }, {
+                xtype: "numberfield",
+                name: "ve_promisedays",
+                bind: '{ve_promisedays}',
+                fieldLabel: "结算天数",
+            }, {
+                xtype: "textfield",
+                name: "ve_nsrzh",
+                bind: '{ve_nsrzh}',
+                fieldLabel: "纳税人识别号"
+            }, {
+                xtype: "textfield",
+                name: "ve_bankcode",
+                bind: '{ve_bankcode}',
+                fieldLabel: "开户银行"
+            }, {
+                xtype: "textfield",
+                name: "ve_bankaccount",
+                bind: '{ve_bankaccount}',
+                fieldLabel: "银行账户"
+            }, {
+                xtype: "hidden",
+                name: "ve_buyercode",
+                bind: '{ve_buyercode}',
+                fieldLabel: "采购员编号"
+            }, {
+                xtype: "textfield",
+                name: "ve_buyername",
+                bind: '{ve_buyername}',
+                fieldLabel: "采购员"
+            }, {
+                xtype: "hidden",
+                name: "ve_buyerid",
+                bind: '{ve_buyerid}',
+                fieldLabel: "采购员ID"
+            }, {
+                xtype: "textfield",
+                name: "ve_address",
+                bind: '{ve_address}',
+                fieldLabel: "公司地址"
+            }, {
+                fieldLabel: "备注",
+                xtype: 'textfield',
+                bind: '{ve_remark}',
+                name: "ve_remark"
+            }, {
+                xtype: "textfield",
+                name: "ve_text1",
+                bind: '{ve_text1}',
+                fieldLabel: "自定义字段1"
+            }, {
+                xtype: "textfield",
+                name: "ve_text2",
+                bind: '{ve_text2}',
+                fieldLabel: "自定义字段2"
+            }, {
+                xtype: "textfield",
+                name: "ve_text3",
+                bind: '{ve_text3}',
+                fieldLabel: "自定义字段3"
+            }, {
+                xtype: "textfield",
+                name: "ve_text4",
+                bind: '{ve_text4}',
+                fieldLabel: "自定义字段4"
+            }, {
+                xtype: "textfield",
+                name: "ve_text5",
+                bind: '{ve_text5}',
+                fieldLabel: "自定义字段5"
+            }, {
+                xtype: 'textfield',
+                fieldLabel: '企业UU',
+                name: 've_uu',
+                bind: '{ve_uu}',
+                hidden: false,
+                allowBlank: false,
+                readOnly: true,
+                beforeLabelTextTpl: "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>"
+            }]
+        },
+        customerkind: {
+            uuName: 'cu_uu',
+            getUUUrl: '/api/document/customer/getCustomerUU',
+            saveUrl: '/api/document/customer/save',
+            formItems: [{
+                xtype: 'hidden',
+                name: 'id',
+                bind: '{id}',
+                fieldLabel: 'id'
+            }, {
+                xtype: 'textfield',
+                name: 'cu_code',
+                bind: '{cu_code}',
+                fieldLabel: '客户编号'
+            }, {
+                xtype: 'textfield',
+                name: 'cu_name',
+                bind: '{cu_name}',
+                fieldLabel: '客户名称',
+                hidden: false
+            }, {
+                xtype: 'textfield',
+                name: 'cu_shortname',
+                bind: '{cu_shortname}',
+                fieldLabel: '客户简称'
+            }, {
+                xtype: "textfield",
+                name: "cu_type",
+                bind: '{cu_type}',
+                fieldLabel: "客户类型"
+            }, {
+                xtype: 'hidden',
+                name: 'cu_status',
+                bind: '{cu_status}',
+                fieldLabel: '状态'
+            }, {
+                xtype: 'hidden',
+                name: 'cu_statuscode',
+                bind: '{cu_statuscode}',
+                fieldLabel: '状态码'
+            }, {
+                xtype: "datefield",
+                name: "cu_begindate",
+                format: 'Y-m-d H:i:s',
+                bind: '{cu_begindate}',
+                fieldLabel: "期初日期"
+            }, {
+                xtype: "textfield",
+                name: "cu_currency",
+                bind: '{cu_currency}',
+                fieldLabel: "币别"
+            }, {
+                xtype: "numberfield",
+                name: "cu_taxrate",
+                bind: '{cu_taxrate}',
+                fieldLabel: "税率(%)"
+            },{
+                xtype: "numberfield",
+                hideTrigger: true,
+                name: "cu_beginaramount",
+                bind: '{cu_beginaramount}',
+                fieldLabel: "期初应收(元)"
+            }, {
+                xtype: "numberfield",
+                name: "cu_beginprerecamount",
+                bind: '{cu_beginprerecamount}',
+                fieldLabel: "期初预收(元)"
+            }, {
+                xtype: 'textfield',
+                name: "cu_leftamount",
+                bind: '{cu_leftamount}',
+                fieldLabel: "应收余额(元)"
+            }, {
+                xtype: "numberfield",
+                name: "cu_promisedays",
+                bind: '{cu_promisedays}',
+                fieldLabel: "结算天数"
+            }, {
+                xtype: "hidden",
+                name: "cu_sellerid",
+                bind: '{cu_sellerid}',
+                fieldLabel: "业务员id"
+            }, {
+                xtype: "hidden",
+                name: "cu_sellercode",
+                bind: '{cu_sellercode}',
+                fieldLabel: "业务员code"
+            }, {
+                xtype: "textfield",
+                name: "cu_sellername",
+                bind: '{cu_sellername}',
+                fieldLabel: "业务员"
+            }, {
+                xtype: "hidden",
+                name: "cu_nsrzh",
+                bind: '{cu_nsrzh}',
+                fieldLabel: "纳税人识别号"
+            }, {
+                xtype: "hidden",
+                name: "cu_bankaccount",
+                bind: '{cu_bankaccount}',
+                fieldLabel: "开户银行"
+            }, {
+                xtype: "hidden",
+                name: "cu_bankcode",
+                bind: '{cu_bankcode}',
+                fieldLabel: "银行账户"
+            }, {
+                xtype: 'textfield',
+                name: "cu_uu",
+                bind: '{cu_uu}',
+                fieldLabel: "企业UU",
+                hidden: false,
+                allowBlank: false,
+                readOnly: true,
+                beforeLabelTextTpl: "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>"
+            }, {
+                fieldLabel: "备注",
+                xtype: 'textfield',
+                name: "cu_remark",
+                bind: '{cu_remark}'
+            }, {
+                xtype: "textfield",
+                name: "cu_text1",
+                bind: '{cu_text1}',
+                fieldLabel: "自定义字段1"
+            }, {
+                xtype: "textfield",
+                name: "cu_text2",
+                bind: '{cu_text2}',
+                fieldLabel: "自定义字段2"
+            }, {
+                xtype: "textfield",
+                name: "cu_text3",
+                bind: '{cu_text3}',
+                fieldLabel: "自定义字段3"
+            }, {
+                xtype: "textfield",
+                name: "cu_text4",
+                bind: '{cu_text4}',
+                fieldLabel: "自定义字段4"
+            }, {
+                xtype: "textfield",
+                name: "cu_text5",
+                bind: '{cu_text5}',
+                fieldLabel: "自定义字段5"
+            }]
+        }
+    },
+
+    initComponent: function () {
+        var me = this;
+        var kind = me.kind;
+        me.uuName = me.etc[kind].uuName;
+        me.getUUUrl = me.etc[kind].getUUUrl;
+        me.saveUrl = me.etc[kind].saveUrl;
+        var items = Ext.Array.merge(me.etc[kind].formItems, [{
+            xtype: 'detailGridField',
+            detnoColumn: null,
+            minHeight: 145,
+            emptyRows: 3,
+            showCount: false,
+            width: 280,
+            editable: false,
+            emptyText: '<span style="color: red;">没有查找到匹配的企业,请确认该企业已注册优软商务平台</span>',
+            store: Ext.create('Ext.data.Store', {
+                fields: [{
+                    name: 'name',
+                    type: 'string'
+                }, {
+                    name: 'uu',
+                    type: 'string'
+                }],
+                data: []
+            }),
+            columns: [{
+                text: '企业名称',
+                dataIndex: 'name',
+            }, {
+                text: 'UU',
+                dataIndex: 'uu'
+            }, {
+                xtype:'actioncolumn',
+                text:'操作',
+                align: 'center',
+                items: [{
+                    xtype: 'button',
+                    tooltip: '选择此项填入',
+                    iconCls: 'x-sa sa-edit',
+                    handler: function(tableView, rowIdx, colIdx, btn, e, record, tr) {
+                        var form = tableView.up('form');
+                        var uuField = form.query('[name=' + me.uuName + ']')[0];
+                        uuField.setValue(record.data.uu);
+                    }
+                }]
+            }]
+        }]);
+        Ext.apply(me, {
+            items: [{
+                xtype: 'form',
+                layout: 'column',
+                fieldDefaults: {
+                    hidden: true,
+                    margin: '0 0 10 0',
+                    labelAlign: 'right',
+                    labelWidth: 90,
+                    columnWidth: 0.5,
+                },
+                items: items
+            }],
+            buttonAlign: 'center',
+            buttons: [{
+                text: '确定',
+                formBind: true,
+                handler: function () {
+                    var win = this.up('window'),
+                        form = win.down('form');
+
+                    var uuField = form.query('[name=' + win.uuName + ']')[0];
+                    if (form.isValid()) {
+                        var values = form.getValues();
+                        me.onSave(values);
+                    } else {
+                        saas.util.BaseUtil.showErrorToast('表单校验失败,请检查字段是否合法');
+                    }
+                }
+            }, {
+                text: '取消',
+                handler: function () {
+                    me.close();
+                }
+            }]
+        });
+        me.callParent(arguments);
+    },
+
+    listeners: {
+        boxready: function (win) {
+            win.setLoading(true);
+            var name = win.cname;
+            saas.util.BaseUtil.request({
+                url: win.getUUUrl,
+                method: 'GET',
+                params: {
+                    name: name
+                }
+            }).then(function (res) {
+                var resData = res.data;
+                var data = [];
+                if (!Ext.Object.isEmpty(resData) && resData[name]) {
+                    data.push({
+                        name: name,
+                        uu: resData[name].uu
+                    });
+                }
+                win.setLoading(false);
+                var grid = win.down('grid');
+                var store = grid.store;
+                store.loadData(data);
+            }).catch(function (e) {
+                win.setLoading(false);
+            });
+        }
+    },
+
+    onSave: function (values) {
+        var view = this;
+        var kind = view.kind;
+        var main = values;
+        var params = {
+            codeModified: false,
+            main: main,
+            items: [],
+            items1: [],
+            items2: []
+        };
+
+        view.setLoading(true);
+        saas.util.BaseUtil.request({
+            url: view.saveUrl,
+            params: JSON.stringify(params),
+            method: 'POST'
+        }).then(function (res) {
+            view.setLoading(false);
+            saas.util.BaseUtil.showSuccessToast('修改UU号成功');
+            view.close();
+            view.listView.refresh();
+        }).catch(function (e) {
+            view.setLoading(false);
+            saas.util.BaseUtil.showErrorToast('修改UU号失败: ' + e.message);
+        });
+    },
+});

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

@@ -156,7 +156,13 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                     readOnly: false,
                     defaultReadOnly: false,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 },
                 group: '交易信息',
             // },{

+ 7 - 7
frontend/saas-web/app/view/money/fundtransfer/FormPanel.js

@@ -159,6 +159,13 @@ Ext.define('saas.view.money.fundtransfer.FormPanel', {
                     text: "转存汇率",
                     dataIndex: "ftd_rate",
                     width: 150.0
+                }, {
+                    text: "结算号",
+                    dataIndex: "ftd_paycode",
+                    width: 150,
+                    editor: {
+                        xtype: ''
+                    }
                 }, {
                     text: "结算方式",
                     width: 110.0,
@@ -194,13 +201,6 @@ Ext.define('saas.view.money.fundtransfer.FormPanel', {
                             }]
                         })
                     }
-                }, {
-                    text: "结算号",
-                    dataIndex: "ftd_paycode",
-                    width: 150,
-                    editor: {
-                        xtype: ''
-                    }
                 }, {
                     text: "备注",
                     dataIndex: "ftd_remark",

+ 53 - 8
frontend/saas-web/app/view/money/fundtransfer/QueryPanel.js

@@ -97,26 +97,71 @@ Ext.define('saas.view.money.fundtransfer.QueryPanel', {
                     dataIndex: 'ftd_bankname',
                     width: 150
                 }, {
+                    text: "转出币别",
+                    dataIndex: "ftd_currency",
+                    align:'center'
+                }, {
+                    text: "转出金额(元)",
+                    xtype: 'numbercolumn',
+                    dataIndex: "ftd_nowbalance",
+                    allowBlank: false,
+                    width: 150.0,
+                    editor: {
+                        xtype: "numberfield",
+                        decimalPrecision: 2
+                    },
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, true);
+                    },
+                    summaryType: 'sum',
+                    summaryRenderer: function(v, d, f, m) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, true);
+                    }
+                },{
                     text: '转入账户',
                     dataIndex: 'ftd_inbankname',
                     width: 150
                 }, {
-                    text: '金额(元)',
+                    text: "转入币别",
+                    dataIndex: "ftd_incurrency",
+                    align:'center'
+                }, {
+                    text: "转入金额(元)",
                     xtype: 'numbercolumn',
-                    dataIndex: 'ftd_nowbalance',
-                    width: 110,
+                    dataIndex: "ftd_innowbalance",
+                    allowBlank: false,
+                    width: 150.0,
+                    editor: {
+                        xtype: "numberfield",
+                        decimalPrecision: 2
+                    },
                     renderer: function(v, m, r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     },
+                    summaryType: 'sum',
+                    summaryRenderer: function(v, d, f, m) {
+                        return saas.util.BaseUtil.numberFormat(v, 2, true);
+                    }
+                },{
+                    text: '转存汇率(%)',
+                    xtype: 'numbercolumn',
+                    dataIndex: 'ftd_rate',
+                    width: 110,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, true);
+                    },
                 }, {
+                        text: "结算号",
+                        dataIndex: "ftd_paycode",
+                        width: 150,
+                        editor: {
+                            xtype: ''
+                        }
+                },{
                     text: '结算方式',
                     dataIndex: 'ftd_paymethod',
                     width: 150
-                }, {
-                    text: '结算号',
-                    dataIndex: 'ftd_paycode',
-                    hidden: true
-                }, {
+                },  {
                     text: '审核状态',
                     dataIndex: 'ft_status',
                     align: 'center',

+ 7 - 1
frontend/saas-web/app/view/money/othreceipts/FormPanel.js

@@ -79,7 +79,13 @@ Ext.define('saas.view.money.othreceipts.FormPanel', {
                     readOnly: false,
                     defaultReadOnly: false,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 },
                 // }, {
                 //     xtype: "currencyDbfindTrigger",

+ 24 - 0
frontend/saas-web/app/view/money/othreceipts/QueryPanel.js

@@ -127,6 +127,18 @@ Ext.define('saas.view.money.othreceipts.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'or_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'or_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '单据状态',
                     align: 'center',
                     dataIndex: 'or_status',
@@ -166,6 +178,18 @@ Ext.define('saas.view.money.othreceipts.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'or_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'or_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '单据状态',
                     align: 'center',
                     dataIndex: 'or_status',

+ 7 - 1
frontend/saas-web/app/view/money/othspendings/FormPanel.js

@@ -80,7 +80,13 @@ Ext.define('saas.view.money.othspendings.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             // },{
             //     xtype: "currencyDbfindTrigger",

+ 24 - 0
frontend/saas-web/app/view/money/othspendings/QueryPanel.js

@@ -125,6 +125,18 @@ Ext.define('saas.view.money.othspendings.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'os_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'os_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '单据状态',
                     align: 'center',
                     dataIndex: 'os_status',
@@ -165,6 +177,18 @@ Ext.define('saas.view.money.othspendings.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'os_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'os_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '单据状态',
                     align: 'center',
                     dataIndex: 'os_status',

+ 7 - 1
frontend/saas-web/app/view/money/payBalance/FormPanel.js

@@ -72,7 +72,13 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
                     readOnly: false,
                     defaultReadOnly: false,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             },{
                 xtype: "datefield",

+ 24 - 0
frontend/saas-web/app/view/money/payBalance/QueryPanel.js

@@ -98,6 +98,18 @@ Ext.define('saas.view.money.paybalance.QueryPanel', {
                             return saas.util.BaseUtil.numberFormat(v, 2, true);
                         },
                     }, {
+                        text: '币别',
+                        dataIndex: 'pb_currency',
+                        width: 120
+                    } ,{
+                        text: '汇率(%)',
+                        dataIndex: 'pb_rate',
+                        xtype: 'numbercolumn',
+                        width: 120,
+                        renderer: function(v, m, r) {
+                            return saas.util.BaseUtil.numberFormat(v, 6, false);
+                        },
+                    } ,{
                         text: '付款人',
                         dataIndex: 'pb_manname',
                         width: 110
@@ -145,6 +157,18 @@ Ext.define('saas.view.money.paybalance.QueryPanel', {
                     renderer: function(v, m, r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     },
+                } ,{
+                    text: '币别',
+                    dataIndex: 'pb_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'pb_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
                 } ,{
                     text: '结算方式',
                     dataIndex: 'pd_paymethod',

+ 7 - 1
frontend/saas-web/app/view/money/recBalance/FormPanel.js

@@ -71,7 +71,13 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
                     readOnly: false,
                     defaultReadOnly: false,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             },{
                 xtype: "datefield",

+ 24 - 0
frontend/saas-web/app/view/money/recBalance/QueryPanel.js

@@ -89,6 +89,18 @@ Ext.define('saas.view.money.recBalance.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'rb_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'rb_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '收款人',
                     dataIndex: 'rb_manname',
                     width: 80
@@ -138,6 +150,18 @@ Ext.define('saas.view.money.recBalance.QueryPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                    text: '币别',
+                    dataIndex: 'rb_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'rb_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,{
                     text: '结算方式',
                     dataIndex: 'rd_paymethod',
                     width: 120

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

@@ -104,7 +104,10 @@ Ext.define('saas.view.money.report.AccountDetails', {
         text: '汇率',
         dataIndex: 'rate',
         xtype: 'numbercolumn',
-        width: 80
+        width: 80,
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 6, true);
+        }
     }, {
         dataIndex: '',
         flex: 1

+ 35 - 5
frontend/saas-web/app/view/money/verification/FormPanel.js

@@ -539,7 +539,13 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             readOnly: false,
                             defaultReadOnly: false,
                             decimalPrecision: 6,
-                            vtype: 'positiveNumber'
+                            vtype: 'positiveNumber',
+                            listeners: {
+                                change: function(f, v) {
+                                    var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                                    f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                                }
+                            }
                         },
                     },  {
                         fieldLabel: '日期',
@@ -601,7 +607,13 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             readOnly: false,
                             defaultReadOnly: false,
                             decimalPrecision: 6,
-                            vtype: 'positiveNumber'
+                            vtype: 'positiveNumber',
+                            listeners: {
+                                change: function(f, v) {
+                                    var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                                    f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                                }
+                            }
                         },
                     }, {
                         fieldLabel: '日期',
@@ -691,7 +703,13 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             readOnly: false,
                             defaultReadOnly: false,
                             decimalPrecision: 6,
-                            vtype: 'positiveNumber'
+                            vtype: 'positiveNumber',
+                            listeners: {
+                                change: function(f, v) {
+                                    var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                                    f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                                }
+                            }
                         },
                     }, {
                         fieldLabel: '日期',
@@ -769,7 +787,13 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             readOnly: false,
                             defaultReadOnly: false,
                             decimalPrecision: 6,
-                            vtype: 'positiveNumber'
+                            vtype: 'positiveNumber',
+                            listeners: {
+                                change: function(f, v) {
+                                    var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                                    f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                                }
+                            }
                         },
                     }, {
                         fieldLabel: '日期',
@@ -847,7 +871,13 @@ Ext.define('saas.view.money.verification.FormPanel', {
                             readOnly: false,
                             defaultReadOnly: false,
                             decimalPrecision: 6,
-                            vtype: 'positiveNumber'
+                            vtype: 'positiveNumber',
+                            listeners: {
+                                change: function(f, v) {
+                                    var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                                    f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                                }
+                            }
                         },
                     },{
                         fieldLabel: '日期',

+ 13 - 1
frontend/saas-web/app/view/money/verification/QueryPanel.js

@@ -128,7 +128,19 @@ Ext.define('saas.view.money.verification.QueryPanel', {
                     renderer: function(v, m, r) {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
-                }]
+                },{
+                    text: '币别',
+                    dataIndex: 'vc_currency',
+                    width: 120
+                } ,{
+                    text: '汇率(%)',
+                    dataIndex: 'vc_rate',
+                    xtype: 'numbercolumn',
+                    width: 120,
+                    renderer: function(v, m, r) {
+                        return saas.util.BaseUtil.numberFormat(v, 6, false);
+                    },
+                } ,]
             }
         });
         this.callParent(arguments);

+ 7 - 1
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -64,7 +64,13 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             }, {
                 xtype: "datefield",

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

@@ -85,7 +85,13 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 },
             }, {
                 xtype: "datefield",
@@ -94,7 +100,7 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
                 allowBlank: false,
                 columnWidth: 0.25,
                 defaultValue: new Date()
-            },{
+            }, {
                 xtype: "hidden",
                 name: "pi_puid",
                 fieldLabel: "采购单id",

+ 7 - 1
frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js

@@ -81,7 +81,13 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             }, {
                 xtype: "datefield",

+ 28 - 4
frontend/saas-web/app/view/purchase/report/Purchase.js

@@ -142,10 +142,20 @@ Ext.define('saas.view.purchase.report.Purchase', {
         width: 120,
         exportFormat: 'Amount',
         xtype: 'numbercolumn',
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        }
+    }, {
+        text: '金额本位币(元)',
+        dataIndex: 'pd_taxtotal*pu_rate',
+        width: 120,
+        hidden:true,
+        exportFormat: 'Amount',
+        xtype: 'numbercolumn',
         renderer: function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         },
-        summaryLabel: '金额',
+        summaryLabel: '金额本位币',
         summaryType: 'sum',
         summaryRenderer: function(v, d, f, m) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
@@ -181,13 +191,24 @@ Ext.define('saas.view.purchase.report.Purchase', {
         width: 120,
         exportFormat: 'Amount',
         xtype: 'numbercolumn',
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        }
+    }, {
+        text: '价税合计本位币(元)',
+        dataIndex: 'pd_total*pu_rate',
+        xtype: 'numbercolumn',
+        width: 120,
+        hidden:true,
+        exportFormat: 'Amount',
+        xtype: 'numbercolumn',
         renderer: function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         },
-        summaryLabel: '价税合计',
+        summaryLabel: '价税合计本位币',
         summaryType: 'sum',
         summaryRenderer: function(v, d, f, m) {
-            return saas.util.BaseUtil.numberFormat(v, 2, true);
+            return saas.util.BaseUtil.numberFormat(1, 2, true);
         }
     }, {
         text: '币别',
@@ -198,7 +219,10 @@ Ext.define('saas.view.purchase.report.Purchase', {
         text: '汇率',
         xtype: 'numbercolumn',
         dataIndex: 'pu_rate',
-        width: 80
+        width: 80,
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 6, true);
+        }
     }, {
         text: '备注',
         dataIndex: 'pd_remark',

+ 5 - 5
frontend/saas-web/app/view/sale/business/Business.js → frontend/saas-web/app/view/sale/b2b/Business.js

@@ -1,13 +1,13 @@
 /**
  * 商机-公司商机
  */
-Ext.define('saas.view.sale.business.Business', {
+Ext.define('saas.view.sale.b2b.Business', {
     extend: 'saas.view.core.base.BasePanel',
-    xtype: 'sale-business-business',
+    xtype: 'sale-b2b-business',
 
-    controller: 'sale-business-business',
-    viewModel: 'sale-business-business',
-    viewName: 'sale-business-business',
+    controller: 'sale-b2b-business',
+    viewModel: 'sale-b2b-business',
+    viewName: 'sale-b2b-business',
 
 
     // dataUrl: 'http://10.1.80.23:8560/api/sale/sale/enterprise/businessChance',

+ 2 - 2
frontend/saas-web/app/view/sale/business/BusinessController.js → frontend/saas-web/app/view/sale/b2b/BusinessController.js

@@ -1,6 +1,6 @@
-Ext.define('saas.view.sale.business.BusinessController', {
+Ext.define('saas.view.sale.b2b.BusinessController', {
     extend: 'saas.view.core.base.BasePanelController',
-    alias: 'controller.sale-business-business',
+    alias: 'controller.sale-b2b-business',
 
     showQuoteWin: function(record) {
         var me = this,

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

@@ -0,0 +1,8 @@
+Ext.define('saas.view.sale.b2b.BusinessModel', {
+    extend: 'saas.view.core.base.BasePanelModel',
+    alias: 'viewmodel.sale-b2b-business',
+
+    data: {
+        configurable: false
+    }
+});

+ 12 - 0
frontend/saas-web/app/view/sale/b2b/MyBusiness.js

@@ -0,0 +1,12 @@
+/**
+ * 商机-我的商机
+ */
+Ext.define('saas.view.sale.b2b.MyBusiness', {
+    extend: 'saas.view.sale.b2b.Business',
+    xtype: 'sale-b2b-mybusiness',
+
+    viewName: 'sale-b2b-mybusiness',
+
+    // dataUrl: 'http://10.1.80.23:8560/api/sale/sale/personal/businessChance',
+    dataUrl: '/api/sale/sale/personal/businessChance',
+});

+ 5 - 4
frontend/saas-web/app/view/sale/business/Product.js → frontend/saas-web/app/view/sale/b2b/Product.js

@@ -1,11 +1,11 @@
 /**
  * 产品库
  */
-Ext.define('saas.view.sale.business.Product', {
+Ext.define('saas.view.sale.b2b.Product', {
     extend: 'saas.view.core.base.BasePanel',
-    xtype: 'sale-business-product',
+    xtype: 'sale-b2b-product',
 
-    viewName: 'sale-business-Product',
+    viewName: 'sale-b2b-Product',
 
 
     // dataUrl: 'http://10.1.80.23:8560/api/document/product/prodStorage/list',
@@ -134,7 +134,8 @@ Ext.define('saas.view.sale.business.Product', {
                             };
                             grid.setLoading(true);
                             saas.util.BaseUtil.request({
-                                url: 'http://10.1.80.23:8560/api/document/product/prodStorage/saler',
+                                // url: 'http://10.1.80.23:8560/api/document/product/prodStorage/saler',
+                                url: '/api/document/product/prodStorage/saler',
                                 params: JSON.stringify(params),
                                 method: 'POST',
                             })

+ 3 - 3
frontend/saas-web/app/view/sale/business/QuoteWin.js → frontend/saas-web/app/view/sale/b2b/QuoteWin.js

@@ -1,4 +1,4 @@
-Ext.define('saas.view.sale.business.QuoteWin', {
+Ext.define('saas.view.sale.b2b.QuoteWin', {
     extend: 'Ext.window.Window',
     xtype: 'quotewin',
 
@@ -131,7 +131,7 @@ Ext.define('saas.view.sale.business.QuoteWin', {
                 text: '确定',
                 handler: function () {
                     var win = this.up('window'),
-                        form = win.down('form')
+                        form = win.down('form'),
                         grid = form.down('grid');
 
                     if (form.isValid()) {
@@ -148,7 +148,7 @@ Ext.define('saas.view.sale.business.QuoteWin', {
             }, {
                 text: '取消',
                 handler: function () {
-
+                    me.close();
                 }
             }]
         });

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

@@ -1,8 +0,0 @@
-Ext.define('saas.view.sale.business.BusinessModel', {
-    extend: 'saas.view.core.base.BasePanelModel',
-    alias: 'viewmodel.sale-business-business',
-
-    data: {
-        configurable: false
-    }
-});

+ 0 - 12
frontend/saas-web/app/view/sale/business/MyBusiness.js

@@ -1,12 +0,0 @@
-/**
- * 商机-我的商机
- */
-Ext.define('saas.view.sale.business.MyBusiness', {
-    extend: 'saas.view.sale.business.Business',
-    xtype: 'sale-business-mybusiness',
-
-    viewName: 'sale-business-mybusiness',
-
-    // dataUrl: 'http://10.1.80.23:8560/api/sale/sale/personal/businessChance',
-    dataUrl: '/api/sale/sale/personal/businessChance',
-});

+ 25 - 3
frontend/saas-web/app/view/sale/report/Sale.js

@@ -142,11 +142,21 @@ Ext.define('saas.view.sale.report.Sale', {
         exportFormat: 'Amount',
         width: 120,
         dataIndex: 'sd_nettotal',
+        renderer : function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        }
+    }, {
+        text: '金额本位币(元)',
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        width: 120,
+        hidden:true,
+        dataIndex: 'sd_nettotal*sa_rate',
         renderer : function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         },
         summaryType: 'sum',
-        summaryLabel: '金额',
+        summaryLabel: '金额本位币',
         summaryRenderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }
@@ -179,11 +189,20 @@ Ext.define('saas.view.sale.report.Sale', {
         exportFormat: 'Amount',
         dataIndex: 'sd_total',
         width: 120,
+        renderer : function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        }
+    }, {
+        text: '价税合计(元)',
+        xtype: 'numbercolumn',
+        exportFormat: 'Amount',
+        dataIndex: 'sd_total*sa_rate',
+        width: 120,
         renderer : function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         },
         summaryType: 'sum',
-        summaryLabel: '价税合计',
+        summaryLabel: '价税合计本位币',
         summaryRenderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }
@@ -196,7 +215,10 @@ Ext.define('saas.view.sale.report.Sale', {
         text: '汇率',
         xtype: 'numbercolumn',
         dataIndex: 'sa_rate',
-        width: 80
+        width: 80,
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 6, true);
+        }
     },  {
         text : "备注", 
         dataIndex : "sd_remark",

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

@@ -99,7 +99,10 @@ Ext.define('saas.view.sale.report.SaleProfit', {
     }, {
         text: '汇率',
         dataIndex: 'pi_rate',
-        width: 80
+        width: 80,
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 6, true);
+        }
     }, {
         text: '单价(元)',
         dataIndex: 'pd_netprice',
@@ -150,11 +153,21 @@ Ext.define('saas.view.sale.report.SaleProfit', {
         dataIndex: 'pd_ordertotal',
         xtype: 'numbercolumn',
         width:120,
+        renderer : function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 2, true);
+        }
+    }, {
+        text: '价税合计本位币(元)',
+        exportFormat: 'Amount',
+        dataIndex: 'pd_ordertotal*pi_rate',
+        xtype: 'numbercolumn',
+        width:120,
+        hidden:true,
         renderer : function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         },
         summaryType: 'sum',
-        summaryLabel: '价税合计',
+        summaryLabel: '价税合计本位币',
         summaryRenderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }

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

@@ -100,7 +100,13 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             }, {
                 xtype: "datefield",

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

@@ -108,7 +108,13 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             }, {
                 xtype: "datefield",

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

@@ -117,7 +117,13 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
                     defaultReadOnly: false,
                     defaultValue: 1,
                     decimalPrecision: 6,
-                    vtype: 'positiveNumber'
+                    vtype: 'positiveNumber',
+                    listeners: {
+                        change: function(f, v) {
+                            var defaultCurrency = Ext.getCmp('mainView').getViewModel().get('defaultCurrency');
+                            f.setReadOnly(f.ownerCt.items.items[0].value == defaultCurrency);
+                        }
+                    }
                 }
             }, {
                 xtype: "datefield",

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

@@ -53,6 +53,16 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
         text: 'id',
         dataIndex: 'id',
         hidden: true
+    }, {
+        text: '单号',
+        dataIndex: 'pi_inoutno',
+        width: 150,
+        locked: true
+    },  {
+        text: '业务类型',
+        dataIndex: 'pi_class',
+        width: 100,
+        locked: true
     }, {
         text: '单据日期',
         dataIndex: 'pi_date',
@@ -70,14 +80,6 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
         renderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 0, false);
         }
-    }, {
-        text: '单号',
-        dataIndex: 'pi_inoutno',
-        width: 150
-    }, {
-        text: '业务类型',
-        dataIndex: 'pi_class',
-        width: 100
     }, {
         text: '物料编号',
         dataIndex: 'pd_prodcode',
@@ -90,7 +92,7 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
         text: '物料名称',
         dataIndex: 'pr_detail',
         width: 150
-    }, {
+    },  {
         text: '型号',
         dataIndex: 'pr_orispeccode',
         width: 200
@@ -131,7 +133,7 @@ Ext.define('saas.view.stock.report.Prodiodetail', {
         renderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 4, true);
         }
-    },  {
+    }, {
         text: '仓库',
         dataIndex: 'pd_whname',
         width: 120

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

@@ -72,19 +72,19 @@
             "viewType": "sale-salein-querypanel"
         }, {
             "b2b":true,
-            "id": "sale-business-product",
+            "id": "sale-b2b-product",
             "text": "产品库",
-            "viewType": "sale-business-product"
+            "viewType": "sale-b2b-product"
         }, {
             "b2b":true,
-            "id": "sale-business-business",
+            "id": "sale-b2b-business",
             "text": "公司商机",
-            "viewType": "sale-business-business"
+            "viewType": "sale-b2b-business"
         }, {
             "b2b":true,
-            "id": "sale-business-mybusiness",
+            "id": "sale-b2b-mybusiness",
             "text": "我的商机",
-            "viewType": "sale-business-mybusiness"
+            "viewType": "sale-b2b-mybusiness"
         }]
     }, {
         "text": "报表",
@@ -241,6 +241,12 @@
             "viewType": "document-customer-basepanel",
             "addType":"document-customer-formpanel",
             "leaf": true
+        }, {
+            "b2b":true,
+            "id": "document-uusetting",
+            "text": "UU设置",
+            "viewType": "document-uusetting",
+            "leaf": true
         }, {
             "id":"product-list-formpanel",
             "text": "物料资料",