Browse Source

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

chenw 7 years ago
parent
commit
fb1d77c72e
35 changed files with 332 additions and 124 deletions
  1. 1 0
      applications/commons/commons-server/src/main/resources/logback-spring.xml
  2. 4 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendorList.java
  3. 1 0
      applications/document/document-server/src/main/resources/logback-spring.xml
  4. 1 0
      applications/document/document-server/src/main/resources/mapper/VendorMapper.xml
  5. 52 9
      applications/money/money-server/src/main/resources/logback-spring.xml
  6. 1 0
      applications/purchase/purchase-server/src/main/resources/logback-spring.xml
  7. 1 1
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/ProdInOutServiceImpl.java
  8. 4 4
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  9. 1 0
      applications/sale/sale-server/src/main/resources/logback-spring.xml
  10. 2 2
      applications/sale/sale-server/src/main/resources/mapper/ProdIODetailMapper.xml
  11. 1 0
      applications/storage/storage-server/src/main/resources/logback-spring.xml
  12. 12 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/ResourceController.java
  13. 8 0
      base-servers/account/account-server/src/main/resources/application.yml
  14. 1 0
      base-servers/account/account-server/src/main/resources/logback-spring.xml
  15. 21 17
      base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java
  16. 8 0
      base-servers/auth/auth-server/src/main/resources/application.yml
  17. 1 0
      base-servers/auth/auth-server/src/main/resources/logback-spring.xml
  18. 12 1
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/error/MyExceptionHandler.java
  19. 8 0
      base-servers/gateway-server/src/main/resources/application.yml
  20. 1 0
      base-servers/gateway-server/src/main/resources/logback-spring.xml
  21. 8 0
      base-servers/ui-server/src/main/resources/application.yml
  22. 1 0
      base-servers/ui-server/src/main/resources/logback-spring.xml
  23. 29 0
      frontend/saas-web/Readme.md
  24. 66 67
      frontend/saas-web/app/Application.scss
  25. 3 0
      frontend/saas-web/app/util/FormUtil.js
  26. 1 0
      frontend/saas-web/app/view/core/form/FormPanel.js
  27. 12 0
      frontend/saas-web/app/view/core/form/FormPanelController.js
  28. 22 0
      frontend/saas-web/app/view/core/query/QueryGridPanel.js
  29. 7 0
      frontend/saas-web/app/view/core/query/QueryPanel.js
  30. 16 7
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  31. 9 1
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  32. 1 0
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  33. 1 2
      frontend/saas-web/app/view/sale/sale/FormPanel.js
  34. 1 1
      frontend/saas-web/app/view/sale/saleOut/FormPanel.js
  35. 14 12
      frontend/saas-web/app/view/stock/make/FormPanelController.js

+ 1 - 0
applications/commons/commons-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 4 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/VendorList.java

