Переглянути джерело

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

rainco 7 роки тому
батько
коміт
5d1aa91ef2
69 змінених файлів з 706 додано та 369 видалено
  1. 3 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/exception/BizExceptionCode.java
  2. 10 0
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/JasperResult.java
  3. 7 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/JasperReportServiceImpl.java
  4. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  5. 1 1
      applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Product.java
  6. 8 1
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/BomServiceImpl.java
  7. 9 6
      applications/document/document-server/src/main/java/com/usoftchina/saas/document/service/impl/ProductServiceImpl.java
  8. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/PaybalanceServiceImpl.java
  9. 2 0
      applications/money/money-server/src/main/java/com/usoftchina/saas/money/service/impl/RecbalanceServiceImpl.java
  10. 0 4
      applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml
  11. 0 4
      applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml
  12. 1 0
      applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml
  13. 9 0
      applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java
  14. 9 0
      base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java
  15. 11 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/controller/AccountCenterController.java
  16. 8 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/AccountCenterService.java
  17. 5 0
      base-servers/account/account-server/src/main/java/com/usoftchina/saas/account/service/impl/AccountCenterServiceImpl.java
  18. 1 1
      base-servers/auth/auth-server/src/main/java/com/usoftchina/saas/auth/controller/AuthController.java
  19. 6 5
      frontend/saas-portal-web/src/components/conenter/addenterprise.vue
  20. 47 21
      frontend/saas-portal-web/src/components/conenter/company.vue
  21. 2 4
      frontend/saas-portal-web/src/components/conenter/details.vue
  22. 120 13
      frontend/saas-portal-web/src/components/conenter/enterprise.vue
  23. 3 2
      frontend/saas-portal-web/src/components/conenter/home.vue
  24. 13 14
      frontend/saas-portal-web/src/components/footer/footer.vue
  25. 1 0
      frontend/saas-portal-web/src/pages/index/index.vue
  26. 1 1
      frontend/saas-portal-web/src/store/index.js
  27. 58 39
      frontend/saas-portal-web/static/css/gongsi.css
  28. 6 30
      frontend/saas-portal-web/static/css/main.css
  29. BIN
      frontend/saas-portal-web/static/img/Fill 1.png
  30. BIN
      frontend/saas-portal-web/static/img/footer2x.png
  31. BIN
      frontend/saas-portal-web/static/img/moren2x.png
  32. 11 6
      frontend/saas-web/app/util/BaseUtil.js
  33. 1 0
      frontend/saas-web/app/util/FormUtil.js
  34. 2 2
      frontend/saas-web/app/view/core/base/ImportWindow.js
  35. 1 0
      frontend/saas-web/app/view/core/dbfind/DbfindGridPanel.js
  36. 72 2
      frontend/saas-web/app/view/core/form/FormPanel.js
  37. 8 3
      frontend/saas-web/app/view/core/form/FormPanelController.js
  38. 31 3
      frontend/saas-web/app/view/core/form/field/DetailGridField.js
  39. 49 0
      frontend/saas-web/app/view/core/grid/column/YnColumn.js
  40. 13 9
      frontend/saas-web/app/view/core/tab/Controller.js
  41. 1 0
      frontend/saas-web/app/view/document/address/DataList.js
  42. 38 0
      frontend/saas-web/app/view/document/address/DatalistController.js
  43. 2 1
      frontend/saas-web/app/view/document/customer/BasePanel.js
  44. 20 89
      frontend/saas-web/app/view/document/customer/FormPanel.js
  45. 2 0
      frontend/saas-web/app/view/document/employee/Window.js
  46. 24 3
      frontend/saas-web/app/view/document/kind/ChildForm.js
  47. 2 1
      frontend/saas-web/app/view/document/vendor/BasePanel.js
  48. 10 48
      frontend/saas-web/app/view/document/vendor/FormPanel.js
  49. 1 1
      frontend/saas-web/app/view/home/charts/MonthSale.js
  50. 6 3
      frontend/saas-web/app/view/home/charts/ProfitDetail.js
  51. 3 4
      frontend/saas-web/app/view/main/Main.js
  52. 2 0
      frontend/saas-web/app/view/main/Main.scss
  53. 6 1
      frontend/saas-web/app/view/main/MainController.js
  54. 1 1
      frontend/saas-web/app/view/money/payBalance/FormPanel.js
  55. 1 1
      frontend/saas-web/app/view/money/recBalance/FormPanel.js
  56. 1 1
      frontend/saas-web/app/view/money/report/PayDetail.js
  57. 6 3
      frontend/saas-web/app/view/money/report/ProfitDetail.js
  58. 1 1
      frontend/saas-web/app/view/money/verification/FormPanelController.js
  59. 25 3
      frontend/saas-web/app/view/purchase/purchase/FormPanel.js
  60. 0 22
      frontend/saas-web/app/view/purchase/purchase/FormPanelController.js
  61. 4 4
      frontend/saas-web/app/view/stock/inventory/EditDataList.js
  62. 2 0
      frontend/saas-web/app/view/stock/report/DataListController.js
  63. 1 1
      frontend/saas-web/app/view/stock/report/ProdinoutCount.js
  64. 1 1
      frontend/saas-web/app/view/sys/account/AddWindow.js
  65. 3 1
      frontend/saas-web/app/view/sys/account/DataList.js
  66. 2 0
      frontend/saas-web/app/view/sys/account/EditWindow.js
  67. 7 5
      frontend/saas-web/app/view/sys/config/FormPanel.js
  68. 2 0
      frontend/saas-web/app/view/sys/feedback/FormPanel.js
  69. BIN
      frontend/saas-web/resources/images/auth-background.jpg

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

