Kaynağa Gözat

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

jinsy 7 yıl önce
ebeveyn
işleme
3d194cfe83
84 değiştirilmiş dosya ile 2475 ekleme ve 389 silme
  1. 4 0
      applications/document/document-server/pom.xml
  2. 2 0
      applications/document/document-server/src/main/resources/application.yml
  3. 6 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Payablesdetail.java
  4. 6 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Receivablesdetail.java
  5. 1 0
      applications/money/money-server/src/main/resources/mapper/PayablesdetailMapper.xml
  6. 2 1
      applications/money/money-server/src/main/resources/mapper/ReceivablesdetailMapper.xml
  7. 2 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/po/report/PurchasePay.java
  8. 5 4
      applications/purchase/purchase-server/src/main/resources/application.yml
  9. 1 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  10. 5 0
      applications/sale/sale-server/pom.xml
  11. 2 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SalerecView.java
  12. 5 2
      applications/sale/sale-server/src/main/resources/application.yml
  13. 1 0
      applications/sale/sale-server/src/main/resources/mapper/SalerecViewMapper.xml
  14. 1 1
      applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/InquiryApi.java
  15. 15 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/ProductApi.java
  16. 1 1
      applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/SearchApi.java
  17. 32 0
      applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/SearchUUApi.java
  18. 28 0
      applications/transfers/mall-api/src/test/java/com/usoftchina/inquiry/test/ProductApiTest.java
  19. 47 0
      applications/transfers/mall-api/src/test/java/com/usoftchina/inquiry/test/SearchUUApiTest.java
  20. 5 4
      applications/transfers/mall-api/src/test/resources/application.yml
  21. 1 0
      applications/transfers/pom.xml
  22. 20 1
      applications/transfers/transfers-api/pom.xml
  23. 15 0
      applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendApi.java
  24. 19 0
      applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendApiFallBack.java
  25. 15 0
      applications/transfers/transfers-dto/pom.xml
  26. 113 0
      applications/transfers/transfers-dto/src/main/java/com/usoftchina/saas/transfers/dto/MessageInfo.java
  27. 4 0
      applications/transfers/transfers-server/pom.xml
  28. 1 1
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/controller/TransfersController.java
  29. 0 111
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/po/MessageInfo.java
  30. 1 4
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java
  31. 1 1
      applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/SendService.java
  32. 1 1
      applications/transfers/transfers-server/src/test/java/com/usoftchina/saas/transfers/service/RabbitSendServiceTest.java
  33. 5 2
      frontend/saas-portal-web/static/css/invitation_mobile_join.css
  34. BIN
      frontend/saas-portal-web/static/img/assets/expand.png
  35. 1 0
      frontend/saas-web/app/model/report/PurchasePay.js
  36. 3 1
      frontend/saas-web/app/model/report/SaleRec.js
  37. 5 10
      frontend/saas-web/app/util/FormUtil.js
  38. 100 0
      frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js
  39. 15 0
      frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.scss
  40. 12 1
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  41. 13 0
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  42. 44 19
      frontend/saas-web/app/view/core/form/FormPanel.js
  43. 9 9
      frontend/saas-web/app/view/document/customer/FormController.js
  44. 35 13
      frontend/saas-web/app/view/document/customer/FormPanel.js
  45. 9 9
      frontend/saas-web/app/view/document/vendor/FormController.js
  46. 36 14
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  47. 17 0
      frontend/saas-web/app/view/main/Navigation.js
  48. 9 5
      frontend/saas-web/app/view/money/fundtransfer/FormPanel.js
  49. 32 11
      frontend/saas-web/app/view/money/othreceipts/FormPanel.js
  50. 11 11
      frontend/saas-web/app/view/money/othreceipts/FormPanelController.js
  51. 33 11
      frontend/saas-web/app/view/money/othspendings/FormPanel.js
  52. 11 11
      frontend/saas-web/app/view/money/othspendings/FormPanelController.js
  53. 22 0
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  54. 21 0
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  55. 4 0
      frontend/saas-web/app/view/money/report/PayDetail.js
  56. 4 0
      frontend/saas-web/app/view/money/report/RecDetail.js
  57. 87 3
      frontend/saas-web/app/view/money/verification/FormPanel.js
  58. 428 0
      frontend/saas-web/app/view/purchase/deviceQuery/DataList.js
  59. 10 0
      frontend/saas-web/app/view/purchase/deviceQuery/DataListController.js
  60. 4 0
      frontend/saas-web/app/view/purchase/deviceQuery/DataListlModel.js
  61. 33 11
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  62. 11 11
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  63. 33 11
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js
  64. 11 11
      frontend/saas-web/app/view/purchase/purchaseIn/FormPanelController.js
  65. 33 11
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js
  66. 11 11
      frontend/saas-web/app/view/purchase/purchaseOut/FormPanelController.js
  67. 376 0
      frontend/saas-web/app/view/purchase/quotationList/DataList.js
  68. 10 0
      frontend/saas-web/app/view/purchase/quotationList/DataListController.js
  69. 4 0
      frontend/saas-web/app/view/purchase/quotationList/DataListlModel.js
  70. 4 0
      frontend/saas-web/app/view/purchase/report/PurchasePay.js
  71. 421 0
      frontend/saas-web/app/view/purchase/sendQuotation/DataList.js
  72. 10 0
      frontend/saas-web/app/view/purchase/sendQuotation/DataListController.js
  73. 4 0
      frontend/saas-web/app/view/purchase/sendQuotation/DataListlModel.js
  74. 4 0
      frontend/saas-web/app/view/sale/report/SaleRec.js
  75. 33 11
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  76. 11 11
      frontend/saas-web/app/view/sale/sale/FormPanelController.js
  77. 33 11
      frontend/saas-web/app/view/sale/saleIn/FormPanel.js
  78. 11 11
      frontend/saas-web/app/view/sale/saleIn/FormPanelController.js
  79. 23 1
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  80. 11 11
      frontend/saas-web/app/view/sale/saleOut/FormPanelController.js
  81. 1 0
      frontend/saas-web/app/view/sys/maxnumbers/DataList.js
  82. 18 0
      frontend/saas-web/app/view/viewport/ViewportController.js
  83. 22 5
      frontend/saas-web/resources/json/navigation.json
  84. 5 0
      pom.xml

+ 4 - 0
applications/document/document-server/pom.xml

@@ -59,6 +59,10 @@
             <groupId>org.springframework.cloud</groupId>
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.squareup.okhttp3</groupId>
+            <artifactId>okhttp</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>document-dto</artifactId>

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

@@ -80,6 +80,8 @@ ribbon:
 feign:
   hystrix:
     enabled: true
+  okhttp:
+    enabled: true
 hystrix:
     command:
         default:

+ 6 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Payablesdetail.java

