Kaynağa Gözat

优化 停车位出租

wuxw 6 yıl önce
ebeveyn
işleme
532cb65322
17 değiştirilmiş dosya ile 502 ekleme ve 296 silme
  1. 0 1
      Api/src/main/java/com/java110/api/listener/parkingSpace/SellParkingSpaceListener.java
  2. 0 23
      WebService/src/main/java/com/java110/web/components/parkingSpace/HireParkingSpaceComponent.java
  3. 46 0
      WebService/src/main/java/com/java110/web/components/parkingSpace/HireParkingSpaceFeeComponent.java
  4. 68 21
      WebService/src/main/java/com/java110/web/smo/impl/CarServiceSMOImpl.java
  5. 63 4
      WebService/src/main/resources/components/carPackage/add-car/addCar.js
  6. 3 0
      WebService/src/main/resources/components/carPackage/sell-car/sellCar.html
  7. 1 1
      WebService/src/main/resources/components/feePackage/view-main-parkingSpace-fee/viewMainParkingSpaceFee.html
  8. 6 0
      WebService/src/main/resources/components/ownerPackage/addOwnerRoomBinding/addOwnerRoomBinding.js
  9. 2 1
      WebService/src/main/resources/components/ownerPackage/list-owner/listOwner.html
  10. 3 0
      WebService/src/main/resources/components/ownerPackage/list-owner/listOwner.js
  11. 6 2
      WebService/src/main/resources/components/ownerPackage/viewOwnerInfo/viewOwnerInfo.js
  12. 43 0
      WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space-fee/hireParkingSpaceFee.html
  13. 129 0
      WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space-fee/hireParkingSpaceFee.js
  14. 45 57
      WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space/hireParkingSpace.html
  15. 79 183
      WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space/hireParkingSpace.js
  16. 6 3
      WebService/src/main/resources/components/parkingSpacePackage/view-select-parkingSpace/viewSelectParkingSpace.js
  17. 2 0
      WebService/src/main/resources/views/hireParkingSpaceFlow.html

+ 0 - 1
Api/src/main/java/com/java110/api/listener/parkingSpace/SellParkingSpaceListener.java

@@ -242,7 +242,6 @@ public class SellParkingSpaceListener extends AbstractServiceApiDataFlowListener
         Assert.jsonObjectHaveKey(paramIn, "carColor", "未包含carColor");
         Assert.jsonObjectHaveKey(paramIn, "psId", "未包含psId");
         Assert.jsonObjectHaveKey(paramIn, "storeId", "未包含storeId");
-        Assert.jsonObjectHaveKey(paramIn, "storeId", "未包含storeId");
         Assert.jsonObjectHaveKey(paramIn, "receivedAmount", "未包含receivedAmount");
         Assert.jsonObjectHaveKey(paramIn, "sellOrHire", "未包含sellOrHire");
 

+ 0 - 23
WebService/src/main/java/com/java110/web/components/parkingSpace/HireParkingSpaceComponent.java

