rainco 7 år sedan
förälder
incheckning
baacbce11a
73 ändrade filer med 684 tillägg och 242 borttagningar
  1. 7 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/BillCodeSeq.java
  2. 3 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ConfigsServiceImpl.java
  3. 2 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/EndProductServiceImpl.java
  4. 82 28
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ExcelServiceImpl.java
  5. 10 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java
  6. 34 9
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  7. 7 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  8. 4 3
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  9. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductMapper.xml
  10. 27 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/AccountDetailsView.java
  11. 12 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/CustomerCheckView.java
  12. 4 1
      applications/money/money-server/src/main/resources/mapper/AccountDetailsViewMapper.xml
  13. 1 1
      applications/money/money-server/src/main/resources/mapper/CustmonthMapper.xml
  14. 2 0
      applications/money/money-server/src/main/resources/mapper/CustomerCheckViewMapper.xml
  15. 1 1
      applications/money/money-server/src/main/resources/mapper/VendmonthMapper.xml
  16. 1 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java
  17. 8 2
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  18. 4 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  19. 4 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/po/report/SaleProfitView.java
  20. 2 0
      applications/sale/sale-server/src/main/resources/mapper/SaleProfitViewMapper.xml
  21. 1 0
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/Make.java
  22. 3 0
      applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/report/ProdiodetailView.java
  23. 12 4
      applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml
  24. 2 0
      applications/storage/storage-server/src/main/resources/mapper/ProdInOutReportMapper.xml
  25. 1 1
      framework/core/src/main/java/com/usoftchina/saas/exception/ExceptionCode.java
  26. 1 1
      framework/core/src/main/java/com/usoftchina/saas/utils/RegexpUtils.java
  27. 36 27
      frontend/saas-portal-web/src/components/conenter/addenterprise.vue
  28. 7 7
      frontend/saas-portal-web/src/components/conenter/company.vue
  29. 5 2
      frontend/saas-portal-web/src/components/conenter/details.vue
  30. 23 19
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  31. 1 3
      frontend/saas-portal-web/src/components/conenter/home.vue
  32. 1 1
      frontend/saas-portal-web/src/pages/index/index.vue
  33. 8 4
      frontend/saas-web/app/Application.scss
  34. 1 1
      frontend/saas-web/app/view/core/form/field/ConDateField.js
  35. 1 2
      frontend/saas-web/app/view/core/query/QueryGridPanel.scss
  36. 1 1
      frontend/saas-web/app/view/core/report/ReportPanel.js
  37. 4 0
      frontend/saas-web/app/view/document/bom/FormController.js
  38. 43 13
      frontend/saas-web/app/view/document/bom/FormPanel.js
  39. 1 1
      frontend/saas-web/app/view/home/charts/MonthIO.js
  40. 1 1
      frontend/saas-web/app/view/home/charts/ProfitDetail.js
  41. 1 1
      frontend/saas-web/app/view/home/charts/SaleTrend.js
  42. 1 1
      frontend/saas-web/app/view/home/charts/StockAmount.js
  43. 21 2
      frontend/saas-web/app/view/main/Main.js
  44. 14 7
      frontend/saas-web/app/view/main/Main.scss
  45. 87 1
      frontend/saas-web/app/view/main/MainController.js
  46. 7 8
      frontend/saas-web/app/view/main/Navigation.js
  47. 41 9
      frontend/saas-web/app/view/main/Navigation.scss
  48. 4 1
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  49. 59 7
      frontend/saas-web/app/view/money/payBalance/FormPanelController.js
  50. 4 1
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  51. 53 1
      frontend/saas-web/app/view/money/recBalance/FormPanelController.js
  52. 8 8
      frontend/saas-web/app/view/money/report/AccountDetails.js
  53. 2 2
      frontend/saas-web/app/view/money/report/OtherIODetail.js
  54. 1 1
      frontend/saas-web/app/view/purchase/report/Purchase.js
  55. 6 7
      frontend/saas-web/app/view/purchase/report/PurchasePay.js
  56. 1 1
      frontend/saas-web/app/view/sale/report/Sale.js
  57. 1 1
      frontend/saas-web/app/view/stock/otherIn/QueryPanel.js
  58. 3 3
      frontend/saas-web/app/view/stock/otherOut/FormPanel.js
  59. 1 1
      frontend/saas-web/app/view/stock/otherOut/QueryPanel.js
  60. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中粗-简.ttf
  61. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中粗-繁.ttf
  62. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中黑-简.ttf
  63. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中黑-繁.ttf
  64. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-准-简.ttf
  65. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-准-繁.ttf
  66. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-极细-简.ttf
  67. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-极细-繁.ttf
  68. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-纤细-简.ttf
  69. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-纤细-繁.ttf
  70. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-细-简.ttf
  71. BIN
      frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-细-繁.ttf
  72. 0 1
      frontend/saas-web/packages/local/theme-default/sass/etc/all.scss
  73. 0 35
      frontend/saas-web/packages/local/theme-default/sass/etc/fontset.scss

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

@@ -50,6 +50,13 @@ public enum  BillCodeSeq {
 
     FUNDTRANSFER ("资金转存","FundTransfer"),
 
+    CONFIGS("参数配置", "Configs"),
+
+    ENDPRODUCT ("结账", "ENDPRODUCT"),
+
+    UNENDPRODUCT ("反结账", "UNENDPRODUCT"),
+
+
     BOM("BOM资料", "Bom");
 
 

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

@@ -97,5 +97,8 @@ public class ConfigsServiceImpl implements ConfigsService{
             con.setCompanyId(BaseContextHolder.getCompanyId());
             configsMapper.updateByCodeSelective(con);
         }
+        DocBaseDTO baseDTO = new DocBaseDTO(null, "Configs", "Configs");
+        //日志记录
+        messageLogService.update(baseDTO);
     }
 }

+ 2 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/EndProductServiceImpl.java

@@ -69,7 +69,7 @@ public class EndProductServiceImpl implements EndProductService {
         endProductMapper.end(map);
         endProductMapper.updatePeriodStatus(99L, period, BaseContextHolder.getCompanyId());
         DocBaseDTO docBaseDTO = generateMsgObj(Long.parseLong(period));
-        messageLogService.customizeLog(docBaseDTO, Operation.ENDPRODUCT);
+        messageLogService.customizeLog(new DocBaseDTO(Long.valueOf(period), period, "ENDPRODUCT"), Operation.ENDPRODUCT);
         return String.valueOf(map.get("result"));
     }
 