@@ -37,6 +37,12 @@ public class Payablesdetail {
 
     private Integer pd_ym;
 
+    private String pd_currency;
+
+    public String getPd_currency() { return  pd_currency; }
+
+    public void setPd_currency(String pd_currency) { this.pd_currency = pd_currency; }
+
     public Integer getPd_ym() {
         return pd_ym;
     }

+ 6 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Receivablesdetail.java

@@ -37,6 +37,12 @@ public class Receivablesdetail {
 
     private Integer rd_ym;
 
+    private String rd_currency;
+
+    public String getRd_currency() { return  rd_currency; }
+
+    public void setRd_currency(String rd_currency) {this.rd_currency = rd_currency; }
+
     public Integer getRd_ym() {
         return rd_ym;
     }

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

@@ -19,6 +19,7 @@
     <result column="pd_status" property="pd_status" jdbcType="INTEGER" />
     <result column="pd_query" property="pd_query" jdbcType="INTEGER" />
     <result column="pd_ym" property="pd_ym" jdbcType="INTEGER" />
+    <result column="pd_currency" property="pd_currency" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >
     pd_id, pd_detno, pd_vendid, pd_vendcode, pd_vendname, pd_date, pd_code, pd_kind, 

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

@@ -19,11 +19,12 @@
     <result column="rd_status" property="rd_status" jdbcType="INTEGER" />
     <result column="rd_query" property="rd_query" jdbcType="INTEGER" />
     <result column="rd_ym" property="rd_ym" jdbcType="INTEGER" />
+    <result column="rd_currency" property="rd_currency" jdbcType="VARCHAR"/>
   </resultMap>
   <sql id="Base_Column_List" >
     rd_id, rd_detno, rd_custid, rd_custcode, rd_custname, rd_date, rd_code, rd_kind, 
     rd_sellerid, rd_sellername, rd_addrec, rd_addpre, rd_remain, companyid, rd_status, 
-    rd_query,rd_ym
+    rd_query,rd_ym,rd_currency
   </sql>
 
   <select id="selectByCondition" resultMap="BaseResultMap">

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

@@ -41,4 +41,6 @@ public class PurchasePay  extends CommonBaseEntity implements Serializable {
     private Double pi_nettotal;
 
     private String pb_manname;
+
+    private String pi_currency;
 }

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

@@ -90,7 +90,8 @@ hystrix:
                     thread:
                         timeoutInMilliseconds: 4000
 b2b:
-  inquiry:
-    base-url: https://test-inquiry.uuzcc.cn
-  Component:
-    base-url: https://test-mall.uuzcc.cn
+  baseUrl:
+    inquiry: https://test-inquiry.uuzcc.cn
+    Component: https://test-mall.uuzcc.cn
+    product: http://test-product.uuzcc.cn
+    uu: https://test-b2b.uuzcc.cn

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

@@ -21,6 +21,7 @@
     <result column="pi_nettotal" property="pi_nettotal" jdbcType="DOUBLE" />
     <result column="pi_total" property="pi_total" jdbcType="DOUBLE" />
     <result column="pb_manname" property="pb_manname" jdbcType="VARCHAR"/>
+    <result column="pi_currency" property="pi_currency" jdbcType="VARCHAR"/>
   </resultMap>
   <resultMap id="ListMap" type="com.usoftchina.saas.purchase.po.report.PurchaseReportDetail">
     <id column="pu_id" property="pu_id" jdbcType="INTEGER" />

+ 5 - 0
applications/sale/sale-server/pom.xml

@@ -101,6 +101,11 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>purchase-api</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>transfers-api</artifactId>
+            <version>1.0.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>

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

@@ -41,4 +41,6 @@ public class SalerecView {
     private Double pi_total;
 
     private Double pi_nettotal;
+
+    private String pi_currency;
 }

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

@@ -90,5 +90,8 @@ hystrix:
                     thread:
                         timeoutInMilliseconds: 4000
 b2b:
-  inquiry:
-    base-url: https://test-inquiry.uuzcc.cn
+  baseUrl:
+    inquiry: https://test-inquiry.uuzcc.cn
+    Component: https://test-mall.uuzcc.cn
+    product: http://test-product.uuzcc.cn
+    uu: https://test-b2b.uuzcc.cn

+ 1 - 0
applications/sale/sale-server/src/main/resources/mapper/SalerecViewMapper.xml

@@ -18,6 +18,7 @@
     <result column="rbd_amount" property="rbd_amount" jdbcType="DOUBLE" />
     <result column="pi_nettotal" property="pi_nettotal" jdbcType="DOUBLE" />
     <result column="pi_total" property="pi_total" jdbcType="DOUBLE" />
+    <result column="pi_currency" property="pi_currency" jdbcType="VARCHAR" />
   </resultMap>
   <select id="selectByCondition" resultMap="BaseResultMap">
     select  *  from Salerec_View

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

@@ -5,7 +5,7 @@ import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.ui.ModelMap;
 import org.springframework.web.bind.annotation.*;
 
-@FeignClient(url = "${b2b.inquiry.base-url}", name = "inquiry-server")
+@FeignClient(url = "${b2b.baseUrl.inquiry}", name = "inquiry-server")
 @RequestMapping("/inquiry")
 public interface InquiryApi {
 

+ 15 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/ProductApi.java

@@ -0,0 +1,15 @@
+package com.usoftchina.inquiry.api;
+
+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.RequestParam;
+
+@FeignClient(url = "${b2b.baseUrl.product}", name = "product-server")
+@RequestMapping("/product")
+public interface ProductApi {
+
+    @PostMapping("/erp/save")
+    void saveProducts(@RequestParam("data") String data, @RequestParam("enUU")Long enUU);
+
+}

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

@@ -4,7 +4,7 @@ import com.usoftchina.inquiry.po.search.SearchComponentResp;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
-@FeignClient(url = "${b2b.Component.base-url}", name = "search-server")
+@FeignClient(url = "${b2b.baseUrl.Component}", name = "search-server")
 @RequestMapping("/search")
 public interface SearchApi {
 

+ 32 - 0
applications/transfers/mall-api/src/main/java/com/usoftchina/inquiry/api/SearchUUApi.java

@@ -0,0 +1,32 @@
+package com.usoftchina.inquiry.api;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.ui.ModelMap;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.Map;
+
+@FeignClient(url = "${b2b.baseUrl.uu}", name = "b2b-server")
+@RequestMapping("/public")
+public interface SearchUUApi {
+    /**
+     * 通过企业名称获取UU号, 全名称匹配
+     * @param data
+     * @return
+     */
+    @GetMapping("/queriable/batch/members")
+    Map<String, Map<String, Object>> queryEnterprises(@RequestParam("data") String data);
+
+    /**
+     * 按企业名称、简称、UU号等查找企业信息, 模糊匹配
+     * @param name
+     * @param shortName
+     * @param uu
+     * @return
+     */
+    @GetMapping("/queriable/members")
+    ModelMap queryEnterprise(@RequestParam("name") String name, @RequestParam("shortName") String shortName, @RequestParam("uu") Long uu);
+
+}

+ 28 - 0
applications/transfers/mall-api/src/test/java/com/usoftchina/inquiry/test/ProductApiTest.java

@@ -0,0 +1,28 @@
+package com.usoftchina.inquiry.test;
+
+import com.usoftchina.inquiry.api.ProductApi;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class ProductApiTest {
+
+    @Autowired
+    private ProductApi productApi;
+
+    @Test
+    public void testA_saveProduct(){
+        String data = "[{\"pr_code\":\"0204020020015\",\"pr_detail\":\"P沟道场效应管\",\"pr_id\":3057682,\"pr_ispubsale\":0,\"pr_ispurchase\":1,\"pr_issale\":1,\"pr_isshow\":0,\"pr_leadtime\":28.0,\"pr_ltinstock\":0.0,\"pr_spec\":\"WPM1485-6/TR,-7.4A,-12V,DFN8,SMD,无卤/WPM1485-6/TR/Will SEMI\",\"pr_unit\":\"PCS\",\"pr_zxbzs\":3000.0,\"pr_zxdhl\":3000.0},{\"pr_code\":\"B2B001\",\"pr_detail\":\"B2B平台测试\",\"pr_id\":50688771,\"pr_ispubsale\":0,\"pr_ispurchase\":1,\"pr_issale\":1,\"pr_isshow\":0,\"pr_leadtime\":0.0,\"pr_orispeccode\":\"LMK01020ISQX/NOPB\",\"pr_spec\":\"B2B平台测试01\",\"pr_unit\":\"PCS\",\"pr_uuid\":\"1200200000000521\",\"pr_zxbzs\":0.0,\"pr_zxdhl\":0.0}]";
+        Long enUU = 10050573L;
+        productApi.saveProducts(data, enUU);
+        System.out.println("success");
+    }
+
+}

+ 47 - 0
applications/transfers/mall-api/src/test/java/com/usoftchina/inquiry/test/SearchUUApiTest.java

@@ -0,0 +1,47 @@
+package com.usoftchina.inquiry.test;
+
+import com.usoftchina.inquiry.api.SearchUUApi;
+import com.usoftchina.saas.utils.CollectionUtils;
+import com.usoftchina.saas.utils.JsonUtils;
+import org.junit.FixMethodOrder;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.MethodSorters;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.ui.ModelMap;
+
+import java.util.Map;
+
+/**
+ * @Description 获取UU号测试
+ * @Author chenwei
+ * @Date 2019/01/09
+ */
+@RunWith(SpringRunner.class)
+@SpringBootTest
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class SearchUUApiTest {
+
+    @Autowired
+    private SearchUUApi searchUUApi;
+
+    @Test
+    public void testA_queryEnterprises(){
+        String enterpriseName = "祝通鸿2";
+        Map<String, Map<String, Object>> resultMap = searchUUApi.queryEnterprises(enterpriseName);
+        if (CollectionUtils.isEmpty(resultMap)){
+            System.out.println("empty result!");
+        }
+        System.out.println(JsonUtils.toJsonString(resultMap));
+    }
+
+    @Test
+    public void testB_queryEnterprise(){
+        String enterpriseName = "陈炜测试企业";
+        ModelMap modelMap = searchUUApi.queryEnterprise(enterpriseName, null, null);
+        System.out.println(JsonUtils.toJsonString(modelMap));
+    }
+
+}

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

@@ -1,5 +1,6 @@
 b2b:
-  inquiry:
-    base-url: https://test-inquiry.uuzcc.cn
-  Component:
-    base-url: https://test-mall.uuzcc.cn
+  baseUrl:
+    inquiry: https://test-inquiry.uuzcc.cn
+    Component: https://test-mall.uuzcc.cn
+    product: http://test-product.uuzcc.cn
+    uu: https://test-b2b.uuzcc.cn

+ 1 - 0
applications/transfers/pom.xml

@@ -16,6 +16,7 @@
         <module>transfers-api</module>
         <module>transfers-server</module>
         <module>mall-api</module>
+        <module>transfers-dto</module>
     </modules>
 
 </project>

+ 20 - 1
applications/transfers/transfers-api/pom.xml

@@ -9,9 +9,28 @@
     </parent>
     <modelVersion>4.0.0</modelVersion>
 
-    <groupId>com.usoftchina.saas</groupId>
     <artifactId>transfers-api</artifactId>
     <version>1.0.0-SNAPSHOT</version>
 
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>core</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>transfers-dto</artifactId>
+        </dependency>
+        <!-- test -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
 
 </project>

+ 15 - 0
applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendApi.java

@@ -0,0 +1,15 @@
+package com.usoftchina.saas.transfers.api;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient(name = "transfers-server" , fallback = SendApiFallBack.class)
+public interface SendApi {
+
+    @PostMapping("/send/Message")
+    public Result sendMsg(@RequestBody MessageInfo info);
+
+}

+ 19 - 0
applications/transfers/transfers-api/src/main/java/com/usoftchina/saas/transfers/api/SendApiFallBack.java

@@ -0,0 +1,19 @@
+package com.usoftchina.saas.transfers.api;
+
+import com.usoftchina.saas.base.Result;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @author: guq
+ * @create: 2019-01-09 13:50
+ **/
+@Component
+public class SendApiFallBack implements SendApi{
+
+    @Override
+    public Result sendMsg(@RequestBody MessageInfo info) {
+        return Result.error("网络异常,请稍后重试!");
+    }
+}

+ 15 - 0
applications/transfers/transfers-dto/pom.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>transfers</artifactId>
+        <groupId>com.usoftchina.saas</groupId>
+        <version>1.0.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>transfers-dto</artifactId>
+
+
+</project>

+ 113 - 0
applications/transfers/transfers-dto/src/main/java/com/usoftchina/saas/transfers/dto/MessageInfo.java

@@ -0,0 +1,113 @@
+package com.usoftchina.saas.transfers.dto;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * @author: guq
+ * @create: 2019-01-09 11:33
+ **/
+public class MessageInfo implements Serializable{
+        /**
+         * 消息ID
+         */
+        private String msgId;
+        /**
+         * 用户ID
+         */
+        private String userId;
+        /**
+         * 应用ID
+         */
+        private String appId;
+        /**
+         * 业务类型
+         */
+        private String bizType;
+
+        /**
+         * 业务单据ID
+         */
+
+        private String bizId;
+        /**
+         * 公司id
+         * @return
+         */
+        private Long companyId;
+
+        /**
+         * 时间戳
+         */
+        private long timestamp;
+
+        public long getTimestamp() {
+            return timestamp;
+        }
+
+        public void setTimestamp(long timestamp) {
+            this.timestamp = timestamp;
+        }
+
+        public String getMsgId() {
+            return msgId;
+        }
+
+        public void setMsgId(String msgId) {
+            this.msgId = msgId;
+        }
+
+        public String getUserId() {
+            return userId;
+        }
+
+        public void setUserId(String userId) {
+            this.userId = userId;
+        }
+
+        public String getAppId() {
+            return appId;
+        }
+
+        public void setAppId(String appId) {
+            this.appId = appId;
+        }
+
+        public String getBizType() {
+            return bizType;
+        }
+
+        public void setBizType(String bizType) {
+            this.bizType = bizType;
+        }
+
+        public String getBizId() {
+            return bizId;
+        }
+
+        public void setBizId(String bizId) {
+            this.bizId = bizId;
+        }
+
+        public MessageInfo(String userId, String bizType, String bizId, Long companyId) {
+            this.msgId = UUID.randomUUID().toString();
+            this.userId = userId;
+            this.appId = "trade";
+            this.bizType = bizType;
+            this.bizId = bizId;
+            this.companyId = companyId;
+            this.timestamp = new Date().getTime();
+        }
+
+        public MessageInfo() {
+
+        }
+        public Long getCompanyId() {
+            return companyId;
+        }
+
+        public void setCompanyId(Long companyId) {
+            this.companyId = companyId;
+        }
+}

+ 4 - 0
applications/transfers/transfers-server/pom.xml

@@ -52,6 +52,10 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>commons-dto</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>transfers-dto</artifactId>
+        </dependency>
         <!-- db -->
         <dependency>
             <groupId>mysql</groupId>

+ 1 - 1
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/controller/TransfersController.java

@@ -1,9 +1,9 @@
 package com.usoftchina.saas.transfers.controller;
 
 import com.usoftchina.saas.base.Result;
-import com.usoftchina.saas.transfers.po.MessageInfo;
 import com.usoftchina.saas.transfers.service.SendService;
 import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;

+ 0 - 111
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/po/MessageInfo.java

@@ -1,111 +0,0 @@
-package com.usoftchina.saas.transfers.po;
-
-import java.io.Serializable;
-import java.util.Date;
-
-/**
- * @Description 消息内容
- * @Author chenwei
- * @Date 2018/12/27
- */
-public class MessageInfo implements Serializable {
-    /**
-     * 消息ID
-     */
-    private String msgId;
-    /**
-     * 用户ID
-     */
-    private String userId;
-    /**
-     * 应用ID
-     */
-    private String appId;
-    /**
-     * 业务类型
-     */
-    private String bizType;
-
-    /**
-     * 业务单据ID
-     */
-
-    private String bizId;
-    /**
-     * 公司id
-     * @return
-     */
-    private Long companyId;
-
-    /**
-     * 时间戳
-     */
-    private long timestamp;
-
-    public long getTimestamp() {
-        return timestamp;
-    }
-
-    public void setTimestamp(long timestamp) {
-        this.timestamp = timestamp;
-    }
-
-    public String getMsgId() {
-        return msgId;
-    }
-
-    public void setMsgId(String msgId) {
-        this.msgId = msgId;
-    }
-
-    public String getUserId() {
-        return userId;
-    }
-
-    public void setUserId(String userId) {
-        this.userId = userId;
-    }
-
-    public String getAppId() {
-        return appId;
-    }
-
-    public void setAppId(String appId) {
-        this.appId = appId;
-    }
-
-    public String getBizType() {
-        return bizType;
-    }
-
-    public void setBizType(String bizType) {
-        this.bizType = bizType;
-    }
-
-    public String getBizId() {
-        return bizId;
-    }
-
-    public void setBizId(String bizId) {
-        this.bizId = bizId;
-    }
-
-    public MessageInfo(String userId, String appId, String bizType, String bizId) {
-        this.userId = userId;
-        this.appId = appId;
-        this.bizType = bizType;
-        this.bizId = bizId;
-        this.timestamp = new Date().getTime();
-    }
-
-    public MessageInfo() {
-
-    }
-    public Long getCompanyId() {
-        return companyId;
-    }
-
-    public void setCompanyId(Long companyId) {
-        this.companyId = companyId;
-    }
-}

+ 1 - 4
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/ReceiveService.java

@@ -2,20 +2,17 @@ package com.usoftchina.saas.transfers.service;
 
 import com.rabbitmq.client.Channel;
 import com.usoftchina.saas.commons.po.BillCodeSeq;
-import com.usoftchina.saas.transfers.config.RabbitConfig;
 import com.usoftchina.saas.transfers.mapper.BrokerMessageLogMapper;
 import com.usoftchina.saas.transfers.po.BrokerMessagelog;
-import com.usoftchina.saas.transfers.po.MessageInfo;
 import com.usoftchina.saas.transfers.task.*;
 import com.usoftchina.saas.utils.JsonUtils;
 import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.rabbit.annotation.*;
 import org.springframework.amqp.support.AmqpHeaders;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.messaging.handler.annotation.Headers;
 import org.springframework.messaging.handler.annotation.Payload;
 import org.springframework.stereotype.Service;

+ 1 - 1
applications/transfers/transfers-server/src/main/java/com/usoftchina/saas/transfers/service/SendService.java

@@ -4,10 +4,10 @@ import com.usoftchina.saas.transfers.config.ExpirationMessagePostProcessor;
 import com.usoftchina.saas.transfers.config.RabbitConfig;
 import com.usoftchina.saas.transfers.mapper.BrokerMessageLogMapper;
 import com.usoftchina.saas.transfers.po.BrokerMessagelog;
-import com.usoftchina.saas.transfers.po.MessageInfo;
 import com.usoftchina.saas.transfers.po.Status;
 import com.usoftchina.saas.utils.JsonUtils;
 import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.amqp.rabbit.core.RabbitTemplate;

+ 1 - 1
applications/transfers/transfers-server/src/test/java/com/usoftchina/saas/transfers/service/RabbitSendServiceTest.java

@@ -1,6 +1,6 @@
 package com.usoftchina.saas.transfers.service;
 
-import com.usoftchina.saas.transfers.po.MessageInfo;
+import com.usoftchina.saas.transfers.dto.MessageInfo;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.springframework.beans.factory.annotation.Autowired;

+ 5 - 2
frontend/saas-portal-web/static/css/invitation_mobile_join.css

@@ -11,11 +11,14 @@ select{
     background-origin: content-box;
     background: url(../img/assets/expand.png) no-repeat scroll right center transparent;
 }
+html,body{
+    height: 100%;
+    width: 100%;
+}
 body {
     background-repeat: no-repeat;
     background-position: center;
-    background-position-y: -60px;
-    background-attachment: fixed;
+    height: 100%;
     z-index: -1;
     width: 100%;
     background-size: cover;

BIN
frontend/saas-portal-web/static/img/assets/expand.png


+ 1 - 0
frontend/saas-web/app/model/report/PurchasePay.js

@@ -20,5 +20,6 @@ Ext.define('saas.model.report.PurchasePay', {
         { name: 'pb_payrate', type: 'float', }, // 付款比例
         { name: 'pb_manname', type: 'string' }, // 付款人
         { name: 'pb_remark', type: 'string' }, // 备注
+        { name: 'pi_currency', type:'string' } //币别
     ],
 });

+ 3 - 1
frontend/saas-web/app/model/report/SaleRec.js

@@ -19,6 +19,8 @@ Ext.define('saas.model.report.SaleRec', {
                 return Number(saas.util.BaseUtil.numberFormat(t, 2, false));
             },
             depends: ['pi_total', 'pi_nettotal']
-        },{ name: 'rb_remark', type: 'string' }
+        },
+        { name: 'rb_remark', type: 'string' },
+        { name: 'pi_currency', type: 'string' }
     ],
 });

