Browse Source

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

heqinwei 7 years ago
parent
commit
a1477c1b22
47 changed files with 466 additions and 108 deletions
  1. 1 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 10 0
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Bom.java
  3. 1 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/ProductController.java
  4. 2 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductDetailMapper.java
  5. 1 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductService.java
  6. 52 6
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  7. 1 1
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  8. 1 0
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  9. 1 1
      applications/document/document-server/src/main/resources/mapper/CustomerkindMapper.xml
  10. 1 1
      applications/document/document-server/src/main/resources/mapper/FundinouttypeMapper.xml
  11. 5 2
      applications/document/document-server/src/main/resources/mapper/ProductDetailMapper.xml
  12. 2 2
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  13. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  14. 1 1
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  15. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  16. 1 1
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  17. 1 1
      applications/document/document-server/src/main/resources/mapper/WarehouseMapper.xml
  18. 78 0
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/AccountRoleDTO.java
  19. 27 27
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/PowerDTO.java
  20. 18 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java
  21. 5 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountRoleMapper.java
  22. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java
  23. 43 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/PowerInfo.java
  24. 15 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java
  25. 14 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java
  26. 34 13
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java
  27. 7 0
      base-servers/account/account-server/src/main/resources/mapper/AccountRoleMapper.xml
  28. 8 0
      base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml
  29. 1 1
      base-servers/auth/auth-client/src/main/java/com/usoftchina/saas/auth/client/interceptor/AuthRestInterceptor.java
  30. 3 1
      base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtHelper.java
  31. 11 1
      base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtInfo.java
  32. 2 2
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  33. 1 1
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java
  34. 0 1
      base-servers/gateway-server/src/main/resources/application.yml
  35. 1 0
      base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/TemplateMailMessage.java
  36. 1 1
      frontend/saas-web/app/view/document/bom/FormPanel.js
  37. 4 5
      frontend/saas-web/app/view/document/customer/BasePanel.js
  38. 1 1
      frontend/saas-web/app/view/document/product/FormPanel.js
  39. 6 0
      frontend/saas-web/app/view/home/InfoCard.scss
  40. 1 0
      frontend/saas-web/app/view/main/Main.js
  41. 2 0
      frontend/saas-web/app/view/main/Navigation.js
  42. 1 0
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  43. 1 0
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  44. 46 8
      frontend/saas-web/app/view/sale/report/SaleProfit.js
  45. 1 1
      frontend/saas-web/app/view/stock/appropriationInOut/FormPanel.js
  46. 32 23
      frontend/saas-web/app/view/stock/appropriationInOut/FormPanelController.js
  47. 12 0
      frontend/saas-web/app/view/sys/config/FormPanel.js

+ 1 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java

@@ -29,6 +29,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_RELDELETE_UPDATE(79306,"存在关联单据,不允许更新编号"),
     BIZ_RELDELETE_UPDATEPROD(79307,"存在关联单据,不允许更新"),
     BIZ_RELDELETE_DELETEPROD(79308,"存在关联单据,不允许删除"),
+    BIZ_PRODWHCODE_REPEAT(79309, "明细仓库重复"),
     NO_OPRATIONDATA(79400,"无可操作单据"),
     BOM_SAVE(79401, "产品编号+版本号已存在"),
     REPEAT_NAME(79501, "名称重复"),

+ 10 - 0
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Bom.java