@@ -90,7 +90,7 @@ public class EndProductServiceImpl implements EndProductService {
             endProductMapper.updateRe(period, BaseContextHolder.getCompanyId());
             endProductMapper.updatePa(period, BaseContextHolder.getCompanyId());
             endProductMapper.updatePeriodStatus(0L, period, BaseContextHolder.getCompanyId());
-            messageLogService.customizeLog(generateMsgObj(Long.parseLong(period)), Operation.UNENDPRODUCT);
+            messageLogService.customizeLog(new DocBaseDTO(Long.valueOf(period), period, "UNENDPRODUCT"), Operation.UNENDPRODUCT);
         }
     }
     /**

+ 82 - 28
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ExcelServiceImpl.java

@@ -149,6 +149,10 @@ public class ExcelServiceImpl implements ExcelService{
             StringBuilder err = new StringBuilder();
             JSONArray mains = new JSONArray();
             JSONArray details = new JSONArray();
+            //联系人
+            JSONObject contact = new JSONObject();
+            //地址
+            JSONObject address = new JSONObject();
             //数据行循环
             for (int i = 0; i < datas.size(); i++) {
                 Map<String,String> data = datas.get(i);
@@ -157,13 +161,13 @@ public class ExcelServiceImpl implements ExcelService{
                 String value = null;
                 JSONObject mainData = null;
                 JSONObject detailData = null;
+                //标识是否一个主表的数据
+                boolean difference = true;
                 dd.setCompanyid(companyId);
                 dd.setDd_diid(keyvalue);
                 //主从表循环
                 for (int j = 0; j < positions.size(); j++) {
                    String position = positions.get(j);
-                    //标识是否一个主表的数据
-                   boolean difference = true;
                     //依据主从表分类
                    if ("main".equals(position)) {
                        List<TempletSet> main = columns.get(position);
@@ -224,40 +228,90 @@ public class ExcelServiceImpl implements ExcelService{
                        //从表字段
                        List<TempletSet> detail = columns.get(position);
                        detailData = new JSONObject();
-                       for (TempletSet set : detail) {
-                           //取excel值
-                           value = data.get(set.getDescription());
-                           if ("true".equals(set.getNecessary()) && StringUtils.isEmpty(value)) {
-                               detailData = null;
-                               //err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
-                               break;
+                       //客户资料导入特殊处理
+                       if ("Customer".equals(caller)) {
+                           if (!difference) {
+                               throw new BizException(987654, "第" + (i + 3) + "行 " + "客户资料导入时,从表最多存在一条记录");
                            }
-                           //检测日期类型是否规范
-                           if ("date".equals(set.getType()) && !StringUtils.isEmpty(value)) {
-                               value = praseDate(value);
-                               if (null == value) {
-                                   err.append("第" + (i + 3) + "行 " + set.getDescription() + " 日期格式不正确!<br/> ");
+                           for (TempletSet set : detail) {
+                               //取excel值
+                               value = data.get(set.getDescription());
+                               if ("true".equals(set.getNecessary()) && StringUtils.isEmpty(value)) {
+                                   err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
                                    break;
                                }
+                               //检测日期类型是否规范
+                               if ("date".equals(set.getType()) && !StringUtils.isEmpty(value)) {
+                                   value = praseDate(value);
+                                   if (null == value) {
+                                       err.append("第" + (i + 3) + "行 " + set.getDescription() + " 日期格式不正确!<br/> ");
+                                       break;
+                                   }
+                               }
+                               //如果为数字类型且为空默认赋值0,检测是否为数字类型
+                               if ("number".equals(set.getType())) {
+                                   if (StringUtils.isEmpty(value)) {
+                                       value = "0";
+                                   } else {
+                                       Boolean numner = isNumner(value);
+                                       if (!numner) {
+                                           err.append("第" + (i + 3) + "行 " + set.getDescription() + " 数字格式不正确!<br/> ");
+                                           break;
+                                       }
+                                   }
+                               }
+                               if (StringUtils.hasText(value) && !"0".equals(value)) {
+                                   if ("contact".equals(set.getPosition())) {
+                                       contact.put(set.getField(), value);
+                                   } else {
+                                       address.put(set.getField(), value);
+                                   }
+                               }
                            }
-                           //如果为数字类型且为空默认赋值0,检测是否为数字类型
-                           if ("number".equals(set.getType())) {
-                               if (StringUtils.isEmpty(value)) {
-                                   value = "0";
-                               } else {
-                                   Boolean numner = isNumner(value);
-                                   if (!numner) {
-                                       err.append("第" + (i + 3) + "行 " + set.getDescription() + " 数字格式不正确!<br/> ");
+                           if (contact.size() > 0 && address.size() > 0) {
+                               dd.setDd_codevalue(codeValue);
+                               detailData.put("contact", contact);
+                               detailData.put("address", address);
+                               dd.setDd_detaildata(detailData.toJSONString());
+                           }
+                       } else {
+                           for (TempletSet set : detail) {
+                               //取excel值
+                               value = data.get(set.getDescription());
+                               if ("true".equals(set.getNecessary()) && StringUtils.isEmpty(value)) {
+                                   detailData = null;
+                                   //err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
+                                   break;
+                               }
+                               //检测日期类型是否规范
+                               if ("date".equals(set.getType()) && !StringUtils.isEmpty(value)) {
+                                   value = praseDate(value);
+                                   if (null == value) {
+                                       err.append("第" + (i + 3) + "行 " + set.getDescription() + " 日期格式不正确!<br/> ");
                                        break;
                                    }
                                }
+                               //如果为数字类型且为空默认赋值0,检测是否为数字类型
+                               if ("number".equals(set.getType())) {
+                                   if (StringUtils.isEmpty(value)) {
+                                       value = "0";
+                                   } else {
+                                       Boolean numner = isNumner(value);
+                                       if (!numner) {
+                                           err.append("第" + (i + 3) + "行 " + set.getDescription() + " 数字格式不正确!<br/> ");
+                                           break;
+                                       }
+                                   }
+                               }
+                               //拼从表数据
+                               if (StringUtils.hasText(value) && !"0".equals(value)) {
+                                   detailData.put(set.getField(), value);
+                               }
+                           }
+                           if (null != detailData && detailData.size() > 0) {
+                               dd.setDd_codevalue(codeValue);
+                               dd.setDd_detaildata(detailData.toJSONString());
                            }
-                           //拼从表数据
-                           detailData.put(set.getField(), value);
-                       }
-                       if (null != detailData && detailData.size() > 0) {
-                           dd.setDd_codevalue(codeValue);
-                           dd.setDd_detaildata(detailData.toJSONString());
                        }
                    }
                 }

+ 10 - 2
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BankinformationServiceImpl.java

@@ -58,6 +58,7 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
         bankinformation.setCreatorId(BaseContextHolder.getUserId());
         bankinformation.setCreatorName(BaseContextHolder.getUserName());
         int bid = Math.toIntExact(bankinformation.getId());
+        DocBaseDTO docBaseDTO = new DocBaseDTO();
 
         String bk_code = RegexpUtils.replaceSpecCharacter(bankinformation.getBk_bankcode());
         String code = pushMaxnubmer(bk_code, bankinformation.getId());
@@ -72,9 +73,15 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
             bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
             bankinformation.setBk_bankcode(code);
             bankinformationMapper.insertSelective(bankinformation);
+
+            docBaseDTO.setId(bankinformation.getId());
+            docBaseDTO.setCode(code);
+            docBaseDTO.setName(BillCodeSeq.BANKINFORMATION.getCaller());
+            messageLogService.save(docBaseDTO);
             Banksubledger banksubledger = this.changBanksubledger(bankinformation);
             banksubledgerMapper.insertSelective(banksubledger);
         }else {
+            docBaseDTO = this.getBaseDTOById(bid);
             bankinformation.setUpdaterId(BaseContextHolder.getUserId());
             bankinformation.setUpdaterName(BaseContextHolder.getUserName());
             bankinformation.setUpdateTime(new Date());
@@ -83,7 +90,6 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
             Double fbeginamount = bankinformation.getBk_beginamount();
             bankinformation.setBk_thisamount(bankinformation.getBk_beginamount());
             if (!(fbeginamount.equals(beginamount))){
-                DocBaseDTO docBaseDTO = getBaseDTOById(bid);
                 Map<String, Object> map = new HashMap<String, Object>();
                 map.put("v_id",bid);
                 map.put("v_code", docBaseDTO.getCode());
@@ -101,11 +107,13 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
             if (bktion != null){
                 if (id.equals(bankinformation.getId())){
                     bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
+                    messageLogService.update(docBaseDTO);
                 }else {
                     throw new BizException(500, BizExceptionCode.ACCOUNT_EXISTS.getMessage());
                 }
             }else {
                 bankinformationMapper.updateByPrimaryKeySelective(bankinformation);
+                messageLogService.update(docBaseDTO);
             }
             Banksubledger banksubledger = this.changBanksubledger(bankinformation);
             banksubledgerMapper.updateByPrimaryKeySelective(banksubledger);
@@ -138,7 +146,7 @@ public class BankinformationServiceImpl extends CommonBaseServiceImpl<Bankinform
 
     private DocBaseDTO getBaseDTOById(int id) {
         String code = bankinformationMapper.selectByPrimaryKey(id).getBk_bankcode();
-        DocBaseDTO baseDTO = new DocBaseDTO(Long.valueOf(String.valueOf(id)), code, "BankInformation");
+        DocBaseDTO baseDTO = new DocBaseDTO(Long.valueOf(String.valueOf(id)), code, BillCodeSeq.BANKINFORMATION.getCaller());
         return baseDTO;
     }
     @Override

+ 34 - 9
applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java

@@ -516,7 +516,8 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
             Integer detno = null;
             for (String code : datas.keySet()) {
                 listDTO = new CustomerFormDTO();
-                List<CustomercontactDTO> details_ = new ArrayList<>();
+                List<CustomercontactDTO> details_1 = new ArrayList<>();
+                List<CustomeraddressDTO> details_2 = new ArrayList<>();
                 int i = getMapper().validateCodeWhenInsert(code, companyId);
                 List<DataImportDetail> data = datas.get(code);
                 DataImportDetail main = dataImportMapper.selectMainBycode(code, id, companyId);
@@ -552,18 +553,33 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
                 if (data.size() > 0) {
                     detno = 1;
                     for (DataImportDetail vendorDetail : data) {
-                        CustomercontactDTO detail = JSONObject.parseObject(vendorDetail.getDd_detaildata(), CustomercontactDTO.class);
-                        if (null != detail) {
-                            detail.setCc_cuid(customerDTO.getId());
-                            detail.setCc_detno(detno);
-                            detno++;
-                            details_.add(detail);
+                        JSONObject obj = (JSONObject)JSONObject.parse(vendorDetail.getDd_detaildata());
+                        if ( null != obj.get("contact")) {
+                            parseDefault((JSONObject) obj.get("contact"), "cc_default");
                         }
+                        //客户联系人
+                        CustomercontactDTO contact = JSONObject.parseObject(String.valueOf(obj.get("contact")), CustomercontactDTO.class);
+                        if (null != contact) {
+                            contact.setCc_cuid(customerDTO.getId());
+                            contact.setCc_detno(detno);
+                            details_1.add(contact);
+                        }
+                        if ( null != obj.get("address")) {
+                            parseDefault((JSONObject) obj.get("address"), "ca_default");
+                        }
+                        //送货地址
+                        CustomeraddressDTO address = JSONObject.parseObject(String.valueOf(obj.get("address")), CustomeraddressDTO.class);
+                        if (null != address) {
+                            address.setCa_cuid(customerDTO.getId());
+                            address.setCa_detno(detno);
+                            details_2.add(address);
+                        }
+                        detno++;
                     }
                 }
                 listDTO.setMain(customerDTO);
-                listDTO.setItems1(details_);
-                listDTO.setItems2(new ArrayList<CustomeraddressDTO>());
+                listDTO.setItems1(details_1);
+                listDTO.setItems2(details_2);
                 list.add(listDTO);
             }
             if (err.length() > 0) {
@@ -577,6 +593,15 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         }
     }
 
+    private void parseDefault(JSONObject obj, String field) {
+        Object def = obj.get(field);
+       if ("是".equals(def)) {
+           obj.put(field, 1);
+       }else {
+           obj.put(field, 0);
+       }
+
+    }
 
     private List<CustomerList> getListByMode(ListReqDTO req) {
         List<CustomerList> list = null;

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

@@ -154,9 +154,12 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                 //找到原始单据,反过账并删除
                 String inoutCode = getMapper().selectProdIOCode(product.getPr_code(), BaseContextHolder.getCompanyId(), "库存初始化");
                 if (!StringUtils.isEmpty(inoutCode)) {
-                    post(inoutCode, "反过账");
-                    getMapper().deleteProdIODetailByCode(inoutCode, BaseContextHolder.getCompanyId());
-                    getMapper().deleteProdIOByCode(inoutCode, BaseContextHolder.getCompanyId());
+                    String[] inoutArr = inoutCode.split(",");
+                    for (int i = 0;i<inoutArr.length;i++){
+                        post(inoutArr[i], "反过账");
+                        getMapper().deleteProdIODetailByCode(inoutArr[i], BaseContextHolder.getCompanyId());
+                        getMapper().deleteProdIOByCode(inoutArr[i], BaseContextHolder.getCompanyId());
+                    }
                 }
                 //此种情况不可能发生明细行数量,只会发生明细行数据修改/新增明细行
                 //a.更新明细行数据
@@ -774,6 +777,6 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             }
             //billCode = maxnumberService.pushMaxnubmer(count, code, BillCodeSeq.PRODUCT.getCaller()).getData();
         }
-        return billCode;
+        return code;
     }
 }

+ 4 - 3
applications/document/document-server/src/main/resources/mapper/BomMapper.xml

@@ -28,13 +28,14 @@
   </resultMap>
   <sql id="Base_Column_List" >
     bo_id, bo_motherid, bo_mothercode, bo_mothername, bo_version, bo_status, bo_statuscode, 
-    companyId, updaterId,updaterName,updateTime, bo_text1,
-    bo_text2, bo_text3, bo_text4, bo_text5,creatorName,creatorId,createTime
+    bom.companyId,  bom.updaterId, bom.updaterName, bom.updateTime, bo_text1,
+    bo_text2, bo_text3, bo_text4, bo_text5, bom.creatorName, bom.creatorId, bom.createTime,
+    pr_spec,pr_brand,pr_orispeccode,pr_unit
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
     select 
     <include refid="Base_Column_List" />
-    from bom
+    from bom left join product on pr_code = bo_mothercode and bom.companyId = product.companyId
     where bo_id = #{id}
   </select>
   <delete id="deleteByPrimaryKey" parameterType="java.lang.Long" >

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

@@ -907,7 +907,7 @@
         </foreach>
     </update>
     <select id="selectProdIOCode" resultType="java.lang.String">
-        SELECT PI_INOUTNO FROM PRODINOUT
+        SELECT group_concat(PI_INOUTNO) FROM PRODINOUT
         <where>
             <if test="code!=null">
                 AND PI_TEXT1 = #{code}

+ 27 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/AccountDetailsView.java

@@ -20,6 +20,33 @@ public class AccountDetailsView {
     private Double total;
     private Date date;
     private Long companyId;
+    private Double sl_orderamount;
+    private Double pbd_nowbalance;
+    private Date pb_date;
+
+    public Double getPbd_nowbalance() {
+        return pbd_nowbalance;
+    }
+
+    public void setPbd_nowbalance(Double pbd_nowbalance) {
+        this.pbd_nowbalance = pbd_nowbalance;
+    }
+
+    public Date getPb_date() {
+        return pb_date;
+    }
+
+    public void setPb_date(Date pb_date) {
+        this.pb_date = pb_date;
+    }
+
+    public Double getSl_orderamount() {
+        return sl_orderamount;
+    }
+
+    public void setSl_orderamount(Double sl_orderamount) {
+        this.sl_orderamount = sl_orderamount;
+    }
 
     public String getCu_name() {
         return cu_name;

+ 12 - 0
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/CustomerCheckView.java

@@ -37,6 +37,18 @@ public class CustomerCheckView {
 
     private Long companyId;
 
+    private String pr_brand;
+
+    private String pr_orispeccode;
+
+    public String getPr_brand(){return pr_brand;}
+
+    public void setPr_brand(String pr_brand){ this.pr_brand = pr_brand;}
+
+    public String getPr_orispeccode(){return pr_orispeccode;}
+
+    public void setPr_orispeccode(String pr_orispeccode){ this.pr_orispeccode = pr_orispeccode;}
+
     public Long getCompanyId() {
         return companyId;
     }

+ 4 - 1
applications/money/money-server/src/main/resources/mapper/AccountDetailsViewMapper.xml

@@ -12,7 +12,10 @@
     <result column="pb_code" property="pb_code" jdbcType="VARCHAR" />
     <result column="total" property="total" jdbcType="DOUBLE" />
     <result column="date" property="date" jdbcType="TIMESTAMP" />
+    <result column="sl_orderamount" property="sl_orderamount" jdbcType="DOUBLE" />
+    <result column="pb_date" property="pb_date" jdbcType="TIMESTAMP" />
     <result column="companyId" property="companyId" jdbcType="INTEGER" />
+    <result column="pbd_nowbalance" property="pbd_nowbalance" jdbcType="DOUBLE" />
   </resultMap>
   <select id="selectByCondition" resultMap="BaseResultMap">
     select  *  from account_details_view
@@ -24,7 +27,7 @@
         and  companyId = #{companyId}
       </if>
     </where>
-    order by date desc
+    order by sl_code desc ,pb_date desc
   </select>
 
   <select id="selectCalculateFields" resultType="string">

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

@@ -29,7 +29,7 @@
         ${con}
       </if>
       <if test="companyId != null">
-        and  companyId = #{companyId} and (cm_endamount +cm_nowamount+ cm_nowpreamount + cm_beginamount) != 0
+        and  companyId = #{companyId} and abs(cm_beginamount)+abs(cm_beginpreamount)+abs(cm_nowamount)+abs(cm_nowpreamount)>0
       </if>
     </where>
     order by cm_yearmonth desc,cm_custcode

+ 2 - 0
applications/money/money-server/src/main/resources/mapper/CustomerCheckViewMapper.xml

@@ -18,6 +18,8 @@
         <result column="pd_total" property="pd_total" jdbcType="DOUBLE" />
         <result column="pd_netprice" property="pd_netprice" jdbcType="DOUBLE" />
         <result column="pd_nettotal" property="pd_nettotal" jdbcType="DOUBLE" />
+        <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR" />
+        <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />
     </resultMap>
 
     <select id="selectByCondition" resultMap="BaseResultMap">

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

@@ -29,7 +29,7 @@
         ${con}
       </if>
       <if test="companyId != null">
-        and  companyid = #{companyId} and (vm_endamount+ vm_nowamount+vm_nowpreamount+vm_beginamount) != 0
+        and  companyid = #{companyId} and abs(vm_beginamount)+abs(vm_beginpreamount)+abs(vm_nowamount)+abs(vm_nowpreamount)>0
       </if>
     </where>
     order by vm_yearmonth desc,vm_vendcode

+ 1 - 1
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java

@@ -41,5 +41,5 @@ public interface PurchaseMapper extends CommonBaseMapper<Purchase>{
 
     Integer checkPurchaseRequiredField(Long id);
 
-
+    Integer checkClose(Long id);
 }

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

@@ -132,6 +132,8 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         purchase.setPu_code(pu_code);
         //判断更新与保存动作
         if (StringUtils.isEmpty(pu_id) || "0".equals(pu_id.toString())) {
+            purchase.setPu_acceptstatus(Status.UNTURNIN.getDisplay());
+            purchase.setPu_acceptstatuscode(Status.UNTURNIN.name());
             purchase.setCompanyId(companyId);
             //插入操作
             purchaseMapper.insertSelective(purchase);
@@ -522,8 +524,12 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         }
         //检查最小包装数
         result.setMessage(purchasedetailMapper.checkzxbzs(id));
-       /* commonService.commonAudit("purchase", "pu_id=" + id, "pu_status",
-                "pu_statuscode", "pu_auditdate", "pu_auditman");*/
+        //检测单据是否关闭
+        Integer checkClose = purchaseMapper.checkClose(id);
+        if (count > 0) {
+            throw new BizException(BizExceptionCode.SALE_CLOSE.getCode(), String.format(BizExceptionCode.SALE_CLOSE.getMessage(),"审核"));
+        }
+
         Purchase purchase = new Purchase();
         //生成更新对象
         purchase.setId(id);