+ 5 - 10
frontend/saas-web/app/util/FormUtil.js

@@ -282,26 +282,21 @@ Ext.define('saas.util.FormUtil', {
                     Ext.applyIf(item, {
                         maxLength: 50
                     });
-                }
-                
-                if(item.xtype == 'datefield') {
+                }else if(item.xtype == 'datefield') {
                     Ext.applyIf(item, {
                         editable: false,
                         format: 'Y-m-d'
                     });
-                }
-
-                if(item.xtype == 'numberfield') {
+                }else if(item.xtype == 'numberfield') {
                     Ext.applyIf(item, {
                         hideTrigger: true, // 隐藏trigger
                         mouseWheelEnabled: false // 取消滚轮事件
                     });
                     // 设置默认值为0
                     formModel.set(item.name, 0);
-                }
-
-                // 如果是从表为其绑定store
-                if(item.xtype == 'detailGridField') {
+                }else if(item.xtype == 'condbfindtrigger') {
+                    item.isConField = true;
+                }else if(item.xtype == 'detailGridField') {
                     let index = form.detailCount;
                     let columns = item.columns,
                     cnames = columns.filter(function(c) {

+ 100 - 0
frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.js

@@ -0,0 +1,100 @@
+/**
+ * 放大镜组合字段
+ */
+Ext.define('saas.view.core.form.field.ConDbfindTrigger', {
+    extend: 'Ext.form.FieldContainer',
+    alias: 'widget.condbfindtrigger',
+
+    cls: 'x-confield',
+
+    layout: 'hbox',
+    height: 32,
+    
+    isConField: true,
+
+    // 额外字段自定义替换属性
+    supFieldConfig: {},
+
+    initComponent: function() {
+        var me = this,
+        allowBlank = Ext.isBoolean(me.allowBlank) ? me.allowBlank : true,
+        dbType = me.dbType,
+        dbfinds = me.dbfinds,
+        name0 = dbfinds[0].to,
+        name1 = dbfinds[1].to;
+
+        Ext.apply(me, {
+            items: [{
+                xtype: dbType,
+                name: name0,
+                allowBlank: allowBlank,
+                msgTarget: 'none',
+                bind: {
+                    value: '{' + name0 + '}'
+                },
+                dbfinds: dbfinds,
+                flex: 0.5,
+                listeners: {
+                    validChange: function() {
+                        me.fireEvent('validChange');
+                    },
+                    validitychange: function() {
+                        me.items.items[1].isValid();
+                        me.fireEvent('validitychange');
+                    },
+                    change: function(f) {
+                        var field1 = me.items.items[1];
+                        if(f.dbValues) {
+                            var value = f.dbValues[f.dbfinds[1].from];
+                            field1.setValue(value);
+                            field1.publishState('value', value);
+                        }
+                    },
+                    blur: function() {
+                        this.fireEvent('change', this)
+                    }
+                }
+            }, Ext.Object.merge({
+                xtype: 'textfield',
+                name: name1,
+                allowBlank: allowBlank,
+                readOnly: true,
+                defaultReadOnly: true,
+                bind: {
+                    value: '{' + name1 + '}'
+                },
+                flex: 0.5
+            }, me.supFieldConfig)]
+        });
+        me.callParent(arguments);
+    },
+
+    listeners: {
+        afterrender: function(me) {
+            me.items.items[1].on('validChange', function() {
+                me.fireEvent('validChange');
+            });
+            me.items.items[1].on('validitychange', function() {
+                me.items.items[0].isValid();
+                me.fireEvent('validitychange');
+            });
+        }
+    },
+
+    setValue: function(values) {
+        var me = this,
+        name0 = dbfinds[0].to,
+        name1 = dbfinds[1].to;
+
+        me.items.items[0].setValue(values[name0]);
+        me.items.items[1].setValue(values[name1]);
+    },
+    
+    isValid: function() {
+        return this.items.items[0].isValid() && this.items.items[1].isValid();
+    },
+
+    isDirty: function() {
+        return this.items.items[0].isDirty() && this.items.items[1].isDirty();
+    }
+});

+ 15 - 0
frontend/saas-web/app/view/core/dbfind/ConDbfindTrigger.scss

@@ -0,0 +1,15 @@
+.x-confield {
+    .x-field {
+        &:first-child {
+            .x-form-trigger-wrap {
+                border-radius: 2px 0 0 2px;
+            }
+        }
+        &:last-child {
+            .x-form-trigger-wrap {
+                border-radius: 0 2px 2px 0;
+                border-left: none;
+            }
+        }
+    }
+}

+ 12 - 1
frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js

@@ -114,6 +114,9 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
         itemClick: function(view,record) {
             var me = this;
             var dbfinds = me.dbfinds;
+            var ownerTrigger = me.ownerCt.trigger;
+            ownerTrigger.dbValues = record.data;
+
             if(dbfinds&&dbfinds.length>0){
                 if(me.belong=='grid'){
                     for (let index = 0; index < dbfinds.length; index++) {
@@ -141,8 +144,16 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                             }    
                         }
                     }
+                }else {
+                    var dbfind = Ext.Array.findBy(dbfinds, function(d) {
+                        return d.to = ownerTrigger.name;
+                    });
+                    if(dbfind) {
+                        ownerTrigger.setValue(record.get(dbfind.from));
+                    }
                 }
-                me.ownerCt.trigger.aftertrigger(me.ownerCt.trigger,record);
+                
+                ownerTrigger.aftertrigger(ownerTrigger,record);
             }
             me.ownerCt.close();
         }

+ 13 - 0
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -236,6 +236,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                 });
             }
             if (!f.value || f.value == '' || data.length > 1 || data.length == 0) {
+                me.dbValues = {};
                 if (dbfinds && dbfinds.length > 0) {
                     if (me.belong == 'grid') {
                         for (let index = 0; index < dbfinds.length; index++) {
@@ -265,9 +266,12 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                                 }
                             }
                         }
+                    }else {
+                        me.setValue(null);
                     }
                 }
             } else if (data.length == 1) {
+                me.dbValues = data[0];
                 var dbfinds = me.dbfinds;
                 if (dbfinds && dbfinds.length > 0) {
                     if (me.belong == 'grid') {
@@ -303,6 +307,7 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
         select: function (combo, record, eOpts) {
             var me = combo;
             var dbfinds = me.dbfinds;
+            me.dbValues = record.data;
             if (dbfinds && dbfinds.length > 0) {
                 if (me.belong == 'grid') {
                     for (let index = 0; index < dbfinds.length; index++) {
@@ -330,7 +335,15 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
                             }
                         }
                     }
+                }else {
+                    var dbfind = Ext.Array.findBy(dbfinds, function(d) {
+                        return d.to = me.name;
+                    });
+                    if(dbfind) {
+                        me.setValue(record.get(dbfind.from));
+                    }
                 }
+                
                 me.aftertrigger(me, record);
             }
         }

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

@@ -395,7 +395,8 @@ Ext.define('saas.view.core.form.FormPanel', {
             bind = item.bind,
             name = item.name,
             ignore = item.ignore,
-            defaultValue = item.defaultValue;
+            defaultValue = item.defaultValue,
+            isConField = item.isConField;
 
             item.listeners = item.listeners || {};
             item.listeners.validChange = function() {
@@ -415,29 +416,53 @@ Ext.define('saas.view.core.form.FormPanel', {
                 item.defaultReadOnly = item.readOnly;
             }
 
-            if (bind) {
-                if (!Ext.isString(bind)) {
-                    Ext.apply(bind, {
-                        value: '{' + name + '}'
-                    });
+            // 如果是组合放大镜
+            if(isConField) {
+                let names = item.dbfinds.map(function(d) {
+                    return d.to;
+                });
+
+                // 设置默认值
+                if (defaultValue != undefined) {
+                    
+
+                    for(let x = 0; x < names.length; x++) {
+                        viewModel.set(names[x], defaultValue[names[x]]);
+                    }
+                }
+
+                // 设置model绑定
+                if (!ignore) {
+                    for(let x = 0; x < names.length; x++) {
+                        if(!Ext.Array.contains(bindFields, names[x])) {
+                            bindFields.push(names[x]);
+                        }
+                    }
+                }
+            }else {
+                if (bind) {
+                    if (!Ext.isString(bind)) {
+                        Ext.apply(bind, {
+                            value: '{' + name + '}'
+                        });
+                    } else {
+                        item.bind = '{' + name + '}';
+                    }
                 } else {
                     item.bind = '{' + name + '}';
                 }
-            } else {
-                item.bind = '{' + name + '}';
-            }
-            // 设置默认值
-            if (defaultValue != undefined) {
-                viewModel.set(name, defaultValue);
-            }
-
-            // 设置model绑定
-            if (!ignore) {
-                if(!Ext.Array.contains(bindFields, name)) {
-                    bindFields.push(name);
+                // 设置默认值
+                if (defaultValue != undefined) {
+                    viewModel.set(name, defaultValue);
+                }
+    
+                // 设置model绑定
+                if (!ignore) {
+                    if(!Ext.Array.contains(bindFields, name)) {
+                        bindFields.push(name);
+                    }
                 }
             }
-            
         });
         viewModel.set('base.bindFields', bindFields);
     },

+ 9 - 9
frontend/saas-web/app/view/document/customer/FormController.js

@@ -18,15 +18,15 @@ Ext.define('saas.view.document.customer.FormController', {
                     }) ;   
                 }
             },
-            'currencyDbfindTrigger[name=cu_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'cu_currency'
-                        }],
-                    }) ;   
-                }
-            }
+            // 'currencyDbfindTrigger[name=cu_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'cu_currency'
+            //             }],
+            //         }) ;   
+            //     }
+            // }
         });
     },
 

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