@@ -41,6 +41,16 @@ public class Bom extends CommonBaseEntity implements Serializable {
 
     private String pr_orispeccode;
 
+    private String pr_unit;
+
+    public String getPr_unit() {
+        return pr_unit;
+    }
+
+    public void setPr_unit(String pr_unit) {
+        this.pr_unit = pr_unit;
+    }
+
     public String getPr_spec() {
         return pr_spec;
     }

+ 1 - 3
applications/document/document-server/src/main/java/com/usoftchina/saas/document/controller/ProductController.java

@@ -99,9 +99,7 @@ public class ProductController {
 
     @GetMapping("/read/{id}")
     public Result getDataById(@PathVariable("id") Long id){
-        Map<String, Object> map = new HashMap<String, Object>();
-        map.put("main", productService.getDataById(id));
-        return Result.success(map);
+        return Result.success(productService.getDataById(id));
     }
 
     @GetMapping("/ReserveCost")

+ 2 - 0
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/ProductDetailMapper.java

@@ -25,4 +25,6 @@ public interface ProductDetailMapper extends CommonBaseMapper<ProductDetail> {
     Long selectProdidByPrimaryKey(Long id);
 
     List<ProductDetail> selectByProdId(Long id);
+
+    boolean deleteByProdId(Long id);
 }

+ 1 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/ProductService.java

@@ -101,7 +101,7 @@ public interface ProductService extends CommonBaseService<ProductMapper, Product
      * @param id
      * @return
      */
-    Product getDataById(Long id);
+    ProductListDTO getDataById(Long id);
 
     /**
      * 物料库存数量金额表

+ 52 - 6
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java

@@ -25,6 +25,7 @@ import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.page.PageRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.StringUtils;
 
 import java.util.*;
@@ -75,20 +76,34 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public DocBaseDTO saveData(ProductListDTO productListDTO){
         Product product = productListDTO.getMain();
         List<ProductDetail> productDetailList = productListDTO.getItems();
         DocBaseDTO docBaseDTO = null;
+        Long companyId = BaseContextHolder.getCompanyId();
+        Long userId = BaseContextHolder.getUserId();
+
+        //校验明细仓库是否重复
+        validRepeatWarehouse(productDetailList);
+
         if(product.getId() == 0){
             //保存
             String code = pushMaxnubmer(product.getPr_code(), product.getId());
-            product.setCompanyId(BaseContextHolder.getCompanyId());
-            product.setCreatorId(BaseContextHolder.getUserId());
+            product.setCompanyId(companyId);
+            product.setCreatorId(userId);
             product.setCreateTime(new Date());
             //保存主表
             getMapper().insertSelective(product);
             //保存明细表数据
-            productDetailMapper.batchInsert(productDetailList);
+            if (productDetailList.size() > 0) {
+                for (ProductDetail productDetail : productDetailList){
+                    productDetail.setPd_prodid(product.getId());
+                    productDetail.setCompanyId(companyId);
+                }
+
+                productDetailMapper.batchInsert(productDetailList);
+            }
             //生成库存初始化数据并过账
             generateProdIOPost(product, productDetailList);
 
@@ -116,8 +131,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 List<ProductDetail> updateItems = new ArrayList<ProductDetail>();
                 for(ProductDetail productDetail : productDetailList){
                     if (productDetail.getId() == 0){
+                        productDetail.setUpdaterId(userId);
+                        productDetail.setUpdateTime(new Date());
                         insertItems.add(productDetail);
                     }else{
+                        productDetail.setUpdaterId(userId);
+                        productDetail.setUpdateTime(new Date());
                         updateItems.add(productDetail);
                     }
                 }
@@ -144,6 +163,27 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         return docBaseDTO;
     }
 
+    /**
+     * 校验明细仓库是否重复
+     * @param productDetailList
+     */
+    private void validRepeatWarehouse(List<ProductDetail> productDetailList) {
+        if (productDetailList.size() > 0){
+            boolean flag = true;   //假设不重复
+            for (int i = 0; i < productDetailList.size() - 1; i ++){
+                for (int j = i + 1; j < productDetailList.size(); j++){
+                    if (productDetailList.get(i).getPd_whcode().equals(productDetailList.get(j).getPd_whcode())){
+                        flag = false;
+                        break;
+                    }
+                }
+            }
+            if (!flag){
+                throw new BizException(BizExceptionCode.BIZ_PRODWHCODE_REPEAT);
+            }
+        }
+    }
+
     /**
      * 物料发生过除库存初始化外的出入库单时,不能新增,修改,删除
      * @param id
@@ -331,6 +371,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
 
         String code = getMapper().getCodeById(id);
         getMapper().deleteByPrimaryKey(id);
+        productDetailMapper.deleteByProdId(id);
         DocBaseDTO docBaseDTO = generateMsgObj(id, code);
         //记录LOG
         messageLogService.delete(docBaseDTO);
@@ -403,8 +444,13 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     }
 
     @Override
-    public Product getDataById(Long id) {
-        return getMapper().selectByPrimaryKey(id);
+    public ProductListDTO getDataById(Long id) {
+        ProductListDTO productListDTO = new ProductListDTO();
+        Product product = getMapper().selectByPrimaryKey(id);
+        List<ProductDetail> productDetails = productDetailMapper.selectByProdId(id);
+        productListDTO.setMain(product);
+        productListDTO.setItems(productDetails);
+        return productListDTO;
     }
 
     @Override
@@ -426,7 +472,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
     public boolean deleteDetailById(Long id) {
         Long prodId = productDetailMapper.selectProdidByPrimaryKey(id);
         validProductOperation(prodId, BizExceptionCode.BIZ_RELDELETE_DELETEPROD);
-        String prCode = getMapper().selectByPrimaryKey(id).getPr_code();
+        String prCode = getMapper().selectByPrimaryKey(prodId).getPr_code();
         //找到原始单据,反过账并删除
         String inoutCode = getMapper().selectProdIOCode(prCode, BaseContextHolder.getCompanyId(), "库存初始化");
         if (!StringUtils.isEmpty(inoutCode)) {

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

@@ -179,7 +179,7 @@
     where ad_id in (#{ids,jdbcType=VARCHAR})
   </delete>
   <select id="selectAll" resultMap="ResultMapWithBLOBs">
-    SELECT * FROM ADDRESS where COMPANYID=#{companyId}
+    SELECT * FROM ADDRESS where COMPANYID=#{companyId} ORDER BY AD_ID DESC
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT count(*) FROM ADDRESS

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

@@ -22,6 +22,7 @@
     <result column="bo_text5" property="bo_text5" jdbcType="VARCHAR" />
     <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR" />
     <result column="pr_spec" property="pr_spec" jdbcType="VARCHAR" />
+    <result column="pr_unit" property="pr_unit" jdbcType="VARCHAR" />
     <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />
   </resultMap>
   <sql id="Base_Column_List" >

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

@@ -120,7 +120,7 @@
     where ck_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM CUSTOMERKIND WHERE COMPANYID=#{companyId}
+    SELECT * FROM CUSTOMERKIND WHERE COMPANYID=#{companyId} order by ck_id desc
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
     SELECT ck_name display,ck_name value FROM CUSTOMERKIND WHERE COMPANYID=#{companyId}

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

@@ -140,7 +140,7 @@
     where ft_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM FUNDINOUTTYPE where companyId=#{companyId}
+    SELECT * FROM FUNDINOUTTYPE where companyId=#{companyId} ORDER BY FT_ID DESC
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT COUNT(*) FROM FUNDINOUTTYPE

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

@@ -255,7 +255,7 @@
         )
         VALUES
         <foreach collection="list" item="item" index="index" open="" close="" separator=",">
-            values ( #{item.pd_prodid,jdbcType=INTEGER}, #{item.pd_prodcode,jdbcType=VARCHAR},
+            ( #{item.pd_prodid,jdbcType=INTEGER}, #{item.pd_prodcode,jdbcType=VARCHAR},
             #{item.pd_detno,jdbcType=INTEGER}, #{item.pd_whcode,jdbcType=VARCHAR}, #{item.pd_whname,jdbcType=VARCHAR},
             #{item.pd_whid,jdbcType=INTEGER}, #{item.pd_price,jdbcType=DOUBLE}, #{item.pd_amount,jdbcType=DOUBLE},
             #{item.companyId,jdbcType=INTEGER}, #{item.updaterId,jdbcType=INTEGER}, #{item.updateTime,jdbcType=TIMESTAMP},
@@ -324,9 +324,12 @@
         </foreach>
     </update>
     <select id="selectProdidByPrimaryKey" resultType="java.lang.Long">
-        SELECT PD_PRODID FROM PRODUCTDETAIL WHERE PD_ID=#{id}
+        SELECT PD_PRODID FROM PRODUCTDETAIL WHERE ID=#{id}
     </select>
     <select id="selectByProdId" resultType="com.usoftchina.saas.document.entities.ProductDetail">
         SELECT * FROM PRODUCTDETAIL WHERE PD_PRODID=#{id}
     </select>
+    <delete id="deleteByProdId" >
+        DELETE FROM PRODUCTDETAIL WHERE PD_PRODID=#{id}
+    </delete>
 </mapper>

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

@@ -903,9 +903,9 @@
         </where>
     </select>
 
-    <select id="selectOrderCountByProdCode" resultType="java.lang.Long">
+    <select id="selectOrderCountByProdCode" resultType="java.lang.Integer">
         SELECT COUNT(*) FROM PRODINOUT LEFT JOIN PRODIODETAIL ON PI_ID=PD_PIID AND PRODINOUT.COMPANYID=PRODIODETAIL.COMPANYID
-        WHERE COMPANYID = #{companyId} AND PD_PRODID = #{id}
+        WHERE PRODIODETAIL.COMPANYID = #{companyId} AND PD_PRODID = #{id}
     </select>
 
     <delete id="deleteProdIOByCode" >

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

@@ -130,7 +130,7 @@
   </select>
 
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
-    SELECT PB_NAME display,PB_NAME value FROM PRODUCTBRAND WHERE COMPANYID=#{companyId}
+    SELECT PB_NAME display,PB_NAME value FROM PRODUCTBRAND WHERE COMPANYID=#{companyId} ORDER BY PB_ID DESC
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT COUNT(*) FROM PRODUCTBRAND

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

@@ -126,7 +126,7 @@
     where pt_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTTYPE where companyId=#{companyId}
+    SELECT * FROM PRODUCTTYPE where companyId=#{companyId} ORDER BY PT_ID DESC
   </select>
     <select id="selectCountByName" resultType="int">
         SELECT COUNT(*) FROM PRODUCTTYPE

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

@@ -120,7 +120,7 @@
     where pu_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTUNIT where companyId=#{companyId}
+    SELECT * FROM PRODUCTUNIT where companyId=#{companyId} ORDER BY PU_ID DESC
   </select>
     <select id="selectCountByName" resultType="int">
         SELECT COUNT(*) FROM productunit

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

@@ -126,7 +126,7 @@
     where vk_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM VENDORKIND where companyId = #{companyId}
+    SELECT * FROM VENDORKIND where companyId = #{companyId} ORDER BY VK_ID DESC
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
     SELECT VK_NAME display, VK_NAME value FROM VENDORKIND WHERE COMPANYID=#{companyId}

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

@@ -347,7 +347,7 @@
     <select id="selectCountByCode" resultType="int">
         SELECT COUNT(*) FROM warehouse
         <where>
-            <if test="name!=null">
+            <if test="code!=null">
                 and wh_code=#{code}
             </if>
             <if test="companyId!=0 and companyId!=null">

+ 78 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/AccountRoleDTO.java

@@ -0,0 +1,78 @@
+package com.usoftchina.saas.account.dto;
+
+import java.io.Serializable;
+
+public class AccountRoleDTO implements Serializable {
+
+    private Long accountId;
+    private String username;
+    private String realname;
+    private String email;
+    private String mobile;
+    private String roleNames;
+    private String roleIds;
+
+    public String getRoleNames() {
+        return roleNames;
+    }
+
+    public void setRoleNames(String roleNames) {
+        this.roleNames = roleNames;
+    }
+
+    public String getRoleIds() {
+        return roleIds;
+    }
+
+    public void setRoleIds(String roleIds) {
+        this.roleIds = roleIds;
+    }
+
+    public Long getId() {
+        return accountId;
+    }
+
+    public void setId(Long accountId) {
+        this.accountId = accountId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getRealname() {
+        return realname;
+    }
+
+    public void setRealname(String realname) {
+        this.realname = realname;
+    }
+
+    public String getEmail() {
+        return email;
+    }
+
+    public void setEmail(String email) {
+        this.email = email;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public Long getAccountId() {
+        return accountId;
+    }
+
+    public void setAccountId(Long accountId) {
+        this.accountId = accountId;
+    }
+}

+ 27 - 27
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/PowerDTO.java

@@ -6,15 +6,15 @@ public class PowerDTO {
     private Long groupId;
     private String moduleName;
     private String groupName;
-    private boolean query;
-    private boolean add;
-    private boolean update;
-    private boolean delete;
-    private boolean audit;
-    private boolean unAudit;
-    private boolean print;
-    private boolean fileExport;
-    private boolean fileImport;
+    private Boolean query;
+    private Boolean add;
+    private Boolean update;
+    private Boolean delete;
+    private Boolean audit;
+    private Boolean unAudit;
+    private Boolean print;
+    private Boolean fileExport;
+    private Boolean fileImport;
     private List<OtherPowerDTO> other;
 
     public Long getGroupId() {
@@ -41,75 +41,75 @@ public class PowerDTO {
         this.moduleName = moduleName;
     }
 
-    public boolean getQuery() {
+    public Boolean getQuery() {
         return query;
     }
 
-    public void setQuery(boolean query) {
+    public void setQuery(Boolean query) {
         this.query = query;
     }
 
-    public boolean getAdd() {
+    public Boolean getAdd() {
         return add;
     }
 
-    public void setAdd(boolean add) {
+    public void setAdd(Boolean add) {
         this.add = add;
     }
 
-    public boolean getUpdate() {
+    public Boolean getUpdate() {
         return update;
     }
 
-    public void setUpdate(boolean update) {
+    public void setUpdate(Boolean update) {
         this.update = update;
     }
 
-    public boolean getDelete() {
+    public Boolean getDelete() {
         return delete;
     }
 
-    public void setDelete(boolean delete) {
+    public void setDelete(Boolean delete) {
         this.delete = delete;
     }
 
-    public boolean getAudit() {
+    public Boolean getAudit() {
         return audit;
     }
 
-    public void setAudit(boolean audit) {
+    public void setAudit(Boolean audit) {
         this.audit = audit;
     }
 
-    public boolean getUnAudit() {
+    public Boolean getUnAudit() {
         return unAudit;
     }
 
-    public void setUnAudit(boolean unAudit) {
+    public void setUnAudit(Boolean unAudit) {
         this.unAudit = unAudit;
     }
 
-    public boolean getPrint() {
+    public Boolean getPrint() {
         return print;
     }
 
-    public void setPrint(boolean print) {
+    public void setPrint(Boolean print) {
         this.print = print;
     }
 
-    public boolean getFileExport() {
+    public Boolean getFileExport() {
         return fileExport;
     }
 
-    public void setFileExport(boolean fileExport) {
+    public void setFileExport(Boolean fileExport) {
         this.fileExport = fileExport;
     }
 
-    public boolean getFileImport() {
+    public Boolean getFileImport() {
         return fileImport;
     }
 
-    public void setFileImport(boolean fileImport) {
+    public void setFileImport(Boolean fileImport) {
         this.fileImport = fileImport;
     }
 

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

@@ -251,6 +251,24 @@ public class AccountController {
         return Result.success();
     }
 
+    /**
+     * 个人账户绑定角色
+     * @param accountId
+     * @param roleIds
+     * @return
+     */
+    @PostMapping("/bind/roles")
+    public Result bindRoles(@RequestParam long accountId, @RequestParam String roleIds) {
+        accountService.bindRoles(accountId, roleIds);
+        accountService.clearCache(accountId);
+        return Result.success();
+    }
+
+    @GetMapping("/accountRole/list")
+    public Result getAccountRole(){
+        return Result.success(accountService.selectAccountRole());
+    }
+
     /**
      * 解除个人账户绑定角色
      *

+ 5 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountRoleMapper.java

@@ -1,7 +1,10 @@
 package com.usoftchina.saas.account.mapper;
 
+import com.usoftchina.saas.account.dto.AccountRoleDTO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author yingp
  * @date 2018/10/2
@@ -45,4 +48,6 @@ public interface AccountRoleMapper {
      * @param roleId
      */
     void deleteByRoleId(@Param("roleId") Long roleId);
+
+    List<AccountRoleDTO> selectAccountRole();
 }

+ 7 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.mapper;
 
 import com.usoftchina.saas.account.po.OtherPower;
+import com.usoftchina.saas.account.po.PowerInfo;
 import com.usoftchina.saas.account.po.RoleResource;
 import org.apache.ibatis.annotations.Param;
 
@@ -62,6 +63,12 @@ public interface RoleResourceMapper {
      */
     List<Map<String, Object>> selectClassifyByRoleId(@Param("id") Long id);
 
+    /**
+     * 查询所有的ClassIfy
+     * @return
+     */
+    List<PowerInfo> selectPowerInfo();
+
     /**
      * 查询其他权限
      * @return

+ 43 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/po/PowerInfo.java

@@ -0,0 +1,43 @@
+package com.usoftchina.saas.account.po;
+
+import java.io.Serializable;
+
+public class PowerInfo implements Serializable {
+
+    private String classify;
+    private Long groupId;
+    private String groupName;
+    private String moduleName;
+
+    public String getClassify() {
+        return classify;
+    }
+
+    public void setClassify(String classify) {
+        this.classify = classify;
+    }
+
+    public Long getGrougId() {
+        return groupId;
+    }
+
+    public void setGrougId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public String getModuleName() {
+        return moduleName;
+    }
+
+    public void setModuleName(String moduleName) {
+        this.moduleName = moduleName;
+    }
+}

+ 15 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.account.service;
 
+import com.usoftchina.saas.account.dto.AccountRoleDTO;
 import com.usoftchina.saas.account.po.Account;
 import com.usoftchina.saas.account.po.RoleResource;
 
@@ -108,6 +109,20 @@ public interface AccountService {
      */
     void bindRole(Long accountId, Long roleId);
 
+    /**
+     * 绑定个人账号与多个角色
+     *
+     * @param accountId
+     * @param roleIds
+     */
+    void bindRoles(Long accountId, String roleIds);
+
+    /**
+     * 账号+角色信息列表
+     * @return
+     */
+    List<AccountRoleDTO> selectAccountRole();
+
     /**
      * 解除个人账号与角色的绑定
      *

+ 14 - 0
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.service.impl;
 
 import com.usoftchina.saas.account.cache.AccountCache;
+import com.usoftchina.saas.account.dto.AccountRoleDTO;
 import com.usoftchina.saas.account.mapper.AccountCompanyMapper;
 import com.usoftchina.saas.account.mapper.AccountMapper;
 import com.usoftchina.saas.account.mapper.AccountRoleMapper;
@@ -113,6 +114,19 @@ public class AccountServiceImpl implements AccountService {
         }
     }
 
+    @Override
+    public void bindRoles(Long accountId, String roleIds) {
+        String[] array = roleIds.split(",");
+        for (int i = 0; i < array.length; i++){
+            bindRole(accountId, Long.parseLong(array[i]));
+        }
+    }
+
+    @Override
+    public List<AccountRoleDTO> selectAccountRole(){
+        return accountRoleMapper.selectAccountRole();
+    }
+
     @Override
     public void unbindRole(Long accountId, Long roleId) {
         accountRoleMapper.delete(accountId, roleId);

+ 34 - 13
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java

@@ -92,8 +92,29 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
     public List<PowerDTO> getResourcePowerById(Long id) {
         List<PowerDTO> powerDTOList = new ArrayList<PowerDTO>();
         List<Map<String, Object>> classifyList = roleResourceMapper.selectClassifyByRoleId(id);
+        List<PowerInfo> powerInfoList = roleResourceMapper.selectPowerInfo();
         List<OtherPower> otherPowerList = roleResourceMapper.selectOthersPower();
-        //查询所有模块
+
+        for (PowerInfo powerInfo : powerInfoList){
+            PowerDTO powerDTO = new PowerDTO();
+            powerDTO.setGroupId(powerInfo.getGrougId());
+            powerDTO.setModuleName(powerInfo.getModuleName());
+            powerDTO.setGroupName(powerInfo.getGroupName());
+            //赋值默认权限,在权限列表中的资源默认置为false
+            setPowerValue(powerDTO, powerInfo.getClassify(), false);
+            //赋值权限
+            for (Map<String, Object> map : classifyList){
+                if (powerInfo.getGrougId().equals(map.get("group_id"))){
+                    String classify = String.valueOf(map.get("classify"));
+                    //角色有权限的,设置为true
+                    setPowerValue(powerDTO, classify, true);
+                    setOtherPower(powerDTO, powerInfo.getGrougId(), id, otherPowerList);
+                }
+            }
+            powerDTOList.add(powerDTO);
+        }
+
+        /*//查询所有模块
         List<ResourceModule> modules = resourceModuleMapper.selectByAppId(BaseContextHolder.getAppId());
         for (ResourceModule module : modules){
             //查询所有分组
@@ -113,7 +134,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
                 }
                 powerDTOList.add(powerDTO);
             }
-        }
+        }*/
         return powerDTOList;
     }
 