+ 4 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml

@@ -463,4 +463,8 @@
     select count(1) from purchase where pu_id = #{id} and (pu_vendid is null or pu_delivery is null or pu_shipaddresscode is null)
   </select>
 
+  <select id="checkClose" parameterType="long" resultType="int">
+    select count(1) from purchase where pu_id = #{id} and PU_ACCEPTSTATUSCODE='CLOSE'
+  </select>
+
 </mapper>

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

@@ -60,4 +60,8 @@ public class SaleProfitView {
     private Double pw_costprice;
 
     private Date pi_date;
+
+    private String pr_brand;
+
+    private String pr_orispeccode;
 }

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

@@ -27,6 +27,8 @@
     <result column="companyid" property="companyid" jdbcType="INTEGER" />
       <result column="pd_remark" property="pd_remark" jdbcType="VARCHAR" />
     <result column="pw_costprice" property="pw_costprice" jdbcType="DOUBLE" />
+    <result column="pr_orispeccode" property="pr_orispeccode" jdbcType="VARCHAR" />
+    <result column="pr_brand" property="pr_brand" jdbcType="VARCHAR" />
   </resultMap>
   <select id="selectByCondition" resultMap="BaseResultMap">
     select  *  from Sale_Profit_View

+ 1 - 0
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/Make.java

@@ -54,5 +54,6 @@ public class Make extends CommonBaseEntity implements Serializable {
 
     private Date ma_auditdate;
 
+    private String ma_prodorispec;
 
 }

+ 3 - 0
applications/storage/storage-dto/src/main/java/com/usoftchina/saas/storage/po/report/ProdiodetailView.java

@@ -32,4 +32,7 @@ public class ProdiodetailView implements Serializable{
 
     private String pd_whname;
 
+    private String pr_brand;
+    private String pr_orispeccode;
+
 }

+ 12 - 4
applications/storage/storage-server/src/main/resources/mapper/MakeMapper.xml

@@ -79,7 +79,7 @@
   <sql id="Base_Column_List" >
     ma_id, ma_code, ma_status, ma_statuscode, ma_type, ma_prodid, ma_prodcode, ma_proddetail, 
     ma_prodspec, ma_version, ma_produnit, ma_qty, ma_whid, ma_whcode, ma_whname,ma_price, ma_total,ma_auditman,ma_auditdate, companyId, updaterId,updaterName,updateTime,creatorid,creatorName,createtime, ma_text1,