@@ -132,21 +132,43 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 columnWidth: 0.25,
                 group: '交易信息',
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "cu_currency",
-                fieldLabel: "币别",
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
                 allowBlank: false,
-                columnWidth: 0.25,
-                group: '交易信息',
-            }, {
-                xtype: "numberfield",
-                name: "cu_taxrate",
-                fieldLabel: "税率(%)",
-                allowBlank: false,
-                columnWidth: 0.25,
-                minValue: 0,
-                maxValue: 100,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'cu_currency'
+                }, {
+                    from: 'cr_rate', to: 'cu_taxrate'
+                }],
+                defaultValue: {
+                    cu_currency: 'RMB',
+                    cu_taxrate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                },
                 group: '交易信息',
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "cu_currency",
+            //     fieldLabel: "币别",
+            //     allowBlank: false,
+            //     columnWidth: 0.25,
+            //     group: '交易信息',
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "cu_taxrate",
+            //     fieldLabel: "税率(%)",
+            //     allowBlank: false,
+            //     columnWidth: 0.25,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
+            //     group: '交易信息',
             },{
                 xtype: "numberfield",
                 hideTrigger: true,

+ 9 - 9
frontend/saas-web/app/view/document/vendor/FormController.js

@@ -19,15 +19,15 @@ Ext.define('saas.view.document.vendor.FormController', {
 
                 }
             },
-            'currencyDbfindTrigger[name=ve_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'ve_currency'
-                        }],
-                    }) ;   
-                }
-            }
+            // 'currencyDbfindTrigger[name=ve_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'ve_currency'
+            //             }],
+            //         }) ;   
+            //     }
+            // }
         });
 
     },

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

@@ -137,23 +137,45 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 allowBlank: true,
                 columnWidth: 0.25,
                 group: '交易信息',
-            },{
-                xtype: "currencyDbfindTrigger",
-                name: "ve_currency",
-                fieldLabel: "币别",
-                allowBlank: false,
-                columnWidth: 0.25,
-                group: '交易信息',
             }, {
-                xtype: "numberfield",
-                name: "ve_taxrate",
-                hideTrigger: true,
-                fieldLabel: "税率(%)",
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
                 allowBlank: false,
-                columnWidth: 0.25,
-                minValue: 0,
-                maxValue: 100,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 've_currency'
+                }, {
+                    from: 'cr_rate', to: 've_taxrate'
+                }],
+                defaultValue: {
+                    ve_currency: 'RMB',
+                    ve_taxrate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                },
                 group: '交易信息',
+            // },{
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "ve_currency",
+            //     fieldLabel: "币别",
+            //     allowBlank: false,
+            //     columnWidth: 0.25,
+            //     group: '交易信息',
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "ve_taxrate",
+            //     hideTrigger: true,
+            //     fieldLabel: "税率(%)",
+            //     allowBlank: false,
+            //     columnWidth: 0.25,
+            //     minValue: 0,
+            //     maxValue: 100,
+            //     group: '交易信息',
             },{
                 xtype: "numberfield",
                 hideTrigger: true,

+ 17 - 0
frontend/saas-web/app/view/main/Navigation.js

@@ -86,6 +86,23 @@ Ext.define('saas.view.main.Navigation', {
             menuId = 'navMenu-' + id,
             menu = Ext.getCmp(menuId);
 
+        //获取b2b权限
+        var enableB2B = me.ownerCt.ownerCt.getViewModel().get('enableB2B');
+
+        if(enableB2B==null||enableB2B==0||enableB2B=='0'){
+            Ext.each(menuItems,function(item,index){
+                if(item.items.length>0){
+                    var l = item.items.length;
+                    for(var i = 0;i<l;i++){
+                        if(item.items[i].b2b){
+                            item.items.splice(i--,1);
+                            l--;
+                        }
+                    };
+                }
+            })
+        }
+            
         if (!menu) {
             var view = new Ext.DataView({
                 store: Ext.create('Ext.data.Store', {

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

@@ -86,9 +86,8 @@ Ext.define('saas.view.money.fundtransfer.FormPanel', {
                         valueField: "value"
                     }
                 }, {
-                    text: "转出账户余额(元)",
-                    width: 200.0,
-                    dataIndex: "bk_outthisamount",
+                    text: "转出账户币别",
+                    dataIndex: "ftd_currency",
                     ignore: true
                 }, {
                     text: "转入账户ID",
@@ -119,8 +118,8 @@ Ext.define('saas.view.money.fundtransfer.FormPanel', {
                         xtype: "bandinfoDbfindTrigger"
                     }
                 }, {
-                    text: "转入账户余额(元)",
-                    dataIndex: "bk_inthisamount",
+                    text: "转入账户币别",
+                    dataIndex: "ftd_incurrency",
                     ignore: true,
                     width: 150.0
                 }, {
@@ -141,6 +140,11 @@ Ext.define('saas.view.money.fundtransfer.FormPanel', {
                         return saas.util.BaseUtil.numberFormat(v, 2, true);
                     }
                 }, {
+                        text: "转存汇率",
+                        dataIndex: "ftd_rate",
+                        ignore: true,
+                        width: 150.0
+                    }, {
                     text: "结算方式",
                     width: 110.0,
                     dataIndex: "ftd_paymethod",

+ 32 - 11
frontend/saas-web/app/view/money/othreceipts/FormPanel.js

@@ -62,18 +62,39 @@ Ext.define('saas.view.money.othreceipts.FormPanel', {
                 fieldLabel: '单据日期',
                 defaultValue: new Date(),
                 allowBlank: false
-            },{
-                xtype: "currencyDbfindTrigger",
-                name: "or_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
             }, {
-                xtype: "numberfield",
-                name: "or_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'or_currency'
+                }, {
+                    from: 'cr_rate', to: 'or_rate'
+                }],
+                defaultValue: {
+                    or_currency: 'RMB',
+                    or_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                },
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "or_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "or_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             }, {
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 11 - 11
frontend/saas-web/app/view/money/othreceipts/FormPanelController.js

@@ -106,17 +106,17 @@ Ext.define('saas.view.money.othreceipts.FormPanelController', {
 
                 }
             },
-            'currencyDbfindTrigger[name=or_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'or_currency'
-                        },{
-                            from:'cr_rate',to:'or_rate'
-                        }],
-                    }) ;   
-                }
-            }
+            // 'currencyDbfindTrigger[name=or_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'or_currency'
+            //             },{
+            //                 from:'cr_rate',to:'or_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // }
         });
     },
     onSave: function() {

+ 33 - 11
frontend/saas-web/app/view/money/othspendings/FormPanel.js

@@ -56,18 +56,40 @@ Ext.define('saas.view.money.othspendings.FormPanel', {
                 name: "os_bankname",
                 fieldLabel: "账户名称",
                 allowBlank: false
-            },{
-                xtype: "currencyDbfindTrigger",
-                name: "os_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
             }, {
-                xtype: "numberfield",
-                name: "os_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'os_currency'
+                }, {
+                    from: 'cr_rate', to: 'os_rate'
+                }],
+                defaultValue: {
+                    os_currency: 'RMB',
+                    os_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            // },{
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "os_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "os_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             }, {
                 xtype: 'datefield',
                 name: 'os_date',

+ 11 - 11
frontend/saas-web/app/view/money/othspendings/FormPanelController.js

@@ -97,17 +97,17 @@ Ext.define('saas.view.money.othspendings.FormPanelController', {
 
                 }
             },
-            'currencyDbfindTrigger[name=os_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'os_currency'
-                        },{
-                            from:'cr_rate',to:'os_rate'
-                        }],
-                    }) ;   
-                }
-            }
+            // 'currencyDbfindTrigger[name=os_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'os_currency'
+            //             },{
+            //                 from:'cr_rate',to:'os_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // }
         });
 
     },

+ 22 - 0
frontend/saas-web/app/view/money/payBalance/FormPanel.js