@@ -19,9 +19,6 @@ public class HireParkingSpaceComponent {
     private ICarServiceSMO carServiceSMOImpl;
 
 
-    @Autowired
-    private IFeeServiceSMO feeServiceSMOImpl;
-
     /**
      * 查询小区楼信息
      *
@@ -33,19 +30,6 @@ public class HireParkingSpaceComponent {
         return carServiceSMOImpl.saveCar(pd);
     }
 
-    /**
-     * 查询出售费用配置
-     *
-     * @param pd 页面封装对象 包含页面请求数据
-     * @return ResponseEntity对象返回给页面
-     */
-    public ResponseEntity<String> loadSellParkingSpaceConfigData(IPageData pd) {
-        String paramIn = pd.getReqData();
-        JSONObject paramObj = JSONObject.parseObject(paramIn);
-        return feeServiceSMOImpl.loadPropertyConfigFee(pd, "1001".equals(paramObj.getString("typeCd"))
-                ? FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE : FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE);
-    }
-
 
     public ICarServiceSMO getCarServiceSMOImpl() {
         return carServiceSMOImpl;
@@ -55,11 +39,4 @@ public class HireParkingSpaceComponent {
         this.carServiceSMOImpl = carServiceSMOImpl;
     }
 
-    public IFeeServiceSMO getFeeServiceSMOImpl() {
-        return feeServiceSMOImpl;
-    }
-
-    public void setFeeServiceSMOImpl(IFeeServiceSMO feeServiceSMOImpl) {
-        this.feeServiceSMOImpl = feeServiceSMOImpl;
-    }
 }

+ 46 - 0
WebService/src/main/java/com/java110/web/components/parkingSpace/HireParkingSpaceFeeComponent.java

@@ -0,0 +1,46 @@
+package com.java110.web.components.parkingSpace;
+
+import com.alibaba.fastjson.JSONObject;
+import com.java110.common.constant.FeeTypeConstant;
+import com.java110.core.context.IPageData;
+import com.java110.web.smo.IFeeServiceSMO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+
+/**
+ * @ClassName HireParkingSpaceFeeComponent
+ * @Description TODO
+ * @Author wuxw
+ * @Date 2019/9/14 17:51
+ * @Version 1.0
+ * add by wuxw 2019/9/14
+ **/
+@Component("hireParkingSpaceFee")
+public class HireParkingSpaceFeeComponent {
+
+    @Autowired
+    private IFeeServiceSMO feeServiceSMOImpl;
+
+
+    /**
+     * 查询出售费用配置
+     *
+     * @param pd 页面封装对象 包含页面请求数据
+     * @return ResponseEntity对象返回给页面
+     */
+    public ResponseEntity<String> loadSellParkingSpaceConfigData(IPageData pd) {
+        String paramIn = pd.getReqData();
+        JSONObject paramObj = JSONObject.parseObject(paramIn);
+        return feeServiceSMOImpl.loadPropertyConfigFee(pd, "1001".equals(paramObj.getString("typeCd"))
+                ? FeeTypeConstant.FEE_TYPE_SELL_UP_PARKING_SPACE : FeeTypeConstant.FEE_TYPE_SELL_DOWN_PARKING_SPACE);
+    }
+
+    public IFeeServiceSMO getFeeServiceSMOImpl() {
+        return feeServiceSMOImpl;
+    }
+
+    public void setFeeServiceSMOImpl(IFeeServiceSMO feeServiceSMOImpl) {
+        this.feeServiceSMOImpl = feeServiceSMOImpl;
+    }
+}

+ 68 - 21
WebService/src/main/java/com/java110/web/smo/impl/CarServiceSMOImpl.java

@@ -1,5 +1,6 @@
 package com.java110.web.smo.impl;
 
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.java110.common.constant.PrivilegeCodeConstant;
 import com.java110.common.constant.ResponseConstant;
@@ -90,6 +91,8 @@ public class CarServiceSMOImpl extends BaseComponentSMO implements ICarServiceSM
         super.checkUserHasPrivilege(pd, restTemplate, PrivilegeCodeConstant.PRIVILEGE_CAR);
 
         JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
+
+        JSONArray infos = paramIn.getJSONArray("data");
         String communityId = paramIn.getString("communityId");
         ResponseEntity responseEntity = super.getStoreInfo(pd, restTemplate);
         if (responseEntity.getStatusCode() != HttpStatus.OK) {
@@ -102,9 +105,20 @@ public class CarServiceSMOImpl extends BaseComponentSMO implements ICarServiceSM
         String storeTypeCd = JSONObject.parseObject(responseEntity.getBody().toString()).getString("storeTypeCd");
         //数据校验是否 商户是否入驻该小区
         super.checkStoreEnterCommunity(pd, storeId, storeTypeCd, communityId, restTemplate);
-        paramIn.put("userId", pd.getUserId());
-        paramIn.put("storeId", storeId);
-        responseEntity = this.callCenterService(restTemplate, pd, paramIn.toJSONString(),
+
+        JSONObject viewSelectParkingSpace = this.getObj(infos,"viewSelectParkingSpace");
+        JSONObject viewOwnerInfo = this.getObj(infos,"viewOwnerInfo");
+        JSONObject addCar = this.getObj(infos,"addCar");
+        JSONObject hireParkingSpaceFee = this.getObj(infos,"hireParkingSpaceFee");
+        JSONObject newParamIn = new JSONObject();
+        newParamIn.putAll(addCar);
+        newParamIn.putAll(hireParkingSpaceFee);
+        newParamIn.put("communityId", communityId);
+        newParamIn.put("ownerId", viewOwnerInfo.getString("ownerId"));
+        newParamIn.put("psId", viewSelectParkingSpace.getString("psId"));
+        newParamIn.put("userId", pd.getUserId());
+        newParamIn.put("storeId", storeId);
+        responseEntity = this.callCenterService(restTemplate, pd, newParamIn.toJSONString(),
                 ServiceConstant.SERVICE_API_URL + "/api/parkingSpace.sellParkingSpace",
                 HttpMethod.POST);
 
@@ -221,29 +235,43 @@ public class CarServiceSMOImpl extends BaseComponentSMO implements ICarServiceSM
     private void validateSaveCar(IPageData pd) {
 
         Assert.jsonObjectHaveKey(pd.getReqData(), "communityId", "未包含小区ID");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "ownerId", "请求报文中未包含ownerId");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "carNum", "请求报文中未包含carNum");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "carBrand", "请求报文中未包含carBrand");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "carType", "请求报文中未包含carType");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "carColor", "未包含carColor");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "psId", "未包含psId");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "receivedAmount", "未包含receivedAmount");
-        Assert.jsonObjectHaveKey(pd.getReqData(), "sellOrHire", "未包含sellOrHire");
 
