Browse Source

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

zhoudw 7 years ago
parent
commit
a6b04fa7b4
19 changed files with 484 additions and 50 deletions
  1. 6 13
      applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java
  2. 19 7
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Maxnumbers.java
  3. 1 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/MaxnumbersExample.java
  4. 1 1
      applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/MaxnumbersdetailExample.java
  5. 7 4
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/MaxnumberController.java
  6. 3 2
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersMapper.java
  7. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersdetailMapper.java
  8. 1 1
      applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/service/impl/MaxnumberServiceImpl.java
  9. 4 0
      applications/money/pom.xml
  10. 4 0
      applications/purchase/purchase-server/pom.xml
  11. 12 1
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java
  12. 4 0
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/mapper/PurchaseMapper.java
  13. 49 19
      applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/service/impl/PurchaseServiceImpl.java
  14. 105 0
      frontend/saas-web/app/view/document/kind/ChildForm.js
  15. 108 0
      frontend/saas-web/app/view/document/kind/Kind.js
  16. 88 0
      frontend/saas-web/app/view/document/kind/KindController.js
  17. 57 0
      frontend/saas-web/app/view/document/kind/KindModel.js
  18. 7 0
      frontend/saas-web/resources/json/customer.json
  19. 7 0
      frontend/saas-web/resources/json/vendor.json

+ 6 - 13
applications/commons/commons-api/src/main/java/com/usoftchina/saas/commons/api/MaxnumberService.java

@@ -3,26 +3,19 @@ import com.usoftchina.saas.base.Result;
 
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
 
 @FeignClient("commons-server")
 public interface MaxnumberService {
     /**
-    * @Description 更新并获取最大编号
+    * @Description: 更新并获取最大编号
     * @Param: [count, code, caller]
     * @return: com.usoftchina.saas.base.Result
     * @Author: guq
-    * @Date: 2018/10/19
+    * @Date: 2018/10/19 api/commons
     */
-    @PostMapping("api/commons/number/pushMaxnubmer")
-    public Result pushMaxnubmer(Integer count, String code, String caller);
+    @PostMapping("/number/pushMaxnubmer")
+    public String pushMaxnubmer(@RequestParam("count") Integer count,@RequestParam("code") String code,
+                                @RequestParam("caller") String caller);
 
-    /**
-    * @Description 前端获取编号
-    * @Param: [caller, update]
-    * @return: com.usoftchina.saas.base.Result
-    * @Author: guq
-    * @Date: 2018/10/19
-    */
-    @PostMapping("api/commons/number/getMaxnumber")
-    public Result getMaxnumber(String caller, boolean update);
 }

+ 19 - 7
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/Maxnumbers.java

