Browse Source

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

heqinwei 7 years ago
parent
commit
a557035cbc
75 changed files with 552 additions and 179 deletions
  1. 2 0
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersdetailMapper.java
  2. 6 4
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  3. 6 0
      applications/commons/commons-server/src/main/resources/mapper/MaxnumbersdetailMapper.xml
  4. 4 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BomMapper.java
  5. 7 3
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  6. 3 2
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/VendorServiceImpl.java
  7. 7 1
      applications/document/document-server/src/main/resources/mapper/BomMapper.xml
  8. 10 6
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/VerificationServiceImpl.java
  9. 1 1
      applications/purchase/purchase-server/src/main/resources/application.yml
  10. 3 3
      applications/sale/sale-server/src/main/java/com/usoftchina/saas/sale/service/impl/SaleServiceImpl.java
  11. 5 1
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountController.java
  12. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountCompanyMapper.java
  13. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/AccountMapper.java
  14. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/mapper/RoleResourceMapper.java
  15. 7 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountService.java
  16. 11 1
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java
  17. 6 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountServiceImpl.java
  18. 26 3
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/RoleServiceImpl.java
  19. 12 0
      base-servers/account/account-server/src/main/resources/mapper/AccountCompanyMapper.xml
  20. 4 0
      base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml
  21. 6 2
      base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml
  22. 38 4
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  23. 8 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/mapper/AuthorizeLogMapper.java
  24. 117 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/po/VirtualAuthorizeLog.java
  25. 8 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/AuthorizeLogService.java
  26. 6 0
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/service/impl/AuthorizeLogServiceImpl.java
  27. 5 0
      base-servers/auth/auth-server/src/main/resources/mapper/AuthorizeLogMapper.xml
  28. 8 5
      base-servers/gateway-server/src/main/java/com/usoftchina/saas/gateway/config/AuthFilter.java
  29. 1 0
      base-servers/gateway-server/src/main/resources/application.yml
  30. 5 5
      frontend/saas-portal-web/src/components/conenter/addgongsi.vue
  31. 3 3
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  32. 122 78
      frontend/saas-portal-web/src/components/conenter/home.vue
  33. 13 13
      frontend/saas-portal-web/static/css/main.css
  34. BIN
      frontend/saas-portal-web/static/img/assets/1.png
  35. BIN
      frontend/saas-portal-web/static/img/assets/1@2x.png
  36. BIN
      frontend/saas-portal-web/static/img/assets/2.png
  37. BIN
      frontend/saas-portal-web/static/img/assets/2@3x.png
  38. BIN
      frontend/saas-portal-web/static/img/assets/3@2x.png
  39. BIN
      frontend/saas-portal-web/static/img/assets/Group3x.png
  40. BIN
      frontend/saas-portal-web/static/img/assets/beijing.png
  41. BIN
      frontend/saas-portal-web/static/img/assets/chatu.png
  42. BIN
      frontend/saas-portal-web/static/img/assets/dalogo@2x.png
  43. BIN
      frontend/saas-portal-web/static/img/assets/dalogo@2x_1.png
  44. BIN
      frontend/saas-portal-web/static/img/assets/dianzi3x.png
  45. BIN
      frontend/saas-portal-web/static/img/assets/fen xi@2x.png
  46. BIN
      frontend/saas-portal-web/static/img/assets/jin3x.png
  47. BIN
      frontend/saas-portal-web/static/img/assets/kuaisu@2x.png
  48. BIN
      frontend/saas-portal-web/static/img/assets/logo.png
  49. BIN
      frontend/saas-portal-web/static/img/assets/qing3x.png
  50. BIN
      frontend/saas-portal-web/static/img/assets/ren3x.png
  51. BIN
      frontend/saas-portal-web/static/img/assets/timg.jpg
  52. BIN
      frontend/saas-portal-web/static/img/assets/weixin.png
  53. BIN
      frontend/saas-portal-web/static/img/assets/weixuanzhong2x.png
  54. BIN
      frontend/saas-portal-web/static/img/assets/xuanzhong2x.png
  55. BIN
      frontend/saas-portal-web/static/img/assets/xun3x.png
  56. BIN
      frontend/saas-portal-web/static/img/assets/xunzhao@2x.png
  57. BIN
      frontend/saas-portal-web/static/img/assets/zi3x.png
  58. BIN
      frontend/saas-portal-web/static/img/features.jpg
  59. BIN
      frontend/saas-portal-web/static/img/gongneng/chahua12x.png
  60. BIN
      frontend/saas-portal-web/static/img/gongneng/chahua22x.png
  61. BIN
      frontend/saas-portal-web/static/img/gongneng/chahua32x.png
  62. BIN
      frontend/saas-portal-web/static/img/qiye/x.png
  63. 4 9
      frontend/saas-portal-web/static/js/mains.js
  64. 10 0
      frontend/saas-web/app/Application.scss
  65. 14 10
      frontend/saas-web/app/view/core/query/QueryFormPanel.js
  66. 20 5
      frontend/saas-web/app/view/core/query/QueryPanel.scss
  67. 4 2
      frontend/saas-web/app/view/core/query/QueryPanelController.js
  68. 6 5
      frontend/saas-web/app/view/document/kind/ChildForm.js
  69. 6 6
      frontend/saas-web/app/view/stock/inventory/EditDataList.js
  70. 1 1
      frontend/saas-web/app/view/stock/make/FormPanelController.js
  71. 1 1
      frontend/saas-web/app/view/sys/baseconfig/FormPanel.js
  72. 2 2
      frontend/saas-web/app/view/sys/config/FormPanel.js
  73. 2 2
      frontend/saas-web/app/view/sys/guide/FormPanel.js
  74. BIN
      frontend/saas-web/resources/images/default/hide.png
  75. BIN
      frontend/saas-web/resources/images/default/show.png

+ 2 - 0
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersdetailMapper.java

@@ -29,4 +29,6 @@ public interface MaxnumbersdetailMapper {
     int updateByPrimaryKeySelective(Maxnumbersdetail record);
 
     int updateByPrimaryKey(Maxnumbersdetail record);
+
+    void updateMaxno(@Param("id") Long id, @Param("serialNum") Integer serialNum, @Param("companyId") Long companyId);
 }

+ 6 - 4
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java

@@ -90,10 +90,11 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             maxcode = rulecode + createSerialNum(length, maxno);
             //如果以更新方式取编号
             if (update) {
-                detail.setUpdateTime(new Date());
+                /*detail.setUpdateTime(new Date());
                 detail.setUpdaterId(userId);
                 detail.setMd_maxno(maxno);
-                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);
+                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);*/
+                maxnumbersdetailMapper.updateMaxno(detail.getId(), maxno, BaseContextHolder.getCompanyId());
             }
         }
         return maxcode;
@@ -143,10 +144,11 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             length = maxnumbers.getMn_number();
             Integer serialNum = praseSerialNum(maxcode, length);
             if (null != serialNum) {
-                detail.setMd_maxno(serialNum);
+                /*detail.setMd_maxno(serialNum);
                 detail.setUpdaterId(userId);
                 detail.setUpdateTime(new Date());
-                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);
+                maxnumbersdetailMapper.updateByPrimaryKeySelective(detail);*/
+                maxnumbersdetailMapper.updateMaxno(detail.getId(), serialNum, BaseContextHolder.getCompanyId());
             }
 
         }

+ 6 - 0
applications/commons/commons-server/src/main/resources/mapper/MaxnumbersdetailMapper.xml

@@ -273,4 +273,10 @@
       updaterId = #{updaterId,jdbcType=INTEGER}
     where md_id = #{id,jdbcType=INTEGER}
   </update>
+
+  <update id="updateMaxno">
+    update maxnumbersdetail
+    set md_maxno = #{serialNum}
+    where md_id = #{id} and  companyId=#{companyId} and  md_maxno &lt; #{serialNum}
+  </update>
 </mapper>

+ 4 - 1
applications/document/document-server/src/main/java/com/usoftchina/saas/document/mapper/BomMapper.java