@@ -67,6 +67,28 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
                 defaultValue: new Date(),
                 allowBlank: false
             }, {
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pb_currency'
+                }, {
+                    from: 'cr_rate', to: 'pb_rate'
+                }],
+                defaultValue: {
+                    pb_currency: 'RMB',
+                    pb_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            },
+                {
                 xtype: 'textfield',
                 name: 'pb_manname',
                 fieldLabel: '付款人',

+ 21 - 0
frontend/saas-web/app/view/money/recBalance/FormPanel.js

@@ -76,6 +76,27 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
                 defaultValue: new Date(),
                 allowBlank: false
             }, {
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'rb_currency'
+                }, {
+                    from: 'cr_rate', to: 'rb_rate'
+                }],
+                defaultValue: {
+                    rb_currency: 'RMB',
+                    rb_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+                }, {
                 xtype: "textfield",
                 name: "rb_manname",
                 fieldLabel: "收款人",

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

@@ -44,6 +44,10 @@ Ext.define('saas.view.money.report.PayDetail', {
         text: '采购员',
         dataIndex: 'pd_buyername',
         width: 80
+    }, {
+        text: '币别',
+        dataIndex: 'pd_currency',
+        width: 80
     },{
         text: '增加应付(元)',
         xtype: 'numbercolumn',

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

@@ -45,6 +45,10 @@ Ext.define('saas.view.money.report.RecDetail', {
         text: '业务员',
         dataIndex: 'rd_sellername',
         width: 80
+    }, {
+        text: '币别',
+        dataIndex: 'rd_currency',
+        width: 80
     }, {
         text: '增加应收(元)',
         dataIndex: 'rd_addrec',

+ 87 - 3
frontend/saas-web/app/view/money/verification/FormPanel.js

@@ -565,7 +565,28 @@ Ext.define('saas.view.money.verification.FormPanel', {
                         defaultValue: new Date(),
                         allowBlank: false,
                         name: 'vc_date'
-                    }, {
+                    },  {
+                        xtype: 'condbfindtrigger',
+                        fieldLabel: '币别汇率',
+                        allowBlank: false,
+                        dbType: 'currencyDbfindTrigger',
+                        dbfinds: [{
+                            from: 'cr_name', to: 'vc_currency'
+                        }, {
+                            from: 'cr_rate', to: 'vc_rate'
+                        }],
+                        defaultValue: {
+                            vc_currency: 'RMB',
+                            vc_rate: 1
+                        },
+                        supFieldConfig: {
+                            xtype: 'numberfield',
+                            readOnly: false,
+                            defaultReadOnly: false,
+                            decimalPrecision: 6,
+                            vtype: 'positiveNumber'
+                        },
+                    },{
                         xtype: 'hidden',
                         name: 'vc_amount1',
                         thousandSeparator: ',',
@@ -623,6 +644,27 @@ Ext.define('saas.view.money.verification.FormPanel', {
                         allowBlank: false,
                         name: 'vc_date'
                     }, {
+                            xtype: 'condbfindtrigger',
+                            fieldLabel: '币别汇率',
+                            allowBlank: false,
+                            dbType: 'currencyDbfindTrigger',
+                            dbfinds: [{
+                                from: 'cr_name', to: 'vc_currency'
+                            }, {
+                                from: 'cr_rate', to: 'vc_rate'
+                            }],
+                            defaultValue: {
+                                vc_currency: 'RMB',
+                                vc_rate: 1
+                            },
+                            supFieldConfig: {
+                                xtype: 'numberfield',
+                                readOnly: false,
+                                defaultReadOnly: false,
+                                decimalPrecision: 6,
+                                vtype: 'positiveNumber'
+                            },
+                        },{
                         xtype: 'hidden',
                         name: 'vc_amount1',
                         thousandSeparator: ',',
@@ -678,7 +720,28 @@ Ext.define('saas.view.money.verification.FormPanel', {
                         defaultValue: new Date(),
                         allowBlank: false,
                         name: 'vc_date'
-                    }, {
+                    },  {
+                        xtype: 'condbfindtrigger',
+                        fieldLabel: '币别汇率',
+                        allowBlank: false,
+                        dbType: 'currencyDbfindTrigger',
+                        dbfinds: [{
+                            from: 'cr_name', to: 'vc_currency'
+                        }, {
+                            from: 'cr_rate', to: 'vc_rate'
+                        }],
+                        defaultValue: {
+                            vc_currency: 'RMB',
+                            vc_rate: 1
+                        },
+                        supFieldConfig: {
+                            xtype: 'numberfield',
+                            readOnly: false,
+                            defaultReadOnly: false,
+                            decimalPrecision: 6,
+                            vtype: 'positiveNumber'
+                        },
+                    },{
                         xtype: 'hidden',
                         name: 'vc_amount1',
                         thousandSeparator: ',',
@@ -734,7 +797,28 @@ Ext.define('saas.view.money.verification.FormPanel', {
                         defaultValue: new Date(),
                         allowBlank: false,
                         name: 'vc_date'
-                    }, {
+                    },  {
+                        xtype: 'condbfindtrigger',
+                        fieldLabel: '币别汇率',
+                        allowBlank: false,
+                        dbType: 'currencyDbfindTrigger',
+                        dbfinds: [{
+                            from: 'cr_name', to: 'vc_currency'
+                        }, {
+                            from: 'cr_rate', to: 'vc_rate'
+                        }],
+                        defaultValue: {
+                            vc_currency: 'RMB',
+                            vc_rate: 1
+                        },
+                        supFieldConfig: {
+                            xtype: 'numberfield',
+                            readOnly: false,
+                            defaultReadOnly: false,
+                            decimalPrecision: 6,
+                            vtype: 'positiveNumber'
+                        },
+                    },{
                         xtype: 'hidden',
                         name: 'vc_amount1',
                         thousandSeparator: ',',

+ 428 - 0
frontend/saas-web/app/view/purchase/deviceQuery/DataList.js

@@ -0,0 +1,428 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.purchase.deviceQuery.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'purchase-deviceQuery-datalist',
+    controller: 'purchase-deviceQuery-datalist',
+    viewModel: 'purchase-deviceQuery-datalist',
+    autoScroll: true,
+    frame:true,
+    style:'padding:0;',
+    layout:'fit',
+    dataUrl:'/api/purchase/purchase/device/list',                 
+    deleteUrl:'/api/commons/number/delete/',
+
+    plugins: [{
+        ptype: 'menuclipboard'
+    }],
+
+    tbar: [{
+        width: 240,
+        name: 'mn_name',
+        xtype: 'textfield',
+        allowBlank:true,
+        emptyText : '请输入型号/物料名称/品牌搜索',
+        enableKeyEvents: true,
+        listeners: {
+            keydown: {
+                fn: function(th, e, eOpts) {
+                    if(e.keyCode == 13) {
+                        var grid = th.up('grid');
+                        grid.condition = grid.getConditions();
+                        grid.store.loadPage(1);
+                    }
+                }
+            }
+        },
+        getCondition:function(v){
+            return v;
+        }
+    },{
+        cls:'x-formpanel-btn-blue',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click:function(b){
+                var grid = b.ownerCt.ownerCt;
+                grid.condition = grid.getConditions();
+                grid.store.loadPage(1);
+            }
+        }
+    },'->'],
+
+    columns : [{
+        text : 'id', 
+        width : 0, 
+        dataIndex : 'id', 
+        xtype : 'numbercolumn', 
+        hidden:true
+    },{
+        text : '品牌', 
+        width : 150.0, 
+        dataIndex : 'pr_brand', 
+        xtype : '', 
+    },{
+        text : '名称', 
+        width : 200.0, 
+        dataIndex : 'pr_detail', 
+        xtype : '', 
+    },{
+        text : '型号', 
+        width : 200.0, 
+        dataIndex : 'pr_orispeccode', 
+        xtype : '', 
+    },{
+        text : '规格', 
+        width : 200, 
+        dataIndex : 'pr_spec', 
+        xtype : '', 
+    },{
+        text : '包装', 
+        width : 100, 
+        dataIndex : 'pr_pack', 
+        xtype : '', 
+    },{
+        text : '供应商', 
+        width : 150.0, 
+        dataIndex : 'pr_vendor', 
+        xtype : '', 
+    },{
+        text : '库存', 
+        width : 100, 
+        dataIndex : 'pr_qty', 
+        xtype : 'numbercolumn', 
+        renderer: function(v, m, r) {
+            return saas.util.BaseUtil.numberFormat(v, 0, false);
+        },
+    },{
+        hidden:true,
+        text : '梯度', 
+        width : 100.0, 
+        dataIndex : 'pr_level', 
+        xtype : '', 
+    },{
+        hidden:true,
+        text : '大陆交货单价', 
+        width : 200.0, 
+        dataIndex : 'pr_cnprice', 
+        xtype : '', 
+    },{
+        hidden:true,
+        text : '香港交货单价', 
+        width : 200.0, 
+        dataIndex : 'pr_hkprice', 
+        xtype : '', 
+    },{
+        hidden:true,
+        text : '交期', 
+        width : 200.0, 
+        dataIndex : 'pr_leadtime', 
+        xtype : '', 
+    }, 
+    {
+        dataIndex: '',
+        flex: 1
+    }],
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.columns = me.insertFirstColumn(me.columns);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 15,
+                data: [],
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    headers:{
+                        'Access-Control-Allow-Origin': '*',
+                        "Content-Type": 'application/json;charset=UTF-8'
+                    },
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.content',
+                        totalProperty: 'data.totalElements',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = '';
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            type :'component',
+                            keyword :condition==''?' ':condition[0].value,
+                            page: op._page,
+                            count: store.pageSize,
+                            filter: '',
+                            sorting:''
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: me.store
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    onVastDeal:function(url,type){
+        var form = this.ownerCt;
+        var grid = this;
+        var data = grid.getGridSelected(type);
+        if(!data){
+            saas.util.BaseUtil.showErrorToast('请勾选符合条件的行进行操作。');
+            return false;
+        }
+        if(data&&data.length>0){
+            var params = JSON.stringify({baseDTOs:data});
+            saas.util.BaseUtil.request({
+                    url: url,
+                    params: params,
+                    method: 'POST',
+                    async:false
+                })
+                .then(function() {
+                    saas.util.BaseUtil.showSuccessToast('操作成功');
+                    grid.store.load();
+                })
+                .catch(function(e) {
+                    saas.util.BaseUtil.showErrorToast('操作失败: ' + e.message);
+                });
+        }else{
+            saas.util.BaseUtil.showErrorToast('请勾选至少一条明细。');
+        }
+    },
+
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
+        itemClick: function(view,record,a,index,c) {
+            var classList = c.target.classList.value;
+            var grid = this;
+            if(classList.indexOf('fa-pencil')>-1){
+                var form = this.ownerCt;
+                this.dialog = form.getController().getView().add({
+                    xtype: 'sys-maxnumbers-window',
+                    bind: {
+                        title: '修改单据编码规则'
+                    },
+                    _parent:form,
+                    _combo:this,
+                    record:record,
+                    session: true
+                });
+                this.dialog.show();
+            }else if(classList.indexOf('fa-trash-o')>-1){
+                //删除
+                var id = record.get('id');
+                if(id){
+                    saas.util.BaseUtil.request({
+                        url: grid.deleteUrl+id,
+                        method: 'POST',
+                    })
+                    .then(function(localJson) {
+                        if(localJson.success){
+                            //解析参数
+                            saas.util.BaseUtil.showSuccessToast('删除成功');
+                            view.ownerCt.store.load();
+                        }
+                    })
+                    .catch(function(e) {
+                        saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                    });
+                }
+            }
+        }
+    },
+
+    insertFirstColumn:function(columns){
+        var me=this;
+        return columns;
+    },
+
+    getGridSelected:function(type){
+        var isErrorSelect = false;
+        var checkField = this.statusCodeField;
+        var me = this,
+        items = me.selModel.getSelection(),
+        data = new Array() ;
+        Ext.each(items, function(item, index){
+            if(!Ext.isEmpty(item.data[me.idField])){
+                var o = new Object();
+                if(me.idField){
+                    o['id'] = item.data[me.idField];
+                }
+                if(me.codeField){
+                    o['code'] = item.data[me.codeField];
+                }
+                if(type&&type==item.data[checkField]){
+                    isErrorSelect = true
+                }
+                data.push(o);
+            }
+        });
+        if(isErrorSelect){
+            return false;
+        }
+		return data;
+    },
+
+    /**
+     * 获得过滤条件
+     */
+    getConditions: function() {
+        var me = this,
+        tbar = me.getDockedItems()[0],
+        items = Ext.Array.filter(tbar.items.items, function(item) {
+            return !!item.name;
+        }),
+        conditions = [];
+        for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            var field = item.name,
+            func = item.getCondition,
+            value = item.value,
+            condition;
+
+            if(value&&value!=''){
+                if(typeof func == 'function') {
+                    condition = {
+                        type: 'condition',
+                        value: func(value)
+                    }
+                }else {
+                    var type = item.fieldType || me.getDefaultFieldType(item),
+                    operation = item.operation || me.getDefaultFieldOperation(item),
+                    conditionValue = me.getConditionValue(item, value);
+        
+                    if(!conditionValue) {
+                        continue;
+                    }
+                    condition = {
+                        type: type,
+                        field: field,
+                        operation: operation,
+                        value: conditionValue
+                    }
+                }
+                conditions.push(condition);
+            }
+        }
+
+        return conditions;
+    },
+
+    /**
+     * 只要arr1和arr2中存在相同项即返回真
+     */
+    isContainsAny: function (arr1, arr2) {
+        for (var i = 0; i < arr2.length; i++) {
+            var a2 = arr2[i];
+            if (!!arr1.find(function (a1) {
+                    return a1 == a2
+                })) {
+                return true;
+            }
+        }
+        return false;
+    },
+
+    getDefaultFieldType: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            type;
+
+        if (me.isContainsAny(xtypes, ['numberfield'])) {
+            type = 'number';
+        } else if (me.isContainsAny(xtypes, ['datefield', 'condatefield', 'conmonthfield'])) {
+            type = 'date';
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            type = 'enum';
+        } else if (me.isContainsAny(xtypes, ['combobox', 'multicombo', 'combo', 'radiofield', 'radio'])) {
+            type = 'enum';
+        } else {
+            type = 'string';
+        }
+
+        return type;
+    },
+
+    getDefaultFieldOperation: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            operation;
+
+        if (me.isContainsAny(xtypes, ['numberfield', 'datefield', 'dbfindtrigger'])) {
+            operation = '=';
+        } else if (me.isContainsAny(xtypes, ['condatefield', 'conmonthfield'])) {
+            operation = 'between';
+        } else if (me.isContainsAny(xtypes, ['multidbfindtrigger', 'combobox', 'multicombo', 'combo'])) {
+            operation = 'in';
+        } else {
+            operation = 'like';
+        }
+
+        return operation;
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = '\'' + value + '\'';
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return '\'' + v.value + '\'';
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    }
+
+})
+
+

+ 10 - 0
frontend/saas-web/app/view/purchase/deviceQuery/DataListController.js

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

+ 4 - 0
frontend/saas-web/app/view/purchase/deviceQuery/DataListlModel.js

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

+ 33 - 11
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -74,17 +74,39 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
                     this.dialog.show();
                 }
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "pu_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
-            }, {
-                xtype: "numberfield",
-                name: "pu_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pu_currency'
+                }, {
+                    from: 'cr_rate', to: 'pu_rate'
+                }],
+                defaultValue: {
+                    pu_currency: 'RMB',
+                    pu_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "pu_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "pu_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             }, {
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 11 - 11
frontend/saas-web/app/view/purchase/purchase/FormPanelController.js

@@ -68,17 +68,17 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
 
                 }
             },
-            'currencyDbfindTrigger[name=pu_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'pu_currency'
-                        },{
-                            from:'cr_rate',to:'pu_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=pu_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'pu_currency'
+            //             },{
+            //                 from:'cr_rate',to:'pu_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
         });
     },
 