-        JSONObject paramIn = JSONObject.parseObject(pd.getReqData());
-        Assert.hasLength(paramIn.getString("communityId"), "小区ID不能为空");
-        Assert.hasLength(paramIn.getString("ownerId"), "ownerId不能为空");
-        Assert.hasLength(paramIn.getString("psId"), "psId不能为空");
-        Assert.hasLength(paramIn.getString("receivedAmount"), "receivedAmount不能为空");
+        JSONObject info = JSONObject.parseObject(pd.getReqData());
+
+        JSONArray infos = info.getJSONArray("data");
+
+        if(infos.size() != 4){
+            throw new IllegalArgumentException("数据被篡改");
+        }
+
+        Assert.hasKeyByFlowData(infos, "viewSelectParkingSpace", "psId", "未包含psId");
+        Assert.hasKeyByFlowData(infos, "viewOwnerInfo", "ownerId", "必填,未包含业主信息");
+        Assert.hasKeyByFlowData(infos, "addCar", "carNum", "请求报文中未包含carNum");
+        Assert.hasKeyByFlowData(infos, "addCar", "carBrand", "请求报文中未包含carBrand");
+        Assert.hasKeyByFlowData(infos, "addCar", "carType", "请求报文中未包含carType");
+        Assert.hasKeyByFlowData(infos, "addCar", "carColor", "未包含carColor");
+        Assert.hasKeyByFlowData(infos, "hireParkingSpaceFee", "receivedAmount", "未包含receivedAmount");
+        Assert.hasKeyByFlowData(infos, "hireParkingSpaceFee", "sellOrHire", "未包含sellOrHire");
+
+       JSONObject viewSelectParkingSpace = this.getObj(infos,"viewSelectParkingSpace");
+       JSONObject viewOwnerInfo = this.getObj(infos,"viewOwnerInfo");
+       JSONObject addCar = this.getObj(infos,"addCar");
+       JSONObject hireParkingSpaceFee = this.getObj(infos,"hireParkingSpaceFee");
 
-        if(!"H".equals(paramIn.getString("sellOrHire"))
-                && !"S".equals(paramIn.getString("sellOrHire"))){
+
+        Assert.hasLength(info.getString("communityId"), "小区ID不能为空");
+        Assert.hasLength(viewOwnerInfo.getString("ownerId"), "ownerId不能为空");
+        Assert.hasLength(viewSelectParkingSpace.getString("psId"), "psId不能为空");
+        Assert.hasLength(hireParkingSpaceFee.getString("receivedAmount"), "receivedAmount不能为空");
+
+        if(!"H".equals(hireParkingSpaceFee.getString("sellOrHire"))
+                && !"S".equals(hireParkingSpaceFee.getString("sellOrHire"))){
             throw new IllegalArgumentException("入参错误,无法识别该操作");
         }
 
-        if("H".equals(paramIn.getString("sellOrHire"))){
-            Assert.jsonObjectHaveKey(pd.getReqData(), "cycles", "未包含cycles");
-            Assert.hasLength(paramIn.getString("cycles"), "cycles不能为空");
+        if("H".equals(hireParkingSpaceFee.getString("sellOrHire"))){
+            Assert.jsonObjectHaveKey(hireParkingSpaceFee, "cycles", "未包含cycles");
+            Assert.hasLength(hireParkingSpaceFee.getString("cycles"), "cycles不能为空");
         }
     }
 
@@ -283,6 +311,25 @@ public class CarServiceSMOImpl extends BaseComponentSMO implements ICarServiceSM
     }
 
 
+    private JSONObject getObj(JSONArray infos, String flowComponent) {
+
+        JSONObject serviceInfo = null;
+
+        for (int infoIndex = 0; infoIndex < infos.size(); infoIndex++) {
+
+            Assert.hasKeyAndValue(infos.getJSONObject(infoIndex), "flowComponent", "未包含服务流程组件名称");
+
+            if (flowComponent.equals(infos.getJSONObject(infoIndex).getString("flowComponent"))) {
+                serviceInfo = infos.getJSONObject(infoIndex);
+                Assert.notNull(serviceInfo, "未包含服务信息");
+                return serviceInfo;
+            }
+        }
+
+        throw new IllegalArgumentException("未找到组件编码为【" + flowComponent + "】数据");
+    }
+
+
     public RestTemplate getRestTemplate() {
         return restTemplate;
     }

+ 63 - 4
WebService/src/main/resources/components/carPackage/add-car/addCar.js

@@ -5,10 +5,12 @@
 
     vc.extends({
         propTypes: {
-            callBackComponent:vc.propTypes.string
+            callBackComponent:vc.propTypes.string,
+            callBackFunction:vc.propTypes.string
         },
         data:{
             addCarInfo:{
+                flowComponent:'addCar',
                 carNum:'',
                 carBrand:'',
                 carType:'',
@@ -20,8 +22,7 @@
             addCarInfo:{
                 deep: true,
                 handler:function(){
-                    vc.emit($props.callBackComponent,'notify',vc.component.addCarInfo);
-
+                    vc.component.saveAddCarInfo();
                 }
              }
         },
@@ -29,11 +30,69 @@
 
         },
         _initEvent:function(){
-
+            vc.on('addCar', 'onIndex', function(_index){
+                vc.component.addCarInfo.index = _index;
+            });
 
         },
         methods:{
+            addCarValidate:function(){
+                    return vc.validate.validate({
+                            addCarInfo:vc.component.addCarInfo
+                        },{
 
+                            'addCarInfo.carNum':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车牌号不能为空"
+                                },
+                                {
+                                    limit:"maxin",
+                                    param:"2,12",
+                                    errInfo:"车牌号不正确"
+                                }
+                            ],
+                            'addCarInfo.carBrand':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车品牌不能为空"
+                                },
+                                {
+                                    limit:"maxLength",
+                                    param:"50",
+                                    errInfo:"车品牌超出限制"
+                                }
+                            ],
+                            'addCarInfo.carType':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车类型不能为空"
+                                }
+                            ],
+                            'addCarInfo.carColor':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"车颜色不能为空"
+                                },
+                                {
+                                    limit:"maxLength",
+                                    param:"12",
+                                    errInfo:"车颜色超出限制"
+                                }
+                            ]
+                        });
+            },
+            saveAddCarInfo:function(){
+                if(vc.component.addCarValidate()){
+                    //侦听回传
+                    vc.emit($props.callBackComponent,$props.callBackFunction, vc.component.addCarInfo);
+                    return ;
+                }
+            }
 
         }
     });