@@ -37,11 +37,13 @@ public enum BizExceptionCode implements BaseExceptionCode {
     BIZ_BANNED(79313, "只能禁用已开启的单据"),
     BIZ_ENABLE(79314, "只能开启已禁用的单据"),
     BIZ_NULLCALLER(79315, "该单据的定义不存在"),
+    BIZ_REPORT_NOCALLER(79316, "报表配置不存在"),
 
     NO_OPRATIONDATA(79400,"无可操作单据"),
     NULL_DATA(23232,"无数据"),
 
     BOM_SAVE(79401, "产品编号+版本号已存在"),
+    BOM_CODE_REPEAT(74002, "组合件和子件不允许相同"),
     REPEAT_NAME(79501, "名称重复"),
     REPEAT_CODE(79502, "编号重复"),
     REPEAT_CUSTOMERCODE(79503, "客户名称或编号重复"),
@@ -104,7 +106,7 @@ public enum BizExceptionCode implements BaseExceptionCode {
     DELETE_NOT_EXIS(74008,"删除失败,当前单据不存在!"),
     DOCUMENTS_AUDITED(74009,"存在已审核单据:%S"),
     DOCUMENTS_UNAUDITED(74010,"存在未审核单据:%S"),
-    BANK_AMOUNT_NOTENOUGHS(74011, "资金账户余额不足:%S"),
+    BANK_AMOUNT_NOTENOUGHS(74011, "审核失败!资金账户:%S 余额不足"),
 
     //反结账
     EARLY_USERING(74012, "期初余额被使用,无法反结账"),

+ 10 - 0
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/JasperResult.java

@@ -9,10 +9,13 @@ import java.io.Serializable;
 public class JasperResult implements Serializable{
 
     private String printurl;
+
     private String reportName;
     private String title;
     private String whereCondition;
     private String printtype;
+    //数据库名称
+    private String userName;
 
     public String getPrinttype() {
         return printtype;
@@ -53,4 +56,11 @@ public class JasperResult implements Serializable{
     public void setWhereCondition(String whereCondition) {
         this.whereCondition = whereCondition;
     }
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
 }

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

@@ -1,6 +1,7 @@
 package com.usoftchina.saas.commons.service.impl;
 
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
+import com.usoftchina.saas.commons.exception.BizExceptionCode;
 import com.usoftchina.saas.commons.mapper.SysprintsetMapper;
 import com.usoftchina.saas.commons.po.Configs;
 import com.usoftchina.saas.commons.po.JasperResult;
@@ -27,6 +28,7 @@ import java.util.List;
 public class JasperReportServiceImpl implements JasperReportService{
 
     private static final String PRINTURLCODE = "printUrl";
+    private static final String USERNAME = "dataBase";
 
     @Autowired
     private SysprintsetMapper sysprintsetMapper;
@@ -56,11 +58,14 @@ public class JasperReportServiceImpl implements JasperReportService{
             printSet = sysprintsetMapper.selectSetByReportName(caller, reportName, companyId);
         }
         if (StringUtils.isEmpty(printSet)) {
-            return null;
+            throw new BizException(BizExceptionCode.BIZ_REPORT_NOCALLER);
         }
         //取打印地址
         Configs config = configsService.getConfigByCode(PRINTURLCODE);
         String printUrl = null != config ? config.getData() : "";
+        //取数据库名称
+        Configs db_config = configsService.getConfigByCode(USERNAME);
+        String db_username = null != db_config ? db_config.getData() : "";
         //打印限制 TODO
         //打印前执行方法
         if (!StringUtils.isEmpty(printSet.getHandlermethod())) {
@@ -85,6 +90,7 @@ public class JasperReportServiceImpl implements JasperReportService{
         result.setPrinturl(printUrl);
         result.setWhereCondition(condition);
         result.setPrinttype(StringUtils.isEmpty(printSet.getPrinttype()) ? "" : printSet.getPrinttype());
+        result.setUserName(db_username);
         return result;
 
     }

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

@@ -128,7 +128,7 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
             if (count > 0) {
                 throw new BizException(BizExceptionCode.CODE_EXISTS);
             }
-            return  Result.success(rulecode);
+            return  Result.success(maxcode);
         }
         //与规则匹配的编号
         if (count > 0) {

+ 1 - 1
applications/document/document-dto/src/main/java/com/usoftchina/saas/document/entities/Product.java

@@ -14,7 +14,7 @@ public class Product extends CommonBaseEntity implements Serializable {
     private String pr_unit;
     private String pr_kind;
     private String pr_orispeccode;
-    private long pr_whid;
+    private Long pr_whid;
     private String pr_whcode;
     private String pr_whname;
     private Long pr_zxbzs;

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

@@ -50,11 +50,18 @@ public class BomServiceImpl extends CommonBaseServiceImpl<BomMapper, Bom> implem
         Bom bom = bomList.getMain();
         List<BomDetail> bomDetailList = bomList.getItems();
         DocBaseDTO docBaseDTO = null;
+        //校验组合件和子件不允许相同
+        if (bomDetailList.size() > 0){
+            for (BomDetail bomDetail : bomDetailList){
+                if (bom.getBo_mothercode().equals(bomDetail.getBd_soncode())){
+                    throw new BizException(BizExceptionCode.BOM_CODE_REPEAT);
+                }
+            }
+        }
         if(id == 0){
             //校验编号和版本 是否已存在
             int count = getMapper().validCodeAndVersionWhenInsert(bom.getBo_mothercode(), bom.getBo_version(), companyId);
             if(count == 0){
-//                String code = pushMaxnubmer(bom.getBo_mothercode(), bom.getId());
                 String code = bom.getBo_mothercode();
                 bom.setBo_mothercode(code);
                 bom.setBo_statuscode(Status.ENABLE.name());

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

@@ -336,16 +336,13 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!Status.ENABLE.getDisplay().equals(product.getPr_status())){
                 throw new BizException(BizExceptionCode.BIZ_BANNED);
             }
-            String code = getMapper().getCodeById(id);
-            product = new Product();
-            product.setId(id);
             product.setPr_status(Status.BANNED.getDisplay());
             product.setPr_statuscode(Status.BANNED.name());
             product.setUpdaterId(BaseContextHolder.getUserId());
             product.setUpdateTime(new Date());
             getMapper().updateByPrimaryKeySelective(product);
             //记录LOG
-            docBaseDTO = generateMsgObj(id, code);
+            docBaseDTO = generateMsgObj(id, product.getPr_code());
             messageLogService.customizeLog(docBaseDTO, Operation.BANNED);
             return docBaseDTO;
         }else{
@@ -365,7 +362,6 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
             if (!Status.BANNED.getDisplay().equals(product.getPr_status())){
                 throw new BizException(BizExceptionCode.BIZ_ENABLE);
             }else{
-                product.setId(id);
                 product.setPr_statuscode(Status.ENABLE.name());
                 product.setPr_status(Status.ENABLE.getDisplay());
                 product.setUpdaterId(BaseContextHolder.getUserId());
@@ -415,8 +411,15 @@ public class ProductServiceImpl extends CommonBaseServiceImpl<ProductMapper, Pro
         validProductOperation(id, BizExceptionCode.BIZ_RELDELETE_DELETEPROD);
         //校验是否存在关联单据
         validEnableDel(id);
-
         String code = getMapper().getCodeById(id);
+
+        //找到原始单据,反过账并删除
+        String inoutCode = getMapper().selectProdIOCode(code, BaseContextHolder.getCompanyId(), "库存初始化");
+        if (!StringUtils.isEmpty(inoutCode)) {
+            post(inoutCode, "反过账");
+            getMapper().deleteProdIODetailByCode(inoutCode, BaseContextHolder.getCompanyId());
+            getMapper().deleteProdIOByCode(inoutCode, BaseContextHolder.getCompanyId());
+        }
         productDetailMapper.deleteByProdId(id);
         getMapper().deleteByPrimaryKey(id);
         DocBaseDTO docBaseDTO = generateMsgObj(id, code);

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

@@ -220,6 +220,8 @@ public class PaybalanceServiceImpl extends CommonBaseServiceImpl<PaybalanceMappe
         updatePay.setId(pay.getMain().getId());
         updatePay.setPb_pdamount(amountTotal);
         updatePay.setPb_pbdamount(amountTotal2);
+        updatePay.setPb_auditdate(new Date());
+        updatePay.setPb_auditman(BaseContextHolder.getUserName());
         paybalanceMapper.updateByPrimaryKeySelective(updatePay);
         //updateByPrimaryKeySelective
         /**

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

@@ -264,6 +264,8 @@ public class RecbalanceServiceImpl extends CommonBaseServiceImpl<RecbalanceMappe
         updateRay.setId(rec.getMain().getId());
         updateRay.setRb_rdamount(amountTotal);
         updateRay.setRb_rbdamount(amountTotal2);
+        updateRay.setRb_auditdate(new Date());
+        updateRay.setRb_auditman(BaseContextHolder.getUserName());
         recbalanceMapper.updateByPrimaryKeySelective(updateRay);
         /**
          * 更新客户资料

+ 0 - 4
applications/money/money-server/src/main/resources/mapper/PaybalanceMapper.xml

@@ -385,12 +385,8 @@
       <if test="pb_text5 != null">
         pb_text5 = #{pb_text5,jdbcType=VARCHAR},
       </if>
-      <if test="pb_auditman !=null">
         pb_auditman = #{pb_auditman,jdbcType=VARCHAR},
-      </if>
-      <if test="pb_auditdate !=null">
         pb_auditdate = #{pb_auditdate,jdbcType=TIMESTAMP}
-      </if>
     </set>
     where pb_id = #{id,jdbcType=INTEGER}
   </update>

+ 0 - 4
applications/money/money-server/src/main/resources/mapper/RecbalanceMapper.xml

@@ -537,12 +537,8 @@
       <if test="rb_text5 != null">
         rb_text5 = #{rb_text5,jdbcType=VARCHAR},
       </if>
-      <if test="rb_auditman !=null">
         rb_auditman = #{rb_auditman,jdbcType=VARCHAR},
-      </if>
-    <if test="rb_auditdate !=null">
       rb_auditdate = #{rb_auditdate,jdbcType=TIMESTAMP}
-    </if>
     </set>
     where rb_id = #{id,jdbcType=INTEGER}
   </update>

+ 1 - 0
applications/purchase/purchase-server/src/main/resources/mapper/PurchaseReportMapper.xml

@@ -121,6 +121,7 @@
       <if test="companyId != null">
         and   purchase.companyId = #{companyId}
       </if>
+      and pu_statuscode='AUDITED'
     </where>  order by pu_date desc
   </select>
 

+ 9 - 0
applications/storage/storage-server/src/main/java/com/usoftchina/saas/storage/service/impl/MakeServiceImpl.java

@@ -98,6 +98,15 @@ public class MakeServiceImpl extends CommonBaseServiceImpl<MakeMapper, Make> imp
         List<MakeMaterial> makeMaterialList = makeListDTO.getItems();
         String code = pushMaxnubmer(make.getMa_code(), make.getId());
         DocBaseDTO docBaseDTO = null;
+        //校验组合件和子件不允许相同
+        if (makeMaterialList.size() > 0){
+            for (MakeMaterial makeMaterial : makeMaterialList){
+                if (make.getMa_prodcode().equals(makeMaterial.getMm_prodcode())){
+                    throw new BizException(BizExceptionCode.BOM_CODE_REPEAT);
+                }
+            }
+        }
+
         if(make.getId() == 0){
             //保存主表
             make.setCompanyId(BaseContextHolder.getCompanyId());

+ 9 - 0
base-servers/account/account-dto/src/main/java/com/usoftchina/saas/account/dto/CompanyRegDTO.java

@@ -25,6 +25,15 @@ public class CompanyRegDTO implements Serializable{
     private String fax;
     private String signet;      //电子章
     private String type;        //所属行业
+    private String dcName;      //数据中心
+
+    public String getDcName() {
+        return dcName;
+    }
+
+    public void setDcName(String dcName) {
+        this.dcName = dcName;
+    }
 
     public String getType() {
         return type;

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

@@ -59,6 +59,17 @@ public class AccountCenterController {
         return Result.success();
     }
 
+    /**
+     * 解绑默认企业
+     * @param bindCompanyDTO
+     * @return
+     */
+    @PostMapping("/unBind/defaultCompany")
+    public Result unBindDefaultCompany(@RequestBody BindCompanyDTO bindCompanyDTO){
+        accountCenterService.unBindDefaultCompany(bindCompanyDTO.getCompanyId(), bindCompanyDTO.getAccountId());
+        return Result.success();
+    }
+
     /**
      * 校验企业名称时候已在账户中心注册过
      * @param spaceName

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

@@ -39,4 +39,12 @@ public interface AccountCenterService {
      * @return
      */
     boolean bindDefaultCompany(Long companyId, Long accountId);
+
+    /**
+     * 解绑默认企业
+     * @param companyId
+     * @param accountId
+     * @return
+     */
+    boolean unBindDefaultCompany(Long companyId, Long accountId);
 }

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

@@ -186,4 +186,9 @@ public class AccountCenterServiceImpl implements AccountCenterService {
         return true;
     }
 
+    @Override
+    public boolean unBindDefaultCompany(Long companyId, Long accountId) {
+        accountCompanyMapper.unBindDefault(accountId);
+        return true;
+    }
 }

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

@@ -279,7 +279,7 @@ public class AuthController {
         copyDTO.setUsername(info.getMobile());
         copyDTO.setPassword(info.getPassword());
         copyDTO.setSalt(info.getSalt());
-        copyDTO.setEmail(info.getEmail());
+        copyDTO.setEmail(StringUtils.isEmpty(info.getEmail()) ? null : info.getEmail());
         copyDTO.setMobile(info.getMobile());
         copyDTO.setRealname(info.getVipName());
         copyDTO.setType(AccountType.ADMIN.getType());

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

@@ -48,7 +48,7 @@
                             <span class="qy-biaoti left"><span class="xingxing">*</span>公司地址</span>
                             <div class="addbiaoqian">
                                 <!-- <v-distpicker @province= 'qyprovince' @city= 'qycity' @area= 'qyarea'></v-distpicker> -->
-                                <v-distpicker @selected= 'selected' province="广东省" city="广州市" area="荔湾区" placeholders= '{}'></v-distpicker>
+                                <v-distpicker @selected= 'selected' province="广东省" city="广州市" area="荔湾区" :placeholders= 'placeholder'></v-distpicker>
                                 <input ref="address" @change="address" :disabled="disabled" class="qy-xiangxi" type="text" placeholder="输入企业详细地址">
                                 
                             </div>
@@ -104,7 +104,7 @@ import { setTimeout } from 'timers';
                 isemail: true,//验证邮箱
                 disabled: true,
                 isadd: false,//添加成功弹窗
-                placeholder:{province:"", city:"", area:""}
+                placeholder:{province:"", city:"", area:""}
             }
         },
         components:{
@@ -247,15 +247,16 @@ import { setTimeout } from 'timers';
                             .then(res=>{
                                 let id = res.data.data;
                                 let logoUrl = null;
-                                let name = qyname;
-                                let addenterprise = {'id':id, 'logoUrl': logoUrl, 'name': name};
+                                let addenterprise = {'id':id, 'logoUrl': logoUrl, 'name': qyname};
                                 let session = JSON.parse(window.localStorage.getItem('app-state-session'));
                                 session.account.companies.push(addenterprise);
+                                session.account.realname = name;
                                 Session.set(session);
                                 this.isadd = true;
                                 setTimeout(()=>{
                                     document.documentElement.scrollTop = 0;
-                                    this.$router.push({name:'company'})
+                                    // this.$router.push({name:'company'})
+                                    this.$router.push({path: '/enterprise'})
                                 },1000)
                             })
                             this.$refs.tjtishi.innerHTML = '';

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

@@ -56,32 +56,44 @@
       </div>
     </div>
 
-        <div class="gs-qiyebox" ref="qiyebox" :class="isheigh ? 'heigh' : ''">
+        <div class="gs-qiyebox over" ref="qiyebox" :class="isheigh ? 'heigh' : ''">
+            <div class="gs-xiangqing dotted">
+                <router-link to="/addenterprise">
+                    <div class="gs-tianja" @click= "addEnterprise">
+                        <!-- <div class="gs-tj"></div> -->
+                        <img src="/static/img/Fill 1.png" alt="">
+                        <p>添加企业</p>
+                    </div>
+                </router-link>
+            </div>
             <!-- 点击查看企业详情 -->
-            <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing xs">
-                <div class="left gs-xqleft" @click= "getEnterpriseInfo(d)">
-                    <div class="gs-lefttext">
-                        <p class="gs-qynema"><span>企业名称:</span>{{d.name}}</p>
-                        <p v-if= "d.saas_" ><span>saas服务管理员:</span>{{d.admin}}</p>
+            <div v-for="(d , i) in arr " :key="i" class="gs-xiangqing">
+                <div class="gs-morentop" :class= "{gsqiye:nowindex == (i+1)}">
+                    <span v-if = "d.default_" class="gs-btn2 xs">取消默认</span>
+                    <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
+                </div>
+                <!-- 上 -->
+                <div class="gs-shang" @click.stop @mousemove="setismoren">
+                    <span @click="setmoren(i)" class="xs">设置</span>
+                    <img v-if = "d.default_" class="gs-morenimg" src="/static/img/moren2x.png" alt="">
+                </div>
+                <!-- 中 -->
+                <div class="gs-xqleft" >
+                    <p class="gs-qynema xs" @click= "getEnterpriseInfo(d)">{{d.name}}</p>
+                </div>
+                <!-- 下 -->
+                <div class="gs-xqright over">
+                    <div v-if= "d.saas_" class="gs-xqright-left left">
+                        <p><span>saas管理员:</span>{{d.admin}}</p>
+                        <p><span>联系方式:</span>{{d.adminMobile}}</p>
                         <p v-if= "d.time"><span>开通日期:</span>{{d.time}}</p>
                     </div>
-                </div>
-                <div class="right gs-xqright">
-                    <div class="gs-border">
+                    <div class="gs-border gs-xqright-right right">
                         <span v-if= "d.saas_" class="gs-btn1 dianji" @click="selectServe(d.id)">进入服务</span>
                         <span v-else @click="showOpenServeWin(d.id , i)" class="gs-btn1 kaitong xs">开通服务</span>
                     </div>
-                    <div>
-                        <span v-if = "d.default_" class="gs-btn2 gs-btn3">默认企业</span>
-                        <span v-else @click="showDefaultWin(i)" class="gs-btn2 xs">设为默认</span>
-                    </div>
                 </div>
             </div>
-            <div class="gs-xiangqing dotted">
-                <p class="gs-tianja">
-                    <span @click= "addEnterprise"><router-link to="/addenterprise">+添加企业</router-link></span>
-                </p>
-            </div>
         </div>
       </div>
 </template>
@@ -105,12 +117,16 @@
                 arr: [],//企业列表信息
                 isheigh:false,//是否添加默认高度
                 admin: '',
-                adminMobile: ''
+                adminMobile: '',
+                ismoren:true,
             }
         },
         computed :{
             setTokenPage() {
                 return this.$url.web + '/set-token.html'
+            },
+            nowindex() {
+                return this.$store.state.ismoren
             }
         },
         watch:{
@@ -152,7 +168,6 @@
                         }
                     }
                     this.$store.commit('Loginfalse')
-                    this.$store.state.email = res.data.data.spaces[0].adminEmail
                 })
                 .catch(err=>{
                     // console.log("请求失败",err)
@@ -245,7 +260,6 @@
                 let uu = this.arr[i].uu;
                 let company = {'name':qyname,'address':address};
                 let account = {'realname':name,'email':email,'mobile':mobile, 'uu':uu}
-                // let id = this.saasid;
                 this.$ajax({
                     url: this.$url.api+"/api/account/accountCenter/companyAccount/save",
                     method: 'post',
@@ -306,6 +320,18 @@
                 this.isNoopen = false;
                 this.isokopensaas = false
             },
+            // 弹出设置
+            setmoren(i){
+                if (this.ismoren) {
+                    this.$store.state.ismoren = i+1
+                } else {
+                    this.$store.state.ismoren = ''
+                }
+                this.ismoren = !this.ismoren
+            },
+            setismoren(){
+                this.ismoren = true
+            },
             //没有内容也要有一定的高度
             boxheight(){
                 let H = this.$refs.qiyebox.offsetHeight;

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

@@ -162,10 +162,9 @@
             // 保存修改
             baocunxiugai(){
                 let qyindustry = this.$refs.qyindustry.value;//所属行业
-                if (this.isemail && qyindustry!='') {
+                if (this.isemail) {
                     let email = this.$refs.email.value;
                     let qyname = this.content.name;//公司名字
-                    // let qyindustry = this.$refs.qyindustry.value;//所属行业
                     let address = this.content.address;//公司详细地址
                     let companyId = this.content.id;
                     let name = this.content.realname;//名字
@@ -197,7 +196,7 @@
                         // console.log("请求失败",err)
                     })
                 } else {
-                    this.$refs.Tips.innerHTML= "请填写正确的邮箱或选择行业"
+                    this.$refs.Tips.innerHTML= "请填写正确的邮箱"
                     // this.isTipsmail = true;
                     setTimeout(()=>{
                         this.$refs.Tips.innerHTML= ""
@@ -206,7 +205,6 @@
             },
             //返回
             gobick(){
-                // this.$router.go(-1) 
                 this.$router.push({name:'company'});
             }
         }

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

@@ -1,5 +1,5 @@
 <template>
-    <div class="div">
+    <div class="div" @click="onshezhi">
         <div id="navigation" class="navbar-inverse navbar-fixed-top animated-header">
         <div class="container">
             <div class="navbar-header">
@@ -19,10 +19,10 @@
                 <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><a href="https://uas.usoftchina.com/about" target="_blank"><span>关于我们</span></a></li>
-                    <li style="margin-left:30px;    margin-top: 13px;    cursor: pointer;">
+                    <li style="margin-left:30px;margin-top: 13px;cursor: pointer;">
                         <span style="color:#fff;font-size: 16px;">
                             <img style="width: 20px;" src="/static/img/assets/denglu3x.png" alt="">
-                            {{mytoken.realname}}
+                            {{mytoken.realname || mytoken.username}}
                         </span>
                         <span style="color:#fff;" @click="loginout">【退出】</span>
                     </li>
@@ -48,7 +48,7 @@
                 </div>
     <!-- 个人信息------------------------------------------------------------------- -->
                 <div :class= "{gsqiye:nowindex == 1}">
-                    <div class="over gr-worp" style="margin-bottom: 30px;">
+                    <div v-if="ismodifyname" class="over gr-worp" style="margin-bottom: 30px;">
                         <div class="left gr-left">
                             <img src="/static/img/qiye/yonghu@2x.png" alt="">
                         </div>
@@ -57,7 +57,7 @@
                                 <li>
                                     <span>姓名</span>
                                     <span>{{mytoken.realname}}</span>
-                                    <!-- <input type="text" :value="mytoken.realname"> -->
+                                    <button class="modifyname dianji" @click="modify">修改</button>
                                 </li>
                                 <li>
                                     <span>UU号</span><span>{{mytoken.uu}}</span>
@@ -71,6 +71,34 @@
                             </ul>
                         </div>
                     </div>
+                    <!-- 修改页面 -->
+                    <div v-else class="over gr-worp" style="margin-bottom: 30px;">
+                        <div class="left gr-left">
+                            <img src="/static/img/qiye/yonghu@2x.png" alt="">
+                        </div>
+                        <div class="left gr-right" style="margin-bottom: 30px;">
+                            <ul>
+                                <li>
+                                    <span><span class="xinghao" style="width:5px">*</span>姓名</span>
+                                    <input @change="regname" class="realname" type="text" ref="realname" :value="mytoken.realname">
+                                    <p class="usname" ref="usname"></p>
+                                </li>
+                                <li>
+                                    <span>UU号</span><span>{{mytoken.uu}}</span>
+                                </li>
+                                <li>
+                                    <span>邮箱</span><span>{{mytoken.email}}</span>
+                                </li>
+                                <li>
+                                    <span>手机号</span><span>{{mytoken.mobile}}</span>
+                                </li>
+                                <li>
+                                    <button class="baocun dianji" @click="Preservation">保存</button>
+                                    <button class="qy-quxiao quxiao" @click="cancel">取消</button>
+                                </li>
+                            </ul>
+                        </div>
+                    </div>
                 </div>
     <!-- 安全信息----------------------------------------------------------------------------- -->
 
@@ -106,6 +134,9 @@ import { setTimeout } from 'timers';
                 tianjiaqiye: true,//添加企业切换
                 mytoken: JSON.parse(localStorage.getItem('app-state-session')).account,//本地储存的用户信息
                 mobile: null,
+                ismodifyname:true,
+                isname:true,//姓名验证
+                reg: new RegExp(/[\@\#\$\%\&\*!\¥]/),//非法字符
                 tab: [
                     {name: '企业信息'},
                     {name: '个人信息'},
@@ -142,17 +173,93 @@ import { setTimeout } from 'timers';
             //修改手机号
             changphone(){
                 window.location.href = this.$url.sso+'/validation/phoneValidation?returnURL='+this.$url.web+'&appId=sp'
-            }
+            },
+            //修改姓名
+            modify(){
+                this.ismodifyname = false
+            },
+            //取消修改姓名
+            cancel(){
+                this.ismodifyname = true
+            },
+            regname(){
+                let name = this.$refs.realname.value.replace(/\s+/g, "");
+                if (name == '') {
+                    this.$refs.usname.innerHTML = '个人姓名不能为空'
+                    this.isname = false
+                } else {
+                    this.isname = true
+                    if (this.reg.test(name)) {
+                        this.$refs.usname.innerHTML = '不能包含非法字符'
+                        this.isname = false
+                    } else {
+                        this.$refs.usname.innerHTML = ''
+                        this.isname = true
+                    }
+                }
+            },
+            // 保存修改姓名
+            Preservation(){
+                if (this.isname) {
+                    let name = this.$refs.realname.value.replace(/\s+/g, "");
+                    console.log(name)
+                }
+            },
+            onshezhi(){
+                this.$store.state.ismoren = ''
+            },
         },
     }
 </script>
 
 <style scoped>
-    .div {
-        padding-top: 100px;
-        background: #FDFDFD;
-    }
-    .gsqiye div:last-child {
-        margin-bottom: 100px;
-    }
+.div {
+    padding-top: 100px;
+    background: #FDFDFD;
+}
+.gsqiye div:last-child {
+    margin-bottom: 100px;
+}
+.modifyname {
+    margin-left: 80px;
+    font-family: PingFangSC-Regular;
+    font-size: 14px;
+    color: #FFFFFF;
+    letter-spacing: 0.25px;
+    text-align: center;
+    padding: 5px 20px;
+    background: #1E88F5;
+    border-radius: 2px;
+    border: 0
+}
+.baocun {
+    font-family: PingFangSC-Regular;
+    font-size: 14px;
+    color: #FFFFFF;
+    letter-spacing: 0.25px;
+    text-align: center;
+    padding: 5px 26px;
+    background: #1E88F5;
+    border-radius: 2px;
+    border: 0
+}
+.quxiao {
+    padding: 5px 26px;
+    margin-left: 30px
+}
+.realname {
+    margin-left: -5px;
+    padding-left: 5px;
+}
+.usname {
+    height: 0px;
+    margin-left: 85px;
+    color: red;
+    font-size: 12px;
+}
+.xinghao {
+    float: left;
+    margin-left: -10px;
+    color: red;
+}
 </style>

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

@@ -34,7 +34,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><span @click="home" style="color: white">账户中心</span></a></router-link>
             </li>
           </ul>
         </div>
@@ -315,8 +315,9 @@
           Session.set(session)
           const frame = window.frames[window.frames.length - 1]
           window.addEventListener('message', () => {
-           if(me.isLogin){
+           if(me.isLogin || me.isRegister){
             me.isLogin = false
+            me.isRegister = false
             if (!account.companyId) {
               // 添加企业
               me.$router.push({path: '/enterprise'})

+ 13 - 14
frontend/saas-portal-web/src/components/footer/footer.vue

@@ -11,28 +11,27 @@
 					</div>
 					<div class="link">
 						<ul>
-							<li><span>常用链接</span></li>
-							<li><a href="https://uas.usoftchina.com/" target="_blank">UAS官网</a></li>
-							<li><a href="https://www.usoftchina.com/" target="_blank">U软云</a></li>
-							<li><a href="http://www.yitoa.com/" target="_blank">英唐官网</a></li>
+							<li><span>产品</span></li>
+							<li><a href="#">U企云服</a></li>
+							<li><a href="https://mall.usoftchina.com/" target="_blank">U软商城</a></li>
+							<li><a href="https://fin.yitoa-fintech.com/" target="_blank">U智融</a></li>
+							<li><a href="https://zb.usoftchina.com/" target="_blank">闯客网</a></li>
 						</ul>
 						<ul>
 							<li><span>帮助中心</span></li>
 							<li><a @click="problem">常见问题</a></li>
-							<li><a href="#">操作手册</a></li>
+							<li><a class="no-link">操作手册</a></li>
 						</ul>
 						<ul>
-							<li><span>公司</span></li>
-							<li><a href="https://uas.usoftchina.com/about" target="_blank">关于我们</a></li>
-							<li><a >企业文化</a></li>
-							<li><a >联系我们</a></li>
+							<li><span>常用链接</span></li>
+							<li><a href="https://uas.usoftchina.com/" target="_blank">UAS官网</a></li>
+							<li><a href="https://www.usoftchina.com/" target="_blank">优软云</a></li>
+							<li><a href="http://www.yitoa.com/" target="_blank">英唐官网</a></li>
 						</ul>
 						<ul>
-							<li><span>产品</span></li>
-							<li><a href="#">U企云服</a></li>
-							<li><a href="https://mall.usoftchina.com/" target="_blank">优软商城</a></li>
-							<li><a href="https://fin.yitoa-fintech.com/" target="_blank">优智融</a></li>
-							<li><a href="https://zb.usoftchina.com/" target="_blank">闯客网</a></li>
+							<li><span>公司</span></li>
+							<li><a href="https://uas.usoftchina.com/about" target="_blank">关于我们</a></li>
+							<li><a class="no-link">联系我们</a></li>
 						</ul>
 					</div>
 					

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

@@ -36,6 +36,7 @@ export default {
   bottom: 0;
   background: rgba(0, 0, 0, 0.7);
   text-align: center;
+  z-index: 990;
 }
 .loadingtxt {
   position: absolute;

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

@@ -4,10 +4,10 @@ Vue.use(Vuex)
 
 export default new Vuex.Store({
     state:{
-        email:'',
         isAutoLogin: false,
         isproblem: '',//常见问题
         isloading:false,
+        ismoren:''
     },
     mutations:{
          Logintrue(state) {

+ 58 - 39
frontend/saas-portal-web/static/css/gongsi.css

@@ -101,88 +101,107 @@
     display: block !important;
     margin-top: 70px;
 }
+.gs-qiyebox {
+    width: 150%;
+    margin-left: -22%;
+}
 .gs-xiangqing {
-    height: 112px;
+    height: 200px;
     background: #FFFFFF;
     border: 1px solid rgba(30,136,245,0.32);
     box-shadow: 0 20px 60px 8px #F4F8FC;
     border-radius: 4px;
     overflow: hidden;
-    margin-bottom: 24px;
+    width: 22%;
+    float: left;
+    margin: 0px 27px 27px 0px;
 }
 .gs-qynema {
     font-weight: 600;
+    color: #243A52;
+    letter-spacing: 0;
 }
 .dotted {
     border: 1px dashed rgba(30,136,245,0.32);
-    line-height: 112px;
+    text-align: center;
+    position: relative;
 }
 .gs-tianja {
-    padding: 0 80px;
     font-family: PingFangSC-Medium;
     color: #BDBEBE;
     letter-spacing: 0.25px;
+    position: absolute;
+    top: 50%;
+    left: 50%;
+    transform: translate(-50%, -50%);
 }
-.gs-tianja span:hover {
-    border: 1px dashed #ccc;
-    padding: 6px 20px;
-    cursor:pointer;
-}
-.gs-xqleft {
+.gs-tianja img {
     width: 70%;
-    height: 100%;
+}
+.gs-shang {
+    height: 30%;
+    padding: 10px;
     position: relative;
 }
-.gs-lefttext {
+.gs-morenimg {
+    width: 20%;
     position: absolute;
-    top: 50%;
-    left: 50%;
-    width: 70%;
-    margin-left: 30%;
-    height: 50%;
-    transform: translate(-100%,-50%);
+    top: 0;
+    right: 0;
+}
+.gs-xqleft {
+    height: 30%;
+    position: relative;
+    padding: 0px 10px;
 }
 .gs-xqright {
-    width: 30%;
-    height: 100%;
-    overflow: hidden;
+    height: 40%;
+    background: #F4F9FE;
+    padding: 10px;
 }
 .gs-xqright div {
-    float: left;
-    width: 50%;
-    text-align: center;
-    line-height: 90px;
-    margin-top: 10px;
+    text-align: left;
+}
+.gs-xqright div p{
+    font-size: 12px;
+    color: #677897;
+    letter-spacing: 0;
 }
 .gs-border {
-    border-right: 1px solid #B7D9FB;
+    margin-top: 8%;
+}
+.gs-morentop {
+    position: absolute;
+    margin-top: -27px;
+    display: none;
 }
 .gs-btn1 {
-    padding: 5px 20px;
-    background: #1E88F5;
-    border-radius: 2px;
+    padding: 5px;
+    background: #4EC66B;;
+    border-radius: 4px;
     color: white;
 }
 .kaitong {
-    background: #F2F9FF;
-    border: 1px solid #1E88F5;
-    border-radius: 2px;
-    color: #1E88F5;
+    background: #1E88F5;
+    border-radius: 4px;
+    color: white;
 }
 .gs-btn2 {
     font-family: PingFangSC-Regular;
     font-size: 14px;
-    padding: 5px 20px;
+    padding: 2px 8px;
     color: #1E88F5;
+    background: #F8FBFF;
     border: 1px solid #1E88F5;
-    border-radius: 2px;
-    letter-spacing: 0.25px;
+    border-radius: 4px;
 }
-.gs-btn3 {
-    border: 0
+.gs-btn2:hover {
+    color: #ffffff;
+    background: #1E88F5;
 }
 
 
+
 /* 添加企业信息-------------------------------------------------------- */
 .qy-quxiao {
     background: #FFFFFF;

+ 6 - 30
frontend/saas-portal-web/static/css/main.css

@@ -41,7 +41,7 @@ p {
     font-size: 15px;
 }
 main > section {
-    padding: 70px 0;
+    /* padding: 70px 0; */
 }
 
 .btn {
@@ -330,7 +330,8 @@ main > section {
 
 .footer{
     width: 100%;
-    background: #383838;
+    background-image: url(../img/footer2x.png);
+    background-size: 100%;
 }
 .db-text {
     background: white;
@@ -373,7 +374,7 @@ main > section {
 }
 .footer-section ul>li:hover a{
     text-decoration: underline ;
-    color: #e41f2b;
+    color: #1E88F5;
 }
 .footer-section ul>li:hover a.no-link{
     text-decoration: none;
@@ -433,43 +434,18 @@ main > section {
 
 .friend-link{
     height: 100px;
-    background: #000;
+    background: #14152D;
     width: 100%;
     line-height: 100px;
     text-align: center;
 }
 .friend-link span {
-    opacity: 0.56;
     font-family: PingFangSC-Regular;
     font-size: 16px;
-    color: #FFFFFF;
+    color: #7C93AD;
     letter-spacing: 0;
     text-align: center;
 }
-.friend-link ul{
-    overflow: hidden;
-    list-style: none ;
-    width: 80%;
-    margin: 0 auto;
-    padding: 0 15px;
-}
-.friend-link ul li{
-    float: left;
-}
-.friend-link ul li span{
-    font-size: 14px;
-    color: #FFFFFF;
-}
-.friend-link ul li a{
-    display: inline-block;
-    margin-right: 20px;
-    font-size: 14px;
-    color: #FFFFFF;
-}
-.friend-link ul li a:hover{
-    text-decoration: underline ;
-    color: #e41f2b;
-}
 
 .section-title p {
     color: #444;

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


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


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


+ 11 - 6
frontend/saas-web/app/util/BaseUtil.js

@@ -86,11 +86,17 @@ Ext.define('saas.util.BaseUtil', {
          * @param message: 内容
          * @return : Promise
          */
-        showConfirm: function (title, message) {
+        showConfirm: function (title, message, config) {
             return new Ext.Promise(function (resolve, reject) {
-                Ext.MessageBox.confirm(title, message, function (buttonId) {
-                    return resolve(buttonId);
-                });
+                Ext.MessageBox.show(Ext.Object.merge({
+                    title: title,
+                    msg: message,
+                    buttons: Ext.Msg.YESNO,
+                    icon: Ext.Msg.QUESTION,
+                    fn: function (buttonId) {
+                        return resolve(buttonId);
+                    }
+                }, config));
             })
         },
 
@@ -157,13 +163,12 @@ Ext.define('saas.util.BaseUtil', {
                         if (res.success) {
                             return resolve(res);
                         } else {
-                            console.error('server request failure with code ' + res.code + '.');
                             console.error('failure message: ' + res.message);
                             return reject(res);
                         }
                     },
                     failure: function (response, opts) {
-                        console.error('server-side failure with status code ' + response);
+                        console.error('server-side failure.', response);
                         return reject(response);
                     }
                 });

+ 1 - 0
frontend/saas-web/app/util/FormUtil.js

@@ -286,6 +286,7 @@ Ext.define('saas.util.FormUtil', {
                         form.fireEvent('load', form, formData);
                     }
                 }).catch(function(res) {
+                    form.clearDirty();
                     saas.util.BaseUtil.showErrorToast(res.message);
                     form.setLoading(false);
                 })

+ 2 - 2
frontend/saas-web/app/view/core/base/ImportWindow.js

@@ -178,7 +178,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             var caller = b.ownerCt.ownerCt.ownerCt.ownerCt.caller;
                             //获取模版
                             var serverOptions = Ext.manifest.server;
-                            window.location.href = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
+                            window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/commons/excel/import/templet?caller='+caller;
                         }
                     }
                 },{
@@ -229,7 +229,7 @@ Ext.define('saas.view.core.base.ImportWindow', {
                             //导入权限校验
                             var hasPower = false;
                             Ext.Ajax.request({
-                                url: 'http://192.168.253.41:8560/api/commons/'+form.ownerCt.caller+'/import',
+                                url: '/api/commons/'+form.ownerCt.caller+'/import',
                                 async:false,
                                 method: 'GET',
                                 success: function(response, opts) {

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

@@ -83,6 +83,7 @@ Ext.define('saas.view.core.dbfind.DbfindGridPanel', {
                     },'->',{
                         xtype:'button',
                         text:'新增',
+                        cls:'x-formpanel-btn-blue',
                         handler: me.onAddClick.bind(me)
                     }])
                 },{

+ 72 - 2
frontend/saas-web/app/view/core/form/FormPanel.js

@@ -31,9 +31,9 @@ Ext.define('saas.view.core.form.FormPanel', {
     remoteConfig: true, // 是否需要从远端读取form配置
     toolBtns: [], // 自定义按钮
     codeInHeader: true, // 单据编号显示在toolbar
-    closeConfirm: true, // 关闭确认
     invalidText: '表单校验有误,请检查', // 校验未通过提示内容
     dirtyAuditText: '表单数据有修改,是否先保存修改?', // 有修改时点击审核提示内容
+    noDirtySaveText: '表单数据无修改', // 无修改点击保存提示内容
 
     auditTexts: {
         auditCode: 'AUDITED',
@@ -486,7 +486,7 @@ Ext.define('saas.view.core.form.FormPanel', {
         return dirty;
     },
 
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         viewModel = me.getViewModel(),
         allData = viewModel.getData(),
@@ -507,6 +507,52 @@ Ext.define('saas.view.core.form.FormPanel', {
             main: formData,
         };
 
+        for (var i = 0; i < detailCount; i++) {
+            var g = detailGrids[i];
+            var gridDirtyData = g.getSaveData();
+            var modelDetail = allData['detail' + i];
+            var detailBindFields = modelDetail.detailBindFields;
+
+            Ext.Array.each(gridDirtyData, function(d) {
+                for(k in d) {
+                    if(!Ext.Array.contains(detailBindFields, k)) {
+                        delete d[k];
+                    }
+                }
+            });
+            
+
+            dirtyData['detail' + i] = gridDirtyData;
+        }
+
+        return dirtyData;
+    },
+
+    getDirtyData: function() {
+        var me = this,
+        formF = me.getForm(),
+        viewModel = me.getViewModel(),
+        allData = viewModel.getData(),
+        bindFields = allData.base.bindFields,
+        detailCount = me.detailCount,
+        formData = {},
+        detailGrids = me.query('detailGridField');
+
+        Ext.Array.each(bindFields, function(field) {
+            var v = allData[field];
+            var f = formF.findField(field);
+            if(Ext.isDate(v)) {
+                v = Ext.Date.format(v, 'Y-m-d H:i:s');
+            }
+            if(f && f.isDirty()) {
+                formData[field] = f.originalValue;
+            }
+        });
+
+        var dirtyData = {
+            main: formData,
+        };
+
         for (var i = 0; i < detailCount; i++) {
             var g = detailGrids[i];
             var gridDirtyData = g.getDirtyData();
@@ -543,4 +589,28 @@ Ext.define('saas.view.core.form.FormPanel', {
     beforeUnAudit: function() {
         return true;
     },
+
+    promiseCloseTab: function() {
+        var me = this,
+        controller = me.getController();
+
+        if(me.isDirty()) {
+            return saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,离开前要保存吗?', {
+                buttons: Ext.Msg.YESNOCANCEL
+            }).then(function(yes) {
+                if(yes === 'yes') {
+                    controller.onSave();
+                    return false;
+                }else if(yes === 'no') {
+                    return true;
+                }else {
+                    return false
+                }
+            })
+        }else {
+            return new Promise(function (resolve, reject) {
+                return resolve(true);
+            });
+        }
+    }
 });

+ 8 - 3
frontend/saas-web/app/view/core/form/FormPanelController.js

@@ -148,6 +148,11 @@ Ext.define('saas.view.core.form.FormPanelController', {
             saas.util.BaseUtil.showErrorToast(form.invalidText);
             return false;
         }
+        var dirty = form.isDirty();
+        if(!dirty) {
+            saas.util.BaseUtil.showErrorToast(form.noDirtySaveText);
+            return false;
+        }
 
         if(!form.beforeSave()) {
             return false;
@@ -164,7 +169,7 @@ Ext.define('saas.view.core.form.FormPanelController', {
         modelData = viewModel.getData();
 
         //form里面数据
-        var formData = form.getDirtyData();
+        var formData = form.getSaveData();
 
         var params = {
             main:formData.main
@@ -446,10 +451,10 @@ Ext.define('saas.view.core.form.FormPanelController', {
                 printtype = data.printtype,
                 reportName = data.reportName,
                 title = data.title,
+                userName = data.userName,
                 whereCondition = data.whereCondition,
                 companyId = saas.util.BaseUtil.getCurrentUser().companyId;
-    
-                var url = printurl + '?' + 'reportName=' + reportName + '&' + 'companyId=' + companyId + '&whereCondition=' + whereCondition
+                var url = printurl + '?' + 'reportName=' + reportName + '&' + 'companyId=' + companyId + '&whereCondition=' + whereCondition + (userName ? '&userName=' + userName : "");
     
                 window.open(url);
             }).catch(function(res) {

+ 31 - 3
frontend/saas-web/app/view/core/form/field/DetailGridField.js

@@ -8,7 +8,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
     enableColumnHide: false,
     border: 1,
     margin: '0 0 10 0', // formpanel的fieldDefaults未生效
-    height: 245,
+    minHeight: 245,
     columnWidth : 1.0, 
 
     requires: [
@@ -67,6 +67,20 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
                 emptyText: '<div style="width: 100%; text-align: center; cursor: pointer; color: green;" class="fa fa-plus" title="新增行" onclick="addRows(\'' + me.id + '\')"></div>',
             },
             listeners: {
+                boxready: function(g) {
+                    var f = g.ownerCt,
+                    ih = g.initialConfig.height,
+                    c = f.detailCount || 1,
+                    fb = f.getBox(),
+                    fh = fb.height,
+                    h = (fh * 0.5) / c;
+
+                    if(ih) {
+                        g.setMinHeight(ih);
+                        h = ih;
+                    }
+                    g.setHeight(h);
+                },
                 edit: function() {
                     this.fireEvent('validChange');
                 },
@@ -449,7 +463,7 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
         return allData;
     },
 
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         store = me.getStore(),
         allData = store.getData().items,
@@ -509,5 +523,19 @@ Ext.define('saas.view.core.form.field.DetailGridField', {
             }
         });
         return trueData;
-    }
+    },
+
+    getDirtyData: function() {
+        var me = this,
+        store = me.getStore(),
+        modifiedData = store.getModifiedRecords(),
+        dirtyData = [];
+
+        Ext.Array.each(modifiedData, function(m, index) {
+            var modified = m.modified;
+            dirtyData.push(modified);
+        });
+
+        return dirtyData;
+    },
 });

+ 49 - 0
frontend/saas-web/app/view/core/grid/column/YnColumn.js

@@ -0,0 +1,49 @@
+Ext.define('saas.view.core.grid.column.YnColumn', {
+    extend: 'Ext.grid.column.Column',
+    alias: 'widget.yncolumn',
+    constructor: function(cfg){
+        this.callParent(arguments);
+        if(!this.readOnly){
+            this.editor = {
+                    xtype: 'combo',
+                	store: Ext.create('Ext.data.Store', {
+                        fields: ['display', 'value'],
+                        data : [
+                            {"display":"是", "value":'1'},
+                            {"display":"否", "value":'0'}
+                        ]
+                    }),
+                    editable: false,
+                    displayField: 'display',
+                    valueField: 'value',
+            		queryMode: 'local',
+            		value: '0',
+            		hideTrigger: false,
+            		listeners: {
+            			scope: this,
+            			'change':function(c,newVal,oldVal){
+                            if(newVal=='1'){
+                                var grid = c.ownerCt.column.ownerCt.ownerCt;
+                                var nowId = grid.selModel.lastSelected.id;
+                                var items = grid.store.data.items
+                                for (let index = 0; index < items.length; index++) {
+                                    if(items[index].id!=nowId){
+                                        items[index].set(c.ownerCt.column.dataIndex,"")
+                                    }
+                                }
+                            }
+            			}
+            		}
+            };
+        }
+        this.renderer = function(value,meta,record,rol,col,store,view){
+            if(value === undefined){
+                return '';
+            }
+            if(!value || value == 0 || value == '0'){
+                return '';
+            }
+            return '是';
+        };
+    }
+});

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

@@ -32,10 +32,11 @@ Ext.define('saas.view.core.tab.Controller', {
          
                 if (me.fireEvent('beforeclose', me) !== false) {
                     if (me.tabBar) {
-                        if(tabView.closeConfirm && tabView.isDirty()) {
-                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
-                            .then(function(yes) {
-                                if(yes == 'yes') {
+                        if(tabView.fireEvent('beforeclose', tabView) !== false && tabView.promiseCloseTab && typeof tabView.promiseCloseTab == 'function') {
+                            tabView.promiseCloseTab()
+                            .then(function(close) {
+                                console.log();
+                                if(close) {
                                     if (me.tabBar.closeTab(me) === false) {
                                         return;
                                     }
@@ -47,11 +48,14 @@ Ext.define('saas.view.core.tab.Controller', {
                             }
                         }
                     } else {
-                        if(tabView.closeConfirm == 'function' && tabView.isDirty()) {
-                            saas.util.BaseUtil.showConfirm('提示', '表单数据有修改,确定要退出吗?')
-                            .then(function(yes) {
-                                if(yes == 'yes') {
-                                    me.fireClose();
+                        if(tabView.fireEvent('beforeclose', tabView) !== false && tabView.promiseCloseTab && typeof tabView.promiseCloseTab == 'function') {
+                            tabView.promiseCloseTab()
+                            .then(function(close) {
+                                console.log();
+                                if(close) {
+                                    if (me.tabBar.closeTab(me) === false) {
+                                        return;
+                                    }
                                 }
                             });
                         }else {

+ 1 - 0
frontend/saas-web/app/view/document/address/DataList.js

@@ -5,6 +5,7 @@ Ext.define('saas.view.document.address.DataList', {
     extend: 'saas.view.document.kind.Kind',
     xtype: 'document-address-datalist',
     viewModel: 'document-address-datalist',
+    controller:'document-address-datalist',
     defaultType:'address',
     windowType:'document-address-window',
     _openUrl:'/api/document/address/setDefault',

+ 38 - 0
frontend/saas-web/app/view/document/address/DatalistController.js

@@ -0,0 +1,38 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.address.DatalistController', {
+    extend: 'saas.view.document.kind.KindController',
+    alias: 'controller.document-address-datalist',
+    
+    onDelete:function(grid,row,col){
+        var dk = grid.ownerCt.ownerCt;
+        var dataKind=dk.getViewModel().getData()['dataKind'].value,
+        rec = grid.getStore().getAt(row);
+        var keyV=rec.get(dk.etc[dataKind].keyField);
+        if(rec.get('ad_default')==1){
+            saas.util.BaseUtil.showErrorToast('不能删除默认地址');
+            return;
+        }
+        var deleteMsg = '删除的'+dk.getViewModel().getData()['title']+'将不能恢复,请确认是否删除?';
+        saas.util.BaseUtil.deleteWarn(deleteMsg,function(btn){
+            if(btn == 'yes'){
+                //删除接口
+                saas.util.BaseUtil.request({
+                    url: dk.etc[dataKind].delUrl+'/'+keyV,
+                    method: 'POST'
+                })
+                .then(function(localJson) {
+                    if(localJson.success){
+                        saas.util.BaseUtil.showSuccessToast('删除成功');
+                        grid.store.load();
+                    }
+                })
+                .catch(function(res) {
+                    console.error(res);
+                    saas.util.BaseUtil.showErrorToast('删除失败: ' + res.message);
+                });
+            }
+        });
+    }
+});

+ 2 - 1
frontend/saas-web/app/view/document/customer/BasePanel.js

@@ -82,7 +82,8 @@ Ext.define('saas.view.document.customer.BasePanel', {
         },{
             text : "客户简称", 
             width : 150.0, 
-            dataIndex : "cu_shortname"
+            dataIndex : "cu_shortname",
+            hidden: true
         }, 
         {
             text : "客户名称", 

+ 20 - 89
frontend/saas-web/app/view/document/customer/FormPanel.js

@@ -34,18 +34,18 @@ Ext.define('saas.view.document.customer.FormPanel', {
         fieldLabel: '客户编号',
         allowBlank: false,
         columnWidth: 0.25
-    },{
-        xtype: 'textfield',
-        name: 'cu_shortname',
-        fieldLabel: '客户简称',
-        allowBlank: false,
-        columnWidth: 0.25
     },{
         xtype: 'textfield',
         name: 'cu_name',
         fieldLabel: '客户名称',
         allowBlank: false,
         columnWidth: 0.25
+    },{
+        xtype: 'textfield',
+        name: 'cu_shortname',
+        fieldLabel: '客户简称',
+        columnWidth: 0.25,
+        hidden: true
     },{
         editable:false,
         xtype : "remotecombo", 
@@ -155,7 +155,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
     }, {
         xtype : "hidden", 
         name : "cu_sellerid", 
-        fieldLabel : "业务员id"
+        fieldLabel : "业务员id",
+        defaultValue:saas.util.BaseUtil.getCurrentUser().id
     }, {
         xtype : "hidden", 
         name : "cu_sellercode", 
@@ -164,7 +165,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
         xtype : "employeeDbfindTrigger", 
         name : "cu_sellername", 
         fieldLabel : "业务员",  
-        columnWidth : 0.25
+        columnWidth : 0.25,
+        defaultValue:saas.util.BaseUtil.getCurrentUser().realname
     },{
         xtype : "hidden", 
         name : "cu_nsrzh", 
@@ -230,6 +232,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
         detnoColumn: 'cc_detno',
         showCount: false,
         deleteDetailUrl:'/api/document/customer/deletecontact',
+        height:145,
+        emptyRows: 3,
         columns : [
             {
                 text : "ID", 
@@ -256,6 +260,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 allowBlank:false,
                 text : "电话", 
                 editor : {
+                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                    regexText:'请输入正确的手机号码',
                     hideTrigger:true,
                     xtype : "textfield"
                 },
@@ -280,50 +286,10 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 width:180 
             },
             {
-                editor : {
-                    displayField : "display", 
-                    format : "", 
-                    hideTrigger : false, 
-                    maxLength : 100.0, 
-                    minValue : null, 
-                    positiveNum : false, 
-                    queryMode : "local", 
-                    valueField : "value", 
-                    xtype : "combo",
-                    store:{
-                        fields: ['display', 'value'],
-                        data : [
-                            {"display":"是", "value":'1'},
-                            {"display":"否", "value":'0'}
-                        ]
-                    },
-                    listeners:{
-                        'change':function(c,newVal,oldVal){
-                            if(newVal=='1'){
-                                var grid = c.ownerCt.column.ownerCt.ownerCt;
-                                var nowId = grid.selModel.lastSelected.id;
-                                var items = grid.store.data.items
-                                for (let index = 0; index < items.length; index++) {
-                                    if(items[index].id!=nowId){
-                                        items[index].set('cc_default',"")
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }, 
                 text : "默认联系人", 
                 width:110 ,
                 dataIndex : "cc_default", 
-                xtype : "",
-                renderer: function (v, m, r) {
-                    if(v=='0'){
-                        return '';
-                    }else if(v=='1'){
-                        return '是';
-                    }
-                    return v;
-                }
+                xtype : "yncolumn"
             }]
     } ,{
         xtype : "detailGridField", 
@@ -331,6 +297,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
         detnoColumn: 'ca_detno',
         showCount: false,
         deleteDetailUrl:'/api/document/customer/deleteaddress',
+        height:145,
+        emptyRows: 3,
         columns : [
             {
                 text : "ID", 
@@ -366,6 +334,8 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 allowBlank:true,
                 text : "联系电话", 
                 editor : {
+                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                    regexText:'请输入正确的手机号码',
                     xtype : "textfield",
                     hideTrigger:true,
                 },
@@ -373,49 +343,10 @@ Ext.define('saas.view.document.customer.FormPanel', {
                 width:110  
             },
             {
-                editor : {
-                    displayField : "display", 
-                    format : "", 
-                    hideTrigger : false, 
-                    maxLength : 100.0, 
-                    minValue : null, 
-                    positiveNum : false, 
-                    queryMode : "local", 
-                    valueField : "value", 
-                    xtype : "combo",
-                    store:{
-                        fields: ['display', 'value'],
-                        data : [
-                            {"display":"是", "value":'1'},
-                            {"display":"否", "value":'0'}
-                        ]
-                    },
-                    listeners:{
-                        'change':function(c,newVal,oldVal){
-                            if(newVal=='1'){
-                                var grid = c.ownerCt.column.ownerCt.ownerCt;
-                                var nowId = grid.selModel.lastSelected.id;
-                                var items = grid.store.data.items
-                                for (let index = 0; index < items.length; index++) {
-                                    if(items[index].id!=nowId){
-                                        items[index].set('ca_default',"")
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }, 
                 text : "默认地址", 
                 dataIndex : "ca_default", 
                 width:110,
-                renderer: function (v, m, r) {
-                    if(v=='0'){
-                        return '';
-                    }else if(v=='1'){
-                        return '是';
-                    }
-                    return v;
-                }
+                xtype:'yncolumn'
             }]
     }],
     defaultButtons:[{

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

@@ -88,6 +88,8 @@ Ext.define('saas.view.document.employee.Window', {
                 xtype:'textfield',
                 fieldLabel: '联系电话',
                 name: 'em_mobile',
+                regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                regexText:'请输入正确的手机号码',
                 allowBlank:false,
                 maxLength: 20
             },{

+ 24 - 3
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -53,7 +53,7 @@ Ext.define('saas.view.document.kind.ChildForm', {
                     }
                 }).catch(function(res) {
                     saas.util.BaseUtil.showErrorToast(res.message);
-                    w.setLoading(true);
+                    w.setLoading(false);
                 })
               }
           }
@@ -112,7 +112,7 @@ Ext.define('saas.view.document.kind.ChildForm', {
                 xtype:'textfield',
                 name:'ft_name',
                 allowBlank:false,
-                relativeField:'ord_type',
+                relativeField:'ord_type,osd_type',
                 fieldLabel:'收支名称',
                 maxLength: 20
             },{
@@ -135,6 +135,17 @@ Ext.define('saas.view.document.kind.ChildForm', {
                         {"display":"收入", "value":'收入'},
                         {"display":"支出", "value":'支出'}
                     ]
+                },
+                listeners:{
+                    afterrender:function(f){
+                        if(f.ownerCt.ownerCt._parent.xtype == "money-othreceipts-formpanel"){
+                            f.setReadOnly(true);
+                            f.setValue('收入')
+                        }else if(f.ownerCt.ownerCt._parent.xtype == "money-othspendings-formpanel"){
+                            f.setReadOnly(true);
+                            f.setValue('支出')
+                        }
+                    }
                 }
             }]
         }
@@ -216,14 +227,24 @@ Ext.define('saas.view.document.kind.ChildForm', {
                         grid.store.load();
                     }
                 }
+                //从表 remoteCombo 赋值
                 if(relativeField&&relativeValue&&form.ownerCt._parent&&form.ownerCt._parent.xtype!='document-kind'){
                     var grid = form.ownerCt._parent.down('grid');
                     var rec = grid.getSelectionModel().getLastSelected();
-                    rec.set(relativeField,relativeValue);
+                    var relfields = relativeField.split(',');//多个界面不同字段使用同种下拉新增时
+                    Ext.Array.each(relfields,function(name) {
+                        rec.set(name,relativeValue);
+                    });
                 }
+                //主表 remoteCombo 赋值
+                //remoteCombo store刷新
                 if(combo){
                     combo.store.load(function() {
                         typeof combo.setValue == 'function' && combo.setValue(relativeValue);
+                        //重新设置combo高度
+                        var count = combo.store.getCount();
+                        var newHeight = count>5?248-(combo.hiddenBtn?50:0):(33*count+(combo.hiddenBtn?0:50));
+                        combo.picker.setHeight(newHeight);
                     });
                 }
                 saas.util.BaseUtil.showSuccessToast('保存成功');

+ 2 - 1
frontend/saas-web/app/view/document/vendor/BasePanel.js

@@ -76,7 +76,8 @@ Ext.define('saas.view.document.vendor.BasePanel', {
         },{
             text : "供应商简称", 
             width : 150.0, 
-            dataIndex : "ve_shortname" 
+            dataIndex : "ve_shortname",
+            hidden: true
         }, {
             text : "供应商名称", 
             dataIndex : "ve_name", 

+ 10 - 48
frontend/saas-web/app/view/document/vendor/FormPanel.js

@@ -34,18 +34,18 @@ Ext.define('saas.view.document.vendor.FormPanel', {
         fieldLabel: '供应商编号',
         allowBlank: false,
         columnWidth: 0.25
-    },{
-        xtype: 'textfield',
-        name: 've_shortname',
-        fieldLabel: '供应商简称',
-        allowBlank: false,
-        columnWidth: 0.25
     },{
         xtype: 'textfield',
         name: 've_name',
         fieldLabel: '供应商名称',
         allowBlank: false,
         columnWidth: 0.25
+    },{
+        xtype: 'textfield',
+        name: 've_shortname',
+        fieldLabel: '供应商简称',
+        columnWidth: 0.25,
+        hidden: true
     },{
         xtype: 'hidden',
         name: 've_status',
@@ -227,6 +227,7 @@ Ext.define('saas.view.document.vendor.FormPanel', {
         detnoColumn: 'vc_detno',
         showCount: false,
         deleteDetailUrl:'/api/document/vendor/deleteContact',
+        height:145,
         columns : [
             {
                 text : "ID", 
@@ -253,6 +254,8 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 allowBlank:false,
                 text : "电话", 
                 editor : {
+                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                    regexText:'请输入正确的手机号码',
                     hideTrigger:true,
                     xtype : "textfield"
                 },
@@ -277,50 +280,9 @@ Ext.define('saas.view.document.vendor.FormPanel', {
                 width:180
             },
             {
-                editor : {
-                    displayField : "display", 
-                    editable:true,
-                    format : "", 
-                    hideTrigger : false, 
-                    maxLength : 100.0, 
-                    minValue : null, 
-                    positiveNum : false, 
-                    queryMode : "local", 
-                    valueField : "value", 
-                    xtype : "combo",
-                    store:{
-                        fields: ['display', 'value'],
-                        data : [
-                            {"display":"是", "value":'1'},
-                            {"display":"否", "value":'0'}
-                        ]
-                    },
-                    listeners:{
-                        'change':function(c,newVal,oldVal){
-                            if(newVal=='1'){
-                                var grid = c.ownerCt.column.ownerCt.ownerCt;
-                                var nowId = grid.selModel.lastSelected.id;
-                                var items = grid.store.data.items
-                                for (let index = 0; index < items.length; index++) {
-                                    if(items[index].id!=nowId){
-                                        items[index].set('vc_default',"")
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }, 
                 text : "默认联系人", 
                 dataIndex : "vc_default", 
-                xtype : "",
-                renderer: function (v, m, r) {
-                    if(v=='0'){
-                        return '';
-                    }else if(v=='1'){
-                        return '是';
-                    }
-                    return v;
-                }
+                xtype : "yncolumn",
             }]
         }
     ],

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

@@ -48,7 +48,7 @@ Ext.define('saas.view.home.charts.MonthSale', {
                     angleField: 'y',
                     donut: 55,
                     label: {
-                        field: 'z',
+                        field: 'x',
                         display: 'inside',
                         renderer: me.onLabelRender,
                         color: '#fff',

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

@@ -23,7 +23,7 @@ Ext.define('saas.view.home.charts.ProfitDetail', {
                 },
                 axes: [{
                     type: 'category',
-                    fields: ['z'],
+                    fields: ['x'],
                     position: 'bottom',
                     label: {
                         fontSize: '12px',
@@ -60,7 +60,7 @@ Ext.define('saas.view.home.charts.ProfitDetail', {
                 }],
                 series: [{
                     type: 'bar',
-                    xField: 'z',
+                    xField: 'x',
                     yField: ['y'],
                     bind: {
                         style: {
@@ -81,7 +81,10 @@ Ext.define('saas.view.home.charts.ProfitDetail', {
     },
 
     onCategoryLabelRender: function(axis, label, layoutContent, lastLabel) {
-        return label;
+        var cWidth = this.gridSurface.el.dom.clientWidth,
+        dataCount = layoutContent.data.length,
+        maxLength = Math.ceil((cWidth/dataCount)/20);
+        return label.length > maxLength ? label.substring(0, maxLength) + '...' : label;
     },
 
     onBarTipRender: function (tooltip, record, item) {

+ 3 - 4
frontend/saas-web/app/view/main/Main.js

@@ -46,13 +46,12 @@ Ext.define('saas.view.main.Main', {
                 },{
                     padding: '0 0 0 0',
                     reference: 'mainprofile',
-                    arrowVisible: false,
                     cls:'x-main-master',
                     ui: 'header',
                     bind: {
-                        text: '{company.name}'
+                        text: '{company.name}',
+                        arrowVisible: '{hasManyCompany}',
                     },
-                    arrowVisible: true,
                     menu: {
                         items: []
                     }
@@ -124,7 +123,7 @@ Ext.define('saas.view.main.Main', {
                     }
                 },
                 {
-                    ui: 'header',
+                    // ui: 'header',
                     arrowVisible: false,
                     cls:' sa-nav-button',   
                     width: 50,

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

@@ -231,6 +231,8 @@ body > .x-mask {
     color: #34BAF6;
     padding: 0;
     box-shadow: none !important;
+    border: none;
+    background-color: transparent !important;
 
     .x-btn-icon-el {
         color: #34BAF6;

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

@@ -25,7 +25,12 @@ Ext.define('saas.view.main.MainController', {
                 }
             });
         }
-        companyMenu.insert(0, items);
+        if(items.length > 1) {
+            companyMenu.insert(0, items);
+            viewModel.set('hasManyCompany', true);
+        }else {
+            viewModel.set('hasManyCompany', false);
+        }
     },
 
     onToggleNavigationSize: function () {

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

@@ -406,7 +406,7 @@ Ext.define('saas.view.money.payBalance.FormPanel', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
+            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次核销金额,是否仍要保存并审核?')
             .then(function(y) {
                 if(y == 'yes') {
                     controller.audit();

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

@@ -389,7 +389,7 @@ Ext.define('saas.view.money.recBalance.FormPanel', {
         if(flag != 0) {
             var t = flag > 0 ? '大' : '小';
 
-            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次折扣后核销金额,是否仍要保存并审核?')
+            saas.util.BaseUtil.showConfirm('提示', '付款金额' + t + '于本次核销金额,是否仍要保存并审核?')
             .then(function(y) {
                 if(y == 'yes') {
                     controller.audit();

+ 1 - 1
frontend/saas-web/app/view/money/report/PayDetail.js

@@ -6,7 +6,7 @@ Ext.define('saas.view.money.report.PayDetail', {
     viewModel: 'money-report-paydetail',
     viewName: 'money-report-paydetail',
 
-    groupField:'pd_vendcode',
+    groupField:'pd_vendname',
     groupHeaderTpl: '供应商名称: {[values.rows[0].data.pd_vendcode]}',
     listUrl: '/api/money/report/payDetail',
     defaultCondition: null,

+ 6 - 3
frontend/saas-web/app/view/money/report/ProfitDetail.js

@@ -117,9 +117,12 @@ Ext.define('saas.view.money.report.ProfitDetail', {
         dataIndex: 'profitpresent',
         width: 130,
         xtype: 'numbercolumn',
-        renderer: function(v) {
-            return Ext.util.Format.number(v, '0');
-        }
+        renderer : function(v) {
+            var arr = (v + '.').split('.');
+            var xr = (new Array(arr[1].length > 2 ? 2 : arr[1].length)).fill('0');
+            var format = '0,000.' + xr.join('');
+            return Ext.util.Format.number(v * 100, format);
+        },
     },{
         flex: 1
     }]

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

@@ -566,7 +566,7 @@ Ext.define('saas.view.money.verification.FormPanelController', {
         modelData = viewModel.getData();
 
         //form里面数据
-        var formData = form.getDirtyData();
+        var formData = form.getSaveData();
 
         var params = {
             main:formData.main

+ 25 - 3
frontend/saas-web/app/view/purchase/purchase/FormPanel.js

@@ -384,7 +384,29 @@ Ext.define('saas.view.purchase.purchase.FormPanel', {
             hidden: '{turnHidden}'
         },
          handler: 'turnIn'
-     }]
-
-
+     }],
+     initFormData: function(data) {
+        var me = this;
+        me.setFormData(data);
+        if(data.main.pu_statuscode!='AUDITED'&&!data.main.pu_shipaddresscode){
+            //读取默认地址
+            saas.util.BaseUtil.request({
+                url: '/api/document/address/getDefault',
+                method: 'GET',
+            })
+            .then(function (localJson) {
+                var data = localJson.data;
+                if(data&&data.ad_address){
+                    var f = me.down('[name=pu_shipaddresscode]');
+                    f.setValue(data.ad_address)
+                }else{
+                    saas.util.BaseUtil.showErrorToast('未设置默认采购交货地址,维护后新增会自动给采购交货地址赋默认值');
+                }
+            })
+            .catch(function (res) {
+                saas.util.BaseUtil.showErrorToast('获取默认采购交货地址失败' + res.message);
+            });
+        }
+        me.clearDirty();
+    }
 });

+ 0 - 22
frontend/saas-web/app/view/purchase/purchase/FormPanelController.js

@@ -61,28 +61,6 @@ Ext.define('saas.view.purchase.purchase.FormPanelController', {
                     });
 
                 }
-            },
-            'remotecombo[name=pu_shipaddresscode]':{
-                afterrender:function(f){
-                    if(f.ownerCt.initId==0){
-                        //读取默认地址
-                        saas.util.BaseUtil.request({
-                            url: '/api/document/address/getDefault',
-                            method: 'GET',
-                        })
-                        .then(function (localJson) {
-                            var data = localJson.data;
-                            if(data&&data.ad_address){
-                                f.setValue(data.ad_address)
-                            }else{
-                                saas.util.BaseUtil.showErrorToast('未设置默认采购交货地址,维护后新增会自动给采购交货地址赋默认值');
-                            }
-                        })
-                        .catch(function (res) {
-                            saas.util.BaseUtil.showErrorToast('获取默认采购交货地址失败' + res.message);
-                        });
-                    }
-                }
             }
         });
     },

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

@@ -45,7 +45,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
         xtype: 'warehouseDbfindTrigger',
         name: 'wh_description',
         bind: '{form.wh_description}',
-        fieldLabel: '仓库',
+        emptyText: '仓库',
         dbfinds:[{
             from:'wh_description',to:'wh_description'
         }],
@@ -56,7 +56,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
         storeUrl:'/api/document/producttype/getCombo',
         name : "pr_kind",
         bind: '{form.pr_kind}',
-        fieldLabel : "类型",
+        emptyText : "类型",
         hiddenBtn:true,
         //width:150
     },{
@@ -500,7 +500,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
     },
     onSave:function(){
         var me = this,
-        gridData = me.getDirtyData();
+        gridData = me.getSaveData();
         if(gridData==null){
             saas.util.BaseUtil.showErrorToast('未修改数据');
         }
@@ -519,7 +519,7 @@ Ext.define('saas.view.stock.inventory.EditDataList', {
             saas.util.BaseUtil.showErrorToast('保存失败: ' + res.message);
         });        
     },
-    getDirtyData: function() {
+    getSaveData: function() {
         var me = this,
         store = me.getStore(),
         allData = store.getData().items,

+ 2 - 0
frontend/saas-web/app/view/stock/report/DataListController.js

@@ -8,6 +8,7 @@ Ext.define('saas.view.stock.report.DataListController', {
         form = reportPanel.down('form'),
         grid = reportPanel.down('grid'),
         columns = grid.columns,
+        mySummaryBar = grid.getDockedItems()[2],
         toggleColumns = [],
         store = grid.store;
 
@@ -31,6 +32,7 @@ Ext.define('saas.view.stock.report.DataListController', {
             con.columnWidth = 0.65;
             reportPanel.queryMode = 'MAIN';
         }
+        mySummaryBar.setHidden(newValue);
         
         form.updateLayout();
         toggleColumns.map(function(c) {

+ 1 - 1
frontend/saas-web/app/view/stock/report/ProdinoutCount.js

@@ -26,7 +26,7 @@ Ext.define('saas.view.stock.report.ProdinoutCount', {
     }, {
         xtype: 'monthdatefield',
         name: 'pwm_yearmonth',
-        fieldLabel: '单据日期',
+        fieldLabel: '期',
         columnWidth: 0.2
     }],
     reportColumns: [{

+ 1 - 1
frontend/saas-web/app/view/sys/account/AddWindow.js

@@ -30,7 +30,7 @@ Ext.define('saas.view.sys.account.AddWindow', {
                     allowBlank:false,
                     maxLength: 30,
                     columnWidth:0.7,
-                    regex:/^1(3|4|5|7|8)\d{9}$/,
+                    regex:/^1(3|4|5|7|8|9)\d{9}$/,
                     regexText:'请输入正确的手机号码',
                     listeners:{
                         change:function(f,a,b){

+ 3 - 1
frontend/saas-web/app/view/sys/account/DataList.js

@@ -22,7 +22,9 @@ Ext.define('saas.view.sys.account.DataList', {
         width: 140,
         name: 'mobile',
         xtype: 'textfield',
-        emptyText : '手机号码'
+        emptyText : '手机号码',
+        regex:/^1(3|4|5|7|8|9)\d{9}$/,
+        regexText:'请输入正确的手机号码'
     },{
         xtype:'button',
         text:'查询',

+ 2 - 0
frontend/saas-web/app/view/sys/account/EditWindow.js

@@ -46,6 +46,8 @@ Ext.define('saas.view.sys.account.EditWindow', {
             },{
                 xtype:'textfield',
                 fieldLabel: '手机号码',
+                regex:/^1(3|4|5|7|8|9)\d{9}$/,
+                regexText:'请输入正确的手机号码',
                 name: 'mobile',
                 readOnly:true,
                 editable:false,

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

@@ -67,6 +67,8 @@ Ext.define('saas.view.sys.config.FormPanel', {
         bind:'{tel}',
         xtype: 'textfield',
         name: 'tel',
+        regex:/^1(3|4|5|7|8|9)\d{9}$/,
+        regexText:'请输入正确的手机号码',
         fieldLabel: '电话',
         beforeLabelTextTpl : "<font color=\"red\" style=\"position:relative; top:2px;right:2px; font-weight: bolder;\">*</font>",
         allowBlank: false,
@@ -202,7 +204,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
                                 if(data.id){
                                     var serverOptions = Ext.manifest.server;
                                     var img = myForm.down('[name=SignetPhoto]');
-                                    img.el.dom.src = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
+                                    img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
                                     var showSignetPhoto = form.down('[name=showSignetPhoto]');
                                     showSignetPhoto.show();
                                 }
@@ -331,7 +333,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
                                 if(data.id){
                                     var serverOptions = Ext.manifest.server;
                                     var img = myForm.down('[name=LogoPhoto]');
-                                    img.el.dom.src = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
+                                    img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+data.fullPath;
                                     var showLogoPhoto = form.down('[name=showLogoPhoto]');
                                     showLogoPhoto.show();
                                 }
@@ -420,7 +422,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
         var signet = form.down('[name=signet]').value;
         if(signet&&signet!=''){
             var img = form.down('[name=SignetPhoto]');
-            img.el.dom.src = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/file/download?path='+signet;
+            img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+signet;
             var showSignetPhoto = form.down('[name=showSignetPhoto]');
             showSignetPhoto.show();
         }
@@ -428,7 +430,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
         var logoUrl = form.down('[name=logoUrl]').value;
         if(logoUrl&&logoUrl!=''){
             var img = form.down('[name=LogoPhoto]');
-            img.el.dom.src = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/file/download?path='+logoUrl;
+            img.el.dom.src = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+logoUrl;
             var showLogoPhoto = form.down('[name=showLogoPhoto]');
             showLogoPhoto.show();
         }
@@ -478,7 +480,7 @@ Ext.define('saas.view.sys.config.FormPanel', {
 
     downLoad:function(path){
         var serverOptions = Ext.manifest.server;
-        window.location.href = (serverOptions.basePath.http?serverOptions.basePath.http:serverOptions.basePath) + '/api/file/download?path='+path;
+        window.location.href = (serverOptions.basePath.https?serverOptions.basePath.https:serverOptions.basePath) + '/api/file/download?path='+path;
         //ajax 响应下载必须要创建一个form实例
         // if (!Ext.fly('ext-attach-download')) {  
 		// 	var frm = document.createElement('form');  

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

@@ -37,6 +37,8 @@ Ext.define('saas.view.sys.feedback.FormPanel', {
             xtype : "textfield", 
             name : "fb_mobile", 
             fieldLabel : "手机号",
+            regex:/^1(3|4|5|7|8|9)\d{9}$/,
+            regexText:'请输入正确的手机号码',
             value:saas.util.BaseUtil.getCurrentUser() ? saas.util.BaseUtil.getCurrentUser().mobile:null
         }, {
             xtype : "textfield", 

BIN
frontend/saas-web/resources/images/auth-background.jpg