Browse Source

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

rainco 7 years ago
parent
commit
1207839255
100 changed files with 1024 additions and 488 deletions
  1. 9 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/dto/AddApplyDTO.java
  2. 2 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  3. 4 3
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ExcelController.java
  4. 1 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/EndProductMapper.java
  5. 1 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/ExcelService.java
  6. 1 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/EndProductServiceImpl.java
  7. 7 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/ExcelServiceImpl.java
  8. 35 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/SystemRemindServiceImpl.java
  9. 4 0
      applications/commons/commons-server/src/main/resources/mapper/EndProductMapper.xml
  10. 10 4
      applications/commons/commons-server/src/main/resources/mapper/SystemRemindMapper.xml
  11. 8 4
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/CustomerServiceImpl.java
  12. 1 0
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  13. 7 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  14. 1 1
      applications/document/document-server/src/main/resources/mapper/AddressMapper.xml
  15. 1 1
      applications/document/document-server/src/main/resources/mapper/BankinformationMapper.xml
  16. 1 0
      applications/document/document-server/src/main/resources/mapper/FundinouttypeMapper.xml
  17. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductbrandMapper.xml
  18. 1 1
      applications/document/document-server/src/main/resources/mapper/ProducttypeMapper.xml
  19. 1 1
      applications/document/document-server/src/main/resources/mapper/ProductunitMapper.xml
  20. 1 1
      applications/document/document-server/src/main/resources/mapper/VendorkindMapper.xml
  21. 4 0
      applications/money/money-dto/pom.xml
  22. 2 1
      applications/money/money-dto/src/main/java/com/usoftchina/saas/money/dto/VerificationFormDTO.java
  23. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/MoneyApplicatiion.java
  24. 1 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/controller/PaybalanceController.java
  25. 4 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtran.java
  26. 4 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Othsp.java
  27. 4 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Othte.java
  28. 4 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Pay.java
  29. 4 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Rec.java
  30. 3 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java
  31. 3 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java
  32. 3 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java
  33. 3 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  34. 3 1
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  35. 9 2
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java
  36. 6 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseMapper.xml
  37. 4 0
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java
  38. 5 2
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  39. 1 1
      applications/sale/sale-server/src/main/resources/mapper/SaleListMapper.xml
  40. 4 1
      applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml
  41. 12 0
      base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/CompanyApi.java
  42. 12 12
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountCenterController.java
  43. 16 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/CompanyController.java
  44. 14 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/RoleController.java
  45. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/CompanyMapper.java
  46. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleMapper.java
  47. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/CompanyService.java
  48. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/RoleService.java
  49. 6 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/CompanyServiceImpl.java
  50. 10 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java
  51. 11 0
      base-servers/account/account-server/src/main/resources/mapper/CompanyMapper.xml
  52. 3 0
      base-servers/account/account-server/src/main/resources/mapper/RoleMapper.xml
  53. 1 0
      framework/core/src/main/java/com/usoftchina/saas/exception/ExceptionCode.java
  54. 106 56
      frontend/saas-portal-web/src/components/conenter/addenterprise.vue
  55. 61 47
      frontend/saas-portal-web/src/components/conenter/company.vue
  56. 46 6
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  57. 27 12
      frontend/saas-portal-web/src/components/conenter/home.vue
  58. 1 0
      frontend/saas-portal-web/src/store/index.js
  59. 12 7
      frontend/saas-portal-web/static/css/gongsi.css
  60. BIN
      frontend/saas-portal-web/static/img/list.png
  61. 1 1
      frontend/saas-web/app/view/core/base/GridPanel.js
  62. 2 2
      frontend/saas-web/app/view/core/dbfind/AddMultiDbfindGridPanel.js
  63. 2 2
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  64. 3 1
      frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js
  65. 2 2
      frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js
  66. 1 1
      frontend/saas-web/app/view/core/dbfind/types/CustomerDbfindTrigger.js
  67. 16 16
      frontend/saas-web/app/view/core/dbfind/types/ProductDbfindTrigger.js
  68. 18 14
      frontend/saas-web/app/view/core/dbfind/types/ProductMultiDbfindTrigger.js
  69. 1 1
      frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js
  70. 40 25
      frontend/saas-web/app/view/core/form/FormPanel.js
  71. 1 0
      frontend/saas-web/app/view/core/form/FormPanelController.js
  72. 1 0
      frontend/saas-web/app/view/core/form/FormPanelModel.js
  73. 80 51
      frontend/saas-web/app/view/core/form/MseeageLog.js
  74. 13 64
      frontend/saas-web/app/view/core/report/ReportPanel.js
  75. 2 2
      frontend/saas-web/app/view/core/tab/Controller.js
  76. 2 2
      frontend/saas-web/app/view/document/address/DataListModel.js
  77. 2 2
      frontend/saas-web/app/view/document/bankinformation/DataListModel.js
  78. 2 9
      frontend/saas-web/app/view/document/bom/FormPanel.js
  79. 2 2
      frontend/saas-web/app/view/document/employee/DataListModel.js
  80. 8 8
      frontend/saas-web/app/view/document/kind/KindModel.js
  81. 20 20
      frontend/saas-web/app/view/document/product/BasePanel.js
  82. 41 41
      frontend/saas-web/app/view/document/product/FormPanel.js
  83. 2 2
      frontend/saas-web/app/view/document/productbrand/DataListModel.js
  84. 2 2
      frontend/saas-web/app/view/document/productunit/DataListModel.js
  85. 0 1
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  86. 2 2
      frontend/saas-web/app/view/document/warehouse/DataListModel.js
  87. 8 6
      frontend/saas-web/app/view/home/charts/MonthSale.js
  88. 1 1
      frontend/saas-web/app/view/home/infoCardList/InfoList.js
  89. 2 2
      frontend/saas-web/app/view/home/infoCardList/Payment.js
  90. 2 2
      frontend/saas-web/app/view/home/infoCardList/PurchaseIn.js
  91. 1 1
      frontend/saas-web/app/view/home/infoCardList/Recment.js
  92. 1 1
      frontend/saas-web/app/view/home/infoCardList/SaleOut.js
  93. 2 2
      frontend/saas-web/app/view/home/infoCardList/UnauditCheckIn.js
  94. 1 1
      frontend/saas-web/app/view/home/infoCardList/UnauditSaleOut.js
  95. 44 7
      frontend/saas-web/app/view/main/Main.js
  96. 28 0
      frontend/saas-web/app/view/main/Main.scss
  97. 123 0
      frontend/saas-web/app/view/main/MainController.js
  98. 4 0
      frontend/saas-web/app/view/money/fundtransfer/FormPanelModel.js
  99. 3 3
      frontend/saas-web/app/view/money/fundtransfer/QueryPanel.js
  100. 1 1
      frontend/saas-web/app/view/money/othreceipts/FormPanel.js

+ 9 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/dto/AddApplyDTO.java