+ 3 - 0
WebService/src/main/resources/components/carPackage/sell-car/sellCar.html

@@ -2,16 +2,19 @@
 
     <vc:create name="addCar"
                callBackComponent="sellCar"
+               callBackFunction="notify"
     ></vc:create>
 
     <!-- 选择 业主信息 -->
     <vc:create name="sellRoomSelectOwner"
                callBackComponent = "sellCar"
+               callBackFunction="notify"
     ></vc:create>
 
     <!-- 选择停车位 -->
     <vc:create name="viewSelectParkingSpace"
                callBackComponent="sellCar"
+               callBackFunction="notify"
     ></vc:create>
 
     <div class="row">

+ 1 - 1
WebService/src/main/resources/components/feePackage/view-main-parkingSpace-fee/viewMainParkingSpaceFee.html

@@ -81,7 +81,7 @@
     <vc:create name="searchParkingSpace"
                emitChooseParkingSpace="viewMainParkingSpaceFee"
                emitLoadData="propertyFee"
-               parkingSpaceFlag="'SH'"
+               parkingSpaceFlag="SH"
     ></vc:create>
     <vc:create name="propertyPay"
                emitReloadFee="viewMainParkingSpaceFee">

+ 6 - 0
WebService/src/main/resources/components/ownerPackage/addOwnerRoomBinding/addOwnerRoomBinding.js