+ 33 - 11
frontend/saas-web/app/view/purchase/purchaseIn/FormPanel.js

@@ -72,17 +72,39 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanel', {
                 columnWidth: 0.25,
                 defaultValue: new Date()
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "pi_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
-            }, {
-                xtype: "numberfield",
-                name: "pi_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pi_currency'
+                }, {
+                    from: 'cr_rate', to: 'pi_rate'
+                }],
+                defaultValue: {
+                    pi_currency: 'RMB',
+                    pi_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                },
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "pi_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "pi_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             },{
                 xtype: "hidden",
                 name: "pi_puid",

+ 11 - 11
frontend/saas-web/app/view/purchase/purchaseIn/FormPanelController.js

@@ -92,17 +92,17 @@ Ext.define('saas.view.purchase.purchaseIn.FormPanelController', {
                     }) ;   
                 }
             },
-            'currencyDbfindTrigger[name=pi_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'pi_currency'
-                        },{
-                            from:'cr_rate',to:'pi_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=pi_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'pi_currency'
+            //             },{
+            //                 from:'cr_rate',to:'pi_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
 
         });
 

+ 33 - 11
frontend/saas-web/app/view/purchase/purchaseOut/FormPanel.js

@@ -68,17 +68,39 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanel', {
                 columnWidth: 0.25,
                 defaultValue: new Date()
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "pi_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
-            }, {
-                xtype: "numberfield",
-                name: "pi_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pi_currency'
+                }, {
+                    from: 'cr_rate', to: 'pi_rate'
+                }],
+                defaultValue: {
+                    pi_currency: 'RMB',
+                    pi_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "pi_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "pi_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             }, {
                 xtype: "hidden",
                 name: "pi_puid",

+ 11 - 11
frontend/saas-web/app/view/purchase/purchaseOut/FormPanelController.js

@@ -95,17 +95,17 @@ Ext.define('saas.view.purchase.purchaseOut.FormPanelController', {
                     }) ;   
                 }
             },
-            'currencyDbfindTrigger[name=pi_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'pi_currency'
-                        },{
-                            from:'cr_rate',to:'pi_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=pi_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'pi_currency'
+            //             },{
+            //                 from:'cr_rate',to:'pi_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
         });
 
     },

+ 376 - 0
frontend/saas-web/app/view/purchase/quotationList/DataList.js

@@ -0,0 +1,376 @@
+
+Ext.define('saas.view.purchase.quotationList.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'purchase-quotationList-datalist',
+    controller: 'purchase-quotationList-datalist',
+    viewModel: 'purchase-quotationList-datalist',
+    autoScroll: true,
+    frame:true,
+    layout:'fit',
+    
+    dataUrl:'http://10.1.80.23:8560/api/purchase/purchase/inquiry/list',                 
+    quotationListUrl:'/api/commons/number/delete/',
+
+    plugins: [{
+        ptype: 'menuclipboard'
+    },{
+        ptype: 'rowwidget',
+        widget: {
+            frame:true,
+            xtype: 'grid',
+            bind: {
+                store: '{record.quotationRspDTOList}',
+                //title: 'Orders for {record.name}'
+            },
+            columns: [{
+                text: '供应商名称',
+                dataIndex: 'vendName',
+                width: 175
+            }, {
+                text: '联系电话',
+                dataIndex: 'tel',
+                width: 265
+            }, {
+                text: '替代型号',
+                dataIndex: 'replaceOrispeccode',
+                width: 100,
+            }, {
+                width: 120,
+                text: '交期',
+                dataIndex: 'leadTime'
+            }, {
+                width: 120,
+                text: '税率',
+                dataIndex: 'taxRate'
+            }, {
+                width: 120,
+                text: '分段信息',
+                dataIndex: 'replies'
+            }, {
+                width: 120,
+                text: '操作',
+                dataIndex: 'agreed'
+            }]
+        }
+    }],
+
+    tbar: [{
+        width: 310,
+        name: 'search',
+        xtype: 'textfield',
+        emptyText : '请输入物料编号/品牌/名称/型号',
+        enableKeyEvents: true,
+        getCondition: function (value) {
+            return ' (pr_code like\'%' + value + '%\' or pr_detail like \'%' + value + '%\' or pr_brand like \'%' + value + '%\' or pr_orispeccode like \'%' + value + '%\') ';
+        },
+        listeners: {
+            keydown: {
+                fn: function(th, e, eOpts) {
+                    if(e.keyCode == 13) {
+                        var grid = th.up('grid');
+                        grid.condition = grid.getConditions();
+                        grid.store.loadPage(1);
+                    }
+                }
+            }
+        }
+    },{
+        cls:'x-formpanel-btn-blue',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click:function(b){
+                var grid = b.ownerCt.ownerCt;
+                grid.condition = grid.getConditions();
+                grid.store.loadPage(1);
+            }
+        }
+    }],
+
+    columns : [{
+        text : 'id', 
+        width : 0, 
+        dataIndex : 'id', 
+        xtype : 'numbercolumn', 
+        hidden:true
+    },{
+        text : '物料编号', 
+        width : 200.0, 
+        dataIndex : 'prodCode', 
+        xtype : '', 
+    }, 
+    {
+        text : '品牌', 
+        dataIndex : 'prodBrand', 
+        width : 110.0, 
+        xtype : '', 
+    }, 
+    {
+        text : '名称', 
+        dataIndex : 'prodName', 
+        width : 150.0
+    },{
+        text : '型号', 
+        dataIndex : 'prodOrispeccode',
+        width : 110.0
+    },{
+        text : '规格', 
+        dataIndex : 'prodSpec',
+        width : 110.0
+    },{
+        text : '单位', 
+        dataIndex : 'prodUnit',
+        width : 110.0
+    },{
+        text : '发起时间', 
+        dataIndex : 'startDate',
+        width : 160.0
+    },{
+        text : '截止日期', 
+        dataIndex : 'endDate',
+        width : 160.0
+    },{
+        text : '报价状态', 
+        dataIndex : 'quoted',
+        width : 110.0
+    }, {
+        dataIndex: '',
+        flex: 1
+    }],
+
+
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 15,
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    headers:{
+                        'Access-Control-Allow-Origin': '*',
+                        "Content-Type": 'application/json;charset=UTF-8'
+                    },
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.content',
+                        totalProperty: 'data.totalElements',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = '';
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            keyword:condition,
+                            pageNumber: op._page,
+                            pageSize: store.pageSize,
+                            quoted:1,
+                            fromDate:null,
+                            endDate:null,
+                            overdue:0
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: me.store
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
+        itemClick: function(view,record,a,index,c) {
+        }
+    },
+
+    getGridSelected:function(type){
+        var isErrorSelect = false;
+        var checkField = this.statusCodeField;
+        var me = this,
+        items = me.selModel.getSelection(),
+        data = new Array() ;
+        Ext.each(items, function(item, index){
+            if(!Ext.isEmpty(item.data[me.idField])){
+                var o = new Object();
+                if(me.idField){
+                    o['id'] = item.data[me.idField];
+                }
+                if(me.codeField){
+                    o['code'] = item.data[me.codeField];
+                }
+                if(type&&type==item.data[checkField]){
+                    isErrorSelect = true
+                }
+                data.push(o);
+            }
+        });
+        if(isErrorSelect){
+            return false;
+        }
+		return data;
+    },
+
+    /**
+     * 获得过滤条件
+     */
+    getConditions: function() {
+        var me = this,
+        tbar = me.getDockedItems()[0],
+        items = Ext.Array.filter(tbar.items.items, function(item) {
+            return !!item.name;
+        }),
+        conditions = [];
+        for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            var field = item.name,
+            func = item.getCondition,
+            value = item.value,
+            condition;
+
+            if(value&&value!=''){
+                if(typeof func == 'function') {
+                    condition = {
+                        type: 'condition',
+                        value: func(value)
+                    }
+                }else {
+                    var type = item.fieldType || me.getDefaultFieldType(item),
+                    operation = item.operation || me.getDefaultFieldOperation(item),
+                    conditionValue = me.getConditionValue(item, value);
+        
+                    if(!conditionValue) {
+                        continue;
+                    }
+                    condition = {
+                        type: type,
+                        field: field,
+                        operation: operation,
+                        value: conditionValue
+                    }
+                }
+                conditions.push(condition);
+            }
+        }
+
+        return conditions;
+    },
+
+    /**
+     * 只要arr1和arr2中存在相同项即返回真
+     */
+    isContainsAny: function (arr1, arr2) {
+        for (var i = 0; i < arr2.length; i++) {
+            var a2 = arr2[i];
+            if (!!arr1.find(function (a1) {
+                    return a1 == a2
+                })) {
+                return true;
+            }
+        }
+        return false;
+    },
+
+    getDefaultFieldType: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            type;
+
+        if (me.isContainsAny(xtypes, ['numberfield'])) {
+            type = 'number';
+        } else if (me.isContainsAny(xtypes, ['datefield', 'condatefield', 'conmonthfield'])) {
+            type = 'date';
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            type = 'enum';
+        } else if (me.isContainsAny(xtypes, ['combobox', 'multicombo', 'combo', 'radiofield', 'radio'])) {
+            type = 'enum';
+        } else {
+            type = 'string';
+        }
+
+        return type;
+    },
+
+    getDefaultFieldOperation: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            operation;
+
+        if (me.isContainsAny(xtypes, ['numberfield', 'datefield', 'dbfindtrigger'])) {
+            operation = '=';
+        } else if (me.isContainsAny(xtypes, ['condatefield', 'conmonthfield'])) {
+            operation = 'between';
+        } else if (me.isContainsAny(xtypes, ['multidbfindtrigger', 'combobox', 'multicombo', 'combo'])) {
+            operation = 'in';
+        } else {
+            operation = 'like';
+        }
+
+        return operation;
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = '\'' + value + '\'';
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return '\'' + v.value + '\'';
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    }
+
+})
+
+