-    ma_text2, ma_text3, ma_text4, ma_text5
+    ma_text2, ma_text3, ma_text4, ma_text5,ma_prodorispec
   </sql>
   <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
     select 
@@ -102,7 +102,7 @@
       ma_whid, ma_whcode, ma_whname, ma_price,
       ma_total, ma_auditman,ma_auditdate,companyId, updaterId,
       updateTime, ma_text1, ma_text2, 
-      ma_text3, ma_text4, ma_text5
+      ma_text3, ma_text4, ma_text5,ma_prodorispec
       )
     values (#{ma_code,jdbcType=VARCHAR}, #{ma_status,jdbcType=VARCHAR}, 
       #{ma_statuscode,jdbcType=VARCHAR}, #{ma_type,jdbcType=VARCHAR}, #{ma_prodid,jdbcType=INTEGER}, 
@@ -111,7 +111,7 @@
       #{ma_whid,jdbcType=INTEGER}, #{ma_whcode,jdbcType=VARCHAR}, #{ma_whname,jdbcType=VARCHAR}, #{ma_price,jdbcType=DOUBLE},
       #{ma_total,jdbcType=DOUBLE}, #{ma_auditman,jdbcType=VARCHAR},#{ma_auditdate.jdbcType=TIMESTAMP},#{companyId,jdbcType=INTEGER}, #{updaterId,jdbcType=INTEGER},
       #{updateTime,jdbcType=TIMESTAMP}, #{ma_text1,jdbcType=VARCHAR}, #{ma_text2,jdbcType=VARCHAR}, 
-      #{ma_text3,jdbcType=VARCHAR}, #{ma_text4,jdbcType=VARCHAR}, #{ma_text5,jdbcType=VARCHAR}
+      #{ma_text3,jdbcType=VARCHAR}, #{ma_text4,jdbcType=VARCHAR}, #{ma_text5,jdbcType=VARCHAR},#{ma_prodorispec,jdbcType=VARCHAR}
       )
   </insert>
   <insert id="insertSelective" parameterType="com.usoftchina.saas.storage.po.Make">
@@ -211,6 +211,9 @@
       <if test="updaterName != null">
         updaterName,
       </if>
+      <if test="ma_prodorispec != null">
+        ma_prodorispec,
+      </if>
     </trim>
     <trim prefix="values (" suffix=")" suffixOverrides=",">
 
@@ -304,6 +307,9 @@
       <if test="updaterName != null">
         #{updaterName,jdbcType=VARCHAR},
       </if>
+      <if test="ma_prodorispec != null">
+        #{ma_prodorispec,jdbcType=VARCHAR},
+      </if>
     </trim>
   </insert>
   <update id="updateByPrimaryKeySelective" parameterType="com.usoftchina.saas.storage.po.Make" >
@@ -387,6 +393,7 @@
       <if test="ma_text5 != null" >
         ma_text5 = #{ma_text5,jdbcType=VARCHAR},
       </if>
+
     </set>
     where ma_id = #{id}
   </update>
@@ -417,7 +424,8 @@
       ma_text2 = #{ma_text2,jdbcType=VARCHAR},
       ma_text3 = #{ma_text3,jdbcType=VARCHAR},
       ma_text4 = #{ma_text4,jdbcType=VARCHAR},
-      ma_text5 = #{ma_text5,jdbcType=VARCHAR}
+      ma_text5 = #{ma_text5,jdbcType=VARCHAR},
+      ma_prodorispec = #{ma_prodorispec,jdbcType=VARCHAR}
     where ma_id = #{id}
   </update>
   <select id="getListDataByCondition" resultMap="BaseResultMap">

+ 2 - 0
applications/storage/storage-server/src/main/resources/mapper/ProdInOutReportMapper.xml

@@ -21,6 +21,8 @@
     <result column="pd_remark" jdbcType="VARCHAR" property="pd_remark" />
     <result column="companyid" jdbcType="INTEGER" property="companyid" />
     <result column="pd_whname" jdbcType="VARCHAR" property="pd_whname" />
+    <result column="pr_brand" jdbcType="VARCHAR" property="pr_brand" />
+    <result column="pr_orispeccode" jdbcType="VARCHAR" property="pr_orispeccode" />
   </resultMap>
 
 

+ 1 - 1
framework/core/src/main/java/com/usoftchina/saas/exception/ExceptionCode.java