@@ -19,7 +19,10 @@ public interface BomMapper extends CommonBaseMapper<Bom> {
 
     int updateByPrimaryKey(Bom record);
 
-    int validCodeAndVersion(@Param("code") String code, @Param("version") String version, @Param("companyId") Long companyId);
+    int validCodeAndVersionWhenInsert(@Param("code") String code, @Param("version") String version, @Param("companyId") Long companyId);
+
+    int validCodeAndVersionWhenUpdate(@Param("code") String code, @Param("id") Long id, @Param("version") String version, @Param("companyId") Long companyId);
+
 
     int validateCodeWhenInsert(@Param("code") String code, @Param("companyId") Long companyId);
 

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

@@ -51,9 +51,10 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         DocBaseDTO docBaseDTO = null;
         if(id == 0){
             //校验编号和版本 是否已存在
-            int count = getMapper().validCodeAndVersion(bom.getBo_mothercode(), bom.getBo_version(), companyId);
+            int count = getMapper().validCodeAndVersionWhenInsert(bom.getBo_mothercode(), bom.getBo_version(), companyId);
             if(count == 0){
-                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
+//                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
+                String code = bom.getBo_mothercode();
                 bom.setBo_mothercode(code);
                 bom.setCompanyId(companyId);
                 //保存BOM
@@ -79,8 +80,11 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
             }
         }else{
             //校验编号和版本 是否已存在
-            int count = getMapper().validCodeAndVersion(bom.getBo_mothercode(), bom.getBo_version(), companyId);
+            int count = getMapper().validCodeAndVersionWhenUpdate(bom.getBo_mothercode(),bom.getId(),bom.getBo_version(),companyId);
             //更新主表
+            if (count != 0) {
+                throw new BizException(BizExceptionCode.BOM_SAVE);
+            }
             getMapper().updateByPrimaryKeySelective(bom);
             if (bomDetailList.size() > 0) {
                 List<BomDetail> insertItems = new ArrayList<BomDetail>();

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

@@ -139,7 +139,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         if(main.getId() == 0){
             int count = getMapper().getCountByCode(code, companyId);
             if(count > 0){
-                throw new BizException(BizExceptionCode.REPEAT_NAME);
+                throw new BizException(BizExceptionCode.REPEAT_CODE);
             }
             count = getMapper().getCountByName(main.getVe_name(), companyId);
             if (count > 0){
@@ -182,7 +182,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
             if (!main.getVe_name().equals(oldVendor.getVe_name())){
                 count = getMapper().getCountByName(main.getVe_name(), companyId);
                 if (count > 0){
-                    throw new BizException(BizExceptionCode.REPEAT_CODE);
+                    throw new BizException(BizExceptionCode.REPEAT_NAME);
                 }
             }
 
@@ -272,6 +272,7 @@ public class VendorServiceImpl extends CommonBaseServiceImpl<VendorMapper, Vendo
         subledger.setSl_namount(Math.abs(amount));
         Long sl_id = subledgerMapper.selectByKindCodeVendid("期初余额","期初余额",
                 Math.toIntExact(main.getId()),BaseContextHolder.getCompanyId(),YM);
+
         subledger.setId(sl_id);
         if ( sl_id!=null && sl_id > 0 ) {
             subledgerMapper.updateByPrimaryKeySelective(subledger);

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

@@ -271,9 +271,15 @@
   <select id="validateCodeWhenUpdate" resultType="int" >
     select count(*) from BOM where BO_MOTHERCODE = #{code} and BO_ID != #{id} and companyId =#{companyId}
   </select>
-  <select id="validCodeAndVersion" resultType="int">
+  <select id="validCodeAndVersionWhenInsert" resultType="int">
       SELECT COUNT(*) FROM BOM WHERE BO_MOTHERCODE = #{code} and BO_VERSION=#{version} and COMPANYID=#{companyId}
   </select>
+
+  <select id="validCodeAndVersionWhenUpdate" resultType="int">
+    SELECT COUNT(*) FROM BOM WHERE BO_MOTHERCODE = #{code} and BO_ID != #{id} and BO_VERSION=#{version} and COMPANYID=#{companyId}
+  </select>
+
+
   <select id="getCodeById" resultType="string">
       SELECT BO_MOTHERCODE FROM BOM WHERE BO_ID = #{id} and COMPANYID = #{companyId}
   </select>

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

@@ -469,13 +469,17 @@ public class VerificationServiceImpl extends CommonBaseServiceImpl<VerificationM
             List<VerificationdetDTO> items1 = formData.getItems1();
             //获取从表2
             List<VerificationdetailDTO> items2 = formData.getItems2();
-            for(VerificationdetDTO det : items1){
-                Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
-                updateAuditSubledeger(det.getVd_slid(),nowbalanceDet);
+            if(items1!=null){
+                for(VerificationdetDTO det : items1){
+                    Double nowbalanceDet = det.getVd_nowbalance()==null?new Double(0):det.getVd_nowbalance();
+                    updateAuditSubledeger(det.getVd_slid(),nowbalanceDet);
+                }
             }
-            for(VerificationdetailDTO detail : items2){
-                Double nowbalanceDet = detail.getVcd_nowbalance()==null?new Double(0):detail.getVcd_nowbalance();
-                updateAuditSubledeger(detail.getVcd_slid(),nowbalanceDet);
+            if(items2!=null){
+                for(VerificationdetailDTO detail : items2){
+                    Double nowbalanceDet = detail.getVcd_nowbalance()==null?new Double(0):detail.getVcd_nowbalance();
+                    updateAuditSubledeger(detail.getVcd_slid(),nowbalanceDet);
+                }
             }
         }
         baseDTO.setId(id);

+ 1 - 1
applications/purchase/purchase-server/src/main/resources/application.yml

@@ -47,7 +47,7 @@ eureka:
   client:
     registryFetchIntervalSeconds: 5
     serviceUrl:
-      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@localhost:8500/eureka/
+      defaultZone: http://${spring.security.user.name}:${spring.security.user.password}@192.168.0.181:8510:8500/eureka/
 management:
   endpoints:
     web:

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

@@ -583,8 +583,8 @@ public class SaleServiceImpl implements SaleService{
             purchaseDetail.setPd_saledetno(detail.getSd_detno());
             purchaseDetail.setPd_saleid(sale.getId());
             purchaseDetail.setPd_taxrate(taxRate);
-            purchaseDetail.setPd_taxprice(Price*(1+taxRate/100));
-            purchaseDetail.setPd_taxtotal((Price*(1+taxRate/100))*qty);
+            purchaseDetail.setPd_taxprice(Price*(1-taxRate/100));
+            purchaseDetail.setPd_taxtotal((Price*(1-taxRate/100))*qty);
             purchaseDetail.setCompanyId(BaseContextHolder.getCompanyId());
             purchaseDetail.setCreatorId(BaseContextHolder.getUserId());
             purchaseDetail.setCreateTime(new Date());
@@ -601,7 +601,7 @@ public class SaleServiceImpl implements SaleService{
 
         DocBaseDTO log = new DocBaseDTO(sale.getId(),sale.getSa_code(),BillCodeSeq.SALE.getCaller());
         messageLogService.customizeLog(log, Operation.TURNPURCHASE);
-        return log;
+        return baseDTO;
     }
 
     //更新最新销售总额

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

@@ -145,9 +145,13 @@ public class AccountController {
         return Result.success(ssoUserApi.checkMobile(mobile));
     }
 
+    @GetMapping("/checkEmail")
+    public Result checkEmail(@RequestParam("email") String email){
+        return Result.success(accountService.checkEmail(email));
+    }
+
     /**
      * 修改
-     *
      * @param accountUpdateDTO
      * @return
      */

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

@@ -4,6 +4,7 @@ import com.usoftchina.saas.account.dto.CompanyRspDTO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author yingp
@@ -66,4 +67,10 @@ public interface AccountCompanyMapper {
      * @return
      */
     boolean bindDefault(@Param("accountId") Long accountId, @Param("companyId") Long companyId);
+
+    /**
+     * 账套数据初始化
+     * @param map
+     */
+    void initData(Map<String, Object> map);
 }

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

@@ -105,4 +105,12 @@ public interface AccountMapper {
      * @param enabled
      */
     void updateEnabled(@Param("id") Long id, @Param("enabled") Boolean enabled);
+
+    /**
+     * 校验email是否已存在
+     * @param email
+     * @param companyId
+     * @return
+     */
+    int checkEmail(@Param("email") String email, @Param("companyId") Long companyId);
 }

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

@@ -75,6 +75,13 @@ public interface RoleResourceMapper {
      */
     List<OtherPower> selectOthersPower();
 
+    /**
+     * 通过角色ID查询拥友的其他权限
+     * @param id
+     * @return
+     */
+    List<OtherPower> selectOthersPowerByRoleId(Long id);
+
     /**
      * 批量插入
      * @param roleResourceList

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

@@ -178,4 +178,11 @@ public interface AccountService {
      * @param accountId
      */
     void clearCache(Long accountId);
+
+    /**
+     * 校验email是否已存在
+     * @param email
+     * @return
+     */
+    boolean checkEmail(String email);
 }

+ 11 - 1
base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java

@@ -73,12 +73,22 @@ public class AccountCenterServiceImpl implements AccountCenterService {
         if ("0".equals(type)) {
             String result = ssoUserSpaceApi.registerLogin(company.getName(), company.getBusinessCode(), Long.parseLong(accountRegDTO.getUu()));
         }
+        //c.插入 账户公司 映射
         accountCompanyMapper.insert(accountId, company.getId());
         //2.更新账户信息
         Account account = BeanMapper.map(accountRegDTO, Account.class);
-
         account.setId(accountId);
+        account.setEnabled(true);
         accountService.updateByPrimaryKeySelective(account);
+
+        //调用存储过程, 对新开账套数据初始化
+        Map<String, Object> map = new HashMap<String, Object>();
+        map.put("fromCompany", 2);
+        map.put("newCompany", company.getId());
+        map.put("accountId", accountId);
+        map.put("result", null);
+        accountCompanyMapper.initData(map);
+
         return null;
     }
 

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

@@ -198,4 +198,10 @@ public class AccountServiceImpl implements AccountService {
             AccountCache.uu(account.getUu()).hdel();
         }
     }
+
+    @Override
+    public boolean checkEmail(String email){
+        return accountMapper.checkEmail(email, BaseContextHolder.getCompanyId()) > 0;
+    }
+
 }

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

@@ -94,6 +94,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         List<Map<String, Object>> classifyList = roleResourceMapper.selectClassifyByRoleId(id);
         List<PowerInfo> powerInfoList = roleResourceMapper.selectPowerInfo();
         List<OtherPower> otherPowerList = roleResourceMapper.selectOthersPower();
+        List<OtherPower> hasOtherPowerList = roleResourceMapper.selectOthersPowerByRoleId(id);
 
         for (PowerInfo powerInfo : powerInfoList){
             PowerDTO powerDTO = new PowerDTO();
@@ -103,6 +104,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
             powerDTO.setModuleId(powerInfo.getModuleId());
             //赋值默认权限,在权限列表中的资源默认置为false
             setPowerValue(powerDTO, powerInfo.getClassify(), false);
+            setDefaultOtherPower(powerDTO, powerDTO.getGroupId(), id, otherPowerList);
             //赋值权限
             for (Map<String, Object> map : classifyList){
                 if (powerInfo.getGrougId().equals(map.get("group_id"))){
@@ -111,7 +113,7 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
                     setPowerValue(powerDTO, classify, true);
                 }
                 //设置其他权限
-                setOtherPower(powerDTO, powerInfo.getGrougId(), id, otherPowerList);
+                setOtherPower(powerDTO, hasOtherPowerList);
             }
             powerDTOList.add(powerDTO);
         }
@@ -164,10 +166,17 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         return true;
     }
 
-    private void setOtherPower(PowerDTO powerDTO, Long groupId, Long roleId, List<OtherPower> otherPowerList) {
+    /**
+     * 设置其他默认权限,用于生成设置按钮
+     * @param powerDTO
+     * @param groupId
+     * @param roleId
+     * @param otherPowerList
+     */
+    private void setDefaultOtherPower(PowerDTO powerDTO, Long groupId, Long roleId, List<OtherPower> otherPowerList){
         List<OtherPower> otherPowers = new ArrayList<OtherPower>();
         for (OtherPower otherPower : otherPowerList){
-            if (groupId.equals(otherPower.getGroupId()) && roleId.equals(otherPower.getRoleId())){
+            if (groupId.equals(otherPower.getGroupId())){
                 otherPowers.add(otherPower);
             }
         }
@@ -175,6 +184,20 @@ public class RoleServiceImpl extends CommonBaseServiceImpl<RoleMapper, Role> imp
         powerDTO.setOther(otherPowerDTOList);
     }
 
+    private void setOtherPower(PowerDTO powerDTO, List<OtherPower> otherPowerList) {
+        List<OtherPowerDTO> otherPowers = powerDTO.getOther();
+        if (!CollectionUtils.isEmpty(otherPowers)) {
+            for (OtherPower otherPower : otherPowerList) {
+                for (OtherPowerDTO otherPowerDTO : otherPowers) {
+                    if (otherPowerDTO.getResourceId().equals(otherPower.getResourceId())) {
+                        otherPowerDTO.setChecked(otherPower.isChecked());
+                    }
+                }
+            }
+        }
+        powerDTO.setOther(otherPowers);
+    }
+
     private void setPowerValue(PowerDTO powerDTO, String classify , boolean status) {
         String[] array = classify.split(",");
         for(int i = 0; i < array.length; i++){

+ 12 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountCompanyMapper.xml

@@ -27,4 +27,16 @@
     <update id="bindDefault" >
         UPDATE AC_ACCOUNT_COMPANY SET IS_DEFAULT = 1 WHERE ACCOUNT_ID = #{accountId} AND COMPANY_ID = #{companyId}
     </update>
+
+    <parameterMap id="initParamMap" type="java.util.Map">
+        <parameter property="fromCompany" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="newCompany" jdbcType="VARCHAR" mode="IN" />
+        <parameter property="accountId" jdbcType="INTEGER" mode="IN" />
+        <parameter property="result" jdbcType="VARCHAR" mode="OUT" />
+    </parameterMap>
+
+    <select id="initData" parameterMap="initParamMap" statementType="CALLABLE">
+        CALL COMPANY_INSTALL(?, ?, ?, ?)
+    </select>
+
 </mapper>

+ 4 - 0
base-servers/account/account-server/src/main/resources/mapper/AccountMapper.xml

@@ -202,4 +202,8 @@
     <update id="updateEnabled">
         update ac_account set enabled=#{enabled,jdbcType=BOOLEAN} where id=#{id,jdbcType=BIGINT}
     </update>
+    <select id="checkEmail" resultType="int">
+        SELECT COUNT(*) FROM AC_ACCOUNT AA LEFT JOIN AC_ACCOUNT_COMPANY AAC ON AAC.ACCOUNT_ID = AA.ID
+        WHERE AAC.COMPANY_ID = #{companyId} WHERE AA.EMAIL = #{email};
+    </select>
 </mapper>

+ 6 - 2
base-servers/account/account-server/src/main/resources/mapper/RoleResourceMapper.xml

@@ -48,10 +48,14 @@
         <result column="role_id" property="roleId" jdbcType="BIGINT" />
     </resultMap>
     <select id="selectOthersPower" resultMap="OtherPowerResultMap">
-      SELECT name,id,group_id,role_id,CASE WHEN ROLE_ID IS NULL THEN false ELSE true end checked FROM AC_RESOURCE
-      LEFT JOIN ac_role_resource ON ID = RESOURCE_ID
+      SELECT name,id,group_id FROM AC_RESOURCE
       WHERE CLASSIFY='OTHER'
     </select>
+    <select id="selectOthersPowerByRoleId" resultMap="OtherPowerResultMap">
+        SELECT name,id,group_id,role_id,CASE WHEN ROLE_ID IS NULL THEN false ELSE true end checked FROM AC_RESOURCE
+        LEFT JOIN ac_role_resource ON ID = RESOURCE_ID
+        WHERE CLASSIFY='OTHER' and role_id = #{id};
+    </select>
     <insert id="batchInsert" parameterType="java.util.List">
         INSERT INTO AC_ROLE_RESOURCE(ROLE_ID, RESOURCE_ID, COMPANY_ID, APP_ID)
         VALUES

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

@@ -6,6 +6,7 @@ import com.usoftchina.saas.account.constant.AccountType;
 import com.usoftchina.saas.account.dto.AccountCopyDTO;
 import com.usoftchina.saas.account.dto.AccountDTO;
 import com.usoftchina.saas.account.dto.AccountUpdateDTO;
+import com.usoftchina.saas.account.dto.CompanyBaseDTO;
 import com.usoftchina.saas.auth.common.cookie.CookieInfo;
 import com.usoftchina.saas.auth.common.jwt.JwtHelper;
 import com.usoftchina.saas.auth.common.jwt.JwtInfo;
@@ -14,6 +15,7 @@ import com.usoftchina.saas.auth.dto.AuthDTO;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.dto.TokenDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeCountService;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.base.Result;
@@ -23,10 +25,7 @@ import com.usoftchina.saas.page.PageDefault;
 import com.usoftchina.saas.page.PageRequest;
 import com.usoftchina.saas.server.web.ServletUtils;
 import com.usoftchina.saas.socket.api.SocketMessageApi;
-import com.usoftchina.saas.utils.BeanMapper;
-import com.usoftchina.saas.utils.CollectionUtils;
-import com.usoftchina.saas.utils.JsonUtils;
-import com.usoftchina.saas.utils.StringUtils;
+import com.usoftchina.saas.utils.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +35,9 @@ import org.springframework.web.bind.annotation.*;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 
 /**
  * @author yingp
@@ -117,6 +119,38 @@ public class AuthController {
         return Result.error(result.getCode(), result.getMessage());
     }
 
+
+    @PostMapping("/virtual/authorize/{mobile}")
+    public Result<AuthDTO> virtualAuthorize(HttpServletRequest request, @PathVariable("mobile") String mobile) {
+        //构造虚拟account,生成token
+        String randomNum = DateUtils.format(new Date(), "hhmmss");
+        AccountDTO accountDTO = new AccountDTO();
+        accountDTO.setId(-99999L);
+        accountDTO.setUsername("virtual" + randomNum);
+        accountDTO.setRealname("游客" + randomNum);
+        accountDTO.setMobile(mobile);
+        accountDTO.setType(0);
+        //公司信息
+        List<CompanyBaseDTO> companies = new ArrayList<CompanyBaseDTO>();
+        CompanyBaseDTO companyBaseDTO = new CompanyBaseDTO();
+        companyBaseDTO.setId(2L);
+        companyBaseDTO.setName("演示账套");
+
+        companies.add(companyBaseDTO);
+        accountDTO.setCompanies(companies);
+
+        Long companyId = 2L;            //演示账套companyId  :  2
+        String appId = "trade-app";     //App_ID
+        JwtInfo info = new JwtInfo(appId, companyId, accountDTO.getId(), accountDTO.getUsername(), accountDTO.getRealname());
+        JwtToken jwtToken = JwtHelper.generateToken(info, privateKeyPath, expire);
+        TokenDTO tokenDTO = BeanMapper.map(jwtToken, TokenDTO.class);
+        // 登录日志
+        authorizeLogService.saveVirtual(VirtualAuthorizeLog.from(request)
+                .setMobile(Long.parseLong(accountDTO.getMobile()))
+                .setAppId(appId).build());
+        return Result.success(new AuthDTO(tokenDTO, accountDTO));
+    }
+
     /**
      * 账户中心登录时jsonp回调
      *

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

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.auth.mapper;
 
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
@@ -26,4 +27,11 @@ public interface AuthorizeLogMapper {
      * @return
      */
     List<AuthorizeLog> selectByAppIdAndAccountId(@Param("appId") String appId, @Param("accountId") Long accountId);
+
+    /**
+     * 保存虚拟登陆的LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    int insertVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }

+ 117 - 0
base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/po/VirtualAuthorizeLog.java

@@ -0,0 +1,117 @@
+package com.usoftchina.saas.auth.po;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author chenw
+ * @date 2018/11/26
+ */
+public class VirtualAuthorizeLog implements Serializable{
+    private Long id;
+    private Long mobile;
+    private String clientIp;
+    private String userAgent;
+    private Date loginTime;
+    private String appId;
+
+    public VirtualAuthorizeLog() {
+    }
+
+    public VirtualAuthorizeLog(Long mobile, String clientIp, String userAgent, String appId) {
+        this.mobile = mobile;
+        this.clientIp = clientIp;
+        this.userAgent = userAgent;
+        this.loginTime = new Date();
+        this.appId = appId;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(Long mobile) {
+        this.mobile = mobile;
+    }
+
+    public String getClientIp() {
+        return clientIp;
+    }
+
+    public void setClientIp(String clientIp) {
+        this.clientIp = clientIp;
+    }
+
+    public String getUserAgent() {
+        return userAgent;
+    }
+
+    public void setUserAgent(String userAgent) {
+        this.userAgent = userAgent;
+    }
+
+    public Date getLoginTime() {
+        return loginTime;
+    }
+
+    public void setLoginTime(Date loginTime) {
+        this.loginTime = loginTime;
+    }
+
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
+
+    public static Builder from(HttpServletRequest request) {
+        return new Builder(request);
+    }
+
+    public static class Builder {
+        private Long mobile;
+        private String clientIp;
+        private String userAgent;
+        private String appId;
+
+        public Builder(HttpServletRequest request) {
+            this.clientIp = request.getRemoteAddr();
+            this.userAgent = request.getHeader("User-Agent");
+        }
+
+        public Builder setMobile(Long mobile) {
+            this.mobile = mobile;
+            return this;
+        }
+
+        public Builder setClientIp(String clientIp) {
+            this.clientIp = clientIp;
+            return this;
+        }
+
+        public Builder setUserAgent(String userAgent) {
+            this.userAgent = userAgent;
+            return this;
+        }
+
+        public Builder setAppId(String appId) {
+            this.appId = appId;
+            return this;
+        }
+
+        public VirtualAuthorizeLog build() {
+            return new VirtualAuthorizeLog(mobile, clientIp, userAgent, appId);
+        }
+    }
+}

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

@@ -3,6 +3,7 @@ package com.usoftchina.saas.auth.service;
 import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.page.PageRequest;
 
 /**
@@ -25,4 +26,11 @@ public interface AuthorizeLogService {
      * @return
      */
     PageInfo<AuthorizeLogDTO> findByPage(PageRequest page);
+
+    /**
+     * 保存虚拟账户登录LOG
+     * @param virtualAuthorizeLog
+     * @return
+     */
+    boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog);
 }

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

@@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo;
 import com.usoftchina.saas.auth.dto.AuthorizeLogDTO;
 import com.usoftchina.saas.auth.mapper.AuthorizeLogMapper;
 import com.usoftchina.saas.auth.po.AuthorizeLog;
+import com.usoftchina.saas.auth.po.VirtualAuthorizeLog;
 import com.usoftchina.saas.auth.service.AuthorizeLogService;
 import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.page.PageRequest;
@@ -39,4 +40,9 @@ public class AuthorizeLogServiceImpl implements AuthorizeLogService{
         );
         return new PageInfo<>(BeanMapper.mapList(logs, AuthorizeLogDTO.class));
     }
+
+    @Override
+    public boolean saveVirtual(VirtualAuthorizeLog virtualAuthorizeLog) {
+        return authorizeLogMapper.insertVirtual(virtualAuthorizeLog) > 0;
+    }
 }

+ 5 - 0
base-servers/auth/auth-server/src/main/resources/mapper/AuthorizeLogMapper.xml

@@ -18,4 +18,9 @@
         select * from au_authorize_log where app_id=#{appId} and account_id=#{accountId}
         order by login_time desc
     </select>
+    <insert id="insertVirtual" parameterType="com.usoftchina.saas.auth.po.VirtualAuthorizeLog">
+        insert into au_virtual_authorize_log(app_id,mobile,client_ip,user_agent,login_time)
+        values (#{appId,jdbcType=VARCHAR}, #{mobile,jdbcType=BIGINT}, #{clientIp,jdbcType=VARCHAR},
+        #{userAgent,jdbcType=VARCHAR}, #{loginTime,jdbcType=TIMESTAMP})
+    </insert>
 </mapper>

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

@@ -52,12 +52,15 @@ public class AuthFilter implements GlobalFilter, Ordered {
                 BaseContextHolder.setCompanyId(jwt.getCompanyId());
                 BaseContextHolder.setUserName(jwt.getRealName());
                 BaseContextHolder.setToken(token);
-                AccountDTO accountDTO = AccountCache.current().getAccount();
-                if (null == accountDTO) {
-                    throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                if (jwt.getUserId() != -99999) {    //非虚拟用户登录时
+                    AccountDTO accountDTO = AccountCache.current().getAccount();
+                    if (null == accountDTO) {
+                        throw new BizException(ExceptionCode.USER_NOT_EXIST);
+                    }
+                    // 鉴别角色权限
+                    checkPermission(exchange.getRequest(), jwt, accountDTO);
                 }
-                // 鉴别角色权限
-                checkPermission(exchange.getRequest(), jwt, accountDTO);
+
             }
             return chain.filter(exchange);
         } finally {

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

@@ -179,6 +179,7 @@ auth:
   public-key: auth/pub.key
   ignores:
     - /api/auth/authorize
+    - /api/auth/virtual/authorize/**
     - /api/auth/sso/callback/**
     - /api/account/account/register
     - /api/auth/info

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

@@ -14,7 +14,7 @@
                     <ul>
                         <li>
                             <span class="qy-biaoti"><span class="xingxing">*</span>公司名称</span>
-                            <input ref="qyname" @input= "spaceName" type="text">
+                            <input ref="qyname" @change= "spaceName" type="text">
                             <span ref="qyno" style="color:red"></span>
                         </li>
                         <li>
@@ -47,13 +47,13 @@
                     <ul>
                         <li>
                             <span class="qy-biaoti"><span class="xingxing">*</span>姓名</span>
-                            <input @input= "yzusername" ref="name" type="text">
+                            <input @change= "yzusername" ref="name" type="text">
                             <span ref="usname" style="color:red"></span>
                         </li>
                         <li><span class="qy-biaoti">手机号</span><span>{{mytoken.account.mobile}}</span></li>
                         <li>
                             <span class="qy-biaoti">邮箱</span>
-                            <input @input="email" ref="email" type="email">
+                            <input @change="email" ref="email" type="email">
                             <span style="color:red">{{Email}}</span>
                         </li>
                     </ul>
@@ -163,13 +163,13 @@ import VDistpicker from 'v-distpicker'
                         }
                     })
                     .then(res=>{
-                        console.log("请求成功"+res)
+                        console.log("请求成功",res)
                         document.documentElement.scrollTop = 0;
                         // this.$router.push({name:'company', params:{company:company,account:account}});
                         this.$router.push({name:'company'})
                     })
                     .catch(err=>{
-                        console.log("请求失败"+err)
+                        console.log("请求失败",err)
                     })
                 } else {
                     this.$refs.tjtishi.innerHTML = '企业名称或姓名不能为空'

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

@@ -12,7 +12,7 @@
                 </button>
                 <h1 class="navbar-brand">
                     <a href="#">
-                        <img class="logo-img" src="../../../static/img/assets/dalogo3x.png" alt="">
+                        <img class="logo-img" src="/static/img/assets/dalogo@2x_1.png" alt="">
                     </a>
                 </h1>
             </div>
@@ -21,8 +21,8 @@
                     <li><router-link to="/home"><a href="#"><span style="color: white">首页</span></a></router-link></li>
                     <li><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
                     <li>
-                        <span style="color:#fff;font-size: 13px;">
-                            <img style="width: 25px;" src="/static/img/assets/denglu3x.png" alt="">
+                        <span style="color:#fff;font-size: 16px;">
+                            <img style="width: 24px;" src="/static/img/assets/denglu3x.png" alt="">
                             {{mytoken.realname}}
                         </span>
                         <a href=""><span @click="loginout">【退出】</span></a>

+ 122 - 78
frontend/saas-portal-web/src/components/conenter/home.vue

@@ -1,5 +1,10 @@
 <template>
     <div>
+      <div id="preloader" style="display:none">
+        <div class="loder-box">
+          <div class="battery"></div>
+        </div>
+      </div>
 		<div id="navigation" class="navbar-inverse navbar-fixed-top animated-header">
         <div class="container">
             <div class="navbar-header">
@@ -11,19 +16,20 @@
                 </button>
                 <h1 class="navbar-brand">
                     <a href="#">
-                        <img class="logo-img" src="/static/img/assets/dalogo3x.png" alt="">
+                        <img class="logo-img" src="/static/img/assets/dalogo@2x_1.png" alt="">
                     </a>
                 </h1>
             </div>
             <div class="collapse navbar-collapse navbar-right" role="navigation">
           <ul id="nav" class="nav navbar-nav menu">
             <li><a href="#"><span>首页</span></a></li>
-            <li @click="home">
+            <li><a href="https://www.usoftchina.com/" target="_blank"><span>优软云</span></a></li>
+            <li>
               <a href="#feature"><span>特色</span></a>
               <!-- <router-link to="/enterprise"><a href="#"><span>特色</span></a></router-link> -->
             </li>
             <li><a href="#service"><span>功能</span></a></li>
-            <li><a href="#prototype"><span>帮助中心</span></a></li>
+            <!-- <li><a href="#prototype"><span>帮助中心</span></a></li> -->
             <li><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
             <li class="login" v-if="!account" style="margin-left: 20px;">
               <span @click="login"><img src="/static/img/assets/denglu3x.png" alt="">登录  &nbsp;</span>
@@ -35,7 +41,7 @@
 								<span id="user-info">{{account.realname || account.username}}</span>
 							</span>
               <span @click="loginout">【退出】</span>    |
-              <router-link to="/enterprise"><a href="#"><span style="color: white">账户管理</span></a></router-link>
+              <router-link to="/enterprise"><a href="#"><span style="color: white">账户中心</span></a></router-link>
             </li>
           </ul>
         </div>
@@ -52,15 +58,25 @@
           <img @click="closeModal" class="tc-on shut"
                src="/static/img/qiye/chahao.png" alt="">
         </div>
-        <iframe width="430" height="474" :src="ssoPage"></iframe>
+        <iframe id="iframe" width="430" height="474" :src="ssoPage"></iframe>
         <iframe hidden :src="setTokenPage"></iframe>
       </div>
+
+      <!-- 体验弹窗 -->
       <div class="tiyan" v-if="isexperience">
-        <img @click="Closeexperience" class="tc-on shut" src="/static/img/qiye/chahao.png" alt="" />
-        <div class="ty-title"><span>填写手机号后,可体验电子行业贸易版所有功能</span></div>
+        <img @click="Closeexperience" class="tc-on ty-out" src="/static/img/qiye/x.png" alt="" />
+        <div><img class="ty-logo" src="/static/img/assets/dalogo@2x.png" alt=""></div>
+        <div><p class="ty-logotxt">欢迎你访问U企云服</p></div>
+        <div class="ty-title"><span>填写手机号后,即刻体验电子行业贸易版所有功能</span></div>
         <div class="ty-phone over">
-          <div class="left"><input type="text" placeholder="请输入您的11位手机号"></div>
-          <button>立即申请试用</button>
+          <div class="left ty-input">
+            <span><img style="margin: 6px 8px 10px 15px;" src="/static/img/assets/phone.png" alt=""></span>
+            <input ref="typhone" type="text" placeholder="请输入您的11位手机号">
+          </div>
+          <div class="left" style="margin-left: 8px;"><button @click="experience1">立即试用</button></div>
+        </div>
+        <div style="text-align: left;">
+          <span class="Caution" ref="Caution"></span>
         </div>
         <div class="contact">
           <span>客服电话:400-830-1818</span>
@@ -102,49 +118,18 @@
             <p class="ts-text">云端部署 &nbsp;&nbsp; 轻量应用</p>
           </div>
           <div class="ts-box">
-            <div style="margin:50px 0;">
-              <!-- <img class="ts-img" src="/static/img/features.jpg" alt=""> -->
-              <img class="ts-img" src="/static/img/gongneng/chahua12x.png" alt="">
-            </div>
-            <div class="right right-text">
-              <img class="ts-minimg" src="/static/img/assets/1.png" alt="">
-              <div class="ts-mintext">
-                <p style="font-size: 32px !important;margin-bottom: 36px;"><img class="ts-textimg"
-                                                                                src="/static/img/assets/xunzhao@2x.png"
-                                                                                alt="">迅速找到您想要的</p>
-                <p>寻找供应商资源</p>
-                <p>寻找产品货源  寻找产品资料</p>
-              </div>
+            <div>
+              <img class="ts-img" src="/static/img/assets/1@2x.png" alt="">
             </div>
           </div>
           <div class="ts-box">
-            <div class="left left-text">
-              <img class="ts-minimg" style="left:0;" src="/static/img/assets/2.png" alt="">
-              <div class="ts-mintext ts-lefttext">
-                <p style="font-size: 32px !important;margin-bottom: 36px;">直观看到您想看的<img class="ts-textleftimg"
-                                                                                        src="/static/img/assets/fen xi@2x.png"
-                                                                                        alt=""></p>
-                <p>每日订单量、收付款、月度销售分析、采购分析</p>
-                <p>让你成为企业经营老司机</p>
-              </div>
-            </div>
-            <div style="margin:50px 0;">
-              <img class="ts-img" src="/static/img/gongneng/chahua22x.png" alt="">
+            <div>
+              <img class="ts-img" src="/static/img/assets/2@3x.png" alt="">
             </div>
           </div>
           <div class="ts-box">
-            <div style="margin:50px 0;">
-              <img class="ts-img" src="/static/img/gongneng/chahua32x.png" alt="">
-            </div>
-            <div class="right right-text">
-              <img class="ts-minimg" src="/static/img/assets/1.png" alt="">
-              <div class="ts-mintext" style="right: 145px;">
-                <p style="font-size: 32px !important;margin-bottom: 36px;"><img class="ts-textimg"
-                                                                                src="/static/img/assets/kuaisu@2x.png"
-                                                                                alt="">快速上手 生意简单做</p>
-                <p>移动端的交互体验</p>
-                <p>简短清晰的业务流程 让你三分钟上手</p>
-              </div>
+            <div>
+              <img class="ts-img" src="/static/img/assets/3@2x.png" alt="">
             </div>
           </div>
         </div>
@@ -249,7 +234,7 @@
       <!-- end Service section -->
 
       <!-- 帮助中心 -->
-      <section id="prototype">
+      <!-- <section id="prototype">
         <div class="container">
           <div class="row">
             <div class="section-title text-center">
@@ -266,8 +251,6 @@
               <div class="bz-content">
                 <div class="bz-left">
                   <ul class="bz-ul">
-                    <!-- <li class='active'>操作文档</li>
-                    <li>常见问题</li> -->
                     <li v-for="(d,i) in arr" :key="i" :class= "{active:Nowindex == i}" @click="tab(i)">{{d}}</li>
                   </ul>
                 </div>
@@ -317,7 +300,7 @@
             </div>
           </div>
         </div>
-      </section>
+      </section> -->
     </main>
   </div>
 </template>
@@ -325,6 +308,7 @@
 <script>
   import {subscribe, disconnect} from '@/api/socket'
   import Session from '@/utils/session'
+import { setTimeout } from 'timers';
 
   export default {
     data() {
@@ -421,7 +405,44 @@
       //关闭体验
       Closeexperience(){
         this.isexperience = false;
-      }
+      },
+      //进入体验
+      experience1(){
+        let me = this
+        let phone = this.$refs.typhone.value;
+        let reg = new RegExp('^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$')
+        if (phone == '') {
+          this.$refs.Caution.innerHTML = '号码不能为空'
+        } else {
+          if (!reg.test(phone)) {
+            this.$refs.Caution.innerHTML = '号码格式错误'
+            // setTimeout(()=>{
+            //   this.$refs.Caution.innerHTML = ''
+            // },2000)
+          } else {
+            this.$refs.Caution.innerHTML = ''
+            this.$ajax({
+              url: this.$url.api+'/api/auth/virtual/authorize/'+phone,
+              method: 'post',
+            })
+             .then(res=>{
+                const session = res.data.data.token, account = res.data.data.account
+                let companyId = account.companies[0].id
+                account.companies = account.companies || []
+                account.companyId=companyId;
+                session.account = account
+                const frame = window.frames[window.frames.length - 1]
+                frame.postMessage(JSON.stringify(session), '*')
+                window.location.href = me.$url.web
+                // console.log("请求成功",res)
+                phone = ''
+            })
+            .catch(err=>{
+                // console.log("请求失败",err)
+            })
+          }
+        } 
+      },
     }
   }
 </script>
@@ -440,10 +461,7 @@
   right: 10px;
 }
 .navbar-inverse {
-  /* padding: 3px; */
   padding: 0px;
-  /* height: 70px;
-  line-height: 70px; */
 }
 
 /* 体验 */
@@ -451,50 +469,76 @@
   position: fixed;
   top: 50%;
   left: 50%;
-	width: 400px;
-	height: 200px;
-	margin-left: -200px;
-  margin-top: -100px;
+	width: 640px;
+	height: 320px;
+	margin-left: -320px;
+  margin-top: -160px;
   z-index: 10001;
   background: white;
+  padding: 24px;
+  text-align: center;
+  border-radius: 2px;
 }
-.tiyan div {
-  height: 33%;
+.ty-out {
+    cursor: pointer;
+    float: right;
 }
-.ty-title {
-  text-align: center;
-  margin-top: 30px;
-  font-size: 18px;
-  font-weight: 600;
+.ty-logo {
+  width: 140px;
+  margin: 15px 0 10px 13px;
+}
+.ty-logotxt {
+  font-family: PingFangSC-Regular;
+  font-size: 22px !important;
+  color: #059FFE;
 }
-.ty-title span {
+.ty-title {
   margin-top: 30px;
-  display: inline-block;
+  font-family: PingFangSC-Regular;
+  font-size: 14px;
+  color: #059FFE;
+  text-align: center;
 }
-.ty-phone div {
-  width: 60%;
+.ty-input {
+  width: 330px;
   height: 40px;
-  border-radius: 20px;
-  border: 1px solid rgb(162, 151, 231);
   line-height: 40px;
-  margin: 0 10px;
+  text-align: left;
+  background: rgba(32,53,128,0.01);
+  border: 1px solid #D8DCE8;
+  border-radius: 3px;
+  margin-left: 69px;
+}
+.ty-phone {
+  margin: 8px 0;
+  margin-bottom: 0;
 }
 .ty-phone input{
   outline:none;
   border: 0;
   height: 30px;
-  margin-left: 10px;
+  font-size: 14px;
+  width: 80%;
 }
 .ty-phone button{
+  background-image: linear-gradient(-90deg, #007EE5 0%, #05B3FF 100%, #5533FF 100%);
+  border-radius: 3px;
   color: white;
-  width: 30%;
+  width: 125px;
   height: 40px;
-  border-radius: 20px;
-  background: rgb(162, 151, 231);
   border: 0;
 }
 .contact {
-    margin-left: 20px;
-    font-size: 18px;
+  font-family: PingFangSC-Regular;
+  font-size: 14px;
+  color: #059FFE;
+  text-align: center;
+}
+.Caution {
+  color: red;
+  margin-left: 110px;
+  font-size: 12px;
+  display: inline-block;
+  height: 16px;
 }
 </style>

+ 13 - 13
frontend/saas-portal-web/static/css/main.css

@@ -273,7 +273,8 @@ main > section {
 /* 11/12注册页面 ..........................................*/
 .login,.profile {
     color: white;
-    font-size: 14px;
+    font-size: 16px;
+    /* font-weight: 600; */
 }
 .login {
     margin-top: 12px;
@@ -282,8 +283,8 @@ main > section {
    margin: 0 15px;
 }
 .login img,.profile img {
-    width: 25px;
-    height: 24px;
+    width: 24px;
+    margin-right: 5px;
 }
 .login > span:hover,.profile > span:hover{
     cursor:pointer;
@@ -322,7 +323,7 @@ main > section {
 /* 首页内容 ..........................................*/
 .my-text {
     position: absolute;
-    top: 70%;
+    top: 76%;
     left: 7%;
     /* z-index: 5; */
     /* width: 468px;
@@ -347,7 +348,7 @@ main > section {
 }
 .my-tiyan {
     background: #5172DD;
-    box-shadow: 0 0 19px 0 rgba(137,143,164,0.63);
+    /* box-shadow: 0 0 19px 0 rgba(137,143,164,0.63); */
     border-radius: 4px;
     width: 100px;
     height: 36px;
@@ -423,8 +424,7 @@ main > section {
     float: right;
 }
 .ts-img {
-    width: 108%;
-    height: 441px;
+    width: 100%;
 }
 .right-text {
     text-align: right;
@@ -922,11 +922,11 @@ main > section {
 
     background-color: rgba(0, 0, 0, 0.77);
     box-shadow: 0 1px 4px rgba(0, 0, 0, 0.3);
-    padding: 5px 0;
+    /* padding: 5px 0; */
 }
 
 #navigation.animated-header {
-    padding: 20px 0;
+    padding: 10px 0;
 }
 
 h1.navbar-brand {
@@ -938,9 +938,9 @@ h1.navbar-brand {
 
 .navbar-inverse .navbar-nav > li > a {
     color: #fff;
-    font-size: 13px;
+    font-size: 16px;
     text-transform: uppercase;
-    font-weight: bold;
+    /* font-weight: bold; */
 }
 .menu {
 
@@ -1003,9 +1003,9 @@ h1.navbar-brand {
     font-size: 40px;
     line-height: 1.5;
 }
-.slider-1  img{
+.slider-1 img{
     width: 100%;
-    height: 100%;
+    /* height: 100%; */
 }
 .sl-slider-wrapper {
     width: 100%;

BIN
frontend/saas-portal-web/static/img/assets/1.png


BIN
frontend/saas-portal-web/static/img/assets/1@2x.png


BIN
frontend/saas-portal-web/static/img/assets/2.png


BIN
frontend/saas-portal-web/static/img/assets/2@3x.png


BIN
frontend/saas-portal-web/static/img/assets/3@2x.png


BIN
frontend/saas-portal-web/static/img/assets/Group3x.png


BIN
frontend/saas-portal-web/static/img/assets/beijing.png


BIN
frontend/saas-portal-web/static/img/assets/chatu.png


BIN
frontend/saas-portal-web/static/img/assets/dalogo@2x.png


BIN
frontend/saas-portal-web/static/img/assets/dalogo@2x_1.png


BIN
frontend/saas-portal-web/static/img/assets/dianzi3x.png


BIN
frontend/saas-portal-web/static/img/assets/fen xi@2x.png


BIN
frontend/saas-portal-web/static/img/assets/jin3x.png


BIN
frontend/saas-portal-web/static/img/assets/kuaisu@2x.png


BIN
frontend/saas-portal-web/static/img/assets/logo.png


BIN
frontend/saas-portal-web/static/img/assets/qing3x.png


BIN
frontend/saas-portal-web/static/img/assets/ren3x.png


BIN
frontend/saas-portal-web/static/img/assets/timg.jpg


BIN
frontend/saas-portal-web/static/img/assets/weixin.png


BIN
frontend/saas-portal-web/static/img/assets/weixuanzhong2x.png


BIN
frontend/saas-portal-web/static/img/assets/xuanzhong2x.png


BIN
frontend/saas-portal-web/static/img/assets/xun3x.png


BIN
frontend/saas-portal-web/static/img/assets/xunzhao@2x.png


BIN
frontend/saas-portal-web/static/img/assets/zi3x.png


BIN
frontend/saas-portal-web/static/img/features.jpg


BIN
frontend/saas-portal-web/static/img/gongneng/chahua12x.png


BIN
frontend/saas-portal-web/static/img/gongneng/chahua22x.png


BIN
frontend/saas-portal-web/static/img/gongneng/chahua32x.png


BIN
frontend/saas-portal-web/static/img/qiye/x.png


+ 4 - 9
frontend/saas-portal-web/static/js/mains.js

@@ -6,14 +6,6 @@ jQuery(window).load(function(){
 
     $("#preloader").fadeOut("slow");
 
-    // 帮助中心
-    // $(".bz-right-conent>div").eq(0).show()
-    // let abtn = $(".bz-ul").children('li').click(function(){
-    //     var _index = $(this).index();
-    //     //让内容框的第 _index 个显示出来,其他的被隐藏
-    //     $(".bz-right-conent>div").eq(_index).show().siblings().hide();
-    //     $(this).addClass("active").siblings().removeClass('active')
-    // });
 });
 
 /* ========================================================================= */
@@ -136,9 +128,12 @@ $(document).ready(function(){
 
     $('#home-slider, #slider, .sl-slider, .sl-content-wrapper').css('height',slideHeight);
 
-    $(window).resize(function(){'use strict',
+    $(window).resize(function(){
         $('#home-slider, #slider, .sl-slider, .sl-content-wrapper').css('height',slideHeight);
     });
+    // $(window).resize(function(){'use strict',
+    //     $('#home-slider, #slider, .sl-slider, .sl-content-wrapper').css('height',slideHeight);
+    // });
 	
 	
 	

+ 10 - 0
frontend/saas-web/app/Application.scss

@@ -163,6 +163,16 @@ body.launching {
   }
 }
 
+.x-main-master{
+  .x-btn-wrap{
+    .x-btn-button{
+      .x-btn-inner{
+        color:#999 !important;
+      }
+    }
+  }
+}
+
 .x-keyboard-mode .x-btn-focus.x-btn-default-toolbar-small {
   background: inherit;
   opacity: 1;

+ 14 - 10
frontend/saas-web/app/view/core/query/QueryFormPanel.js

@@ -24,7 +24,7 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
 
     dockedItems: [{
         width:140,
-        height: 40,
+        height: 70,
         xtype: 'toolbar',
         dock: 'right',
         items: [{
@@ -32,23 +32,23 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
             xtype: 'buttongroup',
             cls:'x-query-buttongroup',
             items:[{
-                height:24,
-                width:50,
+                height:32,
+                width:70,
                 style:'min-width: 0px;min-height: 0px;',
                 xtype: 'button',
                 name:'query',
                 text: '查询',
                 handler: 'onQuery',
             },{
-                height:24,
-                style:'margin-left: 2px;min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff; height: 24px;width: 36px;margin-top: -4px;',
+                style:'min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff;padding: 0px;margin-top: -1px;margin-left: -2px;',
                 xtype: 'button',
-                iconCls:'x-fa fa-caret-square-o-down',
+                iconCls:'x-btn-show',
                 handler: 'showMore',
                 name:'showMore',
                 tooltip:'更多',
                 listeners:{
                     afterrender:function(b){
+                        var count = window.innerHeight - 110>=800?2:1;
                         var columnWidthCount = 0;
                         var items = b.ownerCt.ownerCt.ownerCt.items.items;
                         Ext.each(items, function(item, index){
@@ -57,7 +57,7 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
                             }
                         });
                         columnWidthCount = Math.ceil(columnWidthCount);
-                        if(columnWidthCount<=1){
+                        if(columnWidthCount<=count){
                             b.hide();
                         }
                     }
@@ -65,17 +65,21 @@ Ext.define('saas.view.core.query.QueryFormPanel', {
             },{
                 name:'hideMore',
                 hidden:true,
-                height:24,
                 tooltip:'隐藏',
-                style:'margin-left: 2px;min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff; height: 24px;width: 36px;margin-top: -4px;',
+                style:'min-width: 0px;min-height: 0px;border-color: #fff;background-color: #fff;padding: 0px;margin-top: -1px;margin-left: -2px;',
                 xtype: 'button',
-                iconCls:'x-fa fa-caret-square-o-up',
+                iconCls:'x-btn-hide',
                 handler: 'hideMore'
             }]
         },'->']
     }],
 
     listeners: {
+        boxReady:function(form){
+            if(window.innerHeight - 110 >= 800){
+                form.setHeight(112);
+            }
+        },
         beforerender: function(form) {
             // var fiels = form.getForm().getFields();
             // fiels.each(function(f) {

+ 20 - 5
frontend/saas-web/app/view/core/query/QueryPanel.scss

@@ -19,9 +19,9 @@
                                 padding: 6px 0 16px 8px;
 
                                 .x-box-inner {
-                                    height: 36px !important;
+                                    height: 46px !important;
                                     background: #FFFFFF;
-        
+                                    margin-top: -4px;
                                 }
                             }
                         }
@@ -58,7 +58,22 @@
     .x-btn-group-body-default-framed .x-table-layout{
         border-spacing: 2px !important;
     }
-    .x-btn-default-toolbar-small .x-btn-inner-default-toolbar-small{
-        height:24px !important;
-    }
+}
+
+.x-btn-show{
+    height: 32px;
+    width: 32px !important;
+    margin-top: 0px;
+    background: url(../../../../resources/images/default/show.png) 0 0 no-repeat; 
+    background-size: 32px 32px;
+    background-position: center;
+}
+
+.x-btn-hide{
+    height: 32px;
+    width: 32px !important;
+    margin-top: 0px;
+    background: url(../../../../resources/images/default/hide.png) 0 0 no-repeat; 
+    background-size: 32px 32px;
+    background-position: center;
 }

+ 4 - 2
frontend/saas-web/app/view/core/query/QueryPanelController.js

@@ -34,7 +34,8 @@ Ext.define('saas.view.core.query.QueryPanelController', {
             }
         });
         columnWidthCount = Math.ceil(columnWidthCount);
-        if(columnWidthCount>1){
+        var count = window.innerHeight - 110>=800?2:1;
+        if(columnWidthCount>count){
             //展开
             queryForm.animate({dynamic: true, duration: 500, to: {height: (24+42*columnWidthCount)+'px'}})
             queryForm.dockedItems.items[0].down('[name=showMore]').hide();
@@ -48,7 +49,8 @@ Ext.define('saas.view.core.query.QueryPanelController', {
         queryPanel = me.getView(),
         queryForm = queryPanel.down('core-query-queryformpanel');
         //收缩
-        queryForm.animate({dynamic: true, duration: 500, to: {height: '56px'}})
+        var count = window.innerHeight - 110>=800?2:1;
+        queryForm.animate({dynamic: true, duration: 500, to: {height: count*56 + 'px'}})
         queryForm.dockedItems.items[0].down('[name=hideMore]').hide();
         queryForm.dockedItems.items[0].down('[name=showMore]').show();
         var b = queryForm.dockedItems.items[0].down('[name=query]');

+ 6 - 5
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -278,8 +278,9 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                 listeners:{
                     blur:function(f,a,b,c){
                         var form = f.ownerCt;
-                        form.setLoading(true);
-                        if(f.value&&f.value!=''&&f.isValid()){
+                        if(f.value&&f.value!=''&&f.isValid()&&f._lastCheckValue!=f.value){
+                            form.setLoading(true);
+                            f._lastCheckValue = f.value
                             Ext.Ajax.request({
                                 url: '/api/account/account/checkMobile?mobile='+f.value,
                                 method: 'GET',
@@ -291,10 +292,10 @@ Ext.define('KitchenSink.view.binding.ChildForm', {
                                     form.setLoading(false);
                                     var localJson = Ext.decode(response.responseText);
                                     if(localJson.success){
-                                        if(!localJson.data.hasRegister){
-                                            saas.util.BaseUtil.showSuccessToast('校验成功:手机号未被注册');
+                                        if(localJson.data.hasRegister){
+                                            saas.util.BaseUtil.showSuccessToast('校验成功:手机号已在优软云注册');
                                         }else{
-                                            saas.util.BaseUtil.showErrorToast('校验失败:手机号已被注册');
+                                            saas.util.BaseUtil.showErrorToast('校验失败:手机号未在优软云注册');
                                             f.setValue('');
                                         }
                                     }else{

+ 6 - 6
frontend/saas-web/app/view/stock/inventory/EditDataList.js

@@ -92,7 +92,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
         }
     },'->',{
         xtype:'button',
-        text:'保存',
+        text:'保存盘点结果',
         listeners: {
             click:function(b){
                 var me = this.ownerCt.ownerCt;
@@ -101,7 +101,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
         }
     },{
         xtype:'button',
-        text:'导出',
+        text:'导出系统库存',
         listeners: {
             click:function(b){
                 var me = this.ownerCt.ownerCt;
@@ -123,12 +123,12 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
     //字段属性
     columns : [{
         text : "盘点id", 
-        width : 0, 
-        dataIndex : "id", 
+        dataIndex : "id",
+        hidden:true, 
         xtype : "numbercolumn", 
     },{
         text : "物料id", 
-        width : 0, 
+        hidden:true,
         dataIndex : "st_prodid", 
         xtype : "numbercolumn", 
     }, 
@@ -165,7 +165,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
     {
         text : "仓库id", 
         dataIndex : "st_whid", 
-        width : 0, 
+        hidden:true,
         xtype : "numbercolumn", 
     },
     {

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

@@ -100,7 +100,7 @@ Ext.define('saas.view.stock.make.FormPanelController', {
 
         //请求bom资料
         saas.util.BaseUtil.request({
-            url: form._getBomUrl+v,
+            url: form._getBomUrl+'/'+v,
             method: 'GET',
         })
         .then(function(localJson) {

+ 1 - 1
frontend/saas-web/app/view/sys/baseconfig/FormPanel.js

@@ -11,7 +11,7 @@ Ext.define('saas.view.sys.baseconfig.FormPanel', {
     //字段属性
     _idField: 'id',
     _readUrl:'/api/commons/configs/list',
-    _saveUrl:'/api/commons/configs/update',
+    _saveUrl:'/api/commons/configs/save',
 
     //基础属性
     frame:true,

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

@@ -188,9 +188,9 @@ Ext.define('saas.view.sys.config.FormPanel', {
                         },
                         success: function (response, opts) {
                             form.setLoading(false);
-                            saas.util.BaseUtil.showSuccessToast('上传成功');
                             var res = Ext.decode(response.responseText);
                             if(res.success){
+                                saas.util.BaseUtil.showSuccessToast('上传成功');
                                 var data = res.data;
                                 var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
                                 myForm.down('[name=signet]').setValue(data.fullPath);
@@ -315,9 +315,9 @@ Ext.define('saas.view.sys.config.FormPanel', {
                         },
                         success: function (response, opts) {
                             form.setLoading(false);
-                            saas.util.BaseUtil.showSuccessToast('上传成功');
                             var res = Ext.decode(response.responseText);
                             if(res.success){
+                                saas.util.BaseUtil.showSuccessToast('上传成功');
                                 var data = res.data;
                                 var name = data.name + "  (" + Ext.util.Format.fileSize(data.size) + ")";
                                 myForm.down('[name=logoUrl]').setValue(data.fullPath);

+ 2 - 2
frontend/saas-web/app/view/sys/guide/FormPanel.js

@@ -115,7 +115,7 @@ Ext.define('saas.view.sys.guide.FormPanel', {
                         '<tpl if="!product">x-guide-mask </tpl>',
                         '"src="resources/images/guide/point.png" style="margin: 2px 0px 0 0;" align ="center" width="16" height="16" >',
                         "<br>",
-                        '<div class="x-guide-line"  height="1"  style="border:1px solid #E4F7FF;margin: -9px 0 0 0;width: 654px !important;" align ="center"></div>',
+                        '<div class="x-guide-line"  height="1"  style="border:1px solid #beecff;margin: -9px 0 0 0;width: 654px !important;" align ="center"></div>',
                     '</div>',
                     '<div class="x-guide-item" align ="center">',
 
@@ -174,7 +174,7 @@ Ext.define('saas.view.sys.guide.FormPanel', {
                         '<tpl if="!begin">x-guide-mask </tpl>',
                         '" src="resources/images/guide/point.png" style="margin: 2px 0px 0 0;" align ="center" width="16" height="16" >',
                         "<br>",
-                        '<div class="x-guide-line"  height="1"  style="border:1px solid #E4F7FF;margin: -9px 0 0 0;width: 654px !important;" align ="center"></div>',
+                        '<div class="x-guide-line"  height="1"  style="border:1px solid #beecff;margin: -9px 0 0 0;width: 654px !important;" align ="center"></div>',
                     '</div>',
                 '</div>',
                 '</tpl>'

BIN
frontend/saas-web/resources/images/default/hide.png


BIN
frontend/saas-web/resources/images/default/show.png