Ver Fonte

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

guq há 7 anos atrás
pai
commit
889f3ad1d8
21 ficheiros alterados com 229 adições e 114 exclusões
  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 0
      applications/sale/sale-server/src/main/resources/logback-spring.xml
  8. 1 0
      applications/storage/storage-server/src/main/resources/logback-spring.xml
  9. 12 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/ResourceController.java
  10. 1 0
      base-servers/account/account-server/src/main/resources/logback-spring.xml
  11. 21 17
      base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java
  12. 1 0
      base-servers/auth/auth-server/src/main/resources/logback-spring.xml
  13. 12 1
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/error/MyExceptionHandler.java
  14. 1 0
      base-servers/gateway-server/src/main/resources/logback-spring.xml
  15. 1 0
      base-servers/ui-server/src/main/resources/logback-spring.xml
  16. 66 67
      frontend/saas-web/app/Application.scss
  17. 12 0
      frontend/saas-web/app/view/core/form/FormPanelController.js
  18. 16 7
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  19. 9 1
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  20. 1 0
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  21. 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 - 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"/>

+ 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();
+    }
+
 }

+ 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);
     }

+ 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);
     }
 
     /**

+ 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"/>

+ 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"/>

+ 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;
+}

+ 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);
         });
     },

+ 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, 

+ 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:[{