@@ -58,7 +58,7 @@ public enum ExceptionCode implements BaseExceptionCode {
     FILE_NOT_FOLDER(55501, "不是文件夹"),
 
     TURNIN_EXIST(60000,"已入库"),
-    TURNINNUM_NOT_EXIST(60001,"无可转数"),
+    TURNINNUM_NOT_EXIST(60001,"该采购单已全部转验收,无法转采购验收单"),
 
     CLOSED_EXIST(60002,"已关闭")
 

+ 1 - 1
framework/core/src/main/java/com/usoftchina/saas/utils/RegexpUtils.java

@@ -12,7 +12,7 @@ public class RegexpUtils {
     private static final String HK_MOBILE_EXP = "^(5|6|8|9)\\d{7}$";
     private static final String EMAIL_EXP = "^\\w+([-.]\\w+)*@\\w+([-]\\w+)*\\.(\\w+([-]\\w+)*\\.)*[a-z]{2,4}$";
     private static final String SPECCHARACTER_EXP = "[\\\\s~·`!!@#¥$%^……&*(())\\\\-——\\\\-_=+【\\\\[\\\\]】{{}}\\\\|、\\\\\\\\;;::‘'“”\\\",,《<。.》>、/??]";
-    private static final String SPECIALCHARACTER_EXP = "[`~!@#$%^&*()+=|{}':;',\\[\\]<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]";
+    private static final String SPECIALCHARACTER_EXP = "[`~!@#$%^&*()+=|{}':;',\\[\\]<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?\"]";
     /**
      * 匹配手机号码
      *

+ 36 - 27
frontend/saas-portal-web/src/components/conenter/addenterprise.vue

@@ -8,7 +8,7 @@
             <div class="gs-worp qy-worp tj-up">
                 <div class="qy-title" style="position: relative;">
                     <ul class="over">
-                        <li class="left xs" v-for="(d, i) in tab" :key="i" :class= "{qyactive:nowindex == i}" @click="tabwith(i)">{{d.name}}</li>
+                        <li class="left xs" v-for="(d, i) in tab" :key="i" :class= "{qyactive:nowindex == i}" @click="tabwatch(i)">{{d.name}}</li>
                     </ul>
                 </div>
                 <div class="qy-conent" :class= "{showqiye:nowindex == 0}" style="padding-top: 60px;">
@@ -120,7 +120,7 @@ import { setTimeout } from 'timers';
                 // area:'',//区
                 qymingzi: false,//企业名是否注册
                 Email: '',
-                mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
+                mytoken: Session.get(),//本地储存的用户信息
                 reg: new RegExp(/[\@\#\$\%\&\*!\¥]/),//非法字符
                 regname:new RegExp(/[\@\#\$\%\&\*!\¥0-9]/),//非法字符加数字
                 isaddress: false,//公司地址验证
@@ -142,6 +142,7 @@ import { setTimeout } from 'timers';
                 isTestingname:false,
                 isregname:false,
                 companyId:null,
+                admin:null,
                 arr:[]
             }
         },
@@ -153,7 +154,7 @@ import { setTimeout } from 'timers';
             this.$refs.email.value = this.mytoken.account.email;
         },
         methods: {
-            tabwith(i){
+            tabwatch(i){
                 this.nowindex = i;
             },
             //取消添加企业
@@ -219,8 +220,11 @@ import { setTimeout } from 'timers';
                             this.islookup = true;   
                         } else if (res.data.success == false && res.data.message == '公司不存在') {
                             this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/warning.png" alt=""> 该企业不存在';
+                            this.islookup = false; 
                         } else {
                             this.$message.error('请求失败,请重试');
+                            this.islookup = false; 
+                            this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/warning.png" alt="">'
                         }
                     })
                 }
@@ -260,6 +264,7 @@ import { setTimeout } from 'timers';
             // 选择要加入的企业
             qylist(i){
                 this.companyId = this.arr[i].id,
+                this.admin = this.arr[i].admin,
                 this.newindex = i
             },
             //加入企业提交按钮
@@ -273,30 +278,34 @@ import { setTimeout } from 'timers';
                 } else if (!this.isregname) {
                     this.$message.error('姓名不能包含符号、数字等非法字符');
                 } else if (this.companyId){
-                    this.$ajax({
-                        url: this.$url.api+'/api/account/accountCenter/company/join',
-                        method:'POST',
-                        data:{
-                            username:username,
-                            accountId:this.mytoken.account.id,
-                            companyId:this.companyId,
-                        },
-                        headers:{
-                            "Authorization":token,
-                        }
-                    })
-                    .then(res=>{
-                        if (res.data.success) {
-                            this.$message.success('提交成功,待管理员批准加入');
-                            this.$store.state.ishongdian = true;//显示红点
-                            setTimeout(()=>{
-                                this.$router.push({name:'company'});
-                                document.documentElement.scrollTop = 0;
-                            },3000)
-                        } else {
-                            this.$message.error(res.data.message);
-                        }
-                    })
+                    if (this.admin == this.mytoken.account.realname) {
+                        this.$message.error('账号已在企业服务中,不能重复加入');
+                    } else {
+                        this.$ajax({
+                            url: this.$url.api+'/api/account/accountCenter/company/join',
+                            method:'POST',
+                            data:{
+                                username:username,
+                                accountId:this.mytoken.account.id,
+                                companyId:this.companyId,
+                            },
+                            headers:{
+                                "Authorization":token,
+                            }
+                        })
+                        .then(res=>{
+                            if (res.data.success) {
+                                this.$message.success('提交成功,待管理员批准加入');
+                                this.$store.state.ishongdian = true;//显示红点
+                                setTimeout(()=>{
+                                    this.$router.push({name:'company'});
+                                    document.documentElement.scrollTop = 0;
+                                },3000)
+                            } else {
+                                this.$message.error(res.data.message);
+                            }
+                        })
+                    }
                 } else {
                     this.$message.error('请选择要加入的企业');
                 }

+ 7 - 7
frontend/saas-portal-web/src/components/conenter/company.vue

@@ -100,7 +100,7 @@
                 </div>
             </div>
         </div>
-      </div>
+    </div>
 </template>
 
 <script>
@@ -118,7 +118,7 @@
                 ktsass: true,//开通saas
                 isDefault: true,//开通默认
                 isAutoLogin: this.$store.state.isAutoLogin,
-                mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
+                mytoken: Session.get(),//本地储存的用户信息
                 list: [],//企业列表信息
                 isheigh:false,//是否添加默认高度
                 admin: '',
@@ -138,7 +138,7 @@
             }
         },
         created(){
-            let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
+            let mytoken = Session.get();
             let token = String(mytoken.token);
             //企业列表
             this.$ajax({
@@ -167,7 +167,7 @@
                                 enterprise.push(addenterprise)
                             }
                         };
-                        let session = JSON.parse(window.localStorage.getItem('app-state-session'));
+                        let session = Session.get();
                         if (enterprise.length != session.account.companies.length) {
                             session.account.companies = enterprise;
                             Session.set(session);
@@ -177,7 +177,7 @@
                         let token = res.data.data.token.token;
                         if (this.isAutoLogin) {
                             if (hasCompany) {
-                                let session=JSON.parse(localStorage.getItem('app-state-session'));
+                                let session = Session.get();
                                 session.account.companyId=companyId;
                                 session.span = session.timestamp - new Date().getTime();
                                 session.token=token;
@@ -260,7 +260,7 @@
                 })
                 .then(res=>{
                     let mytoken = res.data.data.token;
-                    let session=JSON.parse(localStorage.getItem('app-state-session'));
+                    let session = Session.get();
                     session.account.companyId=id;
                     session.span = session.timestamp - new Date().getTime();
                     session.token=mytoken;
@@ -346,8 +346,8 @@
             //查看企业详情
             getEnterpriseInfo(d){
                 document.documentElement.scrollTop = 0;
-                this.$router.push({path:'/details'});
                 window.sessionStorage.setItem('content',JSON.stringify(d))
+                this.$router.push({path:'/details'});
             },
              //添加企业
             addEnterprise(){

+ 5 - 2
frontend/saas-portal-web/src/components/conenter/details.vue

@@ -97,14 +97,14 @@
 </template>
 
 <script>
-
+import Session from '@/utils/session'
     export default {
         data(){
             return {
                 modify:true,
                 content: JSON.parse(window.sessionStorage.getItem("content")),
                 Email: '',
-                mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
+                mytoken: Session.get(),//本地储存的用户信息
                 isId: false,
                 isemail: true,//正则邮箱
                 ismodifyId: false
@@ -187,6 +187,9 @@
                         if (res.data.success) {
                             document.documentElement.scrollTop = 0;
                             this.modify = true;
+                            let session = Session.get();
+                            session.account.email = email;
+                            Session.set(session);
                             this.content.type = qyindustry;
                             this.content.adminEmail = email
                         };

+ 23 - 19
frontend/saas-portal-web/src/components/conenter/enterprise.vue

@@ -44,8 +44,9 @@
                 <div :class= "{gsqiye:nowindex == 0}"> 
                     
     <!-- 企业列表展示-------添加企业-------------企业详细信息展示 ---------------------------- -->
+                <!-- <keep-alive> -->
                     <router-view></router-view>
-
+                <!-- </keep-alive> -->
                 </div>
     <!-- 个人信息------------------------------------------------------------------- -->
                 <div :class= "{gsqiye:nowindex == 1}">
@@ -150,9 +151,10 @@
                         <div v-if="isnews" class="my-pagination">
                             <el-pagination
                                 background
+                                :page-size=size
                                 @current-change="handleCurrentChange"
                                 layout="prev, pager, next"
-                                :total= list>
+                                :total= listtotal>
                             </el-pagination>
                         </div>
                     </div>
@@ -170,7 +172,7 @@ import { setTimeout } from 'timers';
             return{
                 nowindex: 0,//tab切换
                 tianjiaqiye: true,//添加企业切换
-                mytoken: JSON.parse(localStorage.getItem('app-state-session')).account,//本地储存的用户信息
+                mytoken: Session.get().account,//本地储存的用户信息
                 mobile: null,
                 ismodifyname:true,
                 isname:true,//姓名验证
@@ -184,7 +186,8 @@ import { setTimeout } from 'timers';
                     {name: '消息'},
                 ],
                 arr: [],
-                list:1
+                listtotal:1,
+                size:10,//每页显示数量
             }
         },
         mounted(){
@@ -211,15 +214,15 @@ import { setTimeout } from 'timers';
         methods: {
             // tab切换
             tabswitch(index){
+                this.mytoken = Session.get().account;
                 if (index == 3) {
                     this.nowindex = 3;
-                    let mytoken = Session.get();
-                    let id = mytoken.account.id;
+                    let id = this.mytoken.id;
                     let param = {
                         type:'condition',
                         value:'creatorId='+id+''
                     }
-                    // tab切换到消息的时候执行
+                    // tab切换到消息的时候获取申请列表
                     this.$ajax({
                         url: this.$url.api+'/api/commons/remind/apply/list',
                         method:'GET',
@@ -227,18 +230,18 @@ import { setTimeout } from 'timers';
                         params: {
                             condition:JSON.stringify(param),
                             number:1,
-                            size:10
+                            size:this.size
                         },
                         headers:{
                             'Access-Control-Allow-Origin':'*',
-                            "Authorization":mytoken.token,
+                            "Authorization":Session.getToken(),
                             'Content-Type':'application/json;charset=UTF-8'
                         }
                     })
                     .then(res=>{
                         if (res.data.success) {
                             this.arr = res.data.data.list;
-                            this.list = res.data.data.total;
+                            this.listtotal = res.data.data.total;
                             this.$store.state.ishongdian = false;
                         }
                     })
@@ -247,9 +250,6 @@ import { setTimeout } from 'timers';
                 }
                 
             },
-            setTurnHome(){
-                this.$parent.turnHome = true
-            },
             //重新加入
             Rejoin(i){
                 this.$ajax({
@@ -268,13 +268,14 @@ import { setTimeout } from 'timers';
                     if (res.data.success) {
                         this.$message.success('提交成功,待管理员批准');
                         this.tabswitch(3);//本页面刷新
+                    } else {
+                        this.$message.error(res.data.message);
                     }
                 })
             },
             // 分页
              handleCurrentChange(val) {
-                let mytoken = Session.get();
-                let id = mytoken.account.id;
+                let id = this.mytoken.id;
                 let param = {
                     type:'condition',
                     value:'creatorId='+id+''
@@ -286,11 +287,11 @@ import { setTimeout } from 'timers';
                     params: {
                         condition:JSON.stringify(param),
                         number:val,
-                        size:10
+                        size:this.size
                     },
                     headers:{
                         'Access-Control-Allow-Origin':'*',
-                        "Authorization":mytoken.token,
+                        "Authorization":Session.getToken(),
                         'Content-Type':'application/json;charset=UTF-8'
                     }
                 })
@@ -300,6 +301,9 @@ import { setTimeout } from 'timers';
                     }
                 })
             },
+            setTurnHome(){
+                this.$parent.turnHome = true
+            },
             //退出
             loginout(){
                 const frame = window.frames[window.frames.length - 1]
@@ -369,10 +373,10 @@ import { setTimeout } from 'timers';
                     })
                 }
             },
-            //没有内容也要有一定的高度
+            //内容不足500固定高度
             boxheight(){
                 let H = this.$refs.qiyebox.offsetHeight;
-                if (H <= 500) {
+                if (H < 500) {
                     this.isheigh = true
                 } else {
                     this.isheigh = false

+ 1 - 3
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -264,8 +264,7 @@
       };
       let token;
       if(localStorage.getItem('app-state-session')){
-        let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
-        token = String(mytoken.token);
+        token = Session.getToken();
       }
       this.$ajax({
         url: this.$url.api+'/api/auth/info',
@@ -424,7 +423,6 @@
                 const frame = window.frames[window.frames.length - 1]
                 frame.postMessage(JSON.stringify(session), '*')
                 window.location.href = me.$url.web
-                // console.log("请求成功",res)
                 phone = ''
             })
             .catch(err=>{

+ 1 - 1
frontend/saas-portal-web/src/pages/index/index.vue

@@ -13,7 +13,7 @@ export default {
   name: 'App',
   data(){
     return {
-
+      
     }
   },
   components: {

+ 8 - 4
frontend/saas-web/app/Application.scss

@@ -292,11 +292,13 @@ body.launching {
 }
 
 .x-grid-scrollbar-clipper-locked, .x-grid-scrollbar-locked {
-  border-right-color: #ABDAFF;
+  // border-color: #ABDAFF;
+  border-color: transparent;
 }
 
 .x-grid-inner-locked {
-  border-right-color: #ABDAFF;
+  // border-color: #ABDAFF;
+  border-color: transparent;
 }
 
 .x-grid-with-row-lines .x-grid-item:first-child {
@@ -304,7 +306,8 @@ body.launching {
 }
 
 .x-grid-with-row-lines .x-grid-item {
-  border-color: #ABDAFF;
+  // border-color: #ABDAFF;
+  border-color: transparent;
 }
 
 .x-keyboard-mode  .x-grid-item-focused .x-grid-cell-inner:before {
@@ -316,7 +319,8 @@ body.launching {
 }
 
 .x-grid-cell-special {
-  border-color: #ABDAFF;
+  // border-color: #ABDAFF;
+  border-color: transparent;
 }
 
 .x-grid-item-selected {

+ 1 - 1
frontend/saas-web/app/view/core/form/field/ConDateField.js

@@ -122,7 +122,7 @@ Ext.define('saas.view.core.form.field.ConDateField', {
         });
         var t = this.value;
         if(!t || !t in [1,2,3,4,5,6,7]) {
-            t = 3;
+            t = 1;
         }
         this.value = null;
         this.setInitValue(t);

+ 1 - 2
frontend/saas-web/app/view/core/query/QueryGridPanel.scss

@@ -3,8 +3,7 @@
     .x-querygrid-code-column {
 
         .x-grid-cell-inner {
-            text-decoration: underline;
-            color: #3E80F6;
+            color: #53b0f3;
             cursor: pointer;
         }
     }

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

@@ -30,7 +30,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
 
     calculateProperty: 'data.calculate',
     rootProperty: 'data.list.list',
-    totalProperty: 'list.total',
+    totalProperty: 'data.list.total',
 
     initComponent: function () {
         var me = this;

+ 4 - 0
frontend/saas-web/app/view/document/bom/FormController.js

@@ -36,6 +36,10 @@ Ext.define('saas.view.document.bom.FormController', {
                             from:'pr_detail',to:'pr_detail'
                         },{
                             from:'pr_spec',to:'pr_spec'
+                        },{
+                            from:'pr_orispeccode',to:'pr_orispeccode'
+                        },{
+                            from:'pr_brand',to:'pr_brand'
                         },{
                             from:'pr_unit',to:'bd_unit'
                         },{

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

@@ -59,6 +59,11 @@ Ext.define('saas.view.document.bom.FormPanel', {
         name: 'bo_mothercode',
         fieldLabel: '产品编号',
         allowBlank: false
+    },{
+        xtype: 'textfield',
+        name: 'pr_brand',
+        fieldLabel: '品牌',
+        readOnly:true,
     },{
         xtype: 'textfield',
         name: 'bo_mothername',
@@ -127,29 +132,54 @@ Ext.define('saas.view.document.bom.FormPanel', {
                 text: 'model映射需要',
                 dataIndex: 'productDTO',
                 hidden: true,
-            }, {
-                text : "物料名称", 
-                dataIndex : "pr_detail", 
-                width : 200,
+            },
+            {
+                text : "品牌", 
+                width : 150.0, 
+                dataIndex : "pr_brand",
                 ignore:true,
                 renderer: function (v, m, r) {
                     if(!v){
-                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null;
-                    }
+                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null; 
+                    }                     
                     return v;
                 }
-            }, {
-                text : "物料规格", 
-                dataIndex : "pr_spec", 
-                width : 150,
+            },
+            {
+                text : "名称", 
+                width : 200.0, 
+                dataIndex : "pr_detail",
                 ignore:true,
                 renderer: function (v, m, r) {
                     if(!v){
-                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null;
-                    }
+                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null; 
+                    }                     
                     return v;
                 }
-            }, {
+            },
+            {
+                text : "型号", 
+                width : 200.0, 
+                dataIndex : "pr_orispeccode",
+                ignore:true,
+                renderer: function (v, m, r) {
+                    if(!v){
+                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null; 
+                    }                     
+                    return v;
+                }
+            },{
+                text : "规格", 
+                width : 150, 
+                dataIndex : "pr_spec",
+                ignore:true,
+                renderer: function (v, m, r) {
+                    if(!v){
+                        return r.data["productDTO"]?r.data["productDTO"][m.column.dataIndex]:null; 
+                    }                     
+                    return v;
+                }
+            },{
                 text : "单位", 
                 dataIndex : "bd_unit", 
                 width : 80 

+ 1 - 1
frontend/saas-web/app/view/home/charts/MonthIO.js

@@ -76,7 +76,7 @@ Ext.define('saas.view.home.charts.MonthIO', {
             grid: {
                 left: 0,
                 right: 0,
-                bottom: 0,
+                bottom: 5,
                 top: 40,
                 borderColor: '#E5EAEF',
                 containLabel: true

+ 1 - 1
frontend/saas-web/app/view/home/charts/ProfitDetail.js

@@ -39,7 +39,7 @@ Ext.define('saas.view.home.charts.ProfitDetail', {
                 left: 0,
                 right: 0,
                 top: 10,
-                bottom: 0,
+                bottom: 5,
                 borderColor: '#E5EAEF',
                 containLabel: true
             },

+ 1 - 1
frontend/saas-web/app/view/home/charts/SaleTrend.js

@@ -89,7 +89,7 @@ Ext.define('saas.view.home.charts.SaleTrend', {
             grid: {
                 left: 0,
                 right: 16,
-                bottom: 0,
+                bottom: 5,
                 top: 40,
                 borderColor: '#E5EAEF',
                 containLabel: true

+ 1 - 1
frontend/saas-web/app/view/home/charts/StockAmount.js

@@ -60,7 +60,7 @@ Ext.define('saas.view.home.charts.StockAmount', {
             grid: {
                 left: 0,
                 right: 0,
-                bottom: 0,
+                bottom: 5,
                 top: 10,
                 borderColor: '#E5EAEF',
                 containLabel: true

+ 21 - 2
frontend/saas-web/app/view/main/Main.js

@@ -23,7 +23,7 @@ Ext.define('saas.view.main.Main', {
         {
             xtype: 'toolbar',
             cls: 'main-headerbar shadow',
-            height: 64,
+            height: 50,
             itemId: 'headerBar',
             items: [
                 {
@@ -65,6 +65,14 @@ Ext.define('saas.view.main.Main', {
 					    window.open('http://www.usoftchina.com','_blank');
                     }
                 },
+                {
+                    margin:'0 3 0 6',
+                    iconCls:'x-fa fa-share-alt-square',
+                    cls:'sa-nav-button',
+                    ui: 'header',
+                    tooltip: '企业分享',
+                    handler:'shareCompany'
+                },
                 {
                     iconCls:'x-sa sa-help',
                     cls:'sa-nav-button',
@@ -134,6 +142,7 @@ Ext.define('saas.view.main.Main', {
                                 if(rolesMap&&rolesMap.length>0){
                                     for(var i = 0; i < rolesMap.length; i++) {
                                         if(rolesMap[i].type==0){
+                                             main.isAdmin = true;
                                              main.getController().loadInvitationMsg(1,nowCompanyId)
                                         }
                                      }
@@ -169,11 +178,21 @@ Ext.define('saas.view.main.Main', {
                             iconCls:'x-fa fa-comment-o sa-navicon',
                             handler:'feedbackMsg'
                         }, {  
-                            text: '加入邀请',
+                            text: '加入申请',
+                            hidden:true,
                             name:'join',
                             iconCls:'x-fa fa-handshake-o sa-navicon',
                             handler:function(b){
                                 saas.util.BaseUtil.openTab('sys-invitation-datalist','申请列表', 'sys-invitation-datalist');
+                            },
+                            listeners:{
+                                afterrender:function(b){
+                                    if(b.ownerCt.ownerCmp.ownerCt.ownerCt.isAdmin){
+                                        b.show();
+                                    }else{
+                                        b.ownerCt.el.dom.style.height = "100px"
+                                    }
+                                }
                             }
                         }, {
                             text: '退出',

+ 14 - 7
frontend/saas-web/app/view/main/Main.scss

@@ -45,6 +45,13 @@ $treelist-nav-ui: (
     
     .x-panel-bodyWrap {
 
+        // &>.x-tab-bar {
+        //     height: 40px;
+        //     &>.x-tab-bar-body {
+        //         height: 40px;
+        //         padding: 0;
+        //     }
+        // }
         #main-tab-panel-body {
             background: #EEF4F9;
 
@@ -55,7 +62,7 @@ $treelist-nav-ui: (
 
 .main-logo-wrap {
     background-color: $base-color;
-    height: 70px;
+    height: 50px;
 
     font-size: 16px;
     font-weight: $font-weight-bold;
@@ -68,7 +75,7 @@ $treelist-nav-ui: (
         img {
             width: 32px;
             height: 32px;
-            top: 16px;
+            top: 8px;
             left: 28px;
             position: relative;
         }
@@ -78,7 +85,7 @@ $treelist-nav-ui: (
             font-size: 14px;
             color: #FFFFFF;
             text-align: left;
-            top: 30px;
+            top: 22px;
             position: absolute;
             left: 64px;
         }
@@ -161,14 +168,14 @@ $treelist-nav-ui: (
 }
 
 .x-gudie-information{
-    width: 64px;
-    height: 64px;
+    width: 50px;
+    height: 50px;
     background: url(../../../../resources/images/guide/information.png) 0 0 no-repeat;
 }
 
 .x-gudie-end{
-    width: 64px;
-    height: 64px;
+    width: 50px;
+    height: 50px;
     background: url(../../../../resources/images/guide/end.png) 0 0 no-repeat;
 }
 

+ 87 - 1
frontend/saas-web/app/view/main/MainController.js

@@ -40,7 +40,7 @@ Ext.define('saas.view.main.MainController', {
         navigationList = refs.navigationTreeList,
         navCollapsed = !navigationList.navCollapsed,
         new_width = navCollapsed ? viewModel.get('smallNavWidth') : viewModel.get('navWidth'),
-        newLogoImgStyle = navCollapsed ? { width: 36, height: 36, top: 12, left: 12 } : { width: 32, height: 32, top: 16, left: 28 },
+        newLogoImgStyle = navCollapsed ? { width: 36, height: 36, top: 6, left: 12 } : { width: 32, height: 32, top: 8, left: 28 },
         newLogoTextStyle = navCollapsed ? {
             5: { opacity: 0 },
             10: { opacity: 0 },
@@ -238,5 +238,91 @@ Ext.define('saas.view.main.MainController', {
             });
             win.show();
         }
+    },
+
+    shareCompany:function(){
+        //打开分享窗口
+        var win = Ext.create('Ext.window.Window', {  
+            cls:'x-window-dbfind', 
+            height: 385,
+            width: 350,
+            modal:true,
+            title: '分享企业',
+            bodyPadding: 10,
+            constrain: true,
+            closable: true,
+            layout: 'fit',
+            items:[{
+                plain:true,
+                xtype:'tabpanel',
+                cls:'x-tab-shareTab',
+                items:[{
+                    title:'二维码分享',
+                    xtype:'panel',
+                    layout: {
+                        type: 'vbox',
+                        align: 'center'
+                    },
+                    items:[{
+                        width:180,
+                        height:180,
+                        xtype: 'image',
+                        margin:'35 0 0 0',
+                        padding:'5',
+                        style:'border: 1px solid #000;',
+                        src:'resources/images/default/basePhoto.png',
+                        //src: (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+signet,
+                        name:'QRcode',
+                        listeners:{
+                            afterrender:function(f){
+                                var serverOptions = Ext.manifest.server;
+                                var delay = 15;//天
+                                var basePath = serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath;
+                                f.setSrc('/api/commons/share/qrcode?basePath='+basePath)
+                            }
+                        }
+                    },{
+                        xtype:'displayfield',
+                        value:'扫描二维码分享至微信/QQ'
+                    }]
+                },{
+                    title:'链接分享',
+                    xtype:'panel',
+                    layout: {
+                        type: 'vbox',
+                        align: 'center'
+                    },
+                    items:[{
+                        margin:'60 0 0 0',
+                        xtype:'displayfield',
+                        value:'复制以下链接分享给好友'
+                    },{
+                        xtype:'textfield',
+                        width:200,
+                        value:'https://www.usoftchina.com?admin=false&_noc=0'
+                    },{
+                        margin:'10 0 0 0',
+                        width:110,
+                        xtype:'button',
+                        text:'复 制',
+                        handler:function(b){
+                            var text = b.ownerCt.items.items[1].value;
+                            var target = Ext.DomHelper.append(document.body, {
+                                tag: 'textarea',
+                                style: 'opacity: 0;position: absolute;top: -10000px;right: 0;',
+                                html: text
+                            });
+                            target.focus();
+                            target.select();
+                            document.execCommand('Copy');
+                            target.blur();
+                            document.body.removeChild(target);
+                            saas.util.BaseUtil.showSuccessToast('复制链接成功');
+                        }
+                    }]
+                }]
+            }]
+        });
+        win.show();
     }
 });

+ 7 - 8
frontend/saas-web/app/view/main/Navigation.js

@@ -10,6 +10,8 @@ Ext.define('saas.view.main.Navigation', {
     navCollapsed: false,
     cls: 'x-navpanel',
 
+    menuPadding: 0,
+
     initComponent: function () {
         var me = this;
         var view = new Ext.DataView({
@@ -87,7 +89,7 @@ Ext.define('saas.view.main.Navigation', {
                         '<div class="menu-content">',
                             '<tpl for="items">',
                             '<div class="menuitem">',
-                                '<div class="item-text" title="{text}" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}">',
+                                '<div class="item-text" data-config="{config}" data-id="{id}" data-text="{text}" data-type="query" data-viewType="{viewType}">',
                                     '{text}',
                                 '</div>',
                                 '<tpl if="{addType}">',
@@ -110,8 +112,8 @@ Ext.define('saas.view.main.Navigation', {
                         var menu = view.up('menu'),
                             menuView = view.el.dom.getElementsByClassName('x-navitem-menu')[0],
                             menuBox = menuView.getBoundingClientRect(),
-                            menuViewWidth = menuBox.width + 12,
-                            menuViewHeight = menuBox.height + 10,
+                            menuViewWidth = menuBox.width + me.menuPadding * 2,
+                            menuViewHeight = menuBox.height + me.menuPadding * 2,
                             menuItem = menuView.getElementsByClassName('menuitem');
 
                         menu.setWidth(menuViewWidth);
@@ -188,11 +190,8 @@ Ext.define('saas.view.main.Navigation', {
                 width: window.innerWidth,
                 cls: 'x-nav-menu',
                 layout: 'fit',
-                bodyPadding: 5,
-                style: {
-                    borderTopRightRadius: '4px',
-                    borderBottomRightRadius: '4px'
-                },
+                shadow: 'drop',
+                bodyPadding: me.menuPadding,
                 items: [view]
             });
         }

+ 41 - 9
frontend/saas-web/app/view/main/Navigation.scss

@@ -84,7 +84,7 @@ $nav-font-color-over: #fff;
                                         width: 0;
                                         height: 0;
                                         border: 8px solid transparent;
-                                        border-right-color: #fff;
+                                        border-right-color: #595B7E;
                                         border-left: none;
                                         position: absolute;
                                         right: 0;
@@ -110,8 +110,8 @@ $nav-font-color-over: #fff;
 }
 
 .x-nav-menu {
-    // border-width: 5px;
-    // border-left: none;
+    border: none;
+    border-radius: 0 4px 4px 0;
 }
 
 .x-navitem-menu {
@@ -127,27 +127,44 @@ $nav-font-color-over: #fff;
         border-bottom-right-radius: 4px;
 
         .menu {
-            width: 200px;
+            width: 188px;
             letter-spacing: 1px;
             display: flex;
             flex-direction: column;
 
             &:nth-child(2) {
                 .menu-content {
-                    border-left: 1px dashed #dce2e4;
+                    border-left: 1px solid #A4ABBC;
+                    &:before {
+                        content: '';
+                        position: absolute;
+                        width: 2px;
+                        height: 22px;
+                        margin-left: -2px;
+                        background: #484A69;
+                    }
+                    &:after {
+                        content: '';
+                        position: absolute;
+                        width: 2px;
+                        height: 22px;
+                        margin-left: -2px;
+                        background: #484A69;
+                        bottom: 0;
+                    }
                 }
             }
 
             .menu-title {
                 padding-left: 30px;
-                background: #EEF9FE;
+                background: #484A69;
 
                 .menu-title-text {
                     height: 40px;
                     line-height: 40px;
                     font-size: 16px;
                     font-weight: bold;
-                    color: #4F5170;
+                    color: #eeeef2;
                     letter-spacing: 0.64px;
                     text-align: left;
                 }
@@ -155,6 +172,7 @@ $nav-font-color-over: #fff;
 
             .menu-content {
                 height: 100%;
+                background: #484A69;
                 
                 .menuitem {
                     padding-left: 25px;
@@ -163,7 +181,7 @@ $nav-font-color-over: #fff;
                     align-content: space-between;
 
                     .item-text {
-                        color: #4F5170;
+                        color: #eeeef2;
                         cursor: pointer;
                         height: 34px;
                         line-height: 34px;
@@ -192,7 +210,7 @@ $nav-font-color-over: #fff;
 
                     &:hover {
                         border-radius: 4px;
-                        background-color: #E4E4E4;
+                        background-color: #595B7E;
 
                         .item-icon {
                             display: block;
@@ -206,4 +224,18 @@ $nav-font-color-over: #fff;
             }
         }
     }
+}
+
+.x-tab-shareTab{
+    .x-tab-active{
+        .x-tab-wrap-default{
+            border-bottom: 1px solid #000000 !important; 
+        }
+    }
+    .x-tab-bar-plain .x-tab-inner-default {
+        color: #a9a7a7;
+    }
+    .x-tab-bar-plain .x-tab.x-tab-active.x-tab-default .x-tab-inner-default {
+        color: #000000;
+    }
 }

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

@@ -47,7 +47,10 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         xtype: "vendorDbfindTrigger",
         name: "pb_vendname",
         fieldLabel: "供应商名称",
-        allowBlank : false
+        allowBlank : false,
+        listeners: {
+            change: 'clearDetails'
+        }
     },{
         xtype:"numberfield",
         name:"ve_leftamount",

+ 59 - 7
frontend/saas-web/app/view/money/payBalance/FormPanelController.js

@@ -132,8 +132,8 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                 beforequery: function(f) {
                     var me = this,
                     viewModel = me.getViewModel(),
-                    rb_custname = viewModel.get('rb_custname');
-                    if(!rb_custname) {
+                    pb_vendname = viewModel.get('pb_vendname');
+                    if(!pb_vendname) {
                         saas.util.BaseUtil.showErrorToast('请先录入主表字段【' + '<span style="color: red;">供应商名称</span>】');
                         return false;
                     }
@@ -141,8 +141,8 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                 beforetriggerclick: function(f) {
                     var me = this,
                     viewModel = me.getViewModel(),
-                    rb_custname = viewModel.get('rb_custname');
-                    if(!rb_custname) {
+                    pb_vendname = viewModel.get('pb_vendname');
+                    if(!pb_vendname) {
                         saas.util.BaseUtil.showErrorToast('请先录入主表字段【' + '<span style="color: red;">供应商名称</span>】');
                         return false;
                     }
@@ -169,7 +169,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                 beforequery: function(f) {
                     var me = this,
                     viewModel = me.getViewModel(),
-                    rb_custname = viewModel.get('rb_custname');
+                    rb_custname = viewModel.get('pb_vendname');
                     if(!rb_custname) {
                         saas.util.BaseUtil.showErrorToast('请先录入主表字段【' + '<span style="color: red;">供应商名称</span>】');
                         return false;
@@ -178,7 +178,7 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
                 beforetriggerclick: function(f) {
                     var me = this,
                     viewModel = me.getViewModel(),
-                    rb_custname = viewModel.get('rb_custname');
+                    rb_custname = viewModel.get('pb_vendname');
                     if(!rb_custname) {
                         saas.util.BaseUtil.showErrorToast('请先录入主表字段【' + '<span style="color: red;">供应商名称</span>】');
                         return false;
@@ -288,5 +288,57 @@ Ext.define('saas.view.money.payBalance.FormPanelController', {
         main.pb_auditman = '';
         main.pb_auditdate = null;
         return formData;
-    }
+    },
+
+    /**
+     * 清空所有从表数据
+     */
+    clearDetails: function() {
+        var me = this;
+        
+        me.clearDetail0();
+        me.clearDetail1();
+    },
+
+    /**
+     * 清空第一个从表数据
+     */
+    clearDetail0: function(f, n, o) {
+        var me = this,
+        form = me.getView(),
+        grid = form.query('detailGridField')[0];
+        me.clearDetail(grid);
+    },
+
+    /**
+     * 清空第二个从表数据
+     */
+    clearDetail1: function() {
+        var me = this,
+        form = me.getView(),
+        grid = form.query('detailGridField')[1];
+        me.clearDetail(grid);
+    },
+
+    /**
+     * 清空一个从表数据
+     */
+    clearDetail: function(grid) {
+        var datas = [],
+        emptyRows = grid.emptyRows,
+        detnoColumn = grid.detnoColumn,
+        detno = 0,
+        store = grid.getStore();
+        
+        Ext.Array.each(new Array(emptyRows), function() {
+            detno += 1;
+            var data = {};
+            data[detnoColumn] = detno;
+            datas.push(data);
+        })
+        store.removeAll();
+        store.add(datas);
+        // 不写该方法合计列会错位,这里触发afterEdit事件用来刷新grid
+        store.getAt(0) ? store.afterEdit(store.getAt(0), ['']) : null;
+    },
 });

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