@@ -40,6 +40,9 @@
                 vc.emit('viewFloorInfo', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
                 vc.emit('sellRoomSelectRoom', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
                 vc.emit('viewOwnerInfo', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
+                if(vc.component.hireParkingSpaceInfo.index == 2){
+                    vc.emit('viewOwnerInfo','callBackOwnerInfo',{});
+                }
 
             },
             _nextStep:function(){
@@ -54,6 +57,9 @@
                  vc.emit('viewFloorInfo', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
                 vc.emit('sellRoomSelectRoom', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
                 vc.emit('viewOwnerInfo', 'onIndex', vc.component.addOwnerRoomBindingInfo.index);
+                if(vc.component.hireParkingSpaceInfo.index == 2){
+                    vc.emit('viewOwnerInfo','callBackOwnerInfo',{});
+                }
 
             },
             _finishStep:function(){

+ 2 - 1
WebService/src/main/resources/components/ownerPackage/list-owner/listOwner.html

@@ -111,7 +111,8 @@
                                             v-on:click="_openAddOwnerRoom(owner)">添加房屋</a>
                                         <a class="dropdown-item" href="#">删除房屋</a>
                                         <div class="dropdown-divider"></div>
-                                        <a class="dropdown-item" href="#">车位出租</a>
+                                        <a class="dropdown-item" href="#"
+                                            v-on:click="_openHireParkingSpace(owner)">车位出租</a>
                                         <a class="dropdown-item" href="#">车位出售</a>
                                     </div>
                                 </div>

+ 3 - 0
WebService/src/main/resources/components/ownerPackage/list-owner/listOwner.js

@@ -72,6 +72,9 @@
             },
             _openAddOwnerRoom:function(_owner){
                 vc.jumpToPage("/flow/addOwnerRoomBindingFlow?ownerId="+_owner.ownerId);
+            },
+            _openHireParkingSpace:function(_owner){
+                vc.jumpToPage("/flow/hireParkingSpaceFlow?ownerId="+_owner.ownerId);
             }
         }
     })

+ 6 - 2
WebService/src/main/resources/components/ownerPackage/viewOwnerInfo/viewOwnerInfo.js

@@ -25,9 +25,13 @@
         },
         _initEvent:function(){
             vc.on('viewOwnerInfo','onIndex',function(_index){
-                if(_index == 2){
+                /*if(_index == 2){
                    vc.emit($props.callBackListener,$props.callBackFunction,vc.component.viewOwnerInfo);
-                }
+                }*/
+            });
+
+            vc.on('viewOwnerInfo','callBackOwnerInfo',function(_info){
+                vc.emit($props.callBackListener,$props.callBackFunction,vc.component.viewOwnerInfo);
             });
 
         },

+ 43 - 0
WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space-fee/hireParkingSpaceFee.html

@@ -0,0 +1,43 @@
+<div class="row">
+    <div class="col-lg-12">
+        <div class="ibox ">
+            <div class="ibox-title">
+                <h5>收费信息</h5>
+            </div>
+            <div class="ibox-content">
+                <div>
+                    <div>
+                        <div class="form-group row">
+                            <label class="col-sm-2 col-form-label">缴费周期</label>
+                            <div class="col-sm-10">
+                                <select class="custom-select" v-model="hireParkingSpaceFeeInfo.cycles">
+                                    <option selected  disabled value="">必填,请选择缴费周期</option>
+                                    <option value="1">1个月</option>
+                                    <option value="2">2个月</option>
+                                    <option value="3">3个月</option>
+                                    <option value="4">4个月</option>
+                                    <option value="5">5个月</option>
+                                    <option value="6">6个月</option>
+                                    <option value="12">一年</option>
+                                    <option value="24">两年</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-sm-2 col-form-label">应收费用</label>
+                            <div class="col-sm-10">
+                                <input v-model="hireParkingSpaceFeeInfo.receivableAmount" type="text" disabled class="form-control">
+                            </div>
+                        </div>
+                        <div class="form-group row">
+                            <label class="col-sm-2 col-form-label">实收费用</label>
+                            <div class="col-sm-10">
+                                <input v-model="hireParkingSpaceFeeInfo.receivedAmount" type="text" placeholder="必填,请填写实际收取费用" class="form-control">
+                            </div>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>

+ 129 - 0
WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space-fee/hireParkingSpaceFee.js

@@ -0,0 +1,129 @@
+/**
+    出租车辆费用
+**/
+(function(vc){
+
+    vc.extends({
+        propTypes: {
+            callBackComponent:vc.propTypes.string,
+            callBackFunction:vc.propTypes.string
+        },
+        data:{
+            hireParkingSpaceFeeInfo:{
+                flowComponent:'hireParkingSpaceFee',
+                cycles:"",
+                receivableAmount: "0.00",
+                receivedAmount:"0.00",
+                additionalAmount:'0.00',
+                sellOrHire:"H",
+                typeCd:'',
+            }
+        },
+        watch:{
+            hireParkingSpaceFeeInfo:{
+                deep: true,
+                handler:function(){
+                    //console.log("hireParkingSpaceFeeInfo 被调用")
+                    vc.component.saveHireParkingSpaceFee();
+                }
+             },
+             "hireParkingSpaceFeeInfo.cycles":{//深度监听,可监听到对象、数组的变化
+                 handler(val, oldVal){
+                     vc.component.computeReceivableAmount(val);
+                 },
+                 deep:true
+             }
+
+
+        },
+        _initMethod:function(){
+
+        },
+        _initEvent:function(){
+            vc.on('hireParkingSpaceFee', 'onIndex', function(_index){
+                vc.component.hireParkingSpaceFeeInfo.index = _index;
+            });
+
+            vc.on('hireParkingSpaceFee', 'parkingSpaceInfo',function(_parkingSpaceInfo){
+                vc.component.hireParkingSpaceFeeInfo.typeCd = _parkingSpaceInfo.typeCd;
+                vc.component._loadFireParkingSpaceFee();
+            });
+
+        },
+        methods:{
+            hireParkingSpaceFeeValidate:function(){
+                    return vc.validate.validate({
+                            hireParkingSpaceFeeInfo:vc.component.hireParkingSpaceFeeInfo
+                        },{
+
+                            'hireParkingSpaceFeeInfo.cycles':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"缴费周期不能为空"
+                                }
+                            ],
+                            'hireParkingSpaceFeeInfo.receivedAmount':[
+                                {
+                                    limit:"required",
+                                    param:"",
+                                    errInfo:"实收金额不能为空"
+                                },
+                                {
+                                    limit:"money",
+                                    param:"",
+                                    errInfo:"实收金额格式错误,如3.00"
+                                }
+                            ]
+                        });
+            },
+            saveHireParkingSpaceFee:function(){
+                if(vc.component.hireParkingSpaceFeeValidate()){
+                    //侦听回传
+                    vc.emit($props.callBackComponent,$props.callBackFunction, vc.component.hireParkingSpaceFeeInfo);
+                    return ;
+                }
+            },
+            _loadFireParkingSpaceFee:function(){
+                //
+                var param = {
+                        params:{
+                            communityId:vc.getCurrentCommunity().communityId,
+                            typeCd:vc.component.hireParkingSpaceFeeInfo.typeCd
+                        }
+                    };
+                    vc.http.get(
+                        'hireParkingSpaceFee',
+                        'loadSellParkingSpaceConfigData',
+                         param,
+                         function(json,res){
+                            //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                            if(res.status == 200){
+                                //关闭model
+                                var configFee = JSON.parse(json);
+                                vc.component.hireParkingSpaceFeeInfo.additionalAmount = configFee.additionalAmount;
+                                //重新算费
+                                vc.component.computeReceivableAmount(vc.component.hireParkingSpaceFeeInfo.cycles);
+                                return ;
+                            }
+                            vc.message(json);
+                         },
+                         function(errInfo,error){
+                            console.log('请求失败处理');
+
+                            vc.message(errInfo);
+                         });
+
+            },
+            computeReceivableAmount:function(_cycles){
+                        if(_cycles == null || _cycles == "" || _cycles == undefined){
+                            _cycles = "0.00";
+                        }
+                        vc.component.hireParkingSpaceFeeInfo.receivableAmount = (parseFloat(vc.component.hireParkingSpaceFeeInfo.additionalAmount) * parseFloat(_cycles)).toFixed(2);
+                        vc.component.hireParkingSpaceFeeInfo.receivedAmount = vc.component.hireParkingSpaceFeeInfo.receivableAmount;
+            }
+
+        }
+    });
+
+})(window.vc);