@@ -7,7 +7,25 @@ public class Maxnumbers extends CommonBaseEntity{
 
     private String mn_leadcode;
 
-    private String mn_number;
+    private String mn_rule;
+
+    public String getMn_rule() {
+        return mn_rule;
+    }
+
+    public void setMn_rule(String mn_rule) {
+        this.mn_rule = mn_rule;
+    }
+
+    private Integer mn_number;
+
+    public Integer getMn_number() {
+        return mn_number;
+    }
+
+    public void setMn_number(Integer mn_number) {
+        this.mn_number = mn_number;
+    }
 
     public String getMn_caller() {
         return mn_caller;
@@ -25,11 +43,5 @@ public class Maxnumbers extends CommonBaseEntity{
         this.mn_leadcode = mn_leadcode == null ? null : mn_leadcode.trim();
     }
 
-    public String getMn_number() {
-        return mn_number;
-    }
 
-    public void setMn_number(String mn_number) {
-        this.mn_number = mn_number == null ? null : mn_number.trim();
-    }
 }

+ 1 - 1
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/MaxnumbersExample.java

@@ -385,7 +385,7 @@ public class MaxnumbersExample {
             return (Criteria) this;
         }
 
-        public Criteria andCompanyIdEqualTo(Integer value) {
+        public Criteria andCompanyIdEqualTo(Long value) {
             addCriterion("companyId =", value, "companyId");
             return (Criteria) this;
         }

+ 1 - 1
applications/commons/commons-dto/src/main/java/com/usoftchina/saas/commons/po/MaxnumbersdetailExample.java

@@ -375,7 +375,7 @@ public class MaxnumbersdetailExample {
             return (Criteria) this;
         }
 
-        public Criteria andCompanyIdEqualTo(Integer value) {
+        public Criteria andCompanyIdEqualTo(Long value) {
             addCriterion("companyId =", value, "companyId");
             return (Criteria) this;
         }

+ 7 - 4
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/controller/MaxnumberController.java

@@ -9,6 +9,9 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author: guq
  * @create: 2018-10-18 17:40
@@ -22,13 +25,13 @@ public class MaxnumberController {
 
     @PostMapping("/getMaxnumber")
     public Result getMaxnumber(String caller, boolean update) {
-        String code = maxnumberService.getMaxnumner(caller, update);
+        Map<String, Object> code = new HashMap<>();
+        code.put("code",  maxnumberService.getMaxnumner(caller, update));
         return Result.success(code);
     }
 
     @PostMapping("/pushMaxnubmer")
-    public Result pushMaxnubmer(Integer count, String code, String caller) {
-        String maxnubmer = maxnumberService.pushMaxnubmer(count, code, caller);
-        return Result.success(maxnubmer);
+    public String pushMaxnubmer(Integer count, String code, String caller) {
+        return maxnumberService.pushMaxnubmer(count, code, caller);
     }
 }

+ 3 - 2
applications/commons/commons-server/src/main/java/com/usoftchina/saas/commons/mapper/MaxnumbersMapper.java

@@ -2,13 +2,14 @@ package com.usoftchina.saas.commons.mapper;
 
 
 
+import com.usoftchina.saas.base.mapper.CommonBaseMapper;
 import com.usoftchina.saas.commons.po.Maxnumbers;
 import com.usoftchina.saas.commons.po.MaxnumbersExample;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
-public interface MaxnumbersMapper {
+public interface MaxnumbersMapper extends CommonBaseMapper<Maxnumbers>{
     int countByExample(MaxnumbersExample example);
 
     int deleteByExample(MaxnumbersExample example);
@@ -19,7 +20,7 @@ public interface MaxnumbersMapper {
 
     int insertSelective(Maxnumbers record);
 
-    List<Maxnumbers> selectByExample(MaxnumbersExample example);
+    Maxnumbers selectByExample(MaxnumbersExample example);
 
     Maxnumbers selectByPrimaryKey(Integer mn_id);
 

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

@@ -18,7 +18,7 @@ public interface MaxnumbersdetailMapper {
 
     int insertSelective(Maxnumbersdetail record);
 
-    List<Maxnumbersdetail> selectByExample(MaxnumbersdetailExample example);
+    Maxnumbersdetail selectByExample(MaxnumbersdetailExample example);
 
     Maxnumbersdetail selectByPrimaryKey(Integer md_id);
 

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

@@ -217,7 +217,7 @@ public class MaxnumberServiceImpl extends CommonBaseServiceImpl<MaxnumbersMapper
     */
     private String getRulecode(Maxnumbers maxnumbers) {
         String rulecode = maxnumbers.getMn_leadcode();
-        Integer ength = maxnumbers.getMn_number();
+        Integer length = maxnumbers.getMn_number();
         String mn_rule = maxnumbers.getMn_rule();
         String date = "YYYYMM".equals(mn_rule) ? DateUtils.format(new Date(), "yyyyMM") :
                 DateUtils.format(new Date(), "yyyyMMdd");

+ 4 - 0
applications/money/pom.xml

@@ -10,7 +10,11 @@
     <modelVersion>4.0.0</modelVersion>
 
     <artifactId>money</artifactId>
+    <packaging>pom</packaging>
     <description>money server</description>
+    <modules>
+        <module>money-api</module>
+    </modules>
 
 
 </project>

+ 4 - 0
applications/purchase/purchase-server/pom.xml

@@ -76,6 +76,10 @@
             <groupId>com.usoftchina.saas</groupId>
             <artifactId>commons-dto</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.usoftchina.saas</groupId>
+            <artifactId>commons-api</artifactId>
+        </dependency>
     </dependencies>
 
     <build>

+ 12 - 1
applications/purchase/purchase-server/src/main/java/com/usoftchina/saas/purchase/PurchaseApplication.java

@@ -7,6 +7,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
 
 /**
  * @author yingp
@@ -18,8 +20,17 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 @EnableFeignClients("com.usoftchina.saas")
 //@EnableAuthClient
 @MapperScan("com.usoftchina.saas.purchase.mapper")
-public class PurchaseApplication {
+public class PurchaseApplication  extends WebMvcConfigurerAdapter {
     public static void main(String[] args) {
         SpringApplication.run(PurchaseApplication.class, args);
     }
+    @Override
+    public void addCorsMappings(CorsRegistry registry) {
+
+        registry.addMapping("/**")
+                .allowCredentials(true)
+                .allowedHeaders("*")
+                .allowedOrigins("*")
+                .allowedMethods("*");
+    }
 }

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

@@ -20,4 +20,8 @@ public interface PurchaseMapper extends CommonBaseMapper<Purchase>{
     String validateUnAudit(Long id);
 
     String validateBatchUnAudit(List<DocBaseDTO> baseDTOs);
+
+    Integer validateCodeWhenInsert(String code);
+
+    Integer validateCodeWhenUpdate(String code, Long id);
 }

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

@@ -2,23 +2,25 @@ package com.usoftchina.saas.purchase.service.impl;
 
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+
 import com.usoftchina.saas.base.Result;
 import com.usoftchina.saas.base.service.CommonBaseServiceImpl;
+
+import com.usoftchina.saas.commons.api.MaxnumberService;
 import com.usoftchina.saas.commons.dto.BatchDealBaseDTO;
 import com.usoftchina.saas.commons.dto.DocBaseDTO;
 import com.usoftchina.saas.commons.dto.DocSavedDTO;
+import com.usoftchina.saas.context.BaseContextHolder;
 import com.usoftchina.saas.document.api.ProductApi;
 import com.usoftchina.saas.exception.BizException;
 import com.usoftchina.saas.exception.ExceptionCode;
 import com.usoftchina.saas.page.PageRequest;
-import com.usoftchina.saas.purchase.dto.PurchaseDTO;
-import com.usoftchina.saas.purchase.dto.PurchaseDetailDTO;
-import com.usoftchina.saas.purchase.dto.PurchaseFormDTO;
-import com.usoftchina.saas.purchase.dto.PurchaseReqDTO;
+import com.usoftchina.saas.purchase.dto.*;
 import com.usoftchina.saas.purchase.mapper.*;
 import com.usoftchina.saas.purchase.po.*;
 import com.usoftchina.saas.purchase.service.PurchaseService;
 import com.usoftchina.saas.utils.BeanMapper;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.StringUtils;
@@ -44,11 +46,11 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Autowired
     private ProductApi productApi;
     @Autowired
+    private MaxnumberService maxnumberService;
+    @Autowired
     private ProdInOutMapper prodInOutMapper;
     @Autowired
     private ProdIODetailMapper prodIODetailMapper;
-    
-    
 
     @Override
     public PageInfo<PurchaseList> getListData(PageRequest page, PurchaseReqDTO req) {
@@ -86,7 +88,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         if (null == formdata || null == formdata.getMain()){
             throw new BizException(500, "数据为空,请填写后再保存");
         }
-
+        //公司ID
+        Long companyId = BaseContextHolder.getCompanyId();
+        //人员Id
+        Long userId = BaseContextHolder.getUserId();
         //获取主表信息
         PurchaseDTO main = formdata.getMain();
         List<PurchaseDetailDTO> items = formdata.getItems();
@@ -98,12 +103,13 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         Long pu_id = main.getId();
         String pu_code = main.getPu_code();
         Purchase purchase = BeanMapper.map(main, Purchase.class);
+        purchase.setCompanyId(companyId);
+        purchase.setCreatorId(userId);
+        purchase.setCreateTime(new Date());
 
-        //编号获取 到时候确定处理
-        if (StringUtils.isEmpty(pu_code)) {
-            pu_code = "PU" + Math.random() * 1000;
-            purchase.setPu_code(pu_code);
-        }
+        //编号校验
+        pu_code = pushMaxnubmer(pu_code, pu_id);
+        purchase.setPu_code(pu_code);
         saveDTO.setCode(pu_code);
         //判断更新与保存动作
         if (!StringUtils.isEmpty(pu_id)) {
@@ -179,8 +185,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Override
     public void batchAudit(BatchDealBaseDTO baseDTOs) {
         if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
-                baseDTOs.getBaseDTOs().size() == 0)
+                baseDTOs.getBaseDTOs().size() == 0) {
             return;
+        }
+
         String validate = purchaseMapper.validateAudit(baseDTOs.getBaseDTOs());
         if (!StringUtils.isEmpty(validate)) {
             throw new BizException(500, "存在已审核单据,单据编号:" + validate);
@@ -193,8 +201,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Override
     public void batchDelete(BatchDealBaseDTO baseDTOs) {
         if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
-                baseDTOs.getBaseDTOs().size() == 0)
+                baseDTOs.getBaseDTOs().size() == 0) {
             return;
+        }
+
         for (DocBaseDTO base : baseDTOs.getBaseDTOs()) {
             singleDelete(base.getId());
         }
@@ -215,8 +225,10 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Override
     public void batchUnAudit(BatchDealBaseDTO baseDTOs) {
         if (null == baseDTOs || null == baseDTOs.getBaseDTOs() ||
-                baseDTOs.getBaseDTOs().size() == 0)
+                baseDTOs.getBaseDTOs().size() == 0) {
             return;
+        }
+
         String msg = purchaseMapper.validateBatchUnAudit(baseDTOs.getBaseDTOs());
         if (null != msg) {
             throw new BizException(500, "存在未审核单据,单据编号:" + msg);
@@ -238,13 +250,16 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Override
     public void openPurchase(long id) {
         List<PurchaseDetail> purchaseDetailList = purchasedetailMapper.selectByFK(id);
-        int partTurnCount = 0,turnCount = 0;            //部分入库、全部入库
+        //部分入库、全部入库
+        int partTurnCount = 0,turnCount = 0;
         if(purchaseDetailList != null && purchaseDetailList.size() > 0){
             for(PurchaseDetail purchaseDetail : purchaseDetailList){
-                if(purchaseDetail.getPd_acceptqty() >= purchaseDetail.getPd_qty()){     //入库数大于等于采购数
+                //入库数大于等于采购数
+                if(purchaseDetail.getPd_acceptqty() >= purchaseDetail.getPd_qty()){
                     turnCount++;
-                }else if(purchaseDetail.getPd_acceptqty() > 0 && purchaseDetail.getPd_acceptqty() < purchaseDetail.getPd_qty()){    //     0 < 入库数 < 采购数
+                    //     0 < 入库数 < 采购数
                     partTurnCount++;
+                }else if(purchaseDetail.getPd_acceptqty() > 0 && purchaseDetail.getPd_acceptqty() < purchaseDetail.getPd_qty()){
                 }
             }
             //构造更新对象
@@ -267,7 +282,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
     @Override
     public Result turnProdin(Long id) {
         Purchase purchase = getMapper().selectByPrimaryKey(id);
-        
+
         Integer count=0;
         double pdQty=0, pdYqty=0;
         //检查转单状态
@@ -355,6 +370,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         purchase.setPu_status(Status.AUDITED.getDisplay());
         purchase.setPu_statuscode(Status.AUDITED.name());
         purchase.setUpdateTime(new Date());
+        purchase.setUpdaterId(BaseContextHolder.getUserId());
         //更新存在字段
         purchaseMapper.updateByPrimaryKeySelective(purchase);
         //更新最新采购单价
@@ -368,6 +384,7 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         purchase.setPu_status(Status.UNAUDITED.getDisplay());
         purchase.setPu_statuscode(Status.UNAUDITED.name());
         purchase.setUpdateTime(new Date());
+        purchase.setUpdaterId(BaseContextHolder.getUserId());
         //更新存在字段
         purchaseMapper.updateByPrimaryKeySelective(purchase);
     }
@@ -390,4 +407,17 @@ public class PurchaseServiceImpl extends CommonBaseServiceImpl<PurchaseMapper, P
         }
         return list;
     }
+
+    /**
+    * @Description: 检验获取并更新单号
+    * @Param: [code, id]
+    * @return: java.lang.String
+    * @Author: guq
+    * @Date: 2018/10/19
+    */
+    private String pushMaxnubmer(String code, Long id) {
+        Integer count = id != null ?  purchaseMapper.validateCodeWhenUpdate(code, id) :
+                purchaseMapper.validateCodeWhenInsert(code);
+        return maxnumberService.pushMaxnubmer(count, code, "Purchase");
+    }
 }

+ 105 - 0
frontend/saas-web/app/view/document/kind/ChildForm.js

@@ -0,0 +1,105 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('KitchenSink.view.binding.ChildForm', {
+    extend: 'Ext.window.Window',
+    xtype: 'document-kind-childwin',
+    layout: 'fit',
+    modal: true,
+    width: 400,
+    height: 220,
+    listeners:{
+      show:function(w){
+          if(w.record){
+              w.down('form').loadRecord(w.record);
+          }
+
+      }
+    },
+    initComponent:function(){
+        var me=this;
+         Ext.apply(me,{
+           items:me.setFormItems()
+        });
+        me.callParent();
+    },
+
+    etc:{
+        customerkind:{
+            items:[{
+                xtype:'hidden',
+                name:'ck_id'
+            },{
+                xtype:'textfield',
+                name:'ck_kind',
+                allowBlank:false,
+                fieldLabel:'类型'
+            }],
+            keyField:'ck_id',
+            saveUrl:''
+        },
+        vendorkind:{
+            items:[{
+                xtype:'hidden',
+                name:'vk_id'
+            },{
+                xtype:'textfield',
+                name:'vk_kind',
+                allowBlank:false,
+                fieldLabel:'类型'
+            }],
+        },
+        productkind:{
+            items:[{
+                xtype:'hidden',
+                name:'pk_id'
+            },{
+                xtype:'textfield',
+                name:'pk_kind',
+                allowBlank:false,
+                fieldLabel:'类型'
+            }],
+        },
+        inoutkind:{
+
+        }
+    },
+    setFormItems:function() {
+        var me = this, kind = me.dataKind;
+        var conf = {
+            xtype: 'form',
+            bodyPadding: 10,
+            border: false,
+            modelValidation: true,
+            layout: {
+                type: 'vbox',
+                align: 'stretch'
+            },
+            defaults: {
+                xtype: 'textfield'
+            },
+            buttons: [{
+                text: '保存',
+                formBind:true,
+                handler: me.onSave,
+                scope:me
+            }, {
+                text: '取消',
+                handler: me.onCancel,
+                scope:me
+            }]
+        };
+        return Ext.apply(conf, me.etc[kind]);
+    },
+    onSave:function(){
+
+        var form=this.down('form');
+        alert('save');
+    },
+    onCancel:function(){
+        alert('cancel');
+        this.hide();
+    }
+
+
+});

+ 108 - 0
frontend/saas-web/app/view/document/kind/Kind.js

@@ -0,0 +1,108 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.kind.Kind', {
+    extend: 'Ext.panel.Panel',
+    xtype: 'document-kind',
+    controller:'document-kind',
+    viewModel: {
+        type: 'document-kind'
+    },
+    tbar: [{
+        xtype: 'label',
+        text: '类型:',
+        padding: '0 0 0 5'
+    }, {
+        xtype: 'segmentedbutton',
+        reference: 'dataKind',
+        value: 'customerkind',
+        items: [{
+            text: '客户',
+            value: 'customerkind'
+        }, {
+            text: '供应商',
+            value: 'vendorkind'
+        }, {
+            text: '商品',
+            value: 'productkind'
+        }, {
+            text: '收支',
+            value: 'inoutkind'
+        }],
+        listeners: {
+            toggle: 'onKindToggle'
+        }
+    },'->',
+        {
+          xtype:'button',
+          text:'新增',
+          listeners: {
+              click: 'onAdd'
+          }
+        },{
+          xtype:'button',
+          text:'刷新',
+          listeners: {
+             click: 'onRefresh'
+          }
+    }],
+    items:[{
+        xtype:'grid',
+        reference: 'document-kind-Grid',
+        margin: '10 0 0 0',
+        flex: 1,
+        bind:{
+            selection: '{selectedCompany}'
+        },
+        listeners:{
+            render:'loadDefualt'
+        }
+    }],
+    etc:{
+        customerkind:{
+            columns: [{
+                text: '客户类型',
+                dataIndex: 'ck_kind',
+                flex: 1
+            }],
+            formItems:[{
+               xtype:'hidden',
+               name:'ck_id'
+            },{
+                xtype:'textfield',
+                name:'ck_kind',
+                allowBlank:false,
+                fieldLabel:'类型'
+            }],
+            keyField:'ck_id',
+            reqUrl:''
+        },
+        vendorkind:{
+            columns: [{
+                text: '供应商类型',
+                dataIndex: 'vk_kind',
+                flex: 1
+            }],
+            keyField:'vk_id',
+            reqUrl:''
+        },
+        productkind:{
+            columns: [{
+                text: '物料类型',
+                dataIndex: 'pk_kind',
+                flex: 1
+            }],
+            keyField:'pk_id',
+        },
+        inoutkind:{
+            columns: [{
+                text: '收支类型',
+                dataIndex: 'io_kind',
+                flex: 1
+            }],
+            keyField:'io_id'
+        }
+    }
+})
+
+

+ 88 - 0
frontend/saas-web/app/view/document/kind/KindController.js

@@ -0,0 +1,88 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.kind.KindController', {
+    extend: 'Ext.app.ViewController',
+    alias: 'controller.document-kind',
+    loadDefualt:function(grid){
+        var me=this,
+            view = me.getView(),
+            vm = me.getViewModel(),
+            defaultKind=vm.getData()['dataKind'].value,
+            etc = view.etc[defaultKind];
+        grid.reconfigure(vm.getStore(defaultKind), me.insertActionColumn(etc.columns));
+    },
+    onKindToggle:function(container, button, pressed){
+       var me = this,
+            name = button.value,
+            view = me.getView(),
+            grid = me.lookup('document-kind-Grid'),
+            vm = me.getViewModel(),
+            etc = view.etc[name],
+            store=vm.getStore(name);
+       var columns=me.insertActionColumn(etc.columns);
+        grid.reconfigure(store, columns);
+        if(store) store.reload();
+        vm.set('title', button.text);
+    },
+    onAdd:function(){
+        var me=this,
+            dataKind=me.getViewModel().getData()['dataKind'].value;
+        me.createDialog(dataKind);
+    },
+    onRefresh:function(){
+
+    },
+    insertActionColumn:function(columns){
+        var me=this;
+        if(columns.length>0 && columns[0].xtype!='actioncolumn'){
+            return Ext.Array.insert(columns,0,[{
+                xtype:'actioncolumn',
+                items: [{
+                    tooltip: '编辑',
+                    iconCls: 'x-fa fa-pencil fa-fw',
+                    handler: me.onEdit,
+                    scope:this
+                },{
+                    text:'删除',
+                    iconCls:'x-fa fa-trash-o fa-fw',
+                    tooltip: '删除',
+                    handler: me.onDelete,
+                    scope:this
+                }]
+            }]);
+        }
+        return columns;
+    },
+    onEdit:function(grid,row,col){
+        var me=this,
+            view=me.getView(),
+            dataKind=me.getViewModel().getData()['dataKind'].value;
+            rec = grid.getStore().getAt(row);
+        var keyField=rec.get(view.etc[dataKind].keyField);
+        this.createDialog(dataKind,rec);
+    },
+    onDelete:function(grid,row,col){
+        var me=this,
+            view=me.getView(),
+            dataKind=me.getViewModel().getData()['dataKind'].value;
+        rec = grid.getStore().getAt(row);
+        var keyV=rec.get(view.etc[dataKind].keyField);
+        alert('删除ID:'+keyV);
+    },
+    createDialog: function(dataKind,record) {
+        var view = this.getView();var me=this;
+
+        this.isEdit = !!record;
+        this.dialog = view.add({
+            xtype: 'document-kind-childwin',
+            bind: {
+                title: record ? '修改{title}类型' : '新增{title}类型'
+            },
+            dataKind:dataKind,
+            record:record,
+            session: true
+        });
+        this.dialog.show();
+    }
+});

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

@@ -0,0 +1,57 @@
+/**
+ * Created by zhouy on 2018/10/18.
+ */
+Ext.define('saas.view.document.kind.KindModel', {
+    extend: 'Ext.app.ViewModel',
+    alias: 'viewmodel.document-kind',
+    data: {
+        title: '客户'
+    },
+    stores: {
+        customerkind: {
+            fields:[
+                {name: 'ck_id', type: 'int'},
+                {name: 'ck_kind',  type: 'string'}
+            ],
+            proxy: {
+                type: 'ajax',
+                url: 'resources/json/customer.json',
+                reader: {
+                    type: 'json'
+                }
+            },
+            pageSize: null,
+            autoLoad: true
+
+        },
+        vendorkind:{
+            fields:[
+                {name: 'vk_id', type: 'int'},
+                {name: 'vk_kind',  type: 'string'}
+            ],
+            proxy: {
+                type: 'ajax',
+                url: 'resources/json/vendor.json',
+                reader: {
+                    type: 'json'
+                }
+            },
+            pageSize: null,
+            autoLoad: false
+        },
+        productkind:{
+            fields:[
+                {name: 'pk_id', type: 'int'},
+                {name: 'pk_kind',  type: 'string'}
+            ],
+            data:[]
+        },
+        inoutkind:{
+            fields:[
+                {name: 'io_id', type: 'int'},
+                {name: 'io_kind',  type: 'string'}
+            ],
+            data:[]
+        },
+    }
+});

+ 7 - 0
frontend/saas-web/resources/json/customer.json

@@ -0,0 +1,7 @@
+[{
+  "ck_id":1,
+  "ck_kind":"kind1"
+},{
+  "ck_id":2,
+  "ck_kind":"kind2"
+}]

+ 7 - 0
frontend/saas-web/resources/json/vendor.json

@@ -0,0 +1,7 @@
+[{
+  "vk_id":1,
+  "vk_kind":"供应商类型1"
+},{
+  "vk_id":2,
+  "vk_kind":"供应商类型2"
+}]