@@ -46,7 +46,10 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
         xtype: "customerDbfindTrigger",
         name: "rb_custname",
         fieldLabel: "客户名称",
-        allowBlank : false
+        allowBlank : false,
+        listeners: {
+            change: 'clearDetails'
+        }
     }, {
         xtype: "numberfield",
         name: "cu_leftamount",

+ 53 - 1
frontend/saas-web/app/view/money/recBalance/FormPanelController.js

@@ -263,5 +263,57 @@ Ext.define('saas.view.money.recBalance.FormPanelController', {
         main.rb_auditman = '';
         main.rb_auditdate = null;
         return formData;
-    }
+    },
+
+    /**
+     * 清空所有从表数据
+     */
+    clearDetails: function() {
+        var me = this;
+        
+        me.clearDetail0();
+        me.clearDetail1();
+    },
+
+    /**
+     * 清空第一个从表数据
+     */
+    clearDetail0: function(f, n, o) {
+        var me = this,
+        form = me.getView(),
+        grid = form.query('detailGridField')[0];
+        me.clearDetail(grid);
+    },
+
+    /**
+     * 清空第二个从表数据
+     */
+    clearDetail1: function() {
+        var me = this,
+        form = me.getView(),
+        grid = form.query('detailGridField')[1];
+        me.clearDetail(grid);
+    },
+
+    /**
+     * 清空一个从表数据
+     */
+    clearDetail: function(grid) {
+        var datas = [],
+        emptyRows = grid.emptyRows,
+        detnoColumn = grid.detnoColumn,
+        detno = 0,
+        store = grid.getStore();
+        
+        Ext.Array.each(new Array(emptyRows), function() {
+            detno += 1;
+            var data = {};
+            data[detnoColumn] = detno;
+            datas.push(data);
+        })
+        store.removeAll();
+        store.add(datas);
+        // 不写该方法合计列会错位,这里触发afterEdit事件用来刷新grid
+        store.getAt(0) ? store.afterEdit(store.getAt(0), ['']) : null;
+    },
 });

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