+ 45 - 57
WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space/hireParkingSpace.html

@@ -1,66 +1,54 @@
-<div id="component" >
+<div id="component">
 
-    <vc:create name="addCar"
-               callBackComponent="hireParkingSpace"
-    >
-    </vc:create>
+    <div class="java110_step">
+        <div id="step"></div>
+    </div>
 
-    <!-- 选择 业主信息 -->
-    <vc:create name="sellRoomSelectOwner"
-               callBackComponent = "hireParkingSpace"
-    ></vc:create>
+    <!-- 选择 应用信息 -->
+    <div v-if="hireParkingSpaceInfo.index == 0">
 
-    <!-- 选择停车位 -->
-    <vc:create name="viewSelectParkingSpace"
-               callBackComponent="hireParkingSpace"
-    ></vc:create>
+        <!-- 选择停车位 -->
+        <vc:create name="viewSelectParkingSpace"
+                   callBackComponent="hireParkingSpace"
+                   callBackFunction="notify"
+        ></vc:create>
+    </div>
+    <div v-if="hireParkingSpaceInfo.index == 1">
+        <vc:create name="viewOwnerInfo"
+                   callBackListener="hireParkingSpace"
+                   callBackFunction="notify"
+        ></vc:create>
+    </div>
+    <div v-if="hireParkingSpaceInfo.index == 2">
+        <vc:create name="addCar"
+                   callBackComponent="hireParkingSpace"
+                   callBackFunction="notify"
+        >
 
-    <div class="row">
-        <div class="col-lg-12">
-            <div class="ibox ">
-                <div class="ibox-title">
-                    <h5>收费信息</h5>
-                </div>
-                <div class="ibox-content">
-                    <div>
-                        <div>
-                            <div class="form-group row">
-                                <label class="col-sm-2 col-form-label">缴费周期</label>
-                                <div class="col-sm-10">
-                                    <select class="custom-select" v-model="hireParkingSpace.cycles">
-                                        <option selected  disabled value="">必填,请选择缴费周期</option>
-                                        <option value="1">1个月</option>
-                                        <option value="2">2个月</option>
-                                        <option value="3">3个月</option>
-                                        <option value="4">4个月</option>
-                                        <option value="5">5个月</option>
-                                        <option value="6">6个月</option>
-                                        <option value="12">一年</option>
-                                        <option value="24">两年</option>
-                                    </select>
-                                </div>
-                            </div>
-                            <div class="form-group row">
-                                <label class="col-sm-2 col-form-label">应收费用</label>
-                                <div class="col-sm-10">
-                                    <input v-model="hireParkingSpace.receivableAmount" type="text" disabled class="form-control">
-                                </div>
-                            </div>
-                            <div class="form-group row">
-                                <label class="col-sm-2 col-form-label">实收费用</label>
-                                <div class="col-sm-10">
-                                    <input v-model="hireParkingSpace.receivedAmount" type="text" placeholder="必填,请填写实际收取费用" class="form-control">
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
+        </vc:create>
     </div>
 
-    <div style="height:50px">
-        <button class="btn btn-primary float-right" type="button" v-on:click="doHireParkingSpace()" ><i class="fa fa-check"></i>&nbsp;我要出租</button>
+    <div v-if="hireParkingSpaceInfo.index == 3">
+        <vc:create name="hireParkingSpaceFee"
+                   callBackComponent="hireParkingSpace"
+                   callBackFunction="notify"
+        ></vc:create>
+    </div>
+
+
+    <div class="row">
+        <div class="col-md-10"></div>
+        <div class="col-md-2 " style="margin-bottom:10px; text-align:right">
+            <button type="button" class="btn btn-secondary" v-on:click="_prevStep()">上一步</button>
+            <button v-if="hireParkingSpaceInfo.index != 3" type="button" class="btn btn-primary"
+                    style="margin-left:10px;"
+                    v-on:click="_nextStep()">下一步
+            </button>
+            <button v-if="hireParkingSpaceInfo.index == 3" type="button" class="btn btn-primary"
+                    style="margin-left:10px;"
+                    v-on:click="_finishStep()">出租
+            </button>
+        </div>
     </div>
 
 </div>

+ 79 - 183
WebService/src/main/resources/components/parkingSpacePackage/hire-parking-space/hireParkingSpace.js