+ 10 - 0
frontend/saas-web/app/view/purchase/quotationList/DataListController.js

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

+ 4 - 0
frontend/saas-web/app/view/purchase/quotationList/DataListlModel.js

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

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

@@ -89,6 +89,10 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
         summaryRenderer: function(v) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }
+    }, {
+        text: '币别',
+        dataIndex: 'pi_currency',
+        width: 80
     }, {
         text: '付款比例(%)',
         dataIndex: 'pb_payrate',

+ 421 - 0
frontend/saas-web/app/view/purchase/sendQuotation/DataList.js

@@ -0,0 +1,421 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.purchase.sendQuotation.DataList', {
+    extend: 'Ext.grid.Panel',
+    xtype: 'purchase-sendQuotation-datalist',
+    controller: 'purchase-sendQuotation-datalist',
+    viewModel: 'purchase-sendQuotation-datalist',
+    autoScroll: true,
+    frame:true,
+    layout:'fit',
+    
+    dataUrl:'/api/document/product/list',                 
+    sendQuotationUrl:'/api/commons/number/delete/',
+
+    plugins: [{
+        ptype: 'menuclipboard'
+    }],
+
+    selModel: {
+        checkOnly:true,
+        type:'checkboxmodel'
+	},
+
+    tbar: [{
+        width: 310,
+        name: 'search',
+        xtype: 'textfield',
+        emptyText : '请输入物料编号/品牌/名称/型号',
+        enableKeyEvents: true,
+        getCondition: function (value) {
+            return ' (pr_code like\'%' + value + '%\' or pr_detail like \'%' + value + '%\' or pr_brand like \'%' + value + '%\' or pr_orispeccode like \'%' + value + '%\') ';
+        },
+        listeners: {
+            keydown: {
+                fn: function(th, e, eOpts) {
+                    if(e.keyCode == 13) {
+                        var grid = th.up('grid');
+                        grid.condition = grid.getConditions();
+                        grid.store.loadPage(1);
+                    }
+                }
+            }
+        }
+    },{
+        cls:'x-formpanel-btn-blue',
+        xtype:'button',
+        text:'查询',
+        listeners: {
+            click:function(b){
+                var grid = b.ownerCt.ownerCt;
+                grid.condition = grid.getConditions();
+                grid.store.loadPage(1);
+            }
+        }
+    },'->',{
+        width: 180,
+        name: 'endDate',
+        xtype: 'numberfield',
+        decimalPrecision:0,
+        minValue:0,
+        fieldLabel : '报价截至天数'
+    },{
+        cls:'x-formpanel-btn-blue',
+        xtype:'button',
+        text:'发起询价',
+        listeners: {
+            click: function(){
+                var form = this.ownerCt.ownerCt;
+                var grid = this.ownerCt.ownerCt.items.items[0].grid;
+                var endDate = form.down('[name=endDate]');
+                if(!endDate.value||endDate.value==0){
+                    saas.util.BaseUtil.showErrorToast('请填写报价截至天数');
+                    return false;
+                }
+                form.onVastDeal(sendQuotation,'发起询价');
+            }
+        }
+    }],
+
+    columns : [{
+        text : 'id', 
+        width : 0, 
+        dataIndex : 'id', 
+        xtype : 'numbercolumn', 
+        hidden:true
+    },{
+        text : '物料编号', 
+        width : 200.0, 
+        dataIndex : 'pr_code', 
+        xtype : '', 
+    }, 
+    {
+        text : '品牌', 
+        dataIndex : 'pr_brand', 
+        width : 110.0, 
+        xtype : '', 
+    }, 
+    {
+        text : '名称', 
+        dataIndex : 'pr_detail', 
+        width : 150.0
+    },{
+        text : '型号', 
+        dataIndex : 'pr_orispeccode',
+        width : 110.0
+    },{
+        text : '规格', 
+        dataIndex : 'pr_spec',
+        width : 110.0
+    },{
+        text : '单位', 
+        dataIndex : 'pr_unit',
+        width : 110.0
+    }, {
+        dataIndex: '',
+        flex: 1
+    }],
+
+    dbSearchFields: [],
+    condition:'',
+
+    initComponent: function() {
+        var me = this;
+        if(me.columns){
+            var fields = me.columns.map(column => column.dataIndex);
+            me.columns = me.insertFirstColumn(me.columns);
+            me.store = Ext.create('Ext.data.Store',{
+                fields:fields,
+                autoLoad: true,
+                pageSize: 15,
+                data: [],
+                proxy: {
+                    timeout:8000,
+                    type: 'ajax',
+                    headers:{
+                        'Access-Control-Allow-Origin': '*',
+                        "Content-Type": 'application/json;charset=UTF-8'
+                    },
+                    url: me.dataUrl,
+                    actionMethods: {
+                        read: 'GET'
+                    },
+                    reader: {
+                        type: 'json',
+                        rootProperty: 'data.list',
+                        totalProperty: 'data.total',
+                    }
+                },
+                listeners: {
+                    beforeload: function (store, op) {
+                        var condition = me.condition;
+                        if (Ext.isEmpty(condition)) {
+                            condition = '';
+                        }
+                        Ext.apply(store.proxy.extraParams, {
+                            w:1,
+                            page: op._page,
+                            count: store.pageSize,
+                            condition: JSON.stringify(condition)
+                        });
+                    }
+                }
+            });
+
+            Ext.apply(me, {
+                dockedItems:[{
+                    xtype: 'pagingtoolbar',
+                    dock: 'bottom',
+                    displayInfo: true,
+                    store: me.store
+                }]
+            });
+        }
+        me.callParent(arguments);
+    },
+
+    onVastDeal:function(url,type){
+        var form = this.ownerCt;
+        var grid = this;
+        var data = grid.getGridSelected(type);
+        if(!data){
+            saas.util.BaseUtil.showErrorToast('请勾选符合条件的行进行操作。');
+            return false;
+        }
+        if(data&&data.length>0){
+            var params = JSON.stringify({baseDTOs:data});
+            saas.util.BaseUtil.request({
+                    url: url,
+                    params: params,
+                    method: 'POST',
+                    async:false
+                })
+                .then(function() {
+                    saas.util.BaseUtil.showSuccessToast('操作成功');
+                    grid.store.load();
+                })
+                .catch(function(e) {
+                    saas.util.BaseUtil.showErrorToast('操作失败: ' + e.message);
+                });
+        }else{
+            saas.util.BaseUtil.showErrorToast('请勾选至少一条明细。');
+        }
+    },
+
+    listeners:{
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            gridBodyBox = grid.body.dom.getBoundingClientRect(),
+            gridBodyBoxHeight = gridBodyBox.height;
+
+            var pageSize = Math.floor(gridBodyBoxHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
+        itemClick: function(view,record,a,index,c) {
+            var classList = c.target.classList.value;
+            var grid = this;
+            if(classList.indexOf('fa-pencil')>-1){
+                var form = this.ownerCt;
+                this.dialog = form.getController().getView().add({
+                    xtype: 'sys-maxnumbers-window',
+                    bind: {
+                        title: '修改单据编码规则'
+                    },
+                    _parent:form,
+                    _combo:this,
+                    record:record,
+                    session: true
+                });
+                this.dialog.show();
+            }else if(classList.indexOf('fa-trash-o')>-1){
+                //删除
+                var id = record.get('id');
+                if(id){
+                    saas.util.BaseUtil.request({
+                        url: grid.deleteUrl+id,
+                        method: 'POST',
+                    })
+                    .then(function(localJson) {
+                        if(localJson.success){
+                            //解析参数
+                            saas.util.BaseUtil.showSuccessToast('删除成功');
+                            view.ownerCt.store.load();
+                        }
+                    })
+                    .catch(function(e) {
+                        saas.util.BaseUtil.showErrorToast('删除失败: ' + e.message);
+                    });
+                }
+            }
+        }
+    },
+
+    insertFirstColumn:function(columns){
+        var me=this;
+        return columns;
+    },
+
+    getGridSelected:function(type){
+        var isErrorSelect = false;
+        var checkField = this.statusCodeField;
+        var me = this,
+        items = me.selModel.getSelection(),
+        data = new Array() ;
+        Ext.each(items, function(item, index){
+            if(!Ext.isEmpty(item.data[me.idField])){
+                var o = new Object();
+                if(me.idField){
+                    o['id'] = item.data[me.idField];
+                }
+                if(me.codeField){
+                    o['code'] = item.data[me.codeField];
+                }
+                if(type&&type==item.data[checkField]){
+                    isErrorSelect = true
+                }
+                data.push(o);
+            }
+        });
+        if(isErrorSelect){
+            return false;
+        }
+		return data;
+    },
+
+    /**
+     * 获得过滤条件
+     */
+    getConditions: function() {
+        var me = this,
+        tbar = me.getDockedItems()[0],
+        items = Ext.Array.filter(tbar.items.items, function(item) {
+            return !!item.name;
+        }),
+        conditions = [];
+        for(var i = 0; i < items.length; i++) {
+            var item = items[i];
+            var field = item.name,
+            func = item.getCondition,
+            value = item.value,
+            condition;
+
+            if(value&&value!=''){
+                if(typeof func == 'function') {
+                    condition = {
+                        type: 'condition',
+                        value: func(value)
+                    }
+                }else {
+                    var type = item.fieldType || me.getDefaultFieldType(item),
+                    operation = item.operation || me.getDefaultFieldOperation(item),
+                    conditionValue = me.getConditionValue(item, value);
+        
+                    if(!conditionValue) {
+                        continue;
+                    }
+                    condition = {
+                        type: type,
+                        field: field,
+                        operation: operation,
+                        value: conditionValue
+                    }
+                }
+                conditions.push(condition);
+            }
+        }
+
+        return conditions;
+    },
+
+    /**
+     * 只要arr1和arr2中存在相同项即返回真
+     */
+    isContainsAny: function (arr1, arr2) {
+        for (var i = 0; i < arr2.length; i++) {
+            var a2 = arr2[i];
+            if (!!arr1.find(function (a1) {
+                    return a1 == a2
+                })) {
+                return true;
+            }
+        }
+        return false;
+    },
+
+    getDefaultFieldType: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            type;
+
+        if (me.isContainsAny(xtypes, ['numberfield'])) {
+            type = 'number';
+        } else if (me.isContainsAny(xtypes, ['datefield', 'condatefield', 'conmonthfield'])) {
+            type = 'date';
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            type = 'enum';
+        } else if (me.isContainsAny(xtypes, ['combobox', 'multicombo', 'combo', 'radiofield', 'radio'])) {
+            type = 'enum';
+        } else {
+            type = 'string';
+        }
+
+        return type;
+    },
+
+    getDefaultFieldOperation: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            operation;
+
+        if (me.isContainsAny(xtypes, ['numberfield', 'datefield', 'dbfindtrigger'])) {
+            operation = '=';
+        } else if (me.isContainsAny(xtypes, ['condatefield', 'conmonthfield'])) {
+            operation = 'between';
+        } else if (me.isContainsAny(xtypes, ['multidbfindtrigger', 'combobox', 'multicombo', 'combo'])) {
+            operation = 'in';
+        } else {
+            operation = 'like';
+        }
+
+        return operation;
+    },
+
+    /**
+     * 处理部分字段值
+     */
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
+            conditionValue = '\'' + value + '\'';
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
+                return '\'' + v.value + '\'';
+            }).join(',') : '';
+        } else {
+            conditionValue = value;
+        }
+
+        return conditionValue;
+    }
+
+})
+
+