@@ -82,6 +82,10 @@ public class VendorList implements Serializable {
      * 自定义字段
      */
     private String ve_text1;
+    /**
+     * 应付款金额
+     */
+    private double ve_leftamount;
     /**
      * 自定义字段
      */

+ 1 - 0
applications/document/document-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 1 - 0
applications/document/document-server/src/main/resources/mapper/VendorMapper.xml

@@ -72,6 +72,7 @@
         <result column="ve_recordid" property="ve_recordid" jdbcType="INTEGER" />
         <result column="ve_recordname" property="ve_recordname" jdbcType="VARCHAR" />
         <result column="ve_initdate" property="ve_initdate" jdbcType="TIMESTAMP" />
+        <result column="ve_leftamount" property="ve_leftamount" jdbcType="INTEGER" />
         <result column="ve_text1" property="ve_text1" jdbcType="VARCHAR" />
         <result column="ve_text2" property="ve_text2" jdbcType="VARCHAR" />
         <result column="ve_text3" property="ve_text3" jdbcType="VARCHAR" />

+ 52 - 9
applications/money/money-server/src/main/resources/logback-spring.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <configuration>
-    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
+    <include resource="org/springframework/boot/logging/logback/base.xml" />
     <jmxConfigurator/>
 
     <!--
@@ -28,10 +28,10 @@
     <springProperty scope="context" name="spring.profiles.active" source="spring.profiles.active" defaultValue="dev"/>
     <springProperty scope="context" name="common-pattern" source="logging.common-pattern" defaultValue="%d{yyyy-MM-dd HH:mm:ss.SSS}:[%5p] [%t:%r] [%C{1}:%M:%L] --> %m%n"/>
     <springProperty scope="context" name="log.level.console" source="logging.level.console" defaultValue="INFO"/>
+    <springProperty scope="context" name="log.destination" source="logging.destination" defaultValue="192.168.253.3:5000"/>
 
     <contextName>${spring.application.name}-${spring.profiles.active}-logback</contextName>
 
-
     <appender name="CONSOLE_APPENDER" class="ch.qos.logback.core.ConsoleAppender">
         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
             <level>${log.level.console}</level>
@@ -44,11 +44,9 @@
     <appender name="ROOT_APPENDER" class="ch.qos.logback.core.rolling.RollingFileAppender">
         <file>${log.path}/root.log</file>
         <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-            <!-- 每天一归档 -->
             <fileNamePattern>${log.path}/%d{yyyy-MM}/root-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
-            <!-- 单个日志文件最多 100MB, 60天的日志周期,最大不能超过20GB -->
             <maxFileSize>128MB</maxFileSize>
-            <maxHistory>60</maxHistory>
+            <maxHistory>7</maxHistory>
             <totalSizeCap>20GB</totalSizeCap>
         </rollingPolicy>
         <encoder>
@@ -56,9 +54,54 @@
         </encoder>
     </appender>
 
-    <root level="${log.level.console}">
-        <appender-ref ref="CONSOLE_APPENDER"/>
-        <appender-ref ref="ROOT_APPENDER"/>
-    </root>
+    <!-- Appender to log in a JSON format -->
+    <appender name="JSON_APPENDER" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
+        <destination>${log.destination}</destination>
+        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
+            <providers>
+                <pattern>
+                    <pattern>
+                        {
+                        "severity": "%level",
+                        "service": "${spring.application.name:-}",
+                        "trace": "%X{X-B3-TraceId:-}",
+                        "span": "%X{X-B3-SpanId:-}",
+                        "parent": "%X{X-B3-ParentSpanId:-}",
+                        "exportable": "%X{X-Span-Export:-}",
+                        "pid": "${PID:-}",
+                        "thread": "%thread",
+                        "class": "%logger{40}",
+                        "rest": "%message"
+                        }
+                    </pattern>
+                </pattern>
+            </providers>
+        </encoder>
+    </appender>
+
+    <logger name="org.springframework" level="INFO"/>
+    <logger name="com.usoftchina.saas" level="INFO"/>
+
+    <springProfile name="dev">
+        <root level="INFO">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="test">
+        <root level="INFO">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="ROOT_APPENDER"/>
+        </root>
+    </springProfile>
+
+    <springProfile name="docker">
+        <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
+        <root level="WARN">
+            <appender-ref ref="CONSOLE_APPENDER"/>
+            <appender-ref ref="JSON_APPENDER"/>
+        </root>
+    </springProfile>
 
 </configuration>

+ 1 - 0
applications/purchase/purchase-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

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

@@ -444,7 +444,7 @@ public class ProdInOutServiceImpl extends CommonBaseServiceImpl<ProdInOutMapper,
                 targetPid.setPd_piid(pi_id);
                 targetPid.setPd_inoutno(piInoutno);
                 targetPid.setPd_piclass(BillCodeSeq.SALEIN.getName());
-                targetPid.setPd_pdno(i);
+                targetPid.setPd_pdno(i + 1);
                 targetPid.setPd_orderid(sourcePid.getPd_orderid());
                 targetPid.setPd_ordercode(sourcePid.getPd_ordercode());
                 targetPid.setPd_orderdetno(sourcePid.getPd_orderdetno());

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

@@ -443,13 +443,13 @@ public class SaleServiceImpl implements SaleService{
         prodInOutMapper.insertSelective(prodInOut);
         //插入出货单从表
         long pi_id = prodInOut.getId();
-        for (int i=0;i<details.size();i++){
+        for (int i = 0; i < details.size(); i++){
             SaleDetail saleDetail =details.get(i);
             ProdIODetail prodIODetail = new ProdIODetail();
             prodIODetail.setPd_piid(pi_id);
             prodIODetail.setPd_inoutno(pi_inoutno);
             prodIODetail.setPd_piclass(BillCodeSeq.SALEOUT.getName());
-            prodIODetail.setPd_pdno(i);
+            prodIODetail.setPd_pdno(i + 1);
             prodIODetail.setPd_orderid(sale.getId());
             prodIODetail.setPd_ordercode(sale.getSa_code());
             prodIODetail.setPd_orderdetno(saleDetail.getSd_detno());
@@ -461,7 +461,7 @@ public class SaleServiceImpl implements SaleService{
             //公司id
             prodIODetail.setCompanyId(companyId);
             //本次转单数
-            prodIODetail.setPd_outqty((saleDetail.getSd_qty()-saleDetail.getSd_yqty()));
+            prodIODetail.setPd_outqty(saleDetail.getSd_qty() - saleDetail.getSd_yqty());
             prodIODetailMapper.insertSelective(prodIODetail);
             //更新已转数
             saleDetail.setSd_yqty(saleDetail.getSd_qty());
@@ -473,8 +473,8 @@ public class SaleServiceImpl implements SaleService{
         sale.setSa_sendstatuscode(Status.TURNOUT.name());
         //更新存在字段
         saleMapper.updateByPrimaryKeySelective(sale);
-        prodInOutMapper.updatePiTotal(pi_id);
         prodIODetailMapper.updatePDSaleOut(pi_id);
+        prodInOutMapper.updatePiTotal(pi_id);
         //日志记录
         DocBaseDTO baseDTO = new DocBaseDTO(pi_id, pi_inoutno, BillCodeSeq.SALEOUT.getName());
         messageLogService.customizeLog(baseDTO, Operation.TURNPRODOUT);

+ 1 - 0
applications/sale/sale-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

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

@@ -767,8 +767,8 @@ update prodiodetail a
   <update id="updatePDSaleOut" parameterType="long">
     update prodiodetail set
     pd_total=round(IFNULL(pd_outqty,0)*IFNULL(pd_sendprice,0),2),
-    pd_netprice = round(IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100),0),
-    pd_nettotal = round((IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100))*IFNULL(pd_outqty,0),0)
+    pd_netprice = round(IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100),2),
+    pd_nettotal = round((IFNULL(pd_sendprice,0)/(1+IFNULL(pd_taxrate,0)/100))*IFNULL(pd_outqty,0),2)
     where pd_piid=#{id}
   </update>
 </mapper>

+ 1 - 0
applications/storage/storage-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 12 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/ResourceController.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.account.controller;
 
+import com.usoftchina.saas.account.cache.ResourceCache;
 import com.usoftchina.saas.account.dto.ResourceModuleDTO;
 import com.usoftchina.saas.account.dto.UrlResourceDTO;
 import com.usoftchina.saas.account.service.ResourceService;
@@ -53,4 +54,15 @@ public class ResourceController {
         return Result.success(resourcesService.findUrlResourcesByAppId(appId));
     }
 
+    /**
+     * 缓存清除
+     *
+     * @return
+     */
+    @GetMapping("/cache/clear")
+    public Result clearCache() {
+        ResourceCache.of(BaseContextHolder.getAppId()).hdel();
+        return Result.success();
+    }
+
 }

+ 8 - 0
base-servers/account/account-server/src/main/resources/application.yml

@@ -55,6 +55,14 @@ server:
   port: 8580
   tomcat:
     uri-encoding: UTF-8
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
 info:
   name: '@project.artifactId@'
   description: '@project.description@'

+ 1 - 0
base-servers/account/account-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 21 - 17
base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java

@@ -27,23 +27,27 @@ public class AuthRestInterceptor extends HandlerInterceptorAdapter {
 
     @Override
     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-        HandlerMethod handlerMethod = (HandlerMethod) handler;
-        // 配置该注解,说明不进行用户拦截
-        IgnoreAuth annotation = handlerMethod.getBeanType().getAnnotation(IgnoreAuth.class);
-        if (annotation == null) {
-            annotation = handlerMethod.getMethodAnnotation(IgnoreAuth.class);
-        }
-        if (annotation != null) {
-            return super.preHandle(request, response, handler);
-        }
-        String token = request.getHeader(authConfig.getAuthHeader());
-        if (null != token) {
-            JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
-            BaseContextHolder.setAppId(infoFromToken.getAppId());
-            BaseContextHolder.setUserId(infoFromToken.getUserId());
-            BaseContextHolder.setCompanyId(infoFromToken.getCompanyId());
-            BaseContextHolder.setToken(token);
-            log.info("token={} \\r\\n userName={}", token, infoFromToken.getUserName());
+        if (handler instanceof HandlerMethod) {
+            HandlerMethod handlerMethod = (HandlerMethod) handler;
+            // 配置该注解,说明不进行用户拦截
+            IgnoreAuth annotation = handlerMethod.getBeanType().getAnnotation(IgnoreAuth.class);
+            if (annotation == null) {
+                annotation = handlerMethod.getMethodAnnotation(IgnoreAuth.class);
+            }
+            if (annotation != null) {
+                return super.preHandle(request, response, handler);
+            }
+            String token = request.getHeader(authConfig.getAuthHeader());
+            if (null != token) {
+                JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
+                BaseContextHolder.setAppId(infoFromToken.getAppId());
+                BaseContextHolder.setUserId(infoFromToken.getUserId());
+                BaseContextHolder.setCompanyId(infoFromToken.getCompanyId());
+                BaseContextHolder.setToken(token);
+                log.info("token={} \\r\\n userName={}", token, infoFromToken.getUserName());
+            }
+        } else {
+            // no mapping
         }
         return super.preHandle(request, response, handler);
     }

+ 8 - 0
base-servers/auth/auth-server/src/main/resources/application.yml

@@ -52,6 +52,14 @@ server:
   port: 8600
   tomcat:
     uri-encoding: UTF-8
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
 info:
   name: '@project.artifactId@'
   description: '@project.description@'

+ 1 - 0
base-servers/auth/auth-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 12 - 1
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/error/MyExceptionHandler.java

@@ -1,5 +1,8 @@
 package com.usoftchina.saas.gateway.error;
 
+import com.usoftchina.saas.exception.BaseException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.boot.autoconfigure.web.ErrorProperties;
 import org.springframework.boot.autoconfigure.web.ResourceProperties;
 import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
@@ -20,6 +23,8 @@ import java.util.Map;
  */
 public class MyExceptionHandler extends DefaultErrorWebExceptionHandler {
 
+    private Logger logger = LoggerFactory.getLogger(MyExceptionHandler.class);
+
     public MyExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties,
                               ErrorProperties errorProperties, ApplicationContext applicationContext) {
         super(errorAttributes, resourceProperties, errorProperties, applicationContext);
@@ -32,10 +37,16 @@ public class MyExceptionHandler extends DefaultErrorWebExceptionHandler {
     protected Map<String, Object> getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
         int code = 500;
         Throwable error = super.getError(request);
+        String message = error.getMessage();
         if (error instanceof NotFoundException) {
             code = 404;
+        } else if (error instanceof BaseException) {
+            BaseException e = (BaseException) error;
+            code = e.getCode();
+            message = e.getMessage();
         }
-        return response(code, this.buildMessage(request, error));
+        logger.error(this.buildMessage(request, error));
+        return response(code, message);
     }
 
     /**

+ 8 - 0
base-servers/gateway-server/src/main/resources/application.yml

@@ -124,6 +124,14 @@ eureka:
     registryFetchIntervalSeconds: 5
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8500/eureka/
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
 feign:
   hystrix:
     enabled: true

+ 1 - 0
base-servers/gateway-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 8 - 0
base-servers/ui-server/src/main/resources/application.yml

@@ -42,6 +42,14 @@ eureka:
     registryFetchIntervalSeconds: 5
     serviceUrl:
       defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@127.0.0.1:8500/eureka/
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"
+  endpoint:
+    health:
+      show-details: always
 info:
   name: '@project.artifactId@'
   description: '@project.description@'

+ 1 - 0
base-servers/ui-server/src/main/resources/logback-spring.xml

@@ -97,6 +97,7 @@
 
     <springProfile name="docker">
         <logger name="org.springframework" level="WARN"/>
+        <logger name="com.usoftchina.saas" level="WARN"/>
         <root level="WARN">
             <appender-ref ref="CONSOLE_APPENDER"/>
             <appender-ref ref="JSON_APPENDER"/>

+ 29 - 0
frontend/saas-web/Readme.md

@@ -149,6 +149,31 @@ viewModel: view.core.query.QueryPanelModel
 | baseColumn | 基础列配置 | √ | [ Column ] |
 | relativeColumn | 关联列设置 | x | [ Column ] |
 
+## 放大镜配置
+
+dbfindtrigger,用于选择基础资料
+
+| 字段 | 说明 | 必填 | 样例 |
+| --- | --- | --- | --- |
+| dataUrl | 查询接口 | √ | "/api/document/vendor/list" |
+| addXtype | 新增基础资料页面xtype | √ | "document-vendor-formpanel" |
+| addTitle | 新增单据名称,新增tab标题 | √ | "供应商资料" |
+| dbfinds | 字段赋值配置,from:基础资料字段;to: 主表或从表字段;ignore:非模糊查询字段 | √ | [{
+                            from:'id',to:'pu_vendid',ignore:true
+                        },{
+                            from:'ve_code',to:'pu_vendcode'
+                        },{
+                            from:'ve_name',to:'pu_vendname'
+                        }] |
+| dbtpls | 模糊查询展示列 | √ | [{
+                            field:'ve_code',width:100
+                        },{
+                            field:'ve_name',width:100
+                        }] |
+| defaultCondition | 默认查询条件 | x | "ve_statuscode='OPEN'" |
+| dbSearchFields | 自定义查询字段 | √ | [ Ext.form.field ] |
+| dbColumns | 列配置 | √ | [ Ext.grid.column ] |
+
 ---
 
 ### 前端配置调整日志
@@ -173,5 +198,9 @@ deleteDetailUrl 配置调整 formpanel.form->formpanel.detailGridField
 
 从表显示合计栏配置说明
 
+- 2018-11-6 08:39:18
+
+放大镜配置说明
+
 
 

+ 66 - 67
frontend/saas-web/app/Application.scss

@@ -1,76 +1,75 @@
-html, body {
-    height: 100%;
-    margin: 0;
-  }
-  
-  body.launching {
+html,
+body {
+  height: 100%;
+  margin: 0;
+}
+
+body.launching {
+  @include background-size(cover);
+  background-color: $auth-background-color;
+  background-image: $auth-background-image;
+  background-position: center;
+
+  &::before {
+    @include animation(rotate-animation 1s linear infinite);
+    @include transform-origin(50% 50%);
     @include background-size(cover);
-    background-color: $auth-background-color;
-    background-image: $auth-background-image;
+    background-image: url(get-resource-path('images/loading.png'));
     background-position: center;
-  
-    &::before {
-        @include animation(rotate-animation 1s linear infinite);
-        @include transform-origin(50% 50%);
-        @include background-size(cover);
-        background-image: url(get-resource-path('images/loading.png'));
-        background-position: center;
-        content: '';
-        position: absolute;
-        margin-top: -15px;
-        margin-left: -15px;
-        top: 50%;
-        left: 50%;
-        width: 41px;
-        height: 41px;
-    }
+    content: '';
+    position: absolute;
+    margin-top: -15px;
+    margin-left: -15px;
+    top: 50%;
+    left: 50%;
+    width: 41px;
+    height: 41px;
   }
+}
 
 @mixin btn-border($background-color) {
-    background-color: $background-color;
-    border-color: $background-color !important;
-  
-    .x-btn-inner-default-toolbar-small {
-      color: $lightest-color;
+  background-color: $background-color;
+  border-color: $background-color !important;
+
+  .x-btn-inner-default-toolbar-small {
+    color: $lightest-color;
+  }
+
+  &:hover {
+    background-color: transparent;
+
+    .x-btn-inner-default-toolbar-small,
+    .x-btn-inner-default-small {
+      color: $background-color;
     }
-  
-    &:hover {
-      background-color: transparent;
-  
-      .x-btn-inner-default-toolbar-small,
-      .x-btn-inner-default-small {
-        color: $background-color;
-      }
-  
-      .x-btn-icon-el-default-small,
-      .x-btn-icon-el-default-toolbar-small {
-        color: $background-color;
-      }
+
+    .x-btn-icon-el-default-small,
+    .x-btn-icon-el-default-toolbar-small {
+      color: $background-color;
     }
   }
-  
-  .x-menu-header {
-    z-index: 0 !important;
-  }
-  
-  .x-css-shadow{
-    box-shadow: none !important;
-  }
-  
-  .shadow {
-    @include box-shadow(rgba(0,0,0,0.2) 0 1px 2px);
-  }
-  
-  .x-fa {
-    display: inline-block;
-  }
-  
-  .alignRight {
-    float: right;
-  }
-  
-  .boldFont {
-    font-weight: bold;
-  }
+}
+
+.x-menu-header {
+  z-index: 0 !important;
+}
+
+.x-css-shadow {
+  box-shadow: none !important;
+}
+
+.shadow {
+  @include box-shadow(rgba(0, 0, 0, 0.2) 0 1px 2px);
+}
+
+.x-fa {
+  display: inline-block;
+}
+
+.alignRight {
+  float: right;
+}
 
-  
+.boldFont {
+  font-weight: bold;
+}

+ 3 - 0
frontend/saas-web/app/util/FormUtil.js

@@ -110,6 +110,9 @@ Ext.define('saas.util.FormUtil', {
                                 
                                 var editor = c.editor;
                                 if(editor) {
+                                    Ext.applyIf(editor, {
+                                        selectOnFocus: true
+                                    });
                                     if(editor.xtype == 'numberfield') {
                                         Ext.applyIf(editor, {
                                             hideTrigger: true, // 隐藏trigger

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

@@ -68,6 +68,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text: '保存',
             handler: 'onSave',
             bind: {
+                hidden: '{'+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}',
                 // disabled: '{!base.valid || '+ me._statusCodeField + ' == "AUDITED" || ' + me._statusCodeField + ' == "OPEN"}'
                 disabled: '{!base.valid || '+ me._statusCodeField + ' == "' + me.auditTexts.auditCode + '"}'
             }

+ 12 - 0
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -165,6 +165,18 @@ Ext.define('saas.view.core.form.FormPanelController', {
         })
         .catch(function(res) {
             console.error(res);
+            if(res.data) {
+                var id = localJson.data.id;
+                var code = localJson.data.code;
+                
+                form.initId = id;
+
+                var newId = form.xtype + '-' + id;
+                var newTitle = form._title + '(' + code + ')';
+
+                refreshTabTitle(newId, newTitle);
+                form.FormUtil.loadData(form);
+            }
             showToast('审核失败: ' + res.message);
         });
     },

+ 22 - 0
frontend/saas-web/app/view/core/query/QueryGridPanel.js

@@ -212,6 +212,28 @@ Ext.define('saas.view.core.query.QueryGridPanel', {
         me.callParent(arguments);
     },
     listeners: {
+        boxready: function(grid, width, height, eOpts) {
+            var store = grid.getStore(),
+            dockedItems = grid.getDockedItems(),
+            toolbar = dockedItems[0],
+            header = dockedItems[1],
+            pagingtoolbar = dockedItems[2];
+
+            var gridEl = grid.el.dom,
+            gridHeight = gridEl.getBoundingClientRect().height,
+            toolbarEl = toolbar.el.dom,
+            toolbarHeight = toolbarEl.getBoundingClientRect().height,
+            headerEl = header.el.dom,
+            headerHeight = headerEl.getBoundingClientRect().height,
+            pagingtoolbarEl = pagingtoolbar.el.dom,
+            pagingtoolbarHeight = pagingtoolbarEl.getBoundingClientRect().height;
+
+            var gridBodyHeight = gridHeight - toolbarHeight - headerHeight - pagingtoolbarHeight;
+
+            var pageSize = Math.floor(gridBodyHeight / 32);
+
+            store.setPageSize(pageSize);
+        },
         itemClick: function(tableView, record, item, index, e, eOpts) {
             if(e.target.parentElement.classList.contains('x-querygrid-code-column')) {
                 var grid = tableView.up('grid'),

+ 7 - 0
frontend/saas-web/app/view/core/query/QueryPanel.js

@@ -110,6 +110,13 @@ Ext.define('saas.view.core.query.QueryPanel', {
             }
         });
 
+        if(columns[columns.length - 1].flex != 1) {
+            columns.push({
+                flex: 1,
+                allowBlank: true
+            });
+        }
+
         me.queryGridConfig['columns']=columns;
         Ext.apply(queryGrid,me.queryGridConfig);
     },

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

@@ -36,7 +36,7 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         name: 'id',
         fieldLabel: 'id'
     }, {
-        xtype: 'hidden',
+        xtype: 'textfield',
         name: 'pb_kind',
         fieldLabel: '单据类型',
         defaultValue: '付款单'
@@ -52,11 +52,20 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         xtype: "dbfindtrigger",
         name: "pb_vendname",
         fieldLabel: "供应商名称"
+    },{
+        xtype:"numberfield",
+        name:"ve_leftamount",
+        fieldLabel:"总欠款",
+        ignore:true
     },{
         xtype: "datefield",
         name: "pb_date",
         fieldLabel: "日期"
-    }, {
+    },{
+      xtype:"textfield",
+      name:"pb_code",
+      fieldLabel:"单号"
+    },{
         xtype: 'hidden',
         name: 'pb_manname',
         fieldLabel: '收款人'
@@ -80,10 +89,6 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         xtype: 'hidden',
         name: 'pb_havebalance',
         fieldLabel: '已核销金额'
-    },{
-        xtype: 'textfield',
-        name: 'cu_leftamount',
-        fieldLabel: '总欠款金额'
     }, {
         xtype: "detailGridField",
         storeModel: 'saas.model.money.PayBalance1',
@@ -153,7 +158,11 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         storeModel: 'saas.model.money.PayBalance2',
         detnoColumn: 'pbd_detno',
         deleteDetailUrl: '/api/money/paybalance/deleteDetail2/',
-        columns: [{
+        ltar: {
+          xtype:'button',
+          text:'选择源单',
+          name:'chooseSource'
+        },columns: [{
             text: 'ID',
             dataIndex: 'id',
             hidden: true

+ 9 - 1
frontend/saas-web/app/view/money/payBalance/FormPanelController.js

@@ -9,7 +9,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
             'dbfindtrigger[name=pb_vendname]':{
                 beforerender: function (f) {
                     Ext.apply(f, {
-                        dataUrl: '/api/document/vendor/list',
+                        dataUrl: 'api/document/vendor/list',
                         addXtype: 'document-vendor-formpanel',
                         addTitle: '供应商资料',
                         dbfinds: [{
@@ -25,6 +25,9 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                         }, {
                             field: 've_name',
                             width: 100
+                        },{
+                            field:'ve_leftamount',
+                            width: 100
                         }],
                         defaultCondition: "ve_statuscode='OPEN'",
                         dbSearchFields:[{
@@ -65,6 +68,11 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                             "dataIndex": "ve_taxrate",
                             "width": 100
                         }, {
+                            "text":"应付款金额",
+                            "flex":1,
+                            "dataIndex":"ve_leftamount",
+                            "width":100
+                        },{
                             "text": "承付天数",
                             "flex": 1,
                             "dataIndex": "ve_promisedays",

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

@@ -128,6 +128,7 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
                         defaultCondition: "pr_statuscode='OPEN'",
                         dbSearchFields:[{
                             emptyText:'输入物料编号、名称或规格',
+                            width: 200,
                             xtype : "textfield", 
                             name : "search", 
                             allowBlank : true, 

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

@@ -239,10 +239,9 @@ Ext.define('saas.view.sale.sale.FormPanel', {
                 ignore:true
             },{
                 text : "备注", 
-                dataIndex : "sd_remark",
+                dataIndex : "sd_text1",
                 width : 250, 
                 items : null,
-                ignore:true,
                 editor : {
                     xtype : "textfield"
                 },

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

@@ -26,7 +26,7 @@ Ext.define('saas.view.sale.saleout.FormPanel', {
 
     toolBtns: [{
         xtype: 'button',
-        text: '转销售退',
+        text: '转销售退',
         handler: 'turnProdIn',
         bind: {
             hidden: '{pi_statuscode!="AUDITED"}'

+ 14 - 12
frontend/saas-web/app/view/stock/make/FormPanelController.js

@@ -91,14 +91,15 @@ Ext.define('saas.view.stock.make.FormPanelController', {
                         defaultCondition:"pr_statuscode='OPEN'",
                         //窗口字段设置
                         dbSearchFields:[{
-                            emptyText:'输入仓库编号或名称',
+                            emptyText:'输入物料编号、名称或规格',
                             xtype : "textfield", 
-                            name : "name", 
+                            name : "search", 
+                            width: 200,
+                            getCondition: function(v) {
+                                return "(upper(pr_spec) like '%" + v.toUpperCase()+"%' or upper(pr_code) like '%"+v.toUpperCase()+"%' or upper(pr_detail) like '%"+v.toUpperCase()+"%')";
+                            },
                             allowBlank : true, 
-                            columnWidth : 0.25,
-                            getCondition:function(v){
-                                return "(upper(pr_code) like '%"+v.toUpperCase()+"%' or upper(pr_detail) like '%"+v.toUpperCase()+"%')";
-                            }
+                            columnWidth : 0.25
                         }],
                         //窗口列设置
                         dbColumns:[{
@@ -189,14 +190,15 @@ Ext.define('saas.view.stock.make.FormPanelController', {
                         defaultCondition:"pr_statuscode='OPEN'",
                         //窗口字段设置
                         dbSearchFields:[{
-                            emptyText:'输入仓库编号或名称',
+                            emptyText:'输入物料编号、名称或规格',
                             xtype : "textfield", 
-                            name : "name", 
+                            name : "search", 
+                            width: 200,
+                            getCondition: function(v) {
+                                return "(upper(pr_spec) like '%" + v.toUpperCase()+"%' or upper(pr_code) like '%"+v.toUpperCase()+"%' or upper(pr_detail) like '%"+v.toUpperCase()+"%')";
+                            },
                             allowBlank : true, 
-                            columnWidth : 0.25,
-                            getCondition:function(v){
-                                return "(upper(pr_code) like '%"+v.toUpperCase()+"%' or upper(pr_detail) like '%"+v.toUpperCase()+"%')";
-                            }
+                            columnWidth : 0.25
                         }],
                         //窗口列设置
                         dbColumns:[{