@@ -4,208 +4,104 @@
 (function(vc){
     vc.extends({
         data:{
-            hireParkingSpace:{
-                ownerId:'',
-                carNum:'',
-                carBrand:'',
-                carType:'',
-                carColor:'',
-                carRemark:"",
-                cycles:"",
-                psId:'',
-                typeCd:'',
-                additionalAmount:'0.00',
-                receivableAmount: "0.00",
-                receivedAmount:"0.00",
-                sellOrHire:"H",
-                ownerInfo:{
-                    ownerId:"",
-                    name:"",
-                    age:"",
-                    sex:"",
-                    userName:"",
-                    remark:"",
-                    link:"",
-                },
+            hireParkingSpaceInfo:{
+                $step:{},
+                index:0,
+                infos:[],
             }
         },
         _initMethod:function(){
-
-        },
-        watch:{
-                    "hireParkingSpace.cycles":{//深度监听,可监听到对象、数组的变化
-                        handler(val, oldVal){
-                            vc.component.computeReceivableAmount(val);
-                        },
-                        deep:true
-                    }
+            vc.component._initStep();
         },
-        _initEvent:function(){
-            vc.on('hireParkingSpace','notify',function(_param){
-                  vc.copyObject(_param,vc.component.hireParkingSpace);
-                  vc.copyObject(_param,vc.component.hireParkingSpace.ownerInfo);
 
+        _initEvent:function(){
 
-                  if(_param.hasOwnProperty("typeCd")){
-                        vc.component._loadFireParkingSpaceFee();
-                  }
+           vc.on("hireParkingSpace", "notify", function(_info){
+                vc.component.hireParkingSpaceInfo.infos[vc.component.hireParkingSpaceInfo.index] = _info;
 
+                /*if(vc.component.hireParkingSpaceInfo.index == 0){
+                    vc.emit('searchRoom','listenerFloorInfo',_info);
+                }*/
             });
+
         },
         methods:{
-            sellCarValidate:function(){
-                        return vc.validate.validate({
-                            hireParkingSpace:vc.component.hireParkingSpace
-                        },{
-                            'hireParkingSpace.ownerId':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"未选择业主"
-                                }
-                            ],
-                            'hireParkingSpace.psId':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"未选择停车位"
-                                }
-                            ],
-                            'hireParkingSpace.carNum':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"车牌号不能为空"
-                                },
-                                {
-                                    limit:"maxin",
-                                    param:"2,12",
-                                    errInfo:"车牌号不正确"
-                                }
-                            ],
-                            'hireParkingSpace.carBrand':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"车品牌不能为空"
-                                },
-                                {
-                                    limit:"maxLength",
-                                    param:"50",
-                                    errInfo:"车品牌超出限制"
-                                }
-                            ],
-                            'hireParkingSpace.carType':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"车类型不能为空"
-                                }
-                            ],
-                            'hireParkingSpace.carColor':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"车颜色不能为空"
-                                },
-                                {
-                                    limit:"maxLength",
-                                    param:"12",
-                                    errInfo:"车颜色超出限制"
-                                }
-                            ],
-                            'hireParkingSpace.cycles':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"缴费周期不能为空"
-                                }
-                            ],
-                            'hireParkingSpace.receivedAmount':[
-                                {
-                                    limit:"required",
-                                    param:"",
-                                    errInfo:"实收金额不能为空"
-                                },
-                                {
-                                    limit:"money",
-                                    param:"",
-                                    errInfo:"实收金额格式错误,如3.00"
-                                }
-                            ]
-                        });
-             },
+            _initStep:function(){
+                vc.component.hireParkingSpaceInfo.$step = $("#step");
+                vc.component.hireParkingSpaceInfo.$step.step({
+                    index: 0,
+                    time: 500,
+                    title: ["选择车位","业主信息","车辆信息","收费信息"]
+                });
+                vc.component.hireParkingSpaceInfo.index = vc.component.hireParkingSpaceInfo.$step.getIndex();
+            },
+            _prevStep:function(){
+                vc.component.hireParkingSpaceInfo.$step.prevStep();
+                vc.component.hireParkingSpaceInfo.index = vc.component.hireParkingSpaceInfo.$step.getIndex();
 
-            doHireParkingSpace:function(){
-                //
-                if(!vc.component.sellCarValidate()){
-                    vc.message(vc.validate.errInfo);
-                    return ;
+                vc.emit('viewSelectParkingSpace', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('viewOwnerInfo', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('addCar', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('parkingSpaceFee', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+
+                if(vc.component.hireParkingSpaceInfo.index == 1){
+                    vc.emit('viewOwnerInfo','callBackOwnerInfo',{});
                 }
-                //改remark
-                vc.component.hireParkingSpace.remark = vc.component.hireParkingSpace.carRemark;
 
-                vc.component.hireParkingSpace.communityId=vc.getCurrentCommunity().communityId;
-            vc.http.post(
-                    'hireParkingSpace',
-                    'sell',
-                    JSON.stringify(vc.component.hireParkingSpace),
-                    {
-                        emulateJSON:true
-                     },
-                     function(json,res){
-                        //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
-                        if(res.status == 200){
-                            //关闭model
-                            vc.jumpToPage("/flow/ownerParkingSpaceFlow?" + vc.objToGetParam(vc.component.hireParkingSpace.ownerInfo));
-                            return ;
-                        }
-                        vc.message(json);
-                     },
-                     function(errInfo,error){
-                        console.log('请求失败处理');
+            },
+            _nextStep:function(){
+                var _currentData = vc.component.hireParkingSpaceInfo.infos[vc.component.hireParkingSpaceInfo.index];
+                if( _currentData == null || _currentData == undefined){
+                    vc.message("请选择或填写必选信息");
+                    return ;
+                }
+                vc.component.hireParkingSpaceInfo.$step.nextStep();
+                vc.component.hireParkingSpaceInfo.index = vc.component.hireParkingSpaceInfo.$step.getIndex();
 
-                        vc.message(errInfo);
-                     });
+                vc.emit('viewSelectParkingSpace', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('viewOwnerInfo', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('addCar', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                vc.emit('parkingSpaceFee', 'onIndex', vc.component.hireParkingSpaceInfo.index);
+                if(vc.component.hireParkingSpaceInfo.index == 1){
+                    vc.emit('viewOwnerInfo','callBackOwnerInfo',{});
+                }
 
             },
-            _loadFireParkingSpaceFee:function(){
-                //
+            _finishStep:function(){
+
+
+                var _currentData = vc.component.hireParkingSpaceInfo.infos[vc.component.hireParkingSpaceInfo.index];
+                if( _currentData == null || _currentData == undefined){
+                    vc.message("请选择或填写必选信息");
+                    return ;
+                }
+
                 var param = {
-                        params:{
-                            communityId:vc.getCurrentCommunity().communityId,
-                            typeCd:vc.component.hireParkingSpace.typeCd
-                        }
-                    };
-                    vc.http.get(
-                        'hireParkingSpace',
-                        'loadSellParkingSpaceConfigData',
-                         param,
-                         function(json,res){
-                            //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
-                            if(res.status == 200){
-                                //关闭model
-                                var configFee = JSON.parse(json);
-                                vc.component.hireParkingSpace.additionalAmount = configFee.additionalAmount;
-                                //重新算费
-                                vc.component.computeReceivableAmount(vc.component.hireParkingSpace.cycles);
-                                return ;
-                            }
-                            vc.message(json);
-                         },
-                         function(errInfo,error){
-                            console.log('请求失败处理');
+                    communityId:vc.getCurrentCommunity().communityId,
+                    data:vc.component.hireParkingSpaceInfo.infos
+                }
 
-                            vc.message(errInfo);
-                         });
+               vc.http.post(
+                   'hireParkingSpace',
+                   'sell',
+                   JSON.stringify(param),
+                   {
+                       emulateJSON:true
+                    },
+                    function(json,res){
+                       //vm.menus = vm.refreshMenuActive(JSON.parse(json),0);
+                       if(res.status == 200){
+                           //关闭model
+                           vc.jumpToPage("/flow/ownerParkingSpaceFlow?" + vc.objToGetParam(JSON.parse(json)));
+                           return ;
+                       }
+                       vc.message(json);
+                    },
+                    function(errInfo,error){
+                       console.log('请求失败处理');
 
-            },
-            computeReceivableAmount:function(_cycles){
-                        if(_cycles == null || _cycles == "" || _cycles == undefined){
-                            _cycles = "0.00";
-                        }
-                        vc.component.hireParkingSpace.receivableAmount = (parseFloat(vc.component.hireParkingSpace.additionalAmount) * parseFloat(_cycles)).toFixed(2);
-                        vc.component.hireParkingSpace.receivedAmount = vc.component.hireParkingSpace.receivableAmount;
+                       vc.message(errInfo);
+                    });
             }
         }
     });

+ 6 - 3
WebService/src/main/resources/components/parkingSpacePackage/view-select-parkingSpace/viewSelectParkingSpace.js

@@ -5,10 +5,12 @@
 
     vc.extends({
         propTypes: {
-            callBackComponent:vc.propTypes.string
+            callBackComponent:vc.propTypes.string,
+            callBackFunction:vc.propTypes.string
         },
         data:{
             parkingSpaceInfo:{
+                flowComponent:'viewSelectParkingSpace',
                 num:'',
                 typeCd:'',
                 area:'',
@@ -23,8 +25,9 @@
         },
         _initEvent:function(){
             vc.on('viewSelectParkingSpace','chooseParkingSpace',function(_parkingSpace){
-                vc.component.parkingSpaceInfo = _parkingSpace;
-                vc.emit($props.callBackComponent,'notify',_parkingSpace);
+                vc.copyObject(_parkingSpace, vc.component.parkingSpaceInfo);
+                vc.emit($props.callBackComponent,$props.callBackFunction,vc.component.parkingSpaceInfo);
+                vc.emit('hireParkingSpaceFee', 'parkingSpaceInfo',vc.component.parkingSpaceInfo);
             });
 
         },

+ 2 - 0
WebService/src/main/resources/views/hireParkingSpaceFlow.html

@@ -7,6 +7,8 @@
     <meta charset="UTF-8"/>
     <title>出租停车位|java110</title>
     <vc:create name="commonTop"></vc:create>
+    <link href="/css/jquery.step.css" rel="stylesheet"/>
+    <script src="/js/jquery.step.min.js" ></script>
 </head>
 <body>
 <vc:create name="bodyTop"></vc:create>