@@ -15,6 +15,7 @@ public class AddApplyDTO extends CommonBaseDTO implements Serializable {
     private String username;
     private String mobile;
     private String roles;
+    private String roleNames;
     /**
      * 审批状态:  2.待处理  0.不同意   1.同意
      */
@@ -22,6 +23,14 @@ public class AddApplyDTO extends CommonBaseDTO implements Serializable {
     private Long creatorId;
     private Long companyId;
 
+    public String getRoleNames() {
+        return roleNames;
+    }
+
+    public void setRoleNames(String roleNames) {
+        this.roleNames = roleNames;
+    }
+
     public Long getCompanyId() {
         return companyId;
     }

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

@@ -39,6 +39,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_NULLCALLER(79315, "该单据的定义不存在"),
     BIZ_REPORT_NOCALLER(79316, "报表配置不存在"),
     BIZ_REPORT_NOTCORRECT(79317, "导入数据无效"),
+    BIZ_IMPORT_ERROREXCEL(79318, "请导入对应的单据数据"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
@@ -69,6 +70,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     PRODUCT_ISCLOSE(79506, "物料已关闭"),
     CUSTOMER_ISCLOSE(79507, "客户资料已关闭"),
     REQUIREDFIELD_NULL(79508,"存在必填字段为空"),
+    USER_EXIST(79509, ""),
 
     //采购 70000-71999
     PURCCHECKIN_POST_ERROR(70000,""),

+ 4 - 3
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/ExcelController.java

@@ -55,6 +55,7 @@ public class ExcelController {
         } else {
             excelService.clearBefore(caller);
             String ft = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1);
+            String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
             is = file.getInputStream();
             if (ft.equals("xlsx")) {
                 wb = new XSSFWorkbook(is);
@@ -64,12 +65,12 @@ public class ExcelController {
                 return Result.error(new String("{error: 'excel文件的格式不太规范,导入失败<hr>可以尝试将文件另存为.xls文件,或将数据选择性粘贴到excel模板,然后导入'}".getBytes("utf-8"),
                         "iso8859-1"));
             }
-            keyvalue = excelService.parseTemplet(wb, caller);
+            keyvalue = excelService.parseTemplet(wb, caller, fileName);
         }
         return Result.success(keyvalue);
     }
 
-    @RequestMapping(value = "/test")
+   /* @RequestMapping(value = "/test")
     public Result ParseTemplet(String caller) throws IOException {
         InputStream is = null;
         Workbook wb = null;
@@ -78,6 +79,6 @@ public class ExcelController {
         wb = new XSSFWorkbook(is);
         excelService.parseTemplet(wb, caller);
         return Result.success();
-    }
+    }*/
 
 }

+ 1 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/EndProductMapper.java

@@ -21,6 +21,7 @@ public interface EndProductMapper {
     void updatePeriodStatus(@Param("status") Long status,@Param("period") String period, @Param("companyId") Long companyId);
 
     void updateRe(@Param("ym") String ym, @Param("companyId") Long companyId);
+    void updatePa(@Param("ym") String ym, @Param("companyId") Long companyId);
 
     int checkPay(Long companyId);
     int checkRec(Long companyId);

+ 1 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/ExcelService.java

@@ -1,7 +1,6 @@
 package com.usoftchina.saas.commons.service;
 
 import org.apache.poi.ss.usermodel.Workbook;
-import org.apache.poi.xssf.streaming.SXSSFWorkbook;
 
 import java.util.Map;
 
@@ -10,5 +9,5 @@ public interface ExcelService {
 
     void clearBefore(String caller);
 
-    Integer parseTemplet(Workbook wb, String caller);
+    Integer parseTemplet(Workbook wb, String caller, String title);
 }

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

@@ -88,6 +88,7 @@ public class EndProductServiceImpl implements EndProductService {
             throw new BizException(BizExceptionCode.BIZ_UNENDPRODUCT);
         }else{
             endProductMapper.updateRe(period, BaseContextHolder.getCompanyId());
+            endProductMapper.updatePa(period, BaseContextHolder.getCompanyId());
             endProductMapper.updatePeriodStatus(0L, period, BaseContextHolder.getCompanyId());
             messageLogService.customizeLog(generateMsgObj(Long.parseLong(period)), Operation.UNENDPRODUCT);
         }

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

@@ -78,7 +78,7 @@ public class ExcelServiceImpl implements ExcelService{
 
     @Override
     @Transactional
-    public Integer parseTemplet(Workbook wb, String caller) {
+    public Integer parseTemplet(Workbook wb, String caller, String fileName) {
         if (wb == null || StringUtils.isEmpty(caller)) {
             throw new BizException(BizExceptionCode.NULL_DATA);
         }
@@ -96,6 +96,11 @@ public class ExcelServiceImpl implements ExcelService{
         if (StringUtils.isEmpty(cols)) {
             throw new BizException(12135, "没有查询到对应的excel配置");
         }
+        //验证标题是否正确
+        String title = dataTemplet.getDt_title();
+        if (StringUtils.isEmpty(fileName) || fileName.indexOf(title) < 0) {
+            throw new BizException(BizExceptionCode.BIZ_IMPORT_ERROREXCEL);
+        }
         //前端列表信息
         List<TempletSet> templetSets = JSONArray.parseArray(cols, TempletSet.class);
         Map<String, List<TempletSet>> columns = CollectionUtils.groupBy(templetSets, TempletSet::getPosition);
@@ -222,7 +227,7 @@ public class ExcelServiceImpl implements ExcelService{
                        for (TempletSet set : detail) {
                            //取excel值
                            value = data.get(set.getDescription());
-                           if ("true".equals(set.getNecessary()) && value.equals("")) {
+                           if ("true".equals(set.getNecessary()) && StringUtils.isEmpty(value)) {
                                detailData = null;
                                //err.append("第" + (i + 3) + "行 " + set.getDescription() + " 必填字段未填写!<br/> ");
                                break;

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

@@ -3,13 +3,19 @@ package com.usoftchina.saas.commons.service.impl;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.account.api.AccountApi;
+import com.usoftchina.saas.account.api.CompanyApi;
 import com.usoftchina.saas.account.dto.AccountDTO;
+import com.usoftchina.saas.account.dto.CompanyDTO;
+import com.usoftchina.saas.account.dto.RoleBaseDTO;
 import com.usoftchina.saas.commons.dto.AddApplyDTO;
 import com.usoftchina.saas.commons.dto.ListReqDTO;
+import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.mapper.SystemRemindMapper;
 import com.usoftchina.saas.commons.po.AddApply;
 import com.usoftchina.saas.commons.service.SystemRemindService;
 import com.usoftchina.saas.context.BaseContextHolder;
+import com.usoftchina.saas.exception.BizException;
+import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.utils.BeanMapper;
 import com.usoftchina.saas.utils.ObjectUtils;
@@ -31,11 +37,23 @@ public class SystemRemindServiceImpl implements SystemRemindService {
     private SystemRemindMapper systemRemindMapper;
     @Autowired
     private AccountApi accountApi;
+    @Autowired
+    private CompanyApi companyApi;
 
     @Override
     public void save(AddApplyDTO addApplyDTO) {
-        addApplyDTO.setCreateTime(new Date());
-        AddApply addApply = BeanMapper.map(addApplyDTO, AddApply.class);
+        //校验这个人是否已经在此企业
+        AccountDTO accountDTO = accountApi.getAccount(addApplyDTO.getMobile()).getData();
+        CompanyDTO companyDTO = companyApi.getCompanyById(addApplyDTO.getCompanyId()).getData();
+        if (!ObjectUtils.isEmpty(accountDTO.getCompany(companyDTO.getId()))){
+            throw new BizException(ExceptionCode.USER_COMPANY_EXIST);
+        }
+        AddApply addApply = new AddApply();
+        addApply.setMobile(addApplyDTO.getMobile());
+        addApply.setUsername(addApplyDTO.getUsername());
+        addApply.setStatus("2");
+        addApply.setCompanyId(addApplyDTO.getCompanyId());
+        addApply.setCreateTime(new Date());
         addApply.setCreatorId(BaseContextHolder.getUserId());
         addApply.setCreatorName(BaseContextHolder.getUserName());
         systemRemindMapper.insertSelective(addApply);
@@ -43,9 +61,24 @@ public class SystemRemindServiceImpl implements SystemRemindService {
 
     @Override
     public PageInfo<AddApplyDTO> getApplyList(PageRequest pageRequest, ListReqDTO listReqDTO) {
+        Long companyId = BaseContextHolder.getCompanyId();
+        StringBuilder roles = new StringBuilder();
+        StringBuilder roleNames = new StringBuilder();
         PageHelper.startPage(pageRequest.getNumber(), pageRequest.getSize());
         String condition = listReqDTO.getFinalCondition();
         List<AddApplyDTO> addApplyDTOList = systemRemindMapper.getApplyList(condition, BaseContextHolder.getCompanyId());
+        for (AddApplyDTO addapplyDTO : addApplyDTOList) {
+            AccountDTO accountDTO = accountApi.getAccount(addapplyDTO.getMobile()).getData();
+            List<RoleBaseDTO> roleBaseDTOList = accountDTO.getRolesMap().get(companyId);
+            for (RoleBaseDTO roleBaseDTO : roleBaseDTOList){
+                roles.append(roleBaseDTO.getId() + ",");
+                roleNames.append(roleBaseDTO.getName() + ",");
+            }
+            addapplyDTO.setRoles(roles.substring(0, roles.length() - 1));
+            addapplyDTO.setRoleNames(roleNames.substring(0, roleNames.length() - 1));
+            roles.setLength(0);
+            roleNames.setLength(0);
+        }
         PageInfo<AddApplyDTO> pageInfo = new PageInfo<AddApplyDTO>(addApplyDTOList);
         return pageInfo;
     }

+ 4 - 0
applications/commons/commons-server/src/main/resources/mapper/EndProductMapper.xml

@@ -41,6 +41,10 @@
         UPDATE receivablesdetail SET RD_STATUS=0 WHERE date_format(rd_date, '%Y%m')=#{ym} AND companyid=#{companyId};
     </update>
 
+    <update id="updatePa" >
+        UPDATE payablesdetail SET PD_STATUS=0 WHERE date_format(PD_date, '%Y%m')=#{ym} AND companyid=#{companyId};
+    </update>
+
     <select id="checkPay" parameterType="java.lang.Long" resultType="java.lang.Integer">
         select count(1) from vendor where (ve_id,companyid) in (select pb_vendid,companyid from (
         select pbd_ym,pb_vendid,paybalance.companyid from paybalance,paybalancedetail where pb_id=pbd_pbid and pbd_slkind='期初余额'

+ 10 - 4
applications/commons/commons-server/src/main/resources/mapper/SystemRemindMapper.xml

@@ -20,10 +20,10 @@
               AND COMPANYID = #{companyId}
           </if>
       </where>
-      ORDER BY RE_STATUS, CREATETIME DESC
+      ORDER BY RE_STATUS DESC,RE_ID DESC
     </select>
     <update id="confirmApply">
-        UPDATE REMIND SET STATUS = #{status}, updateTime = now(), updaterId = #{updaterId}
+        UPDATE REMIND SET RE_STATUS = #{status}, updateTime = now(), updaterId = #{updaterId}
         where re_id = #{id}
     </update>
     <insert id="insertSelective" parameterType="com.usoftchina.saas.commons.po.AddApply">
@@ -48,7 +48,10 @@
                 createTime,
             </if>
             <if test="companyId != null">
-                companyId
+                companyId,
+            </if>
+            <if test="status != null">
+                re_status
             </if>
         </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
@@ -68,7 +71,10 @@
                 #{createTime, jdbcType=TIMESTAMP},
             </if>
             <if test="companyId != null">
-                #{companyId, jdbcType=TIMESTAMP}
+                #{companyId, jdbcType=TIMESTAMP},
+            </if>
+            <if test="status != null">
+                #{status, jdbcType=TIMESTAMP}
             </if>
         </trim>
     </insert>

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

@@ -303,8 +303,8 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         getMapper().updateByPrimaryKeySelective(customer);
 
         //插入中间表
-        Double amount = (customer.getCu_beginaramount() == null ? new Double(0) : customer.getCu_beginaramount())
-                - (customer.getCu_beginprerecamount() == null ? new Double(0) : customer.getCu_beginprerecamount());
+        Double amount = (main.getCu_beginaramount() == null ? new Double(0) : main.getCu_beginaramount())
+                - (main.getCu_beginprerecamount() == null ? new Double(0) : main.getCu_beginprerecamount());
         Subledger subledger = new Subledger();
         subledger.setSl_code("期初余额");
         subledger.setSl_kind("期初余额");
@@ -318,11 +318,15 @@ public class CustomerServiceImpl extends CommonBaseServiceImpl<CustomerMapper, C
         subledger.setCreatorName(BaseContextHolder.getUserName());
         if (amount > new Double(0)){
             subledger.setSl_amount(amount);
+            subledger.setSl_preamount(new Double(0));
         }else {
-            subledger.setSl_preamount(amount);
+            subledger.setSl_amount(new Double(0));
+            subledger.setSl_preamount(Math.abs(amount));
         }
         subledger.setSl_orderamount(Math.abs(amount));
-        subledger.setSl_namount(Math.abs(amount));
+        subledger.setSl_namount((subledger.getSl_orderamount() == null ? new Double(0) : subledger.getSl_orderamount()) +
+                (subledger.getSl_discount() == null ? new Double(0) : subledger.getSl_discount()) -
+                (subledger.getSl_yamount() == null ? new Double(0) : subledger.getSl_yamount()));
 
         Long sl_id  = subledgerMapper.selectByKindCodeCustid("期初余额","期初余额",
                 Math.toIntExact(customer.getId()),BaseContextHolder.getCompanyId(),YM);

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

@@ -693,6 +693,7 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
                                     break;
                                 }
                                 detail.setPd_whid(Integer.valueOf(warehouse.getId().toString()));
+                                detail.setPd_whname(warehouse.getWh_description());
                                 detail.setPd_detno(detno);
                                 detno++;
                             }

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

@@ -279,12 +279,16 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         subledger.setSl_date(DateUtils.getFirstDay(main.getVe_begindate()));
         subledger.setSl_ym(DateUtils.getYm(main.getVe_begindate()));
         if (amount > new Double(0)){
-            subledger.setSl_amount(amount);
+            subledger.setSl_preamount(new Double(0));
+            subledger.setSl_amount(Math.abs(amount));
         }else {
-            subledger.setSl_preamount(amount);
+            subledger.setSl_amount(new Double(0));
+            subledger.setSl_preamount(Math.abs(amount));
         }
         subledger.setSl_orderamount(Math.abs(amount));
-        subledger.setSl_namount(Math.abs(amount));
+        subledger.setSl_namount((subledger.getSl_orderamount() == null ? new Double(0) : subledger.getSl_orderamount()) +
+                (subledger.getSl_discount() == null ? new Double(0) : subledger.getSl_discount()) -
+                (subledger.getSl_yamount() == null ? new Double(0) : subledger.getSl_yamount()));
         subledger.setCreateTime(new Date());
         subledger.setCreatorId(BaseContextHolder.getUserId());
         subledger.setCreatorName(BaseContextHolder.getUserName());

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

@@ -206,7 +206,7 @@
     </where>
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
-      SELECT AD_ADDRESS display,AD_ADDRESS value FROM ADDRESS WHERE COMPANYID=#{companyId}
+      SELECT AD_ADDRESS display,AD_ADDRESS value FROM ADDRESS WHERE COMPANYID=#{companyId} ORDER BY AD_ID DESC
   </select>
   <select id="getCountFromPurchase" resultType="int">
       SELECT COUNT(*) FROM PURCHASE WHERE PU_SHIPADDRESSCODE = (SELECT AD_ADDRESS FROM ADDRESS WHERE AD_ID = #{id}) AND companyId = #{companyId}

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

@@ -320,7 +320,7 @@
     </where>  order by bk_date desc, bk_id desc
   </select>
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
-        SELECT CONCAT(bk_bankcode,' ',bk_bankname) display,bk_bankname value FROM bankinformation WHERE COMPANYID=#{companyId}
+        SELECT CONCAT(bk_bankcode,' ',bk_bankname) display,bk_bankname value FROM bankinformation WHERE COMPANYID=#{companyId} order by bk_date desc, bk_id desc
     </select>
 
 

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

@@ -151,6 +151,7 @@
             and ft_kind=#{condition,jdbcType=VARCHAR}
           </if>
         </where>
+        ORDER BY FT_ID DESC
     </select>
 
   <select id="check" parameterMap="checkParamMap" statementType="CALLABLE">

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

@@ -111,7 +111,7 @@
     where pb_id = #{id}
   </update>
   <select id="selectAll" resultMap="BaseResultMap">
-    SELECT * FROM PRODUCTBRAND where companyId = #{companyId}
+    SELECT * FROM PRODUCTBRAND where companyId = #{companyId} ORDER BY PB_ID DESC
   </select>
 
   <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">

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

@@ -128,7 +128,7 @@
          </where>
     </select>
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
-        SELECT PT_NAME display,PT_NAME value FROM PRODUCTTYPE WHERE COMPANYID=#{companyId}
+        SELECT PT_NAME display,PT_NAME value FROM PRODUCTTYPE WHERE COMPANYID=#{companyId} ORDER BY PT_ID DESC
     </select>
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_KIND = (SELECT PT_NAME FROM PRODUCTTYPE WHERE PT_ID = #{id}) AND companyId=#{companyId}

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

@@ -120,7 +120,7 @@
         </where>
     </select>
     <select id="getCombo" resultType="com.usoftchina.saas.commons.dto.ComboDTO">
-        SELECT PU_NAME display,PU_NAME value FROM PRODUCTUNIT WHERE COMPANYID=#{companyId}
+        SELECT PU_NAME display,PU_NAME value FROM PRODUCTUNIT WHERE COMPANYID=#{companyId} ORDER BY PU_ID DESC
     </select>
     <select id="getCountFromProduct" resultType="int">
         SELECT COUNT(*) FROM PRODUCT WHERE PR_UNIT = (SELECT PU_NAME FROM PRODUCTUNIT WHERE PU_ID = #{id}) AND companyId = #{companyId}

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

@@ -114,7 +114,7 @@
     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}
+    SELECT VK_NAME display, VK_NAME value FROM VENDORKIND WHERE COMPANYID=#{companyId} ORDER BY VK_ID DESC
   </select>
   <select id="selectCountByName" resultType="int">
     SELECT COUNT(*) FROM VENDORKIND

+ 4 - 0
applications/money/money-dto/pom.xml

@@ -28,6 +28,10 @@
             <groupId>io.undertow</groupId>
             <artifactId>undertow-servlet</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-dto</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 2 - 1
applications/money/money-dto/src/main/java/com/usoftchina/saas/money/dto/VerificationFormDTO.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.money.dto;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
 import lombok.Data;
 
 import java.io.Serializable;
@@ -10,7 +11,7 @@ import java.util.List;
  * @createtime 2018-10-22-17:02
  */
 @Data
-public class VerificationFormDTO implements Serializable {
+public class VerificationFormDTO extends BaseFormDTO implements Serializable {
     private VerificationDTO main;
 
     public VerificationDTO getMain() {

+ 1 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/MoneyApplicatiion.java

@@ -22,7 +22,7 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableAuthClient
 @MapperScan("com.usoftchina.saas.money.mapper")
 @EnableDynamicDataSource
-@ComponentScan(basePackages = {"com.usoftchina.saas"})
+//@ComponentScan(basePackages = {"com.usoftchina.saas.money"})
 public class MoneyApplicatiion {
     public static void main(String[] args) {
         SpringApplication.run(MoneyApplicatiion.class, args);

+ 1 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/controller/PaybalanceController.java

@@ -45,7 +45,7 @@ public class PaybalanceController {
     }
 
     @Transactional
-    @PostMapping("/deleteDetai2/{id}")
+    @PostMapping("/deleteDetail2/{id}")
     public Result deleteItems(@PathVariable("id") int id){
         paybalanceService.deleteItems(id);
         return Result.success();

+ 4 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Fundtran.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.money.po;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author heqw
  * @date 2018/10/25 19:28
  **/
-public class Fundtran {
+public class Fundtran extends BaseFormDTO implements Serializable {
     private Fundtransfer main;
     private List<Fundtransferdetail> items;
 

+ 4 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Othsp.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.money.po;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author heqw
  * @date 2018/10/24 17:42
  **/
-public class Othsp {
+public class Othsp extends BaseFormDTO implements Serializable {
     private Othspendings main;
     private List<Othspendingsdetail> items;
 

+ 4 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Othte.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.money.po;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author heqw
  * @date 2018/10/24 17:37
  **/
-public class Othte {
+public class Othte extends BaseFormDTO implements Serializable {
     private Othreceipts main;
     private List<Othreceiptsdetail> items;
 

+ 4 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Pay.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.money.po;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author heqw
  * @date 2018/10/23 10:19
  **/
-public class Pay {
+public class Pay extends BaseFormDTO implements Serializable {
     private Paybalance main;
     private List<Paybalancedet> items1;
     private List<Paybalancedetail> items2;

+ 4 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/po/Rec.java

@@ -1,12 +1,15 @@
 package com.usoftchina.saas.money.po;
 
+import com.usoftchina.saas.commons.dto.BaseFormDTO;
+
+import java.io.Serializable;
 import java.util.List;
 
 /**
  * @author heqw
  * @date 2018/10/23 15:59
  **/
-public class Rec {
+public class Rec extends BaseFormDTO implements Serializable {
     private Recbalance main;
     private List<Recbalancedet> items1;
     private List<Recbalancedetail> items2;

+ 3 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/FundtransferServiceImpl.java

@@ -57,7 +57,9 @@ public class FundtransferServiceImpl extends CommonBaseServiceImpl<FundtransferM
         String ft_code = fundtransfer.getFt_code();
 
         //编号校验
-        ft_code = pushMaxnubmer(ft_code, fundtransfer.getId());
+        if(fundtran.isCodeModified()) {
+            ft_code = pushMaxnubmer(ft_code, fundtransfer.getId());
+        }
 
         //单号赋值
         fundtransfer.setFt_code(ft_code);

+ 3 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthreceiptsServiceImpl.java

@@ -65,7 +65,9 @@ public class OthreceiptsServiceImpl extends CommonBaseServiceImpl<OthreceiptsMap
         String or_code = othreceipts.getOr_code();
 
         //编号校验
-        or_code = pushMaxnubmer(or_code, othreceipts.getId());
+        if(othte.isCodeModified()) {
+            or_code = pushMaxnubmer(or_code, othreceipts.getId());
+        }
 
         //单号赋值
         othreceipts.setOr_code(or_code);

+ 3 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/OthspendingsServiceImpl.java

@@ -60,7 +60,9 @@ public class OthspendingsServiceImpl extends CommonBaseServiceImpl<OthspendingsM
         String os_code = othspendings.getOs_code();
 
         //编号校验
-        os_code = pushMaxnubmer(os_code, othspendings.getId());
+        if(othsp.isCodeModified()) {
+            os_code = pushMaxnubmer(os_code, othspendings.getId());
+        }
         //单号赋值
         othspendings.setOs_code(os_code);
 

+ 3 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java

@@ -61,7 +61,9 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
 
         String pb_code = paybalance.getPb_code();
         //编号校验
-        pb_code = pushMaxnubmer(pb_code, paybalance.getId());
+        if(pay.isCodeModified()) {
+            pb_code = pushMaxnubmer(pb_code, paybalance.getId());
+        }
         //单号赋值
         paybalance.setPb_code(pb_code);
 

+ 3 - 1
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java

@@ -64,7 +64,9 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         String pu_code = recbalance.getRb_code();
 
         //编号校验
-        pu_code = pushMaxnubmer(pu_code, recbalance.getId());
+        if(rec.isCodeModified()) {
+            pu_code = pushMaxnubmer(pu_code, recbalance.getId());
+        }
         //单号赋值
         recbalance.setRb_code(pu_code);
 

+ 9 - 2
applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java

@@ -130,7 +130,9 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         Long id = main.getId();
         String code = main.getVc_code();
         //编号校验
-        code = pushMaxnubmer(code, id);
+        if(formdata.isCodeModified()) {
+            code = pushMaxnubmer(code, id);
+        }
         main.setVc_code(code);
 
         Verification verification = BeanMapper.map(main,Verification.class);
@@ -308,7 +310,12 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
         subledger.setSl_date(verification.getVc_date());
         subledger.setSl_ym(DateUtils.getYm(verification.getVc_date()));
         subledger.setSl_orderamount(new Double(0));
-        subledger.setSl_yamount(new Double(0));
+        if ("receivable_offset_payable".equals(kind)) {
+            subledger.setSl_yamount((subledger.getSl_orderamount() ==null?new Double(0): subledger.getSl_amount())-
+                    (subledger.getSl_namount() == null ? new Double(0) : subledger.getSl_namount()));
+        }else {
+            subledger.setSl_yamount(new Double(0));
+        }
         subledger.setSl_remark(verification.getVc_remark());
         subledger.setSl_discount(new Double(0));
         subledger.setSl_ym(DateUtils.getYm(verification.getVc_date()));

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

@@ -356,6 +356,12 @@
       <if test="pu_shipaddresscode != null" >
         PU_SHIPADDRESSCODE = #{pu_shipaddresscode,jdbcType=LONGVARCHAR},
       </if>
+      <if test="pu_auditman != null" >
+        pu_auditman = #{pu_auditman,jdbcType=VARCHAR},
+      </if>
+      <if test="pu_auditdate != null" >
+        pu_auditdate = #{pu_auditdate,jdbcType=TIMESTAMP},
+      </if>
     </set>
     where pu_id = #{id,jdbcType=INTEGER}
   </update>

+ 4 - 0
applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/mapper/SaleMapper.java

@@ -1,5 +1,6 @@
 package com.usoftchina.saas.sale.mapper;
 
+import com.netflix.ribbon.proxy.annotation.ClientProperties;
 import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.sale.dto.PurchaseDTO;
@@ -64,4 +65,7 @@ public interface SaleMapper extends CommonBaseMapper<Sale> {
     String validateCustStatus(Long id);
 
     String validateClose(List<DocBaseDTO> baseDTOs);
+
+    void updateAudit(@Param("id") Long id, @Param("status") String status, @Param("statuscode") String statuscode, @Param("format") String format,
+                     @Param("name") String name);
 }

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

@@ -28,6 +28,7 @@ import com.usoftchina.saas.sale.service.SaleService;
 import com.usoftchina.saas.storage.po.ProdIODetail;
 import com.usoftchina.saas.storage.po.ProdInOut;
 import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -256,14 +257,16 @@ public class SaleServiceImpl implements SaleService{
         if (integer > 0) {
             throw new BizException(BizExceptionCode.SALE_CUST_CLOSE);
         }
-        commonService.commonAudit("sale", "sa_id=" + id, "sa_status",
-                "sa_statuscode", "sa_auditdate", "sa_auditman");
+        /*commonService.commonAudit("sale", "sa_id=" + id, "sa_status",
+                "sa_statuscode", "sa_auditdate", "sa_auditman");*/
         //更新销售金额
         updateTotal(id);
         //更新从表总额
         updateTotalAndNetPrice(id);
         //更新从表不含税金额
         updateNetTotal(id);
+        //更新审核状态
+        saleMapper.updateAudit(id, Status.AUDITED.getDisplay(), Status.AUDITED.name(), DateUtils.format(new Date(), "yyyy-MM-dd"), BaseContextHolder.getUserName());
         DocBaseDTO docBaseDTO = getBaseDTOById(id);
         //日志
         messageLogService.audit(docBaseDTO);

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

@@ -91,7 +91,7 @@
             <if test="companyId != null">
                 and   sale.companyId = #{companyId}
             </if>
-        </where>  order by sa_date desc
+        </where>  order by sa_id desc,sd_id
     </select>
 
     <select id="selectSaleByCondition" resultMap="BaseResultMap">

+ 4 - 1
applications/sale/sale-server/src/main/resources/mapper/SaleMapper.xml

@@ -429,7 +429,10 @@
   <select id="checkCustomer" parameterType="long" resultType="integer">
     select count(1) from sale left join  customer on sa_custid=cu_id  where  cu_statuscode='CLOSE' and sa_id=#{id}
   </select>
-  
+  <update id="updateAudit">
+    update sale set sa_status=#{status},sa_statuscode=#{statuscode},sa_auditman=#{name},sa_auditdate=#{format} where sa_id=#{id}
+  </update>
+
   <!-- 销售订单转采购单-->
   <insert id="turnPurchase" parameterType="com.usoftchina.saas.sale.dto.PurchaseDTO" >
     <selectKey resultType="java.lang.Long" keyProperty="id">

+ 12 - 0
base-servers/account/account-api/src/main/java/com/usoftchina/saas/account/api/CompanyApi.java

@@ -3,10 +3,13 @@ package com.usoftchina.saas.account.api;
 import com.usoftchina.saas.account.dto.CompanyCopyDTO;
 import com.usoftchina.saas.account.dto.CompanyDTO;
 import com.usoftchina.saas.account.dto.CompanyRegDTO;
+import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import com.usoftchina.saas.base.Result;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * @author yingp
  * @date 2018/11/15
@@ -67,4 +70,13 @@ public interface CompanyApi {
      */
     @GetMapping(path = "/company/read/{id}")
     Result<CompanyDTO> getCompanyById(@PathVariable("id") Long id);
+
+    /**
+     * 按名称模糊查找
+     * @param name
+     * @return
+     */
+    @GetMapping("/company/find/{name}")
+    Result<List<CompanyRspDTO>> getCompanyByFuzzyName(@PathVariable("name") String name);
+
 }

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

@@ -2,19 +2,18 @@ package com.usoftchina.saas.account.controller;
 
 import com.usoftchina.saas.account.api.AccountApi;
 import com.usoftchina.saas.account.api.CompanyApi;
-import com.usoftchina.saas.account.dto.AccountDTO;
-import com.usoftchina.saas.account.dto.BindCompanyDTO;
-import com.usoftchina.saas.account.dto.CompanyAccountDTO;
-import com.usoftchina.saas.account.dto.CompanyDTO;
+import com.usoftchina.saas.account.dto.*;
 import com.usoftchina.saas.account.service.AccountCenterService;
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.commons.api.SystemRemindApi;
 import com.usoftchina.saas.commons.dto.AddApplyDTO;
-import com.usoftchina.saas.utils.ObjectUtils;
+import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.sso.api.SsoUserSpaceApi;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 @RestController
 @RequestMapping("/accountCenter")
 public class AccountCenterController {
@@ -94,17 +93,18 @@ public class AccountCenterController {
     }
 
     /**
-     * 校验企业是否已开通saas
-     * @param companyName
+     * 校验企业是否已开通saas, 返回模糊匹配结果
+     * @param companyName  企业名称或管理员名称
      * @return
      */
     @GetMapping("/company/isOpen")
     public Result checkIsOpen(@RequestParam("companyName") String companyName){
-        CompanyDTO companyDTO = companyApi.getCompanyByName(companyName).getData();
-        if (ObjectUtils.isEmpty(companyDTO)){
-            return Result.error();
+        Result<List<CompanyRspDTO>> result = companyApi.getCompanyByFuzzyName(companyName);
+        if (result.isSuccess()){
+            List<CompanyRspDTO> companyDTOList = result.getData();
+            return Result.success(companyDTOList);
         }
-        return Result.success(companyDTO.getId());
+        return Result.error(ExceptionCode.COMPANY_NOT_EXIST);
     }
 
     /**
@@ -119,7 +119,7 @@ public class AccountCenterController {
         addApplyDTO.setMobile(accountDTO.getMobile());
         addApplyDTO.setCompanyId(bindCompanyDTO.getCompanyId());
         addApplyDTO.setUsername(bindCompanyDTO.getUsername());
-        addApplyDTO.setStatus("0");
+        addApplyDTO.setStatus("2");
         systemRemindApi.save(addApplyDTO);
         return Result.success();
     }

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

@@ -3,6 +3,7 @@ package com.usoftchina.saas.account.controller;
 import com.usoftchina.saas.account.dto.CompanyCopyDTO;
 import com.usoftchina.saas.account.dto.CompanyDTO;
 import com.usoftchina.saas.account.dto.CompanyRegDTO;
+import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import com.usoftchina.saas.account.po.Company;
 import com.usoftchina.saas.account.service.CompanyService;
 import com.usoftchina.saas.base.Result;
@@ -10,6 +11,7 @@ import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.file.dto.FileInfoDTO;
 import com.usoftchina.saas.utils.BeanMapper;
+import com.usoftchina.saas.utils.CollectionUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -145,6 +147,20 @@ public class CompanyController {
         return Result.error(ExceptionCode.COMPANY_NOT_EXIST);
     }
 
+    /**
+     * 按名称(模糊)查找企业,返回企业名称、管理员名称、管理员手机号
+     * @param name
+     * @return
+     */
+    @GetMapping("/find/{name}")
+    public Result<List<CompanyRspDTO>> getCompanyByFuzzyName(@PathVariable("name") String name){
+        List<CompanyRspDTO> companyList = companyService.findByFuzzyName(name);
+        if (!CollectionUtils.isEmpty(companyList)){
+            return Result.success(companyList);
+        }
+        return Result.error(ExceptionCode.COMPANY_NOT_EXIST);
+    }
+
     /**
      * 当前登录的公司的信息
      *

+ 14 - 3
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/RoleController.java

@@ -5,6 +5,7 @@ import com.usoftchina.saas.account.dto.PowerSetListDTO;
 import com.usoftchina.saas.account.dto.RoleDTO;
 import com.usoftchina.saas.account.dto.RoleSaveDTO;
 import com.usoftchina.saas.account.dto.RoleUpdateDTO;
+import com.usoftchina.saas.account.mapper.RoleResourceMapper;
 import com.usoftchina.saas.account.po.Account;
 import com.usoftchina.saas.account.po.Role;
 import com.usoftchina.saas.account.service.AccountService;
@@ -34,6 +35,9 @@ public class RoleController {
     @Autowired
     private AccountService accountService;
 
+    @Autowired
+    private RoleResourceMapper roleResourceMapper;
+
     /**
      * 保存
      *
@@ -69,9 +73,16 @@ public class RoleController {
      */
     @PostMapping("/delete/{id}")
     public Result delete(@PathVariable Long id) {
-        clearAccountCacheByRoleId(id);
-        roleService.removeByPrimaryKey(id);
-        return Result.success();
+        boolean valid = roleService.valid(id);
+        if (valid) {
+            clearAccountCacheByRoleId(id);
+            //解除 角色-资源 绑定关系
+            roleResourceMapper.deleteByRoleId(id);
+            //删除 角色
+            roleService.removeByPrimaryKey(id);
+            return Result.success();
+        }
+        return Result.error(ExceptionCode.ROLE_HAS_USE);
     }
 
     /**

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

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.mapper;
 
 import com.usoftchina.saas.account.dto.CompanyRegDTO;
+import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import com.usoftchina.saas.account.po.Company;
 import com.usoftchina.saas.account.vo.CompanyBaseVO;
 import org.apache.ibatis.annotations.Param;
@@ -89,4 +90,11 @@ public interface CompanyMapper {
      * @param uu
      */
     void updateUUByPrimaryKey(@Param("companyId") Long companyId, @Param("uu") Long uu);
+
+    /**
+     * 按名称(模糊)查找企业,返回企业名称、管理员名称、管理员手机号
+     * @param name
+     * @return
+     */
+    List<CompanyRspDTO> findByFuzzyName(@Param("name") String name);
 }

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

@@ -26,4 +26,11 @@ public interface RoleMapper extends CommonBaseMapper<Role> {
      * @return
      */
     Role findManagerByCompanyId(@Param("companyId") Long companyId);
+
+    /**
+     * 查询角色绑定的用户数量
+     * @param id
+     * @return
+     */
+    int selectAccountCountById(Long id);
 }

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

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.service;
 
 import com.usoftchina.saas.account.dto.CompanyRegDTO;
+import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import com.usoftchina.saas.account.po.Company;
 import com.usoftchina.saas.account.vo.CompanyBaseVO;
 import com.usoftchina.saas.file.dto.FileInfoDTO;
@@ -105,4 +106,11 @@ public interface CompanyService {
      * @param uu
      */
     void updateUUByPrimaryKey(Long companyId, Long uu);
+
+    /**
+     * 按名称(模糊)查找企业,返回企业名称、管理员名称、管理员手机号
+     * @param name
+     * @return
+     */
+    List<CompanyRspDTO> findByFuzzyName(String name);
 }

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

@@ -59,4 +59,11 @@ public interface RoleService extends CommonBaseService<RoleMapper, Role> {
      * @return
      */
     Role findManagerByCompanyId(Long companyId);
+
+    /**
+     * 删除前校验
+     * @param id
+     * @return
+     */
+    boolean valid(Long id);
 }

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

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.account.service.impl;
 
 import com.usoftchina.saas.account.dto.CompanyRegDTO;
+import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import com.usoftchina.saas.account.mapper.AccountCompanyMapper;
 import com.usoftchina.saas.account.mapper.CompanyAppMapper;
 import com.usoftchina.saas.account.mapper.CompanyMapper;
@@ -59,6 +60,11 @@ public class CompanyServiceImpl implements CompanyService{
         companyMapper.updateUUByPrimaryKey(companyId, uu);
     }
 
+    @Override
+    public List<CompanyRspDTO> findByFuzzyName(String name) {
+        return companyMapper.findByFuzzyName(name);
+    }
+
     @Override
     public Company findByName(String name) {
         return companyMapper.selectByName(name);

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

@@ -171,6 +171,16 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         return getMapper().findManagerByCompanyId(companyId);
     }
 
+    @Override
+    public boolean valid(Long id) {
+        int count = getMapper().selectAccountCountById(id);
+        if (count > 0) {
+            return false;
+        }else {
+            return true;
+        }
+    }
+
     /**
      * 设置其他默认权限,用于生成设置按钮
      * @param powerDTO

+ 11 - 0
base-servers/account/account-server/src/main/resources/mapper/CompanyMapper.xml

@@ -115,6 +115,17 @@
     <select id="selectByName" parameterType="java.lang.String" resultMap="FullResultMap">
         select <include refid="baseColumns"/> from ac_company where name=#{name,jdbcType=VARCHAR}
     </select>
+    <select id="findByFuzzyName" parameterType="java.lang.String" resultType="com.usoftchina.saas.account.dto.CompanyRspDTO">
+        SELECT
+          ac.id,ac.name,aa.realname admin,aa.mobile adminMobile
+        FROM
+          ac_company ac
+          INNER JOIN ac_account aa on ac.creator_id = aa.id
+        WHERE
+          ac.name LIKE concat( '%', #{name,jdbcType=VARCHAR}, '%' )
+          OR aa.realname LIKE concat('%', '陈炜', '%')
+        ORDER BY ac.id
+    </select>
     <select id="selectByUu" parameterType="java.lang.Long" resultMap="FullResultMap">
         select <include refid="baseColumns"/> from ac_company where uu=#{uu,jdbcType=BIGINT}
     </select>

+ 3 - 0
base-servers/account/account-server/src/main/resources/mapper/RoleMapper.xml

@@ -107,4 +107,7 @@
     <select id="findManagerByCompanyId" resultType="com.usoftchina.saas.account.po.Role">
         SELECT * FROM AC_ROLE WHERE COMPANY_ID = #{companyId} AND TYPE = 0 limit 1
     </select>
+    <select id="selectAccountCountById" parameterType="java.lang.Long" resultType="java.lang.Integer">
+        SELECT COUNT(*) FROM AC_ACCOUNT_ROLE WHERE ROLE_ID = #{id}
+    </select>
 </mapper>

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

@@ -46,6 +46,7 @@ public enum ExceptionCode implements BaseExceptionCode {
     ROLE_NOT_EXIST(53020, "角色不存在"),
     MISSING_PERMISSIONS(53030, "权限缺失"),
     USER_COMPANY_EXIST(53007, "企业已存在账户"),
+    ROLE_HAS_USE(54030, "存在已使用该角色的账户,不允许删除"),
 
     // 文件相关
     FOLDER_NOT_EXISTS(55000, "文件夹不存在"),

+ 106 - 56
frontend/saas-portal-web/src/components/conenter/addenterprise.vue

@@ -41,15 +41,15 @@
                                 <option value="其他">其他</option>   
                             </select>
                         </li>
-                        <li>
+                        <li style="margin:0">
                             <span class="qy-biaoti"><span class="xingxing">*</span>企业地址</span>
                             <input ref="address" @change="address" class="inpind" type="text" placeholder="输入企业详细地址">
                             <!-- <div class="addbiaoqian">
                                 <v-distpicker @selected= 'selected' @province= 'qyprovince' :placeholders= 'placeholder'></v-distpicker>
                                 <input ref="address" @change="address" class="qy-xiangxi" type="text" placeholder="输入企业详细地址">
                             </div> -->
-                            <div class="qy-Tips left">
-                                <span ref="ress" style="color:red;margin-left:40px;"></span>
+                            <div class="qy-Tips Tips-buttom">
+                                <span ref="ress" style="color:red"></span>
                             </div>
                         </li>
                         <li style="margin:0">
@@ -78,13 +78,14 @@
                             <input @blur.prevent="Testingqyname" ref="lookupqyname" class="inpind" type="text" value="" placeholder="输入企业名称或管理员">
                             <span class="warning" ref="warningqyname"></span>
                         </li>
+                        <!-- 匹配企业后显示的内容 -->
                         <li class="hied" :class= "{showlookup:islookup}">
                             <div class="lookup">
                                 <ul>
-                                    <li v-for="(d, i) in arr" :key="i">
-                                        <span>企业名称:</span><span>{{d.qyname}}</span>
-                                        <span class="saasguanli">SaaS管理员:</span><span>{{d.saas}}</span>
-                                        <span>联系方式:</span><span>{{d.phone}}</span>
+                                    <li v-for="(d, i) in arr" :key="i" @click="qylist(i)" :class="{'hui':newindex === i}">
+                                        <span>企业名称:</span><span>{{d.name}}</span>
+                                        <span class="saasguanli">SaaS管理员:</span><span>{{d.admin}}</span>
+                                        <span>联系方式:</span><span>{{d.adminMobile}}</span>
                                     </li>
                                 </ul>
                             </div>
@@ -109,7 +110,7 @@
 
 <script>
 import Session from '@/utils/session'
-import VDistpicker from 'v-distpicker'
+// import VDistpicker from 'v-distpicker'
 import { setTimeout } from 'timers';
     export default {
         data(){
@@ -136,22 +137,20 @@ import { setTimeout } from 'timers';
                     // {name:'加入企业'},
                 ],
                 nowindex:0,
+                newindex:'',
                 islookup:false,
                 isTestingname:false,
                 isregname:false,
-                arr:[
-                    {qyname:'XX房贷首付范德萨发达企业',saas:'反倒是地方反对法管理员',phone:'13456789023'},
-                    {qyname:'XX企业',saas:'管理员',phone:'13456789023'},
-                    {qyname:'XX企业',saas:'管理员',phone:'13456789023'},
-                ]
+                companyId:null,
+                arr:[]
             }
         },
         components:{
-            VDistpicker
+            // VDistpicker
         },
         mounted(){
-            this.$refs.name.value = this.mytoken.account.realname == this.mytoken.account.mobile ? '' : this.mytoken.account.realname
-            this.$refs.email.value = this.mytoken.account.email
+            this.$refs.name.value = this.mytoken.account.realname;
+            this.$refs.email.value = this.mytoken.account.email;
         },
         methods: {
             tabwith(i){
@@ -188,7 +187,7 @@ import { setTimeout } from 'timers';
                                 this.$refs.qyno.innerHTML = '<span style="color:green">该企业可创建</span>';
                             } else {
                                 this.$refs.qyno.innerHTML = '该企业已在优软云注册';
-                                this.qymingzi = false
+                                this.qymingzi = false;
                             }
                         })
                         .catch(err=>{
@@ -200,26 +199,47 @@ import { setTimeout } from 'timers';
             //检测企业名称2
             Testingqyname(){
                 let qyname = this.$refs.lookupqyname.value.replace(/\s+/g, "");//企业名字
+                let token = this.mytoken.token;
                 if (qyname == '') {
                     this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/warning.png" alt=""> 企业或管理员不能为空';
-                    this.islookup = false
+                    this.islookup = false;
                 } else {
-                    this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/ok.png" alt="">';
-                    this.islookup = true
+                    this.$ajax({
+                        url: "http://192.168.253.41:8560/api/account/accountCenter/company/isOpen",//http://192.168.253.41:8560
+                        method:'GET',
+                        params: {
+                            companyName: qyname
+                        },
+                        headers:{
+                            "Authorization":token,
+                        }
+                    })
+                    .then(res=>{
+                        if (res.data.success) {
+                            this.arr = res.data.data
+                            this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/ok.png" alt="">';
+                            this.islookup = true;   
+                        } else if (res.data.success = false && res.data.message != null){
+                            this.$refs.warningqyname.innerHTML = '<img style="width:14px" src="/static/img/warning.png" alt=""> 该企业不存在';
+                        } else {
+                            this.$message.error('请求失败,请重试');
+                        }
+                    })
+                    
                 }
             },
             //验证个人姓名1
             yzusername(){
                 let name = this.$refs.name.value.replace(/\s+/g, "");//姓名过滤空格
                 if (name == '') {
-                    this.$refs.usname.innerHTML = '个人姓名不能为空'
+                    this.$refs.usname.innerHTML = '个人姓名不能为空';
                 } else {
                     if (this.reg.test(name)) {
-                        this.$refs.usname.innerHTML = '不能包含符号等非法字符'
-                        this.isname = false
+                        this.$refs.usname.innerHTML = '不能包含符号等非法字符';
+                        this.isname = false;
                     } else {
-                        this.$refs.usname.innerHTML = ''
-                        this.isname = true
+                        this.$refs.usname.innerHTML = '';
+                        this.isname = true;
                     }
                 }
             },
@@ -240,35 +260,62 @@ import { setTimeout } from 'timers';
                     }
                 }
             },
+            // 选择要加入的企业
+            qylist(i){
+                this.companyId = this.arr[i].id,
+                this.newindex = i
+            },
             //加入企业提交按钮
             Submission(){
+                let token = this.mytoken.token;
+                let qyname = this.$refs.lookupqyname.value.replace(/\s+/g, "");//企业名字
+                let username = this.$refs.lookupname.value.replace(/\s+/g, "");//姓名过滤空格
                 if (!this.islookup) {
                     this.$message.error('企业或管理员不能为空');
                 } else if (!this.isTestingname) {
                     this.$message.error('姓名不能为空');
                 } else if (!this.isregname) {
                     this.$message.error('姓名不能包含符号、数字等非法字符');
+                } else if (this.companyId){
+                    this.$ajax({
+                        url:'http://192.168.253.41:8560/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'});
+                            },3000)
+                        }
+                    })
                 } else {
-                    this.$message({
-                        message: '提交成功,待管理员批准加入',
-                        type: 'success'
-                    });
+                    this.$message.error('请选择要加入的企业');
                 }
             },
             //验证公司详细地址
             address(){
                 let address = this.$refs.address.value.replace(/\s+/g, "");//过滤空格
                 if (address == '') {
-                    this.$refs.ress.innerHTML = '企业地址不能为空'
-                    this.isaddressname = false
+                    this.$refs.ress.innerHTML = '企业地址不能为空';
+                    this.isaddressname = false;
                 } else {
-                    this.isaddressname = true
+                    this.isaddressname = true;
                     if (this.reg.test(address)) {
-                        this.$refs.ress.innerHTML = '不能包含符号等非法字符'
-                        this.isaddress = false
+                        this.$refs.ress.innerHTML = '不能包含符号等非法字符';
+                        this.isaddress = false;
                     } else {
-                        this.$refs.ress.innerHTML = ''
-                        this.isaddress = true
+                        this.$refs.ress.innerHTML = '';
+                        this.isaddress = true;
                     }
                 }
             },
@@ -277,11 +324,11 @@ import { setTimeout } from 'timers';
                 let email = this.$refs.email.value;//邮箱
                 if (email == '') {
                     this.isemail = true;
-                    this.Email = ''
+                    this.Email = '';
                 } else {
                     if (!reg.test(email)) {
                         this.Email = '请填写正确的邮箱';
-                        this.isemail = false
+                        this.isemail = false;
                     } else {
                         this.Email = '';
                         this.isemail = true;
@@ -290,7 +337,7 @@ import { setTimeout } from 'timers';
             },
             //保存
             Preservation(){
-                this.listLoading = true
+                this.listLoading = true;
                 let qyname = this.$refs.qyname.value.replace(/\s+/g, "");//公司名字
                 let qyindustry = this.$refs.qyindustry.value;//所属行业
                 let address = this.$refs.address.value.replace(/\s+/g, "");//公司详细地址
@@ -301,7 +348,7 @@ import { setTimeout } from 'timers';
                 let uu = mytoken.account.uu;
                 let mobile = mytoken.account.mobile;//手机号
                 let company = {'name':qyname,'address':address,'type':qyindustry};
-                let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu}
+                let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu};
                 // console.log('姓名',name)//个人姓名
                 // console.log('企业',qyname)//企业姓名
                 // console.log('企业名字',this.qymingzi)//企业有没有注册
@@ -314,9 +361,9 @@ import { setTimeout } from 'timers';
                 } else if (qyname == '') {
                     this.$message.error('企业名称不能为空');
                 } else {
-                    switch (this.qymingzi && this.isaddress && this.isname && this.isspaceName && this.isemail && this.isaddressname) {
-                        case this.qymingzi:
-                        if (this.qymingzi) {
+                    switch (this.isspaceName && this.isaddress && this.isname && this.qymingzi && this.isemail && this.isaddressname) {
+                        case this.isspaceName:
+                        if (this.isspaceName) {
                             this.$ajax({
                                 url: this.$url.api+"/api/account/accountCenter/companyAccount/save",//http://192.168.253.31:8560
                                 method: 'post',
@@ -333,18 +380,21 @@ import { setTimeout } from 'timers';
                                 this.isadd = true;//添加成功弹窗
                                 setTimeout(()=>{
                                     document.documentElement.scrollTop = 0;
+                                    let session = JSON.parse(window.localStorage.getItem('app-state-session'));
+                                    session.account.realname = name;
+                                    Session.set(session);
                                     // this.$router.push({name:'company'})
-                                    this.$router.push({path: '/enterprise'})
+                                    this.$router.push({path: '/enterprise'});
                                 },3000)
                             })
-                            this.$message({
-                                message: '保存成功,待管理员批准',
-                                type: 'success'
-                            });
+                            this.$message.success('保存成功,待管理员批准');
                         } else {
-                            this.$message.error('该企业已在优软云注册');
+                            this.$message.error('企业名称不能包含符号等非法字符');
                         }
                         break;
+                        case this.qymingzi:
+                        this.$message.error('该企业已在优软云注册');
+                        break;
                         case this.isaddressname:
                         this.$message.error('企业地址不能为空');
                         break;
@@ -354,15 +404,12 @@ import { setTimeout } from 'timers';
                         case this.isname:
                         this.$message.error('个人姓名不能包含符号等非法字符');
                         break;
-                        case this.isspaceName:
-                        this.$message.error('企业名称不能包含符号等非法字符');
-                        break;
                         case this.isemail:
                         this.$message.error('请填写正确的邮箱');
                         break;
                     }
                 }
-                this.listLoading = false
+                this.listLoading = false;
             },
             //获取省市区
             // selected(data){
@@ -371,9 +418,9 @@ import { setTimeout } from 'timers';
             //     this.area = data.area.value;
             //     this.disabled= false
             // },
-            qyprovince(){
-                this.placeholder = this.placeholde
-            },
+            // qyprovince(){
+            //     this.placeholder = this.placeholde
+            // },
         }
     }
 </script>
@@ -448,4 +495,7 @@ import { setTimeout } from 'timers';
 .marght {
     margin-right: 5px;
 }
+.hui {
+    background: #c5c5c5;
+}
 </style>

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

@@ -65,7 +65,7 @@
                     </div>
                 </router-link>
             </div>
-            <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing">
+            <div v-for="(d , i) in list " :key="i" class="gs-xiangqing gs-list">
                 <!-- 上 -->
                 <div class="gs-shang">
                     <el-dropdown v-if= "d.saas_" trigger="hover" size="mini" placement='bottom-start'>
@@ -94,8 +94,8 @@
                         <!-- <p><span>开通日期:</span></p> -->
                     </div>
                     <div class="gs-border gs-xqright-right right">
-                        <span v-if= "d.saas_" class="gs-btn1 xs" @click="selectServe(d.id)">进入服务</span>
-                        <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs">开通服务</span>
+                        <span v-if= "d.saas_" class="gs-btn1 xs green" @click="selectServe(d.id)">进入服务</span>
+                        <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs blue">开通服务</span>
                     </div>
                 </div>
             </div>
@@ -119,7 +119,7 @@
                 isDefault: true,//开通默认
                 isAutoLogin: this.$store.state.isAutoLogin,
                 mytoken: JSON.parse(localStorage.getItem('app-state-session')),//本地储存的用户信息
-                arr: [],//企业列表信息
+                list: [],//企业列表信息
                 isheigh:false,//是否添加默认高度
                 admin: '',
                 adminMobile: '',
@@ -131,7 +131,7 @@
             },
         },
         watch:{
-            arr:function(){
+            list:function(){
                 this.$nextTick(function(){
                     this.boxheight();
                 })
@@ -153,39 +153,42 @@
                     }
                 })
                 .then(res=>{
-                    const frame = window.frames[window.frames.length - 1];
-                    this.arr = res.data.data.spaces;
-                    let enterprise = [];
-                    for (let i = 0; i < this.arr.length; i++) {
-                        if (this.arr[i].saas_) {
-                            let addenterprise = {'id':'', 'logoUrl': '', 'name': '','dcName':''};
-                            addenterprise.id = this.arr[i].id;
-                            addenterprise.logoUrl = this.arr[i].logoUrl || null;
-                            addenterprise.name = this.arr[i].name;
-                            addenterprise.dcName = this.arr[i].dcName || null;
-                            enterprise.push(addenterprise)
-                        }
-                    };
-                    let session = JSON.parse(window.localStorage.getItem('app-state-session'));
-                    if (enterprise.length != session.account.companies.length) {
-                        session.account.companies = enterprise;
-                        session.account.realname = this.arr[0].admin;
-                        Session.set(session);
-                    };
-                    let hasCompany = res.data.data.hasDefaultCompany;
-                    let companyId = res.data.data.defaultCompanyId;
-                    let token = res.data.data.token.token;
-                    if (this.isAutoLogin) {
-                        if (hasCompany) {
-                            let session=JSON.parse(localStorage.getItem('app-state-session'));
-                            session.account.companyId=companyId;
-                            session.span = session.timestamp - new Date().getTime();
-                            session.token=token;
-                            frame.postMessage(JSON.stringify(session), '*');
-                            window.location.href = this.$url.web
+                    if (res.data.success) {
+                        const frame = window.frames[window.frames.length - 1];
+                        this.list = res.data.data.spaces;
+                        let enterprise = [];
+                        for (let i = 0; i < this.list.length; i++) {
+                            if (this.list[i].saas_) {
+                                let addenterprise = {'id':'', 'logoUrl': '', 'name': '','dcName':''};
+                                addenterprise.id = this.list[i].id;
+                                addenterprise.logoUrl = this.list[i].logoUrl || null;
+                                addenterprise.name = this.list[i].name;
+                                addenterprise.dcName = this.list[i].dcName || null;
+                                enterprise.push(addenterprise)
+                            }
+                        };
+                        let session = JSON.parse(window.localStorage.getItem('app-state-session'));
+                        if (enterprise.length != session.account.companies.length) {
+                            session.account.companies = enterprise;
+                            Session.set(session);
+                        };
+                        let hasCompany = res.data.data.hasDefaultCompany;
+                        let companyId = res.data.data.defaultCompanyId;
+                        let token = res.data.data.token.token;
+                        if (this.isAutoLogin) {
+                            if (hasCompany) {
+                                let session=JSON.parse(localStorage.getItem('app-state-session'));
+                                session.account.companyId=companyId;
+                                session.span = session.timestamp - new Date().getTime();
+                                session.token=token;
+                                frame.postMessage(JSON.stringify(session), '*');
+                                window.location.href = this.$url.web
+                            }
                         }
+                        this.$store.commit('Loginfalse')
+                    } else {
+                        this.$message.error('获取企业列表信息失败,请重试');
                     }
-                    this.$store.commit('Loginfalse')
                 })
                 .catch(err=>{
                     // console.log("请求失败",err)
@@ -208,7 +211,7 @@
                     url: this.$url.api+'/api/account/accountCenter/bind/defaultCompany',
                     method: 'post',
                     data:{
-                        companyId: this.arr[i].id,
+                        companyId: this.list[i].id,
                         accountId: this.mytoken.account.id
                     },
                     headers: {
@@ -228,7 +231,7 @@
                     url: this.$url.api+'/api/account/accountCenter/unBind/defaultCompany',
                     method: 'post',
                     data:{
-                        companyId: this.arr[i].id,
+                        companyId: this.list[i].id,
                         accountId: this.mytoken.account.id
                     },
                     headers: {
@@ -272,10 +275,10 @@
             //开通saas服务开通数量达到10的时候禁止开通
             showOpenServeWin(id , i){
                 let saasNum = [];
-                let arr = this.arr;
-                for (let j = 0; j < arr.length; j++) {
-                    if (arr[j].saas_) {
-                        saasNum.push(arr[j].saas_)
+                let list = this.list;
+                for (let j = 0; j < list.length; j++) {
+                    if (list[j].saas_) {
+                        saasNum.push(list[j].saas_)
                     }
                 }
                 if (saasNum.length >= 10) {
@@ -289,12 +292,12 @@
             confirmSaas(){//确认saas开通
                 let i = this.saasindex;
                 let token = this.mytoken.token;
-                let qyname = this.arr[i].name;//公司名字
-                let address = this.arr[i].address;//公司详细地址
-                let name = this.arr[i].realname;//名字
-                let email = this.arr[i].email;//邮箱
+                let qyname = this.list[i].name;//公司名字
+                let address = this.list[i].address;//公司详细地址
+                let name = this.list[i].realname;//名字
+                let email = this.list[i].email;//邮箱
                 let mobile = this.mytoken.account.mobile;//手机号
-                let uu = this.arr[i].uu;
+                let uu = this.list[i].uu;
                 let company = {'name':qyname,'address':address};
                 let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu}
                 this.$ajax({
@@ -387,4 +390,15 @@
     left: 5px;
     display: none;
 }
+.gs-list {
+    background-image: url(/static/img/list.png);
+    background-position-x: 50%;
+    background-position-y: 84%;
+}
+.green:hover {
+    background: #2da74a;
+}
+.blue:hover {
+    background: #0f6fd2;
+}
 </style>

+ 46 - 6
frontend/saas-portal-web/src/components/conenter/enterprise.vue

@@ -17,7 +17,7 @@
             </div>
             <div class="collapse navbar-collapse navbar-right" role="navigation">
                 <ul id="nav" class="nav navbar-nav menu">
-                    <li><router-link to="/home"><a href="#"><span style="color: white">首页</span></a></router-link></li>
+                    <li><router-link to="/home"><a href="#" @click="setTurnHome"><span style="color: white">首页</span></a></router-link></li>
                     <li><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
                     <li style="margin-left:30px;margin-top: 13px;cursor: pointer;">
                         <span style="color:#fff;font-size: 16px;">
@@ -37,7 +37,7 @@
             <div class="gs-tab">
                 <ul>
                     <li class="xs" v-for="(btn , index) in tab" :key='index' :class= "{gsactive:nowindex == index}" @click= "tabswitch(index)">{{btn.name}}</li>
-                    <!-- <span class="reddian"></span> -->
+                    <span v-if="ishongdian" class="reddian"></span>
                 </ul>
             </div>
             <div class="gs-none">
@@ -139,7 +139,7 @@
                                     <span>{{d.neirong.phone}}</span>
                                 </span>
                                 <span>{{d.zhuangtai}}</span>
-                                <span><button v-if="d.caozuo" @click="Rejoin" class="news-btn">重新加入</button></span>
+                                <span><button v-if="d.caozuo" @click="Rejoin(i)" class="news-btn">重新加入</button></span>
                             </li>
                         </ul>
                     </div>
@@ -191,11 +191,47 @@ import { setTimeout } from 'timers';
             setTokenPage() {
                 return this.$url.web + '/set-token.html'
             },
+            ishongdian(){
+                return this.$store.state.ishongdian;
+            }
         },
         methods: {
             // tab切换
             tabswitch(index){
-                this.nowindex = index;
+                if (index == 3) {
+                    this.nowindex = 3;
+                    let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
+                    let id = mytoken.account.id;
+                    // tab切换到消息的时候执行
+                    let param = {
+                        type:'condition',
+                        value:'creatorId='+id+''
+                    }
+                    this.$ajax({
+                        url:'http://192.168.253.41:8560/api/commons/remind/apply/list',
+                        method:'GET',
+                        async:false,
+                        params: {
+                            condition:JSON.stringify(param)
+                        },
+                        headers:{
+                            'Access-Control-Allow-Origin':'*',
+                            "Authorization":mytoken.token,
+                            'Content-Type':'application/json;charset=UTF-8'
+                        }
+                    })
+                    .then(res=>{
+                        console.log(res)
+                        this.$store.state.ishongdian = false
+                    })
+                } else {
+                    this.nowindex = index;
+                }
+                
+            },
+            setTurnHome(){
+                // debugger
+                this.$parent.turnHome = true
             },
             //退出
             loginout(){
@@ -268,12 +304,14 @@ import { setTimeout } from 'timers';
                 }
             },
             //重新加入
-            Rejoin(){
+            Rejoin(i){
                 //成功后提示
                 this.$message({
                     message: '提交成功,待管理员批准',
                     type: 'success'
                 });
+                this.arr[i].zhuangtai = '待批准';
+                this.arr[i].caozuo = false;
             },
             //没有内容也要有一定的高度
             boxheight(){
@@ -415,6 +453,8 @@ import { setTimeout } from 'timers';
     height: 4px;
     border-radius: 2px;
     background: red;
-    margin-left: -22px;
+    position: relative;
+    top: -5px;
+    left: -25px;
 }
 </style>

+ 27 - 12
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -17,7 +17,7 @@
             </div>
         <div class="collapse navbar-collapse navbar-right" role="navigation">
           <ul @click="gohome" id="nav" class="nav navbar-nav menu">
-            <li><a href="#"><span>首页</span></a></li>
+            <li><a href="#" @click="setTurnHome"><span>首页</span></a></li>
             <li><a href="https://www.usoftchina.com/" target="_blank"><span>优软云</span></a></li>
             <li>
               <a href="#feature"><span>特色</span></a>
@@ -262,11 +262,20 @@
       } else {
         this.isproblem = this.$route.params.isporblem
       };
+      let token;
+      if(localStorage.getItem('app-state-session')){
+        let mytoken = JSON.parse(localStorage.getItem('app-state-session'));
+        token = String(mytoken.token);
+      }
       this.$ajax({
         url: this.$url.api+'/api/auth/info',
         method: 'get',
         async:false,
-        withCredentials:true
+        withCredentials:true,
+        headers: {
+            "Authorization":token,
+            "Content-Type":"application/x-www-form-urlencoded"
+        }
       })
       .then(res=>{
         const data=res.data.data;
@@ -276,18 +285,15 @@
           session.account = account
           Session.set(session);
           this.account = Session.getAccount();
-          //有企业信息时 第一次访问页面 跳转企业列表
+          //有企业信息时 跳转企业列表
           if(account.companies.length>0){
-            //监听访问首页的次数
-            if(!localStorage.VisitCount){
-              localStorage.VisitCount = '1'
-            }else{
-              localStorage.VisitCount = (Number(localStorage.VisitCount) + 1 ) + ''
-            }
-            if(localStorage.VisitCount=='1'){
               const me = this || _this;
-              me.$router.push({path: '/enterprise'})
-            }
+              //点击首页按钮时不跳转企业列表
+              if(!me.$parent.turnHome){
+                me.$router.push({path: '/enterprise'})
+              }else{
+                me.$parent.turnHome = false
+              }
           }
         }
       })
@@ -344,6 +350,9 @@
           frame.postMessage(JSON.stringify(session), '*')
         })
       },
+      setTurnHome(){
+        this.turnHome = true
+      },
       login() {
         // 显示账户中心登录窗口
         this.isLogin = true
@@ -373,6 +382,12 @@
       //体验
       experience(){
         this.isexperience = true;
+        setTimeout(()=>{
+          if (this.account) {
+            this.$refs.typhone.value = this.account.mobile;
+            this.openexperience();
+          }
+        },10)
       },
       //关闭体验
       Closeexperience(){

+ 1 - 0
frontend/saas-portal-web/src/store/index.js

@@ -7,6 +7,7 @@ export default new Vuex.Store({
         isAutoLogin: false,
         isproblem: '',//常见问题
         isloading:false,
+        ishongdian:false,
     },
     mutations:{
          Logintrue(state) {

+ 12 - 7
frontend/saas-portal-web/static/css/gongsi.css

@@ -110,15 +110,17 @@
     box-shadow: 0 20px 60px 8px #F4F8FC;
     border-radius: 4px;
     overflow: hidden;
-    width: 22%;
+    width: 21.6%;
     float: left;
     margin: 0px 27px 27px 0px;
 }
 .gs-qynema {
-    font-weight: 600;
-    color: #243A52;
+    font-family: PingFangSC-Regular;
+    font-weight: 550;
+    color: #4a545f;
     letter-spacing: 0;
-    font-size: 18px;
+    font-size: 20px;
+    line-height: 30px;
 }
 .dotted {
     border: 1px dashed rgba(30,136,245,0.32);
@@ -160,10 +162,12 @@
     position: relative;
     padding: 0px 10px;
     text-align: center;
+    overflow: hidden;
 }
 .gs-xqright {
     height: 35%;
-    background: #F4F9FE;
+    background: #EFF7FF
+    ;
     padding: 10px;
 }
 .gs-xqright div {
@@ -411,10 +415,11 @@
     display: block !important;
 }
 .lookup > ul {
-    padding: 20px 20px 0px 20px;
+    padding: 0;
 }
 .lookup > ul > li {
-    margin-bottom: 10px;
+    padding: 20px 20px 10px 20px;
+    margin-bottom: 0 !important;
 } 
 .lookup > ul > li span{
     width: 16%;

BIN
frontend/saas-portal-web/static/img/list.png


+ 1 - 1
frontend/saas-web/app/view/core/base/GridPanel.js

@@ -54,7 +54,7 @@ Ext.define('saas.view.core.base.GridPanel', {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }
                             }else {
-                                console.error('exception: ', response.responseJson);
+                                console.error('exception: ', response);
                                 saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }

+ 2 - 2
frontend/saas-web/app/view/core/dbfind/AddMultiDbfindGridPanel.js

@@ -94,8 +94,8 @@ Ext.define('saas.view.core.dbfind.AddMultiDbfindGridPanel', {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }
                             }else {
-                                console.error('exception: ', response.responseJson);
-                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                console.error('exception: ', response);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }
                     }

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

@@ -35,8 +35,8 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }
                             }else {
-                                console.error('exception: ', response.responseJson);
-                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                console.error('exception: ', response);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }
                     }

+ 3 - 1
frontend/saas-web/app/view/core/dbfind/DbfindTrigger.js

@@ -125,7 +125,9 @@ Ext.define('saas.view.core.dbfind.DbfindTrigger', {
     },
     onTriggerClick:function(f){
         var me = this;
-        this.fireEvent('beforetriggerclick', this);
+        if(!this.fireEvent('beforetriggerclick', this)) {
+            return;
+        };
         f.blur(f);
         //判断dbfindtrigger归属
         f.judge(f);//form

+ 2 - 2
frontend/saas-web/app/view/core/dbfind/MultiDbfindGridPanel.js

@@ -94,8 +94,8 @@ Ext.define('saas.view.core.dbfind.MultiDbfindGridPanel', {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }
                             }else {
-                                console.error('exception: ', response.responseJson);
-                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                console.error('exception: ', response);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }
                     }

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/CustomerDbfindTrigger.js

@@ -42,7 +42,7 @@ Ext.define('saas.view.core.dbfind.types.CustomerDbfindTrigger', {
     }, {
         text: "客户简称",
         dataIndex: "cu_shortname",
-        width: 150
+        hidden: true
     }, {
         conditionCode: 'cu_type',
         text: "客户类型",

+ 16 - 16
frontend/saas-web/app/view/core/dbfind/types/ProductDbfindTrigger.js

@@ -34,24 +34,24 @@ Ext.define('saas.view.core.dbfind.types.ProductDbfindTrigger', {
         dataIndex: "pr_code",
         width: 150
     },{
-        text: "类型",
-        dataIndex: "pr_kind",
-        width: 110
+        text: '品牌',
+        dataIndex: 'pr_brand',
+        width: 150
     },{
-        text: "物料名称",
-        width: 200,
-        dataIndex: "pr_detail"
-    }, {
-        text : "型号", 
-        dataIndex : "pr_orispeccode", 
-        width : 150.0
-    }, {
-        text : "规格", 
-        dataIndex : "pr_spec", 
-        width : 150.0
+        text: '名称',
+        dataIndex: 'pr_detail',
+        width: 200
     },{
-        text: "品牌",
-        dataIndex: "pr_brand",
+        text: '型号',
+        dataIndex: 'pr_orispeccode',
+        width: 200
+    },{
+        text: "单位",
+        dataIndex: "pr_unit",
+        width: 80
+    },{
+        text: "类型",
+        dataIndex: "pr_kind",
         width: 110
     },{
         text: "库存",

+ 18 - 14
frontend/saas-web/app/view/core/dbfind/types/ProductMultiDbfindTrigger.js

@@ -48,17 +48,25 @@ Ext.define('saas.view.core.dbfind.types.ProductMultiDbfindTrigger', {
         text: "物料名称",
         width: 200,
         dataIndex: "pr_detail"
-    }, {
-        text : "型号", 
-        dataIndex : "pr_orispeccode", 
-        width : 150.0
-    }, {
-        text : "规格", 
-        dataIndex : "pr_spec", 
-        width : 150.0
     },{
-        text: "品牌",
-        dataIndex: "pr_brand",
+        text: '品牌',
+        dataIndex: 'pr_brand',
+        width: 150
+    },{
+        text: '名称',
+        dataIndex: 'pr_detail',
+        width: 200
+    },{
+        text: '型号',
+        dataIndex: 'pr_orispeccode',
+        width: 200
+    },{
+        text: "单位",
+        dataIndex: "pr_unit",
+        width: 80
+    },{
+        text: "类型",
+        dataIndex: "pr_kind",
         width: 110
     },{
         text: "库存",
@@ -71,10 +79,6 @@ Ext.define('saas.view.core.dbfind.types.ProductMultiDbfindTrigger', {
             var format = '0,000.' + xr.join('');
             return Ext.util.Format.number(v, format);
         },
-    },{
-        text: "单位",
-        dataIndex: "pr_unit",
-        width: 80
     }, {
         text: "采购提前期",
         dataIndex: "pr_leadtime",

+ 1 - 1
frontend/saas-web/app/view/core/dbfind/types/VendorDbfindTrigger.js

@@ -44,7 +44,7 @@ Ext.define('saas.view.core.dbfind.types.VendorDbfindTrigger', {
     }, {
         text: "供应商简称",
         dataIndex: "ve_shortname",
-        width: 150
+        hidden: true
     }, {
         text: "供应商类型",
         dataIndex: "ve_type",

+ 40 - 25
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -66,7 +66,7 @@ Ext.define('saas.view.core.form.FormPanel', {
             text: '复制',
             handler: 'onCopy',
             bind: {
-                hidden: '{!'+ me._idField + '}',
+                hidden: '{!showCopyBtn || !'+ me._idField + '}',
             }
         }, {
             hidden: true,
@@ -318,37 +318,52 @@ Ext.define('saas.view.core.form.FormPanel', {
         viewModel = me.getViewModel(),
         viewData = viewModel.getData();
 
-        viewModel.setData(main);
-
-        viewModel.notify();
+        me.setMainData(main);
 
         var detailGrids = me.query('detailGridField');
 
         for (var i = 0; i < detailGrids.length; i++) {
-            var detailData = formData['detail' + i] || [],
-                detail = viewData['detail' + i],
-                grid = detailGrids[i],
-                detnoColumn = grid.detnoColumn,
-                store = detail.detailStore;
-
-            store.removeAll();
-            if (detailData.length > 0) {
-
-                for(var j = 0; j < detailData.length; j++) {
-                    var d = detailData[j];
-                    var o = {};
-                    o[detnoColumn] = j + 1;
-                    var r = store.add(o)[0];
-                    for(var k in d) {
-                        r.set(k, d[k]);
-                    }
-                }
+            var detailData = formData['detail' + i] || [];
+            me.setDetailData(detailData, i);
+        }
+    },
+
+    setMainData: function(mainData) {
+        var me = this,
+        viewModel = me.getViewModel();
+
+        viewModel.setData(mainData);
+        viewModel.notify();
 
-            }else {
-                // store.
+        me.isValid();
+    },
+
+    setDetailData: function(detailData, index) {
+        index = index || 0;
+
+        var me = this,
+        viewModel = me.getViewModel(),
+        viewData = viewModel.getData(),
+        detailGrids = me.query('detailGridField'),
+        detail = viewData['detail' + index],
+        grid = detailGrids[index],
+        detnoColumn = grid.detnoColumn,
+        store = detail.detailStore;
+
+        store.removeAll();
+        if (detailData.length > 0) {
+
+            for(var j = 0; j < detailData.length; j++) {
+                var d = detailData[j];
+                var o = {};
+                o[detnoColumn] = j + 1;
+                var r = store.add(o)[0];
+                for(var k in d) {
+                    r.set(k, d[k]);
+                }
             }
         }
-        
+
         me.isValid();
     },
 

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

@@ -256,6 +256,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         form = me.getView(),
         viewModel = me.getViewModel(),
         detailCount = form.detailCount,
+        codeField = form.getForm().findField(form._codeField),
         codeModified = !form.initId || (codeField && codeField.isDirty());
 
         //form里面数据

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

@@ -11,6 +11,7 @@ Ext.define('saas.view.core.form.FormPanelModel', {
             codeEditable: false, // 单据编号是否可编辑
         },
         auditBtnText: '审核', // 审核按钮默认text
+        showCopyBtn: true, // 显示复制按钮
         showPrintBtn: false, // 显示打印按钮
         showAuditBtn: true, // 显示审核、反审核按钮
         detailBindeFields: [], // 从表绑定列

+ 80 - 51
frontend/saas-web/app/view/core/form/MseeageLog.js

@@ -10,25 +10,28 @@ Ext.define('saas.view.core.form.MseeageLog', {
         width: 150,
         name: 'ml_man',
         xtype: 'textfield',
-        emptyText : '操作人员'
+        emptyText : '操作人员',
+        enableKeyEvents: true,
+        listeners: {
+            keydown: {
+                fn: function(th, e, eOpts) {
+                    if(e.keyCode == 13) {
+                        var grid = th.up('core-form-mseeageLog');
+                        grid.condition = grid.getConditions();
+                        grid.store.loadPage(1);
+                    }
+                }
+            }
+        }
     },{
         cls:'x-formpanel-btn-blue',
         xtype:'button',
         text:'查询',
+        margin: '0 0 0 10',
         listeners: {
             click:function(b){
-                var grid = b.ownerCt.ownerCt;
-                var tbar = b.ownerCt;
-                grid.condition = '';
-                var items = [];
-                var fields = tbar.items.items.map(f => f.name);
-                Ext.each(fields, function(f, index){
-                    var field = tbar.down('[name='+f+']');
-                    if(field){
-                        items.push(field);
-                    }
-                });
-                grid.condition = grid.getCondition(items);
+                var grid = b.up('core-form-mseeageLog');
+                grid.condition = grid.getConditions();
                 grid.store.loadPage(1);
             }
         }
@@ -37,16 +40,16 @@ Ext.define('saas.view.core.form.MseeageLog', {
     //字段属性
     columns : [{
         text : "id", 
-        width : 0, 
+        hidden: true, 
         dataIndex : "id", 
         xtype : "numbercolumn",   
     },{
         text:'单据类型',
         dataIndex : "ml_name",
-        width : 0, 
+        hidden: true
     },{
         text : "单据编号", 
-        width : 0, 
+        hidden: true,
         dataIndex : "ml_code"
     },{
         xtype:'datecolumn',
@@ -132,11 +135,13 @@ Ext.define('saas.view.core.form.MseeageLog', {
         me.callParent(arguments);
     },
 
-     /**
+    /**
      * 获得过滤条件
      */
-    getCondition: function(items) {
+    getConditions: function() {
         var me = this,
+        tbar = me.getDockedItems()[0],
+        items = tbar.items.items,
         conditions = [{
             type: 'number',
             field: 'ml_keyvalue',
@@ -162,10 +167,9 @@ Ext.define('saas.view.core.form.MseeageLog', {
                         value: func(value)
                     }
                 }else {
-                    var xtype = item.xtype || 'textfield',
-                    type = item.fieldType || me.getDefaultFieldType(xtype),
-                    operation = item.operation || me.getDefaultFieldOperation(xtype),
-                    conditionValue = me.getConditionValue(xtype, value);
+                    var type = item.fieldType || me.getDefaultFieldType(item),
+                    operation = item.operation || me.getDefaultFieldOperation(item),
+                    conditionValue = me.getConditionValue(item, value);
         
                     if(!conditionValue) {
                         continue;
@@ -179,38 +183,58 @@ Ext.define('saas.view.core.form.MseeageLog', {
                 }
                 conditions.push(condition);
             }
-        };
+        }
+
         return conditions;
     },
 
-    getDefaultFieldType: function(xtype) {
-        var type;
+    /**
+     * 只要arr1和arr2中存在相同项即返回真
+     */
+    isContainsAny: function (arr1, arr2) {
+        for (var i = 0; i < arr2.length; i++) {
+            var a2 = arr2[i];
+            if (!!arr1.find(function (a1) {
+                    return a1 == a2
+                })) {
+                return true;
+            }
+        }
+        return false;
+    },
+
+    getDefaultFieldType: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            type;
 
-        if(Ext.Array.contains(['numberfield'], xtype)) {
+        if (me.isContainsAny(xtypes, ['numberfield'])) {
             type = 'number';
-        }else if(Ext.Array.contains(['datefield', 'condatefield'], xtype)) {
+        } else if (me.isContainsAny(xtypes, ['datefield', 'condatefield', 'conmonthfield'])) {
             type = 'date';
-        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo', 'radiofield', 'radio'], xtype)) {
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            type = 'enum';
+        } else if (me.isContainsAny(xtypes, ['combobox', 'multicombo', 'combo', 'radiofield', 'radio'])) {
             type = 'enum';
-        }else {
+        } else {
             type = 'string';
         }
 
         return type;
     },
 
-    getDefaultFieldOperation: function(xtype) {
-        var operation;
+    getDefaultFieldOperation: function (field) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            operation;
 
-        if(Ext.Array.contains(['numberfield'], xtype)) {
+        if (me.isContainsAny(xtypes, ['numberfield', 'datefield', 'dbfindtrigger'])) {
             operation = '=';
-        }else if(Ext.Array.contains(['datefield'], xtype)) {
-            operation = '=';
-        }else if(Ext.Array.contains(['condatefield'], xtype)) {
+        } else if (me.isContainsAny(xtypes, ['condatefield', 'conmonthfield'])) {
             operation = 'between';
-        }else if(Ext.Array.contains(['combobox', 'multicombo', 'combo'], xtype)) {
+        } else if (me.isContainsAny(xtypes, ['multidbfindtrigger', 'combobox', 'multicombo', 'combo'])) {
             operation = 'in';
-        }else {
+        } else {
             operation = 'like';
         }
 
@@ -220,30 +244,35 @@ Ext.define('saas.view.core.form.MseeageLog', {
     /**
      * 处理部分字段值
      */
-    getConditionValue: function(xtype, value) {
-        var conditionValue;
-        if(xtype == 'datefield') {
+    getConditionValue: function (field, value) {
+        var me = this,
+            xtypes = field.getXTypes().split('/'),
+            conditionValue;
+        if (me.isContainsAny(xtypes, ['datefield'])) {
             conditionValue = Ext.Date.format(new Date(from), 'Y-m-d H:i:s');
-        }else if(xtype == 'condatefield') {
+        } else if (me.isContainsAny(xtypes, ['conmonthfield'])) {
+            var from = value.from,
+                to = value.to;
+
+            conditionValue = from + ',' + to;
+        } else if (me.isContainsAny(xtypes, ['condatefield'])) {
             var from = value.from,
-            to = value.to;
+                to = value.to;
 
             conditionValue = Ext.Date.format(new Date(from), 'Y-m-d 00:00:00') + ',' + Ext.Date.format(new Date(to), 'Y-m-d 23:59:59');
-        }else if(xtype == 'combobox' || xtype == 'combo') {
+        } else if (me.isContainsAny(xtypes, ['dbfindtrigger'])) {
+            conditionValue = value;
+        } else if (me.isContainsAny(xtypes, ['combobox', 'combo'])) {
             conditionValue = '\'' + value + '\'';
-        }else if(xtype == 'multicombo') {
-            conditionValue = value.map(function(v) {
+        } else if (me.isContainsAny(xtypes, ['multicombo'])) {
+            conditionValue = value.map ? value.map(function (v) {
                 return '\'' + v.value + '\'';
-            }).join(',');
-        }else {
+            }).join(',') : '';
+        } else {
             conditionValue = value;
         }
 
         return conditionValue;
     },
 
-    refresh:function(){
-        //debugger
-    }
-
 });

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

@@ -28,6 +28,10 @@ Ext.define('saas.view.core.report.ReportPanel', {
     showMySummary: true,
     queryMode: 'DETAIL',
 
+    calculateProperty: 'data.calculate',
+    rootProperty: 'data.list.list',
+    totalProperty: 'list.total',
+
     initComponent: function () {
         var me = this;
         var printAble = me.printAble;
@@ -131,6 +135,10 @@ Ext.define('saas.view.core.report.ReportPanel', {
                         displayInfo: true,
                         store: store
                     } : null],
+
+                    calculateProperty: me.calculateProperty,
+                    rootProperty: me.rootProperty,
+                    totalProperty: me.totalProperty,
                 }]
             });
 
@@ -200,51 +208,10 @@ Ext.define('saas.view.core.report.ReportPanel', {
                 },
                 reader: {
                     type: 'json',
-                    // rootProperty: 'data.list',
-                    rootProperty: function (data) {
-                        try {
-                            var grid = me.items.items[1],
-                                store = grid.store,
-                                columns = grid.columns,
-                                summaryData = data.data ? (data.data.calculate || []) : [],
-                                datas = data.data ? (data.data.list ? data.data.list.list : []) : [];
-
-                            Ext.Array.each(columns, function (c) {
-                                var type = c.summaryType,
-                                    name = c.dataIndex;
-
-                                var d = Ext.Array.findBy(summaryData, function (s) {
-                                    return s.hasOwnProperty(name);
-                                })
-                                if (type && d) {
-                                    if(typeof c.mySummaryRenderer == 'function') {
-                                        c.summaryValue = c.mySummaryRenderer(grid, c, datas);
-                                    }else if (type == 'count') {
-                                        c.summaryValue = Ext.util.Format.number(d[name], c.format || '0');
-                                    } else if (typeof c.summaryRenderer == 'function') {
-                                        c.summaryValue = c.summaryRenderer(d[name]);
-                                    } else if (typeof c.renderer == 'function') {
-                                        c.summaryValue = c.renderer(d[name]);
-                                    } else {
-                                        c.summaryValue = Ext.util.Format.number(d[name], c.format || '0.00');
-                                    }
-                                } else if(type && !d) {
-                                    if(typeof c.mySummaryRenderer == 'function') {
-                                        c.summaryValue = c.mySummaryRenderer(grid, c, datas);
-                                    }else {
-                                        c.summaryValue = me.getSummaryValue(datas, c);
-                                    }
-                                } else {
-                                    c.summaryValue = null;
-                                }
-                            });
-                            return datas;
-                        } catch (e) {
-                            console.log(e);
-                            saas.util.BaseUtil.showErrorToast(e.message);
-                        }
-                    },
-                    totalProperty: 'data.list.total',
+                    rootProperty: me.rootProperty,
+                    totalProperty: me.totalProperty,
+                    // rootProperty: 'data.list.list',
+                    // totalProperty: 'data.list.total',
                 },
                 listeners: {
                     exception: function (proxy, response, operation, eOpts) {
@@ -256,7 +223,7 @@ Ext.define('saas.view.core.report.ReportPanel', {
                             if (response.timedout) {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             } else {
-                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                             }
                         }
                     }
@@ -455,24 +422,6 @@ Ext.define('saas.view.core.report.ReportPanel', {
         return items;
     },
 
-    getSummaryValue: function(datas, c) {
-        var dataIndex = c.dataIndex,
-        type = c.summaryType,
-        values = datas.map(function(d) {
-            return d[c.dataIndex];
-        }),
-        sum = Ext.Array.sum(values);
-        if (type == 'count') {
-            return Ext.util.Format.number(values.length, '0');
-        } else if (typeof c.summaryRenderer == 'function') {
-            return c.summaryRenderer(sum);
-        } else if (typeof c.renderer == 'function') {
-            return c.renderer(sum);
-        } else {
-            return Ext.util.Format.number(sum, c.format || '0.00');
-        }
-    },
-
     getConditions: function () {
         var me = this,
             form = me.down('form'),

+ 2 - 2
frontend/saas-web/app/view/core/tab/Controller.js

@@ -25,7 +25,7 @@ Ext.define('saas.view.core.tab.Controller', {
     onTabActivate: function(component) {
         var tabView = component.down('container');
 
-        if(typeof tabView.refresh == 'function') {
+        if(tabView && typeof tabView.refresh == 'function') {
             tabView.refresh();
         }
 
@@ -72,7 +72,7 @@ Ext.define('saas.view.core.tab.Controller', {
             component.resetCloseClick = true;
         }
 
-        tabView.fireEvent('onTabActivate', tabView);
+        tabView && tabView.fireEvent('onTabActivate', tabView);
     },
 
     onTabDeactivate: function(component) {

+ 2 - 2
frontend/saas-web/app/view/document/address/DataListModel.js

@@ -28,8 +28,8 @@ Ext.define('saas.view.document.address.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

+ 2 - 2
frontend/saas-web/app/view/document/bankinformation/DataListModel.js

@@ -33,8 +33,8 @@ Ext.define('saas.view.document.bankinformation.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

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

@@ -155,20 +155,13 @@ Ext.define('saas.view.document.bom.FormPanel', {
                 dataIndex : "bd_baseqty",
                 editor : {
                     xtype : "numberfield",
-                    decimalPrecision: 0,
+                    decimalPrecision: 3,
                     minValue:0,
                     maxLength: 10,
-                    listeners: {
-                        change: function(f, v) {
-                            if((v+'').length > 10) {
-                                f.setValue(Number((v+'').substr(0, 10)));
-                            }
-                        }
-                    }
                 },
                 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);
                 }

+ 2 - 2
frontend/saas-web/app/view/document/employee/DataListModel.js

@@ -30,8 +30,8 @@ Ext.define('saas.view.document.employee.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

+ 8 - 8
frontend/saas-web/app/view/document/kind/KindModel.js

@@ -30,8 +30,8 @@ Ext.define('saas.view.document.kind.KindModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }
@@ -69,8 +69,8 @@ Ext.define('saas.view.document.kind.KindModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }
@@ -108,8 +108,8 @@ Ext.define('saas.view.document.kind.KindModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }
@@ -148,8 +148,8 @@ Ext.define('saas.view.document.kind.KindModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

+ 20 - 20
frontend/saas-web/app/view/document/product/BasePanel.js

@@ -74,12 +74,12 @@ Ext.define('saas.view.document.product.BasePanel', {
             text : "物料编号", 
             dataIndex : "pr_code", 
             width : 150.0
+        },{
+            text : "品牌", 
+            dataIndex : "pr_brand", 
+            width : 150.0
         }, {
-            text : "类型", 
-            dataIndex : "pr_kind", 
-            width : 110.0
-        }, {
-            text : "物料名称", 
+            text : "名称", 
             dataIndex : "pr_detail", 
             width : 200.0
         }, {
@@ -90,21 +90,10 @@ Ext.define('saas.view.document.product.BasePanel', {
             text : "规格", 
             dataIndex : "pr_spec", 
             width : 150.0
-        },{
-            text : "品牌", 
-            dataIndex : "pr_brand", 
-            width : 110.0 
-        },  {
-            text : "库存", 
-            dataIndex : "po_onhand",
-            xtype: 'numbercolumn',
-            width : 120.0,
-            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 : "pr_kind", 
+            width : 110.0
         },{
             text : "单位", 
             dataIndex : "pr_unit", 
@@ -120,6 +109,17 @@ Ext.define('saas.view.document.product.BasePanel', {
                 var format = '0,000.' + xr.join('');
                 return Ext.util.Format.number(v, format);
             }
+        },  {
+            text : "库存", 
+            dataIndex : "po_onhand",
+            xtype: 'numbercolumn',
+            width : 120.0,
+            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 : "pr_purcprice",

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

@@ -32,10 +32,31 @@ Ext.define('saas.view.document.product.FormPanel', {
         name: 'pr_code',
         fieldLabel: '物料编号',
         allowBlank: false
+    },{
+        editable:false,
+        xtype : "remotecombo", 
+        storeUrl:'/api/document/productbrand/getCombo',
+        name : "pr_brand", 
+        fieldLabel : "品牌", 
+        addHandler:function(b){
+            var form = this.ownerCmp.ownerCt;
+            this.dialog = form.add({
+                xtype: 'document-productbrand-window',
+                bind: {
+                    title: '新增物料品牌'
+                },
+                dataKind:'productbrand',
+                _parent:form,
+                _combo:this.ownerCmp,
+                record:null,
+                session: true
+            });
+            this.dialog.show();
+        }
     },{
         xtype: 'textfield',
         name: 'pr_detail',
-        fieldLabel: '物料名称',
+        fieldLabel: '名称',
         allowBlank: false
     },{
         xtype: 'hidden',
@@ -45,6 +66,10 @@ Ext.define('saas.view.document.product.FormPanel', {
         xtype: 'hidden',
         name: 'pr_statuscode',
         fieldLabel: '状态码'
+    },{
+        xtype: 'textfield',
+        name: 'pr_orispeccode',
+        fieldLabel: '型号'
     },{
         xtype: 'textfield',
         name: 'pr_spec',
@@ -74,31 +99,6 @@ Ext.define('saas.view.document.product.FormPanel', {
             });
             this.dialog.show();
         }
-    },{
-        xtype: 'textfield',
-        name: 'pr_orispeccode',
-        fieldLabel: '型号'
-    },{
-        editable:false,
-        xtype : "remotecombo", 
-        storeUrl:'/api/document/productbrand/getCombo',
-        name : "pr_brand", 
-        fieldLabel : "品牌", 
-        addHandler:function(b){
-            var form = this.ownerCmp.ownerCt;
-            this.dialog = form.add({
-                xtype: 'document-productbrand-window',
-                bind: {
-                    title: '新增物料品牌'
-                },
-                dataKind:'productbrand',
-                _parent:form,
-                _combo:this.ownerCmp,
-                record:null,
-                session: true
-            });
-            this.dialog.show();
-        }
     },{  
         editable:false,
         xtype : "remotecombo", 
@@ -122,6 +122,21 @@ Ext.define('saas.view.document.product.FormPanel', {
             });
             this.dialog.show();
         }
+    },{
+        xtype : "numberfield", 
+        name : "pr_standardprice", 
+        fieldLabel : "标准单价", 
+        allowBlank : true, 
+        columnWidth : 0.25,
+        decimalPrecision: 8,
+        minValue:0
+    },{
+        xtype : "numberfield", 
+        name : "pr_zxbzs", 
+        fieldLabel : "最小包装数", 
+        minValue:0,
+        decimalPrecision: 0,
+        allowBlank : true
     },{
         xtype : "hidden", 
         name : "pr_whid", 
@@ -149,14 +164,6 @@ Ext.define('saas.view.document.product.FormPanel', {
         xtype : "textfield", 
         name : "pr_vendname", 
         fieldLabel : "供应商名称"
-    },{
-        xtype : "numberfield", 
-        name : "pr_standardprice", 
-        fieldLabel : "标准单价", 
-        allowBlank : true, 
-        columnWidth : 0.25,
-        decimalPrecision: 8,
-        minValue:0
     },{
         ignore:true,
         readOnly:true,
@@ -175,13 +182,6 @@ Ext.define('saas.view.document.product.FormPanel', {
         fieldLabel : "最新出货单价", 
         decimalPrecision: 8,
         minValue:0
-    },{
-        xtype : "numberfield", 
-        name : "pr_zxbzs", 
-        fieldLabel : "最小包装数", 
-        minValue:0,
-        decimalPrecision: 0,
-        allowBlank : true
     },{  
         hidden:true,
         xtype : "datefield", 

+ 2 - 2
frontend/saas-web/app/view/document/productbrand/DataListModel.js

@@ -27,8 +27,8 @@ Ext.define('saas.view.document.productbrand.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

+ 2 - 2
frontend/saas-web/app/view/document/productunit/DataListModel.js

@@ -27,8 +27,8 @@ Ext.define('saas.view.document.productunit.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

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

@@ -227,7 +227,6 @@ Ext.define('saas.view.document.vendor.FormPanel', {
         detnoColumn: 'vc_detno',
         showCount: false,
         deleteDetailUrl:'/api/document/vendor/deleteContact',
-        height:145,
         columns : [
             {
                 text : "ID", 

+ 2 - 2
frontend/saas-web/app/view/document/warehouse/DataListModel.js

@@ -31,8 +31,8 @@ Ext.define('saas.view.document.warehouse.DataListModel', {
                                 saas.util.BaseUtil.showErrorToast('请求超时');
                             }
                         }else {
-                            console.error('exception: ', response.responseJson);
-                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                            console.error('exception: ', response);
+                            saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                         }
                     }
                 }

+ 8 - 6
frontend/saas-web/app/view/home/charts/MonthSale.js

@@ -31,11 +31,13 @@ Ext.define('saas.view.home.charts.MonthSale', {
 
         store.each(function(d) {
             var d = d.data;
-            fields.push(d.x);
-            data.push({
-                value: d.y,
-                name: d.x
-            });
+            if(d.y > 0) {
+                fields.push(d.x);
+                data.push({
+                    value: d.y,
+                    name: d.x
+                });
+            }
         });
 
         return {
@@ -64,7 +66,7 @@ Ext.define('saas.view.home.charts.MonthSale', {
                 }
             },
             legend: {
-                orient: 'horizontal',
+                orient: 'vertical',
                 left: '70%',
                 width: '30%',
                 icon: 'circle',

+ 1 - 1
frontend/saas-web/app/view/home/infoCardList/InfoList.js

@@ -73,7 +73,7 @@ Ext.define('saas.view.home.infoCardList.InfoList', {
                                 if(response.timedout) {
                                     saas.util.BaseUtil.showErrorToast('请求超时');
                                 }else{
-                                    saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson.message);
+                                    saas.util.BaseUtil.showErrorToast('查询失败:' + response.responseJson?response.responseJson.message:'请求超时');
                                 }
                             }
                         }

+ 2 - 2
frontend/saas-web/app/view/home/infoCardList/Payment.js

@@ -122,7 +122,7 @@ Ext.define('saas.view.home.infoCardList.Payment', {
         width: 150,
         hidden: true
     }, {
-        text: '单价',
+        text: '单价(元)',
         dataIndex: 'pd_orderprice',
         xtype: 'numbercolumn',
         hidden: true,
@@ -143,7 +143,7 @@ Ext.define('saas.view.home.infoCardList.Payment', {
             return Ext.util.Format.number(v, '0');
         },
     }, {
-        text: '金额',
+        text: '金额(元)',
         dataIndex: 'pd_total',
         xtype: 'numbercolumn',
         width: 110,

+ 2 - 2
frontend/saas-web/app/view/home/infoCardList/PurchaseIn.js

@@ -80,7 +80,7 @@ Ext.define('saas.view.home.infoCardList.PurchaseIn', {
         xtype: 'datecolumn',
         width: 110
     }, {
-        text: '单价',
+        text: '单价(元)',
         dataIndex: 'pd_price',
         xtype: 'numbercolumn',
         width: 110,
@@ -99,7 +99,7 @@ Ext.define('saas.view.home.infoCardList.PurchaseIn', {
             return Ext.util.Format.number(v, '0');
         },
     }, {
-        text: '金额',
+        text: '金额(元)',
         dataIndex: 'pd_total',
         xtype: 'numbercolumn',
         width: 110,

+ 1 - 1
frontend/saas-web/app/view/home/infoCardList/Recment.js

@@ -124,7 +124,7 @@ Ext.define('saas.view.home.infoCardList.Recment', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '金额',
+        text: '金额(元)',
         dataIndex: 'pd_ordertotal',
         xtype:'numbercolumn',
         width: 110,

+ 1 - 1
frontend/saas-web/app/view/home/infoCardList/SaleOut.js

@@ -71,7 +71,7 @@ Ext.define('saas.view.home.infoCardList.SaleOut', {
             return Ext.util.Format.number(v, format);
         },
     }, {
-        text: '单价',
+        text: '单价(元)',
         dataIndex: 'sd_price',
         xtype: 'numbercolumn',
         width: 110,

+ 2 - 2
frontend/saas-web/app/view/home/infoCardList/UnauditCheckIn.js

@@ -122,7 +122,7 @@ Ext.define('saas.view.home.infoCardList.UnauditCheckIn', {
         hidden: true,
         width: 150
     }, {
-        text: '单价',
+        text: '单价(元)',
         dataIndex: 'pd_orderprice',
         hidden: true,
         xtype: 'numbercolumn',
@@ -143,7 +143,7 @@ Ext.define('saas.view.home.infoCardList.UnauditCheckIn', {
             return Ext.util.Format.number(v, '0');
         },
     }, {
-        text: '金额',
+        text: '金额(元)',
         dataIndex: 'pd_total',
         xtype: 'numbercolumn',
         hidden: true,

+ 1 - 1
frontend/saas-web/app/view/home/infoCardList/UnauditSaleOut.js

@@ -121,7 +121,7 @@ Ext.define('saas.view.home.infoCardList.UnauditSaleOut', {
             return Ext.util.Format.number(v, format);
         }
     }, {
-        text: '金额',
+        text: '金额(元)',
         dataIndex: 'pd_ordertotal',
         xtype:'numbercolumn',
         width: 110,

+ 44 - 7
frontend/saas-web/app/view/main/Main.js

@@ -114,6 +114,7 @@ Ext.define('saas.view.main.Main', {
                 {
                     //margin: '0 0 0 0',
                     xtype: 'tbtext',
+                    name:'realname',
                     cls:'sa-nav-button nav-realname',
                     bind: {
                         html: '{account.realname}'
@@ -121,14 +122,31 @@ Ext.define('saas.view.main.Main', {
                     style:{
                         cursor:'default',
                         textAlign:'center'
-                    }
+                    },
+                    listeners:{
+                        afterrender:function(b){
+                            var main = b.ownerCt.ownerCt;
+                            //调用
+                            var _localStorage = Ext.decode(localStorage.getItem('app-state-session'));
+                            var nowCompanyId = _localStorage.account.companyId;
+                            if(_localStorage.account.rolesMap){
+                                var rolesMap = _localStorage.account.rolesMap[nowCompanyId];
+                                if(rolesMap&&rolesMap.length>0){
+                                    for(var i = 0; i < rolesMap.length; i++) {
+                                        if(rolesMap[i].type==0){
+                                             main.getController().loadInvitationMsg(1,nowCompanyId)
+                                        }
+                                     }
+                                }
+                            }
+                        }
+                    },
                 },
                 {
                     // ui: 'header',
-                    arrowVisible: false,
-                    cls:' sa-nav-button',   
+                    cls:' sa-nav-button', 
                     width: 50,
-                    height:50,    
+                    height:50,   
                     bind: {
                         html:'<img class="x-img x-box-item x-toolbar-item x-img-header" style="height:35px;width:35px;margin-top: 6px;margin-left: 14px;" src="{avatarUrl}" alt="">'
                     }, 
@@ -139,7 +157,12 @@ Ext.define('saas.view.main.Main', {
                             text: '账户中心',
                             iconCls:'x-fa fa-user-o sa-navicon',
                             handler:function(){
-                                window.open(Ext.manifest.server.accountEnterprise,'_blank');
+                                var userId = saas.util.BaseUtil.getCurrentUser().id,
+                                url = Ext.manifest.server.accountEnterprise;
+                                if(userId == '-99999') {
+                                    url = Ext.manifest.server.accountCenter;
+                                }
+                                window.open(url, '_blank');
                             }
                         },{  
                             text: '意见反馈',
@@ -147,13 +170,27 @@ Ext.define('saas.view.main.Main', {
                             handler:'feedbackMsg'
                         }, {  
                             text: '加入邀请',
+                            name:'join',
                             iconCls:'x-fa fa-handshake-o sa-navicon',
-                            handler:'invitation'
+                            handler:function(b){
+                                saas.util.BaseUtil.openTab('sys-invitation-datalist','申请列表', 'sys-invitation-datalist');
+                            }
                         }, {
                             text: '退出',
                             iconCls:'x-fa fa-power-off sa-navicon',
                             handler: 'onLogout'
-                        }]
+                        }],
+                        listeners:{
+                            show:function(m){
+                                var name = m.ownerCmp.ownerCt.down('[name=realname]');
+                                var classList = name.getEl().dom.classList;
+                                if(classList.contains('x-header-redpoint')){
+                                    m.getEl().dom.classList.add('x-menu-redpoint')
+                                }else{
+                                    m.getEl().dom.classList.remove('x-menu-redpoint')
+                                }
+                            } 
+                        }
                     }
                 }
             ]

+ 28 - 0
frontend/saas-web/app/view/main/Main.scss

@@ -349,3 +349,31 @@ body > .x-mask {
         color: #34BAF6;
     }
 }
+
+.x-header-redpoint:after{
+    z-index: 100;
+    content: ' ';
+    display: block;
+    width: 8px;
+    height: 8px;
+    background-color: red;
+    border: 1px solid red;
+    border-radius: 12px;
+    position: absolute;
+    left: 76px;
+    top: -7px;
+}
+
+.x-menu-redpoint:after{
+    z-index: 100;
+    content: ' ';
+    display: block;
+    width: 5px;
+    height: 5px;
+    background-color: red;
+    border: 1px solid red;
+    border-radius: 12px;
+    position: absolute;
+    left: 88px;
+    top: 72px;
+}

+ 123 - 0
frontend/saas-web/app/view/main/MainController.js

@@ -115,5 +115,128 @@ Ext.define('saas.view.main.MainController', {
             }); 
         };
         win.show();
+    },
+
+    loadInvitationMsg: function(count,nowCompanyId) {
+        var me = this.view;//视图层
+        var hasInvitationMsg = false;
+        //查询后台
+        var param = [{
+            type:'condition',
+            value:"re_status=2"
+        },{
+            type:'condition',
+            value:"companyId="+nowCompanyId
+        }]
+        Ext.Ajax.request({  
+            url :'/api/commons/remind/apply/list',
+            timeout: 8000,  
+            async:false,
+            headers:{
+                'Access-Control-Allow-Origin': '*',
+                'Authorization':  saas.util.State.get('session').token,
+                "Content-Type": 'application/json;charset=UTF-8'
+            },
+            method: 'GET',
+            params:{
+                condition:JSON.stringify(param)
+            },
+            success: function(fp, o){
+                var res = Ext.decode(fp.responseText);
+                me.InvitationList = res.data.list;
+                if(res.data.list.length>0){
+                    hasInvitationMsg = true;
+                }else{
+                    hasInvitationMsg = false;
+                }
+            },
+            failure: function (response, opts) {}
+        });
+        var s = me.items.items[0].down('[name=realname]')
+        if(hasInvitationMsg){
+            s.getEl().dom.classList.add('x-header-redpoint')
+        }else{
+            s.getEl().dom.classList.remove('x-header-redpoint')
+        }
+        if(count==1){
+            //打开加入邀请窗口
+            setTimeout(function() {
+                me.getController().invitation();
+            }, 300);
+        }
+        setTimeout(function() {
+            me.getController().loadInvitationMsg(count+1,nowCompanyId);
+        }, 8000);
+    },
+
+    invitation:function(){
+        var me = this;
+        var data = me.view.InvitationList;
+        if(data.length>0){
+            var items = [{
+                margin:'0 0 0 60px',
+                xtype:'displayfield',
+                fieldStyle : 'font-weight: 800;font-size: 18px;color: #35baf6;',
+                value:'收到加入企业申请'
+            }];
+            Ext.each(data, function(item, index){
+                if(index<3){
+                    //最多3条
+                    var o = {
+                        margin:'10 0 0 0',
+                        xtype:'panel',
+                        layout: 'hbox',
+                        style:'border:1px solid #34BAF6;    padding-top: 3px;',
+                        items:[{
+                            labelWidth:60,
+                            fieldLabel:'申请人',
+                            xtype:'displayfield',
+                            fieldStyle : 'color: black;',
+                            value:item.username
+                        },{
+                            labelWidth:80,
+                            padding:'0 10 0 0',
+                            fieldLabel:'联系方式',
+                            xtype:'displayfield',
+                            fieldStyle : 'color: black;',
+                            value:item.mobile
+                        }]
+                    }
+                    items.push(o);
+                }
+            });
+            items.push({
+                width:128,
+                margin:'20 0 0 70',
+                xtype:'button',
+                text:'查 看',
+                handler:function(){
+                    saas.util.BaseUtil.openTab('sys-invitation-datalist','申请列表', 'sys-invitation-datalist');
+                    this.ownerCt.ownerCt.close()
+                }
+            });
+            var nowHeight = (items.length-2)*70+130;
+            //打开邀请窗口
+            var win = Ext.create('Ext.window.Window', {  
+                cls:'x-window-dbfind', 
+                height: nowHeight,
+                width: '50%',
+                modal:true,
+                title: '加入邀请',
+                bodyPadding: 10,
+                constrain: true,
+                closable: true,
+                layout: {
+                    type: 'vbox',
+                    align: 'center'
+                },
+                items:[{
+                    xtype:'panel',
+                    layout:'vbox',
+                    items:items
+                }]
+            });
+            win.show();
+        }
     }
 });

+ 4 - 0
frontend/saas-web/app/view/money/fundtransfer/FormPanelModel.js

@@ -2,4 +2,8 @@ Ext.define('saas.view.money.fundtransfer.FormPanelModel', {
     extend: 'saas.view.core.form.FormPanelModel',
     alias: 'viewmodel.money-fundtransfer-formpanel',
 
+    data: {
+        showCopyBtn: false
+    }
+
 });

+ 3 - 3
frontend/saas-web/app/view/money/fundtransfer/QueryPanel.js

@@ -54,7 +54,7 @@ Ext.define('saas.view.money.fundtransfer.QueryPanel', {
         xtype: 'accountDbfindTrigger',
         name: 'creatorName',
         fieldLabel: '录入人',
-        emptyText:'请输入人员编号或名称',
+        emptyText:'请输入账户名称或姓名',
         getCondition: function(value) {
             if(!value) {
                 return '1=1';
@@ -66,7 +66,7 @@ Ext.define('saas.view.money.fundtransfer.QueryPanel', {
         xtype: 'accountDbfindTrigger',
         name: 'ft_auditman',
         fieldLabel: '审核人',
-        emptyText:'请输入人员编号或名称'
+        emptyText:'请输入账户名称或姓名'
     }],
     moreQueryFormItems: [],
     queryGridConfig: {
@@ -99,7 +99,7 @@ Ext.define('saas.view.money.fundtransfer.QueryPanel', {
             dataIndex: 'ftd_inbankname',
             width: 150
         }, {
-            text: '金额',
+            text: '金额(元)',
             xtype: 'numbercolumn',
             dataIndex: 'ftd_nowbalance',
             width: 110,

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

@@ -113,7 +113,7 @@ Ext.define('saas.view.money.othreceipts.FormPanel', {
                     }
                 }
             }, {
-                text : "金额", 
+                text : "金额(元)", 
                 xtype: 'numbercolumn',
                 dataIndex : "ord_nowbalance", 
                 width : 110.0,

Some files were not shown because too many files changed in this diff