+ 10 - 0
frontend/saas-web/app/view/purchase/sendQuotation/DataListController.js

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

+ 4 - 0
frontend/saas-web/app/view/purchase/sendQuotation/DataListlModel.js

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

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

@@ -92,6 +92,10 @@ Ext.define('saas.view.sale.report.SaleRec', {
         renderer : function(v, m, r) {
             return saas.util.BaseUtil.numberFormat(v, 2, true);
         }
+    }, {
+        text: '币别',
+        dataIndex: 'pi_currency',
+        width: 80
     }, {
         text: '回款比例(%)',
         dataIndex: 'rb_backrate',

+ 33 - 11
frontend/saas-web/app/view/sale/sale/FormPanel.js

@@ -96,17 +96,39 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                 storeUrl: '/api/document/customer/getAddressCombo',
                 hiddenBtn: true, //true 则会关闭新增按钮功能
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "sa_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
-            }, {
-                xtype: "numberfield",
-                name: "sa_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'sa_currency'
+                }, {
+                    from: 'cr_rate', to: 'sa_rate'
+                }],
+                defaultValue: {
+                    sa_currency: 'RMB',
+                    sa_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "sa_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "sa_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             },{
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 11 - 11
frontend/saas-web/app/view/sale/sale/FormPanelController.js

@@ -96,17 +96,17 @@ Ext.define('saas.view.sale.sale.FormPanelController', {
                     }
                 }
             },
-            'currencyDbfindTrigger[name=sa_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'sa_currency'
-                        },{
-                            from:'cr_rate',to:'sa_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=sa_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'sa_currency'
+            //             },{
+            //                 from:'cr_rate',to:'sa_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
         });
 
     },

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

@@ -104,17 +104,39 @@ Ext.define('saas.view.sale.saleIn.FormPanel', {
                 storeUrl: '/api/document/customer/getAddressCombo',
                 hiddenBtn: true, //true 则会关闭新增按钮功能
             }, {
-                xtype: "currencyDbfindTrigger",
-                name: "pi_currency",
-                fieldLabel: "币别",
-                defaultValue: 'RMB'
-            }, {
-                xtype: "numberfield",
-                name: "pi_rate",
-                fieldLabel: "汇率",
-                defaultValue: 1,
-                decimalPrecision: 6,
-                vtype: 'positiveNumber'
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pi_currency'
+                }, {
+                    from: 'cr_rate', to: 'pi_rate'
+                }],
+                defaultValue: {
+                    pi_currency: 'RMB',
+                    pi_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            // }, {
+            //     xtype: "currencyDbfindTrigger",
+            //     name: "pi_currency",
+            //     fieldLabel: "币别",
+            //     defaultValue: 'RMB'
+            // }, {
+            //     xtype: "numberfield",
+            //     name: "pi_rate",
+            //     fieldLabel: "汇率",
+            //     defaultValue: 1,
+            //     decimalPrecision: 6,
+            //     vtype: 'positiveNumber'
             },{
                 name: "detailGridField",
                 xtype: "detailGridField",

+ 11 - 11
frontend/saas-web/app/view/sale/saleIn/FormPanelController.js

@@ -111,17 +111,17 @@ Ext.define('saas.view.sale.saleIn.FormPanelController', {
                     }
                 }
             },
-            'currencyDbfindTrigger[name=pi_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'pi_currency'
-                        },{
-                            from:'cr_rate',to:'pi_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=pi_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'pi_currency'
+            //             },{
+            //                 from:'cr_rate',to:'pi_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
         });
     }
 });

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

@@ -112,7 +112,29 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
                 allowBlank: false,
                 storeUrl: '/api/document/customer/getAddressCombo',
                 hiddenBtn: true, //true 则会关闭新增按钮功能
-            },{
+            }, {
+                xtype: 'condbfindtrigger',
+                fieldLabel: '币别汇率',
+                allowBlank: false,
+                dbType: 'currencyDbfindTrigger',
+                dbfinds: [{
+                    from: 'cr_name', to: 'pi_currency'
+                }, {
+                    from: 'cr_rate', to: 'pi_rate'
+                }],
+                defaultValue: {
+                    pi_currency: 'RMB',
+                    pi_rate: 1
+                },
+                supFieldConfig: {
+                    xtype: 'numberfield',
+                    readOnly: false,
+                    defaultReadOnly: false,
+                    defaultValue: 1,
+                    decimalPrecision: 6,
+                    vtype: 'positiveNumber'
+                }
+            }, {
                 xtype: "currencyDbfindTrigger",
                 name: "pi_currency",
                 fieldLabel: "币别",

+ 11 - 11
frontend/saas-web/app/view/sale/saleOut/FormPanelController.js

@@ -103,17 +103,17 @@ Ext.define('saas.view.sale.saleout.FormPanelController', {
                     }
                 }
             },
-            'currencyDbfindTrigger[name=pi_currency]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dbfinds:[{
-                            from:'cr_name',to:'pi_currency'
-                        },{
-                            from:'cr_rate',to:'pi_rate'
-                        }],
-                    }) ;   
-                }
-            },
+            // 'currencyDbfindTrigger[name=pi_currency]':{
+            //     beforerender:function(f){
+            //         Ext.apply(f,{
+            //             dbfinds:[{
+            //                 from:'cr_name',to:'pi_currency'
+            //             },{
+            //                 from:'cr_rate',to:'pi_rate'
+            //             }],
+            //         }) ;   
+            //     }
+            // },
         });
     },
     turnProdIn: function() {

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

@@ -91,6 +91,7 @@ Ext.define('saas.view.sys.maxnumbers.DataList', {
         width : 0, 
         dataIndex : 'id', 
         xtype : 'numbercolumn', 
+        hidden:true
     },{
         text : '单据名称', 
         width : 200.0, 

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

@@ -33,6 +33,7 @@ Ext.define('saas.view.viewport.ViewportController', {
     },
 
     mainviewboxready: function() {
+        var me = this;
         //初始化setSessionPage地址
         Ext.DomHelper.insertHtml('beforeEnd', document.body, 
             '<iframe name="setSessionPage" hidden src="' + 
@@ -41,6 +42,23 @@ Ext.define('saas.view.viewport.ViewportController', {
         if(!Ext.isChrome && !Ext.isFirefox) {
             saas.util.BaseUtil.showConfirm('温馨提示', '为了更好地呈现页面效果,推荐使用Chrome浏览器或火狐浏览器');
         }
+        //读取系统参数
+        saas.util.BaseUtil.request({url:'/api/commons/configs/list'})
+        .then(function(res) {
+            if(res.success) {
+                var list = res.data.list;
+                if(list.length>0){
+                    var d = {};
+                    Ext.each(list, function(item, index){
+                        d[item.code] = item.data;
+                    });
+                    me.getViewModel().setData(d)
+                }
+            }
+        })
+        .catch(function(e) {
+            console.error(e);
+        });
     },
 
     showView: function(xtype) {

+ 22 - 5
frontend/saas-web/resources/json/navigation.json

@@ -18,6 +18,21 @@
             "text": "采购验退单",
             "addType": "purchase-purchaseout-formpanel",
             "viewType": "purchase-purchaseout-querypanel"
+        },{
+            "b2b":true,
+            "id": "deviceQuery",
+            "text": "器件查询",
+            "viewType": "purchase-deviceQuery-datalist"
+        },{
+            "b2b":true,
+            "id": "sendQuotation",
+            "text": "发起询价",
+            "viewType": "purchase-sendQuotation-datalist"
+        },{
+            "b2b":true,
+            "id": "quotationList",
+            "text": "询价信息查询",
+            "viewType": "purchase-quotationList-datalist"
         }]
     }, {
         "text": "报表",
@@ -56,10 +71,12 @@
             "addType": "sale-salein-formpanel",
             "viewType": "sale-salein-querypanel"
         }, {
+            "b2b":true,
             "id": "sale-business-business",
             "text": "公司商机",
             "viewType": "sale-business-business"
         }, {
+            "b2b":true,
             "id": "sale-business-mybusiness",
             "text": "我的商机",
             "viewType": "sale-business-mybusiness"
@@ -236,6 +253,11 @@
             "viewType": "document-bom-basepanel",
             "addType": "document-bom-formpanel",
             "leaf": true
+        }, {
+            "id":"document-currencys-datalist",
+            "text": "币别资料",
+            "viewType": "document-currencys-datalist",
+            "leaf": true
         }, {
             "id":"document-bankinformation-datalist",
             "text": "资金账户",
@@ -288,11 +310,6 @@
             "text": "收支类别",
             "viewType": "document-kind",
             "leaf": true
-        }, {
-            "id":"document-currencys-datalist",
-            "text": "币别",
-            "viewType": "document-currencys-datalist",
-            "leaf": true
         }]
     }]
 }, {

+ 5 - 0
pom.xml

@@ -221,6 +221,11 @@
                 <artifactId>mail-dto</artifactId>
                 <version>${project.release.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.usoftchina.saas</groupId>
+                <artifactId>transfers-dto</artifactId>
+                <version>${project.release.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.usoftchina.saas</groupId>
                 <artifactId>mail-api</artifactId>