@@ -174,37 +195,37 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         powerDTO.setOther(otherPowerDTOList);
     }
 
-    private void setPowerValue(PowerDTO powerDTO, String classify) {
+    private void setPowerValue(PowerDTO powerDTO, String classify , boolean status) {
         String[] array = classify.split(",");
         for(int i = 0; i < array.length; i++){
             switch (array[i]){
                 case "QUERY":
-                    powerDTO.setQuery(true);
-                    powerDTO.setFileExport(true);
+                    powerDTO.setQuery(status);
+                    powerDTO.setFileExport(status);
                     break;
                 case "ADD":
-                    powerDTO.setAdd(true);
+                    powerDTO.setAdd(status);
                     break;
                 case "UPDATE":
-                    powerDTO.setUpdate(true);
+                    powerDTO.setUpdate(status);
                     break;
                 case "AUDIT":
-                    powerDTO.setAudit(true);
+                    powerDTO.setAudit(status);
                     break;
                 case "UNAUDIT":
-                    powerDTO.setUnAudit(true);
+                    powerDTO.setUnAudit(status);
                     break;
                 case "DELETE":
-                    powerDTO.setDelete(true);
+                    powerDTO.setDelete(status);
                     break;
                 case "PRINT":
-                    powerDTO.setPrint(true);
+                    powerDTO.setPrint(status);
                     break;
                 case "EXPORT":
-                    powerDTO.setFileExport(true);
+                    powerDTO.setFileExport(status);
                     break;
                 case "IMPORT":
-                    powerDTO.setFileImport(true);
+                    powerDTO.setFileImport(status);
                     break;
                 default:
                     break;

+ 7 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountRoleMapper.xml

@@ -16,4 +16,11 @@
     <delete id="deleteByCompanyId" parameterType="java.lang.Long">
         delete from ac_account_role where company_id=#{companyId}
     </delete>
+    <select id="selectAccountRole" resultType="com.usoftchina.saas.account.dto.AccountRoleDTO">
+        SELECT a.id id,a.username,a.realname,a.email,a.mobile,GROUP_CONCAT(c.name) roleNames,GROUP_CONCAT(c.id) roleIds
+        FROM ac_account a
+        left join ac_account_role b on a.id=b.account_id
+        left join ac_role c  on b.role_id = c.id
+        group by a.id,a.username,a.realname,a.email,a.mobile
+    </select>
 </mapper>

+ 8 - 0
base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml

@@ -31,6 +31,14 @@
           GROUP BY GROUP_ID,CLASSIFY) A
         GROUP BY GROUP_ID
     </select>
+    <select id="selectPowerInfo" parameterType="java.lang.Long" resultType="com.usoftchina.saas.account.po.PowerInfo">
+        SELECT GROUP_CONCAT(classify) classify,group_id groupId,groupname,modulename FROM (
+          SELECT classify,group_id,s.name groupname,M.NAME modulename FROM AC_RESOURCE R
+				LEFT JOIN AC_RESOURCE_GROUP S ON R.GROUP_ID = S.ID
+				LEFT JOIN AC_RESOURCE_MODULE M ON S.MODULE_ID = M.ID
+          GROUP BY GROUP_ID,CLASSIFY,s.name,M.NAME) A
+        GROUP BY GROUP_ID,groupname,modulename
+    </select>
     <resultMap id="OtherPowerResultMap" type="com.usoftchina.saas.account.po.OtherPower">
         <result column="name" property="name" jdbcType="VARCHAR" />
         <result column="id" property="resourceId" jdbcType="BIGINT" />

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

@@ -42,7 +42,7 @@ public class AuthRestInterceptor extends HandlerInterceptorAdapter {
                 JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, authConfig.getPublicKey());
                 BaseContextHolder.setAppId(infoFromToken.getAppId());
                 BaseContextHolder.setUserId(infoFromToken.getUserId());
-                BaseContextHolder.setUserName(infoFromToken.getUserName());
+                BaseContextHolder.setUserName(infoFromToken.getRealName());
                 BaseContextHolder.setCompanyId(infoFromToken.getCompanyId());
                 BaseContextHolder.setToken(token);
                 log.info("request={} token={} \\r\\n userName={}", request.getRequestURI(),

+ 3 - 1
base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtHelper.java

@@ -41,6 +41,7 @@ public class JwtHelper {
                             .claim("userId", jwtInfo.getUserId())
                             .claim("companyId", jwtInfo.getCompanyId())
                             .claim("userName", jwtInfo.getUserName())
+                            .claim("realName", jwtInfo.getRealName())
                             .setExpiration(DateTime.now().plusSeconds(expire).toDate())
                             // 设置算法(必须)
                             .signWith(SignatureAlgorithm.RS256, RsaUtils.getPrivateKey(priKeyPath))
@@ -97,7 +98,8 @@ public class JwtHelper {
                 ObjectUtils.getStringValue(body.get("appId")),
                 ObjectUtils.getLongValue(body.get("companyId")),
                 ObjectUtils.getLongValue(body.get("userId")),
-                ObjectUtils.getStringValue(body.get("userName"))
+                ObjectUtils.getStringValue(body.get("userName")),
+                ObjectUtils.getStringValue(body.get("realName"))
         );
     }
 }

+ 11 - 1
base-servers/auth/auth-common/src/main/java/com/usoftchina/saas/auth/common/jwt/JwtInfo.java

@@ -11,12 +11,22 @@ public class JwtInfo implements Serializable{
     private Long companyId;
     private Long userId;
     private String userName;
+    private String realName;
 
-    public JwtInfo(String appId, Long companyId, Long userId, String userName) {
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public JwtInfo(String appId, Long companyId, Long userId, String userName, String realName) {
         this.appId = appId;
         this.companyId = companyId;
         this.userId = userId;
         this.userName = userName;
+        this.realName = realName;
     }
 
     public String getAppId() {

+ 2 - 2
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java

@@ -82,7 +82,7 @@ public class AuthController {
             // TODO
             String appId = "trade-app";
 
-            JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername());
+            JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername(), accountDTO.getRealname());
             TokenVO tokenVO = JwtHelper.generateToken(info, privateKeyPath, expire);
             TokenDTO tokenDTO = BeanMapper.map(tokenVO, TokenDTO.class);
             // 登录日志
@@ -112,7 +112,7 @@ public class AuthController {
         JwtInfo infoFromToken = JwtHelper.getInfoFromToken(token, publicKeyPath);
         if (isCompanyAvailable(infoFromToken, companyId)) {
             JwtInfo info = new JwtInfo(infoFromToken.getAppId(), companyId, infoFromToken.getUserId(),
-                    infoFromToken.getUserName());
+                    infoFromToken.getUserName(), infoFromToken.getRealName());
             TokenVO tokenVO = JwtHelper.generateToken(info, privateKeyPath, expire);
             return Result.success(BeanMapper.map(tokenVO, TokenDTO.class));
         }

+ 1 - 1
base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java

@@ -49,7 +49,7 @@ public class AuthFilter implements GlobalFilter, Ordered {
                 BaseContextHolder.setAppId(jwt.getAppId());
                 BaseContextHolder.setUserId(jwt.getUserId());
                 BaseContextHolder.setCompanyId(jwt.getCompanyId());
-                BaseContextHolder.setUserName(jwt.getUserName());
+                BaseContextHolder.setUserName(jwt.getRealName());
                 BaseContextHolder.setToken(token);
                 AccountDTO accountDTO = AccountCache.current().getAccount();
                 if (null == accountDTO) {

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

@@ -176,5 +176,4 @@ auth:
   ignores:
     - /api/auth/authorize
     - /api/account/account/register
-    - /api/account/company/register
     - /api/auth/info

+ 1 - 0
base-servers/mail/mail-dto/src/main/java/com/usoftchina/saas/mail/dto/TemplateMailMessage.java

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.mail.dto;
 
 import java.io.Serializable;
+import java.util.Arrays;
 import java.util.Map;
 
 /**

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

@@ -155,7 +155,7 @@ Ext.define('saas.view.document.bom.FormPanel', {
                 dataIndex : "bd_baseqty",
                 editor : {
                     xtype : "numberfield",
-                    decimalPrecision: 3,
+                    decimalPrecision: 0,
                     minValue:0
                 },
                 renderer : function(v) {

+ 4 - 5
frontend/saas-web/app/view/document/customer/BasePanel.js

@@ -101,7 +101,7 @@ Ext.define('saas.view.document.customer.BasePanel', {
         columns : [
         {
             text : "客户id", 
-            width : 0, 
+            hidden:true,
             dataIndex : "id", 
             xtype : "numbercolumn", 
         },{
@@ -160,22 +160,21 @@ Ext.define('saas.view.document.customer.BasePanel', {
         },{
             text : "客户状态", 
             dataIndex : "cu_status", 
-            flex : 1.0
         }, 
         {
             text : "客户状态码", 
             dataIndex : "cu_statuscode", 
-            width : 0 
+            hidden:true
         }, 
         {
             text : "默认客户地址", 
             dataIndex : "ca_address", 
-            width : 0 
+            hidden:true
         }, 
         {
             text : "默认客户联系人", 
             dataIndex : "cc_name", 
-            width : 0
+            hidden:true
         }]
     },
 

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

@@ -204,7 +204,7 @@ Ext.define('saas.view.document.product.FormPanel', {
         detnoColumn: 'pd_detno',
         showCount: false,
         allowEmpty:true,
-        deleteDetailUrl:'/api/document/customer/delete/',
+        deleteDetailUrl:'/api/document/product/deleteDetail/',
         columns : [{
             text : "ID", 
             dataIndex : "id", 

+ 6 - 0
frontend/saas-web/app/view/home/InfoCard.scss

@@ -40,6 +40,10 @@ $max-card-width: 235px;
             }
         }
     }
+
+    .x-toolbar-default-vertical {
+        padding: 0;
+    }
 }
 
 .x-scroller-button {
@@ -61,11 +65,13 @@ $max-card-width: 235px;
 .x-scroller-button-left {
     left: 0;
     background-image: url('images/default/arrows-left.png') !important;
+    background-position-x: 10px !important;
 }
 
 .x-scroller-button-right {
     right: 0;
     background-image: url('images/default/arrows-right.png') !important;
+    background-position-x: 4px !important;
 }
 
 .x-btn-over.x-btn-default-small.x-scroller-button-left,

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

@@ -29,6 +29,7 @@ Ext.define('saas.view.main.Main', {
                 {
                     xtype: 'component',
                     reference: 'mainLogo',
+                    width: 180,
                     cls: 'main-logo-wrap',
                     html: '<div class="main-logo"><img src="resources/images/default/logo-default.png"/><div class="logo-text">优企云服</div></div>',
                     bind: {

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

@@ -5,6 +5,8 @@ Ext.define('saas.view.main.Navigation', {
 
     reference: 'navigationTreeList',
 
+    width: 180,
+
     navCollapsed: false,
     cls: 'x-navpanel',
 

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

@@ -118,6 +118,7 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         }, {
             text: '资金账户',
             dataIndex: 'pd_bankname',
+            allowBlank : false,
             editor:{
                 xtype:'dbfindtrigger'
             }

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

@@ -123,6 +123,7 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
         }, {
             text: '资金账户',
             dataIndex: 'rd_bankname',
+            allowBlank : false,
             width: 200,
             editor:{
                 xtype:'dbfindtrigger'

+ 46 - 8
frontend/saas-web/app/view/sale/report/SaleProfit.js

@@ -77,36 +77,74 @@ Ext.define('saas.view.sale.report.SaleProfit', {
         dataIndex: 'pr_spec'
     }, {
         text: '单位',
-        xtype: 'numbercolumn',
         dataIndex: 'pr_unit'
     }, {
         text: '数量',
         dataIndex: 'pd_outqty',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer : function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');
+            var format = '0.' + xr.join();
+            return Ext.util.Format.number(v, format);
+        }
     }, {
         text: '单价',
         dataIndex: 'pd_sendprice',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join();
+            return Ext.util.Format.number(v, format);
+        }
     }, {
         text: '税率%',
         dataIndex: 'pd_taxrate',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            return Ext.util.Format.number(v, '0');
+        }
     }, {
         text: '含税金额',
         dataIndex: 'pd_ordertotal',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join();
+            return Ext.util.Format.number(v, format);
+        }
     }, {
         text: '成本金额',
         dataIndex: 'pd_total',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join();
+            return Ext.util.Format.number(v, format);
+        }
     }, {
         text: '毛利润',
         dataIndex: 'pd_profit',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer: function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join();
+            return Ext.util.Format.number(v, format);
+        }
     }, {
         text: '毛利率%',
         dataIndex: 'pd_profitpresent',
-        xtype: 'numbercolumn'
+        xtype: 'numbercolumn',
+        renderer : function(v) {
+            var arr = (v*100 + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0.' + xr.join();
+            return Ext.util.Format.number(v*100, format);
+        }
     }, {
         text : "备注", 
         dataIndex : "pd_text1",

+ 1 - 1
frontend/saas-web/app/view/stock/appropriationInOut/FormPanel.js

@@ -140,7 +140,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanel', {
             {
                 text : "数量", 
                 xtype: 'numbercolumn',
-                dataIndex : "pd_inqty", 
+                dataIndex : "pd_outqty", 
                 width : 120.0,
                 allowBlank:false,
                 editor : {

+ 32 - 23
frontend/saas-web/app/view/stock/appropriationInOut/FormPanelController.js

@@ -178,34 +178,43 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                 }
             },           
             //放大镜赋值关系 以及 tpl模板
-            'multidbfindtrigger[name=pd_prodcode]':{
-                beforerender:function(f){
-                    Ext.apply(f,{
-                        dataUrl:'/api/document/product/list',
+            'multidbfindtrigger[name=pd_prodcode]': {
+                beforerender: function (f) {
+                    Ext.apply(f, {
+                        dataUrl: '/api/document/product/list',
                         // dataUrl:'http://localhost:9480/product/list',
                         addXtype: 'document-product-formpanel',
                         addTitle: '物料资料',
-                        dbfinds:[{
-                            from:'id',to:'pd_prodid'                          
-                        },{
-                            from:'pr_code',to:'pd_prodcode'                          
-                        },{
-                            from:'pr_detail',to:'pr_detail'
-                        },{
-                            from:'pr_spec',to:'pr_spec'
+                        dbfinds: [{
+                            from: 'id',
+                            to: 'pd_prodid',ignore:true
+                        }, {
+                            from: 'pr_code',
+                            to: 'pd_prodcode'
+                        }, {
+                            from: 'pr_detail',
+                            to: 'pr_detail'
+                        }, {
+                            from: 'pr_spec',
+                            to: 'pr_spec'
                         },{
                             from:'pr_whid',to:'pd_whid'
                         },{
                             from:'pr_whcode',to:'pd_whcode'
                         },{
                             from:'pr_whname',to:'pd_whname'
-                        }],
-                        dbtpls:[{
-                            field:'pr_code',width:100
-                        },{
-                            field:'pr_detail',width:100
                         },{
-                            field:'pr_spec',width:100
+                            from:'pr_purcprice',to:'pd_orderprice'
+                        }],
+                        dbtpls: [{
+                            field: 'pr_code',
+                            width: 100
+                        }, {
+                            field: 'pr_detail',
+                            width: 100
+                        }, {
+                            field: 'pr_spec',
+                            width: 100
                         }],
                         defaultCondition: "pr_statuscode='OPEN'",
                         dbSearchFields:[{
@@ -218,7 +227,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                             },
                             allowBlank : true, 
                             columnWidth : 0.25
-                        }],                   
+                        }],                        
                         dbColumns:[{
                             "text": "物料ID",
                             "hidden": true,
@@ -259,7 +268,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                             xtype: 'numbercolumn',
                             renderer : function(v) {
                                 var arr = (v + '.').split('.');
-                                var xr = (new Array(arr[1].length)).fill('0');
+                                var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');
                                 var format = '0,000.' + xr.join();
                                 return Ext.util.Format.number(v, format);
                             },                            
@@ -285,13 +294,13 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                             "dataIndex": "pr_zxbzs",
                             "width": 100,
                             xtype: 'numbercolumn',
-                            align:'end'
+                            align: 'end'
                         },{
                             "text": "L/T",
                             "dataIndex": "pr_leadtime",
                             "width": 100,
                         }]
-                    }) ;   
+                    });
 
                 }
             },
@@ -355,7 +364,7 @@ Ext.define('saas.view.stock.appropriationInOut.FormPanelController', {
                 }) ;   
 
             }
-        },           
+            },           
         //放大镜赋值关系 以及 tpl模板
         'dbfindtrigger[name=pd_inwhname]':{
             beforerender:function(f){

+ 12 - 0
frontend/saas-web/app/view/sys/config/FormPanel.js

@@ -125,6 +125,18 @@ Ext.define('saas.view.sys.config.FormPanel', {
         buttonConfig: {
             iconCls: 'x-fa fa-picture-o'
         }
+    },{  
+        bind:'{en_logo}',
+        name : "en_logo", 
+        fieldLabel : "Logo上传", 
+        allowBlank : false, 
+        columnWidth : 0.33,
+        xtype: 'filefield',
+        emptyText: '请选择图片',
+        buttonText: '',
+        buttonConfig: {
+            iconCls: 'x-fa fa-picture-o'
+        }
     },{  
         ignore:true,
         bind:'{updateTime}',