@@ -30,7 +30,7 @@ Ext.define('saas.view.money.report.AccountDetails', {
             ["销售退货单", "销售退货单"]
         ]
     }, {
-        name: 'date',
+        name: 'pb_date',
         xtype: 'condatefield',
         emptyText: '日期',
         columnWidth: 0.3
@@ -62,11 +62,6 @@ Ext.define('saas.view.money.report.AccountDetails', {
         text: '单据类型',
         dataIndex: 'sl_kind',
         width: 110
-    }, {
-        text: '单据日期',
-        dataIndex: 'date',
-        xtype: 'datecolumn',
-        width: 110
     }, {
         text: '供应商名称',
         dataIndex: 've_name',
@@ -79,9 +74,14 @@ Ext.define('saas.view.money.report.AccountDetails', {
         text: '核销单号',
         dataIndex: 'pb_code',
         width: 200
+    }, {
+        text: '单据日期',
+        dataIndex: 'pb_date',
+        xtype: 'datecolumn',
+        width: 110
     }, {
         text: '本期核销金额',
-        dataIndex: 'sl_amount',
+        dataIndex: 'pbd_nowbalance',
         exportFormat: 'Amount',
         xtype: 'numbercolumn',
         width: 130,
@@ -93,7 +93,7 @@ Ext.define('saas.view.money.report.AccountDetails', {
         }
     }, {
         text: '总金额',
-        dataIndex: 'total',
+        dataIndex: 'sl_orderamount',
         xtype: 'numbercolumn',
         exportFormat: 'Amount',
         width: 110,

+ 2 - 2
frontend/saas-web/app/view/money/report/OtherIODetail.js

@@ -10,8 +10,8 @@ Ext.define('saas.view.money.report.OtherIODetail', {
 
     viewName: 'money-report-otheriodetail',
 
-    groupField: 'bankname',
-    groupHeaderTpl: '资金账户: {[values.rows[0].data.bankname]}',
+    groupField: 'bl_bankname',
+    groupHeaderTpl: '资金账户: {[values.rows[0].data.bl_bankname]}',
     listUrl: '/api/money/report/otheriodetail',
     defaultCondition: null,
     reportTitle: '其他收支明细表',

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

@@ -78,7 +78,7 @@ Ext.define('saas.view.purchase.report.Purchase', {
     }, {
         text: '物料编号',
         width: 150,
-        dataIndex: 'pr_code'
+        dataIndex: 'pd_prodcode'
     }, {
         text: '品牌',
         dataIndex: 'pr_brand',

+ 6 - 7
frontend/saas-web/app/view/purchase/report/PurchasePay.js

@@ -58,19 +58,18 @@ Ext.define('saas.view.purchase.report.PurchasePay', {
         exportFormat: 'Amount',
         dataIndex: 'pbd_amount',
         width: 110,
-        summaryType: 'sum',
         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);
         },
-        summaryRenderer: 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);
-        }
+        // summaryRenderer: 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: 'pbd_nowbalance',

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

@@ -78,7 +78,7 @@ Ext.define('saas.view.sale.report.Sale', {
     }, {
         text: '物料编号',
         width: 150,
-        dataIndex: 'pr_code'
+        dataIndex: 'sd_prodcode'
     }, {
         text: '品牌',
         dataIndex: 'pr_brand',

+ 1 - 1
frontend/saas-web/app/view/stock/otherIn/QueryPanel.js

@@ -184,7 +184,7 @@ Ext.define('saas.view.stock.otherIn.QueryPanel', {
             text: '数量',
             dataIndex: 'pd_inqty',
             xtype:'numbercolumn',
-            width: 10,
+            width: 110,
             renderer : function(v) {
                 var arr = (v + '.').split('.');
                 var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');

+ 3 - 3
frontend/saas-web/app/view/stock/otherOut/FormPanel.js

@@ -164,19 +164,19 @@ Ext.define('saas.view.stock.otherOut.FormPanel', {
                 width: 110.0,
                 editor : {
                     xtype : "numberfield",
-                    decimalPrecision: 8,
+                    decimalPrecision: 3,
                     minValue:0
                 },
                 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.' + xr.join('');
                     return Ext.util.Format.number(v, format);
                 },
                 summaryType: 'sum',
                 summaryRenderer: 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.' + xr.join('');
                     return Ext.util.Format.number(v, format);
                 }

+ 1 - 1
frontend/saas-web/app/view/stock/otherOut/QueryPanel.js

@@ -184,7 +184,7 @@ Ext.define('saas.view.stock.otherOut.QueryPanel', {
             text: '数量',
             dataIndex: 'pd_inqty',
             xtype:'numbercolumn',
-            width: 10,
+            width: 110,
             renderer : function(v) {
                 var arr = (v + '.').split('.');
                 var xr = (new Array(arr[1].length > 3 ? 3 : arr[1].length)).fill('0');

BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中粗-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中粗-繁.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中黑-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-中黑-繁.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-准-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-准-繁.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-极细-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-极细-繁.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-纤细-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-纤细-繁.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-细-简.ttf


BIN
frontend/saas-web/packages/local/theme-default/resources/fonts/pingfang/苹方黑体-细-繁.ttf


+ 0 - 1
frontend/saas-web/packages/local/theme-default/sass/etc/all.scss

@@ -1 +0,0 @@
-@import 'fontset.scss';

+ 0 - 35
frontend/saas-web/packages/local/theme-default/sass/etc/fontset.scss

@@ -1,35 +0,0 @@
-$ext-font-path: get-resource-path('fonts');
-
-@font-face {
-    font-family: 'pingFangSC-Regular';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-准-简.ttf') format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'PingFangSC-Ultralight';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-极细-简.ttf') format('truetype');
-    font-weight: normal;
-    font-style: normal;
-}
-
-@font-face {
-    font-family: 'PingFangSC-Light';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-细-简.ttf?t=1541646656813') format('truetype');
-}
-
-@font-face {
-    font-family: 'PingFangSC-Thin';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-纤细-简.ttf?t=1541646656813') format('truetype');
-}
-
-@font-face {
-    font-family: 'PingFangSC-Medium';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-中黑-简.ttf?t=1541646656813') format('truetype');
-}
-
-@font-face {
-    font-family: 'PingFangSC-Medium';
-    src: url('#{$ext-font-path}/pingfang/苹方黑体-中粗-简.ttf?t=1541646656813') format('truetype');
-}