Browse Source

车辆白名单,车辆优惠券

zhengkaixin 4 years ago
parent
commit
eeefacaf41

+ 8 - 2
src/api/base/parkingCoupon.js

@@ -28,11 +28,17 @@ function update(formModel) {
     }
   });
 }
-
 function remove(id) {
   return request.post(constant.serverUrl + "/base/parkingCoupon/delete/" + id);
 }
 
+function pcGiveDiscountTicket(formModel) {
+  return request.post(constant.serverUrl + "/base/parkingMerchant/pcGiveDiscountTicket?carNumber="+formModel.carNumber );
+}
+function parkingMemberDetail() {
+  return request.post(constant.serverUrl + "/base/parkingMerchant/parkingMemberDetail/" );
+}
+
 function batchRemove(idList) {
   return request.post(constant.serverUrl + "/base/parkingCoupon/batchDelete", idList, {
     headers: {
@@ -47,5 +53,5 @@ function exportXls(formData) {
 }
 
 export default {
-  pageList, create, edit, add, update, remove, batchRemove,exportXls
+  pageList, create, edit, add, update, remove, batchRemove,exportXls,parkingMemberDetail,pcGiveDiscountTicket
 }

+ 42 - 0
src/api/base/parkingWhite.js

@@ -0,0 +1,42 @@
+import request from '@/utils/request'
+import constant from '@/constant'
+import Qs from 'qs';
+
+function parkingMemberDetail() {
+  return request.post(constant.serverUrl + "/base/parkingMerchant/parkingMemberDetail/" );
+}
+
+function create() {
+  return request.get(constant.serverUrl + "/base/parkingMember/create");
+}
+
+
+function edit(id) {
+  return request.post(constant.serverUrl + "/base/parkingMember/parkingMemberPageList?id=" + id);
+}
+function editsubmit(formData) {
+  return request.post(constant.serverUrl + "/base/parkingMember/editParkingMember" , Qs.stringify(formData), {
+    headers: {
+      "Content-Type": "application/x-www-form-urlencoded"
+    }
+  });
+}
+function pageList(formData){
+  return request.post(constant.serverUrl + "/base/parkingMember/parkingMemberPageList", formData);
+}
+ 
+function remove(id) {
+  return request.post(constant.serverUrl + "/base/parkingMember/deleteParkingMember?id=" + id);
+}
+
+function pcGiveParkingMember(formData) {
+  return request.post(constant.serverUrl + "/base/parkingMember/pcGiveParkingMember", Qs.stringify(formData), {
+    headers: {
+      "Content-Type": "application/x-www-form-urlencoded"
+    }
+  });
+}
+//edit, add, update, remove, batchRemove,exportXls
+export default {
+  pageList, create,parkingMemberDetail,pcGiveParkingMember,remove,edit,editsubmit
+}

+ 3 - 1
src/constant.js

@@ -3,5 +3,7 @@ var Constant = {
 	//根据当前环境修改
 	serverUrl:process.env.VUE_APP_BACKEND_URL
 };
-
+if(process.env.NODE_ENV=='development'){
+	Constant.serverUrl="http://192.168.33.120:8088/jp-housekeeper-server";
+}
 export default Constant;

+ 13 - 0
src/routers/modules/base.js

@@ -142,6 +142,19 @@ var routers = [
                         title: '车位申请'
                 }
         },
+		{
+		        //车辆白名单
+		        path: '/base/parkingWhite/list',
+		        name: 'BaseParkingWhiteList',
+		        // route level code-splitting
+		        // this generates a separate chunk (about.[hash].js) for this route
+		        // which is lazy-loaded when the route is visited.
+		        component: () => import('@/views/base/parkingWhite-list.vue'),
+		        meta: {
+		                roles: ["admin"],
+		                title: '车位申请'
+		        }
+		},
         {
                 //围墙报警
                 path: '/base/alarmInfoFence/list',

+ 132 - 0
src/views/base/parkingCoupon-detail.vue

@@ -0,0 +1,132 @@
+
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+}
+</style>
+<template>
+  <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    :modal-append-to-body="false"
+    style="text-align: left"
+    @close="closeDialog"
+    :close-on-click-modal="false"
+  >
+    <div class="user-panel" v-loading="loading">
+      <el-form
+        ref="form"
+        :model="formModel"
+        :rules="ruleValidate"
+        :label-width="'180px'"
+      >
+	  
+	  <el-form-item label="车牌号码" prop="carNumber">
+	    <el-input
+	      v-model="formModel.carNumber"
+	      placeholder="请输入车牌号码"
+	      style="width: 180px"
+	    ></el-input>
+	  </el-form-item>
+       <el-form-item label="授权商户">
+         {{merchantName}}
+       </el-form-item>
+		<el-form-item label="抵扣卷金额">
+		  {{reduce}}元
+		</el-form-item>
+		
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="closeDialog">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitting"
+        >确定赠送</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import parkingCouponApi from "@/api/base/parkingCoupon";
+import dataDictionaryApi from "@/api/sys/dataDictionary";
+import companyInfoApi from "@/api/base/companyInfo";
+
+export default {
+  components: {
+   
+  },
+  props: [ "title", "reduce","merchantName"],
+  data() {
+    return {
+	   myMemberLeaveTime:[{required:true,message:"请选择离场时间", trigger: "blur"}],
+      formModel: {
+		  carNumber:"鄂D"
+	  },
+      ruleValidate: {
+        carNumber: [
+          { required: true, message: "车牌号码不能为空", trigger: "blur" },
+        ],
+      
+		
+      },
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      typeResult: [],
+      companyResult: [],
+	  props: {
+	    // 配置项(必选)
+	    value: "id",
+	    label: "name",
+	    children: "children",
+	  },
+    };
+  },
+  created() {
+    var self = this;
+
+   
+    
+  },
+  methods: {
+    closeDialog() {
+      this.$emit("close", false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      this.$refs["form"].validate((valid) => {
+        if (valid) {
+          (function () {
+            var id = self.formModel.id;
+
+             return parkingCouponApi.pcGiveDiscountTicket(self.formModel);
+             
+          })().then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              self.$message({
+                message: "保存成功!",
+                type: "success",
+              });
+
+              self.$emit("close", true);
+            } else {
+              self.$message({
+                message: jsonData.message + "",
+                type: "warning",
+              });
+
+              //self.$emit("close", false);
+            }
+          });
+        }
+      });
+    },
+  },
+  mounted: function () {
+    
+  },
+};
+</script>

+ 48 - 5
src/views/base/parkingCoupon-list.vue

@@ -3,7 +3,7 @@
     <el-breadcrumb separator=">">
       <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
       <el-breadcrumb-item>
-        <a href="#">系统管理</a>
+        <a href="#">停车场管理</a>
       </el-breadcrumb-item>
       <el-breadcrumb-item>
         <a href="/parkingCoupon">停车劵使用明细</a>
@@ -83,6 +83,16 @@
     </el-form>
     <el-divider></el-divider>
     <el-row class="button-group">
+		<el-button
+		  type="primary"
+		  size="small"
+		  plain
+		  icon="el-icon-circle-plus"
+		  @click="handleAdd"
+		  v-show="detail.enableCoupon"
+		  >录入车辆</el-button
+		>
+		
       <el-button
         type="primary"
         size="small"
@@ -100,7 +110,6 @@
       @sort-change="sortChange"
       @selection-change="handleSelectionChange"
     >
-      <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column
         type="index"
         label="序号"
@@ -162,6 +171,15 @@
       @size-change="pageSizeChange"
       layout="total, sizes, prev, pager, next, jumper"
     ></el-pagination>
+	
+	<parkingCoupon-detail
+	  v-if="showModal"
+	
+	  :merchantName="merchantName"
+	  :reduce="reduce"
+	  @close="onDetailModalClose"
+	></parkingCoupon-detail>
+	
   </div>
 </template>
 <script>
@@ -171,6 +189,8 @@ import dataDictionaryApi from "@/api/sys/dataDictionary";
 import companyInfoApi from "@/api/base/companyInfo";
 import SelectTree from "@/components/SelectTree";
 import NProgress from "nprogress"; // progress bar
+import ParkingCouponDetail from "./parkingCoupon-detail";
+
 import "nprogress/nprogress.css"; // progress bar style
 
 export default {
@@ -179,6 +199,7 @@ export default {
     var self = this;
 
     return {
+	  detail:{},
       queryModel: {
         id: "",
         merchantName: "",
@@ -225,9 +246,28 @@ export default {
     });
   },
   methods: {
+	 
     indexMethod(index) {
       return (this.pageIndex - 1) * this.pageSize + (index + 1);
     },
+	init(){
+		var self = this;
+		
+		//self.loading = true;
+		
+		parkingCouponApi
+		  .parkingMemberDetail()
+		  .then(function (response) {
+		    //self.loading = false;
+			
+		     self.detail = response.data.data;
+		
+		  })
+		  .catch((error) => {
+		   // self.loading = false;
+		    // self.$message.error(error + "");
+		  });
+	},
     changePage(pageIndex) {
       var self = this;
 
@@ -303,8 +343,9 @@ export default {
       this.$refs[name].resetFields();
     },
     handleAdd() {
-      this.modalTitle = "新增";
-      this.businessKey = "";
+      this.modalTitle = "录入车辆";
+      this.merchantName = this.detail.merchantName;
+	  this.reduce = this.detail.reduce;
       this.showModal = true;
     },
     handleEdit(record) {
@@ -433,10 +474,12 @@ export default {
     },
   },
   mounted: function () {
-    this.changePage(1);
+    this.init();
+	this.changePage(1);
   },
   components: {
     "el-select-tree": SelectTree,
+	"parkingCoupon-detail":ParkingCouponDetail,
   },
 };
 </script>

+ 106 - 36
src/views/base/parkingMerchant-detail.vue

@@ -20,6 +20,13 @@
         :rules="ruleValidate"
         :label-width="'120px'"
       >
+	  <el-form-item label="商户名称" prop="merchantName">
+	    <el-input
+	      v-model="formModel.merchantName"
+	      placeholder="请输入商户名称"
+	      style="width: 300px"
+	    ></el-input>
+	  </el-form-item>
         <el-form-item label="所属物业公司" prop="companyId">
           <el-select-tree
             :props="props"
@@ -30,36 +37,78 @@
             size="large"
           ></el-select-tree>
         </el-form-item>
-        <el-form-item label="商户名称" prop="merchantName">
+        <el-form-item label="商户账号" prop="userName">
           <el-input
-            v-model="formModel.merchantName"
-            placeholder="请输入商户名称"
+		 :disabled="formModel.id!=null"
+		  
+            v-model="formModel.userName"
+            placeholder="请输入商户账号"
             style="width: 300px"
           ></el-input>
         </el-form-item>
-        <el-form-item label="优惠券类型" prop="type">
-          <el-select
-            filterable
-            placeholder="请选择"
-            style="width: 280px"
-            v-model="formModel.type"
-          >
-            <el-option
-              v-for="result in typeResult"
-              :key="result.value"
-              :label="result.name"
-              :value="result.value"
-            ></el-option>
-          </el-select>
-        </el-form-item>
-        <el-form-item label="优惠额度" prop="reduce">
-          <el-input-number
-            v-model="formModel.reduce"
-            placeholder="请输入优惠额度"
-            style="width: 180px"
-            min="0"
-          ></el-input-number>
-        </el-form-item>
+		<el-form-item label="商户密码" prop="password">
+		  <el-input
+		    v-model="formModel.password"
+		    placeholder="请输入商户密码"
+		    style="width: 300px"
+		  ></el-input>
+		</el-form-item>
+		
+		
+       
+		<el-row >
+		  <el-col :span="8">
+		    <el-form-item label="停车抵扣券" prop="enableCoupon">
+		      <el-switch
+		        v-model="formModel.enableCoupon"
+		        active-color="#13ce66"
+		        inactive-color="#ff4949"
+		       
+		      ></el-switch>
+			  
+		    </el-form-item>
+		  </el-col>
+		  <el-col :span="16">
+			   <el-form-item label="抵扣券金额" prop="reduce">
+				 <el-input-number
+				 :precision="0"
+				   v-model="formModel.reduce"
+				   placeholder="请输入金额"
+				   style="width: 180px"
+				   :min="1"
+				 ></el-input-number>
+			   </el-form-item>
+		  </el-col>
+		</el-row>
+        <el-row >
+          <el-col :span="8">
+            <el-form-item label="车辆白名单" prop="enableMember">
+              <el-switch
+                v-model="formModel.enableMember"
+                active-color="#13ce66"
+                inactive-color="#ff4949"
+               
+              ></el-switch>
+        	  
+            </el-form-item>
+          </el-col>
+          <el-col :span="16">
+        	   <el-form-item label="离场时间" prop="memberLeaveTime" >
+        		
+				 <el-time-picker
+				     v-model="formModel.memberLeaveTime"
+					  format="HH:mm"
+					  :clearable="false"
+					  value-format="HH:mm"
+					 style="width: 180px"
+				     placeholder="请选择离场时间">
+				   </el-time-picker>
+				   
+        	   </el-form-item>
+          </el-col>
+        </el-row>
+		
+		
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -84,6 +133,7 @@ export default {
   props: ["businessKey", "title"],
   data() {
     return {
+	   myMemberLeaveTime:[{required:true,message:"请选择离场时间", trigger: "blur"}],
       formModel: {},
       ruleValidate: {
         merchantName: [
@@ -92,12 +142,26 @@ export default {
         companyId: [
           { required: true, message: "所属物业公司不能为空", trigger: "blur" },
         ],
+		userName: [
+		  { required: true, message: "商户账号不能为空", trigger: "blur" }
+		],
+
+		password: [
+		  { required: true, message: "商户密码不能为空", trigger: "blur" }
+		],
+		
       },
       showDialog: true,
       loading: false,
       submitting: false,
       typeResult: [],
       companyResult: [],
+	  props: {
+	    // 配置项(必选)
+	    value: "id",
+	    label: "name",
+	    children: "children",
+	  },
     };
   },
   created() {
@@ -111,15 +175,17 @@ export default {
         }
       }
     });
-
-    dataDictionaryApi
-      .findByCatalogName({
-        catalogName: "优惠券类型",
-      })
-      .then((response) => {
-        var jsonData = response.data;
-        this.typeResult = jsonData.data;
-      });
+	if(false){
+		dataDictionaryApi
+		  .findByCatalogName({
+		    catalogName: "优惠券类型",
+		  })
+		  .then((response) => {
+		    var jsonData = response.data;
+		    this.typeResult = jsonData.data;
+		  });
+	}
+    
   },
   methods: {
     closeDialog() {
@@ -154,7 +220,7 @@ export default {
                 type: "warning",
               });
 
-              self.$emit("close", false);
+              //self.$emit("close", false);
             }
           });
         }
@@ -177,6 +243,10 @@ export default {
 
         if (jsonData.result) {
           self.formModel = jsonData.data;
+		  if(!self.formModel.memberLeaveTime){
+			  
+			  self.formModel.memberLeaveTime="14:00"
+		  }
         } else {
           self.$message.error(jsonData.message + "");
         }

+ 70 - 139
src/views/base/parkingMerchant-list.vue

@@ -36,7 +36,7 @@
           v-model="queryModel.merchantName"
         ></el-input>
       </el-form-item>
-      <el-form-item label="优惠券类型" prop="type">
+      <el-form-item label="优惠券类型" prop="type" v-if="false">
         <el-select
           filterable
           placeholder="请选择"
@@ -78,7 +78,7 @@
         plain
         icon="el-icon-circle-plus"
         @click="handleAdd"
-        >新增</el-button
+        >新增商户</el-button
       >
       <el-button
         type="primary"
@@ -105,81 +105,66 @@
         :index="indexMethod"
         width="50"
       ></el-table-column>
+	  
+	  <el-table-column
+	    prop="merchantName"
+	    label="商户名称"
+	    width="180"
+	  ></el-table-column>
+	  
       <el-table-column
         prop="companyName"
         label="所属物业公司"
         width="180"
       ></el-table-column>
+	  
+     
       <el-table-column
-        prop="merchantName"
-        label="商户名称"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="merchantNo"
-        label="商户编号"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="operatorNo"
-        label="商户生成的操作者编号"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="operatorPassword"
-        label="操作者密码"
-        width="180"
-      ></el-table-column>
-      <el-table-column
-        prop="typeName"
-        label="优惠券类型"
+        prop="userName"
+        label="商户账号"
         width="180"
       ></el-table-column>
+	  
+      
+     <el-table-column prop="enableCoupon" label="停车抵用卷" width="200">
+       <template slot-scope="{ row }">
+         <el-switch
+           v-model="row.enableCoupon"
+           active-color="#13ce66"
+           inactive-color="#ff4949"
+           @change="updateEnabled(row)"
+         ></el-switch>
+       </template>
+     </el-table-column>
+	 
       <el-table-column
         prop="reduce"
-        label="优惠额度"
+        label="抵用卷金额"
         width="180"
       ></el-table-column>
+	  
+	  <el-table-column prop="enableMember" label="车辆白名单" width="200">
+	    <template slot-scope="{ row }">
+	      <el-switch
+	        v-model="row.enableMember"
+	        active-color="#13ce66"
+	        inactive-color="#ff4949"
+	        @change="updateEnabled(row)"
+	      ></el-switch>
+	    </template>
+	  </el-table-column>
+	  <el-table-column
+	    prop="memberLeaveTime"
+	    label="固定离场时间"
+	    width="180"
+	  ></el-table-column>
+	  
       <el-table-column label="操作" width="250" fixed="right">
         <template slot-scope="{ row }">
+          
           <el-row>
             <el-col>
-              <el-popover
-                placement="left"
-                width="300"
-                trigger="click"
-                @show="openBindQRCode(row)"
-                @hide="closeBindQRCode(row)"
-              >
-                <div
-                  :ref="'bindqrcode_' + row.id"
-                  style="width: 300px; height: 300px"
-                ></div>
-                <el-link type="primary" :underline="false" slot="reference"
-                  >微信绑定</el-link
-                >
-              </el-popover>-
-              <el-popover
-                placement="left"
-                width="300"
-                trigger="click"
-                @show="openQRCode(row)"
-                @hide="closeQRCode(row)"
-              >
-                <div
-                  :ref="'qrcode_' + row.id"
-                  style="width: 300px; height: 300px"
-                ></div>
-                <el-link type="primary" :underline="false" slot="reference"
-                  >商户二维码</el-link
-                >
-              </el-popover>
-            </el-col>
-          </el-row>
-          <el-row>
-            <el-col>
-              <el-link type="primary" @click="handleOpenBind(row)">查看绑定用户</el-link
-              >-
+              
               <el-link type="warning" @click="handleEdit(row)">编辑</el-link>-
               <el-link type="danger" @click="handleDelete(row)">删除</el-link>
             </el-col>
@@ -201,35 +186,19 @@
       :title="modalTitle"
       @close="onDetailModalClose"
     ></parkingMerchant-detail>
-    <el-dialog
-      title="扫码绑定微信"
-      :visible.sync="bindWechatVisible"
-      :modal-append-to-body="false"
-      :close-on-click-modal="false"
-      width="340px"
-    >
-      <div v-loading="bindWechatLoading">
-        <img :src="bindWechatUrl" style="width: 300px; fit-object: cover" />
-      </div>
-    </el-dialog>
+     
     
-    <parkingMerchantBinder-list
-      v-if="showBindMerchantModal"
-      :merchantId="merchantId"
-      :title="modalTitle"
-      @close="onDetailModalClose"
-    ></parkingMerchantBinder-list>
+   
   </div>
 </template>
 <script>
 import Constant from "@/constant";
 import ParkingMerchantDetail from "./parkingMerchant-detail";
-import ParkingMerchantBinderList from "./parkingMerchantBinder-list";
-
+ 
 import parkingMerchantApi from "@/api/base/parkingMerchant";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
-import QRCode from "qrcodejs2";
-import companyInfoApi from "@/api/base/companyInfo";
+ 
+ import companyInfoApi from "@/api/base/companyInfo";
 import SelectTree from "@/components/SelectTree";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
@@ -285,15 +254,16 @@ export default {
         }
       }
     });
-
-    dataDictionaryApi
-      .findByCatalogName({
-        catalogName: "优惠券类型",
-      })
-      .then((response) => {
-        var jsonData = response.data;
-        this.typeResult = jsonData.data;
-      });
+	if(false){
+		dataDictionaryApi.findByCatalogName({
+		    catalogName: "优惠券类型",
+		  })
+		  .then((response) => {
+		    var jsonData = response.data;
+		    this.typeResult = jsonData.data;
+		  });
+	}
+   
   },
   methods: {
     indexMethod(index) {
@@ -431,53 +401,14 @@ export default {
         this.changePage(this.pageIndex);
       }
     },
-    openBindQRCode(record) {
-      //el.innerHTML = "";
-      var self = this;
-      self.$refs["bindqrcode_" + record.id].innerHTML = "";
-      //绑定微信二维码扫码
-      var bindqrtext =
-        process.env.VUE_APP_PARKING_MERCHAT_BIND_WECHAT_URL + "?id=" + record.id + "&name=" + record.merchantName;
-
-      var el = self.$refs["bindqrcode_" + record.id];
-      var qr = new QRCode(el, {
-        text: bindqrtext,
-        width: 300,
-        height: 300,
-        colorDark: "#333333", //二维码颜色
-        colorLight: "#ffffff", //二维码背景色
-        correctLevel: QRCode.CorrectLevel.L, //容错率,L/M/H
-      });
-    },
-    closeBindQRCode(record) {
-      self.$refs["bindqrcode_" + record.id].innerHTML = "";
-    },
-    openQRCode(record) {
-      //el.innerHTML = "";
-      var self = this;
-      self.$refs["qrcode_" + record.id].innerHTML = "";
-      //商户扫码
-      var qrtext =
-        process.env.VUE_APP_PARKING_MERCHAT_URL + "?merchantId=" + record.id;
-      var el = self.$refs["qrcode_" + record.id];
-
-      var qr = new QRCode(el, {
-        text: qrtext,
-        width: 300,
-        height: 300,
-        colorDark: "#333333", //二维码颜色
-        colorLight: "#ffffff", //二维码背景色
-        correctLevel: QRCode.CorrectLevel.L, //容错率,L/M/H
-      });
-    },
-    closeQRCode(record) {
-      self.$refs["qrcode_" + record.id].innerHTML = "";
-    },
-    handleOpenBind(record){
-      this.merchantId = record.id;
-      this.modalTitle = record.merchantName;
-      this.showBindMerchantModal = true;
-    },
+     
+    
+     
+     
+   
+	updateEnabled(row) {
+	  parkingMerchantApi.update(row);
+	},
   },
   mounted: function () {
     this.changePage(1);
@@ -485,7 +416,7 @@ export default {
   components: {
     "parkingMerchant-detail": ParkingMerchantDetail,
     "el-select-tree": SelectTree,
-    "parkingMerchantBinder-list": ParkingMerchantBinderList,
+    
   },
 };
 </script>

+ 284 - 0
src/views/base/parkingWhite-detail.vue

@@ -0,0 +1,284 @@
+
+<style scoped>
+.user-panel {
+  margin: 10px auto;
+}
+</style>
+<template>
+  <el-dialog
+    :visible.sync="showDialog"
+    :title="title"
+    :modal-append-to-body="false"
+    style="text-align: left"
+    @close="closeDialog"
+    :close-on-click-modal="false"
+  >
+    <div class="user-panel" v-loading="loading">
+      <el-form
+        ref="form"
+        :model="formModel"
+        :rules="ruleValidate"
+        :label-width="'180px'"
+      >
+	  
+	  <el-form-item label="车牌号码" prop="memberCarNum">
+	    <el-input
+	      v-model="formModel.memberCarNum"
+	      placeholder="请输入车牌号码"
+	      style="width: 180px"
+	    ></el-input>
+	  </el-form-item>
+	  
+	  <el-row >
+	    <el-col :span="8">
+	      <el-form-item label="车主姓名" prop="memberName">
+	         <el-input
+	           v-model="formModel.memberName"
+	           placeholder="请输入车主姓名"
+	           style="width: 180px"
+	         ></el-input>
+	  	  
+	      </el-form-item>
+	    </el-col>
+	    <el-col :span="16">
+	  	   <el-form-item label="联系方式" prop="memberPhone">
+	  	      <el-input
+	  	        v-model="formModel.memberPhone"
+	  	        placeholder="请输入联系方式"
+	  	        style="width: 180px"
+	  	      ></el-input>
+	  	   
+	  	   </el-form-item>
+		   
+	    </el-col>
+	  </el-row>
+	  
+	  
+       <el-form-item label="授权商户">
+         {{merchantName}}
+       </el-form-item>
+	   <el-form-item label="起始时间" v-if="businessKey.length == 0">
+	      {{startTime}}
+	   </el-form-item>
+	   <el-form-item label="起始时间" v-else>
+	     {{formModel.memberStartTime}} 
+	   </el-form-item>
+		
+		<el-form-item label="存放天数" prop="days" v-show="businessKey.length == 0">
+						 <el-input-number
+						 :precision="0"
+						   v-model="formModel.days"
+						   placeholder="存放天数"
+						   style="width: 180px"
+						  
+						   :min="1"
+						 ></el-input-number>
+		</el-form-item>
+		
+		
+		<el-form-item label="结束时间" v-if="businessKey.length == 0">
+		  {{endTime}} {{memberLeaveTime}} 
+		</el-form-item>
+		<el-form-item label="结束时间" v-else>
+		  {{formModel.memberEndTime}}
+		</el-form-item>
+      </el-form>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="closeDialog">取 消</el-button>
+      <el-button type="primary" @click="handleSubmit" :loading="submitting"
+        >确定赠送</el-button
+      >
+    </span>
+  </el-dialog>
+</template>
+<script>
+import Constant from "@/constant";
+import parkingWhiteApi from "@/api/base/parkingWhite";
+import dataDictionaryApi from "@/api/sys/dataDictionary";
+import companyInfoApi from "@/api/base/companyInfo";
+
+export default {
+  components: {
+   
+  },
+
+    computed: {
+      // 计算属性的 getter
+      endTime: function () {
+        // `this` 指向 vm 实例
+		
+		var date = new Date();
+		var day=this.formModel.days;
+		if(!day){
+			return ""
+		}
+		date.setDate(date.getDate()+day);
+		
+		var year = date.getFullYear();
+		var month = date.getMonth() + 1;
+		if (month < 10) {
+		  month = "0" + month;
+		}
+		var data = date.getDate();
+		if (data < 10) {
+		  data = "0" + data;
+		}
+		
+		
+		
+		
+        return  year + "-" + month + "-" + data;
+      }
+    },
+	
+  props: [ "title", "businessKey","memberLeaveTime","merchantName"],
+  data() {
+	  let checkPhone = (rule, value, callback) => {
+	    if (!value) {
+	      callback();
+	    } else {
+	      const reg = /^1[3|4|5|7|8][0-9]\d{8}$/;
+	      console.log(reg.test(value));
+	      if (reg.test(value)) {
+	        callback();
+	      } else {
+	        return callback(new Error("请输入正确的手机号"));
+	      }
+	    }
+	  };
+    return {
+	   myMemberLeaveTime:[{required:true,message:"请选择离场时间", trigger: "blur"}],
+      formModel: {
+		  memberCarNum:"鄂D"
+	  },
+	 // endTime:"",
+      ruleValidate: {
+        memberCarNum: [
+          { required: true, message: "车牌号码不能为空", trigger: "blur" },
+        ],
+		memberPhone: [
+		  
+		  {
+		    validator: checkPhone,
+		    trigger: "blur"
+		  }
+		],
+      },
+	  startTime:{},
+ 
+      showDialog: true,
+      loading: false,
+      submitting: false,
+      typeResult: [],
+      companyResult: [],
+	  props: {
+	    // 配置项(必选)
+	    value: "id",
+	    label: "name",
+	    children: "children",
+	  },
+    };
+  },
+  created() {
+    var self = this;
+	
+	  var date = new Date();
+      var year = date.getFullYear();
+      var month = date.getMonth() + 1;
+      if (month < 10) {
+        month = "0" + month;
+      }
+      var data = date.getDate();
+      if (data < 10) {
+        data = "0" + data;
+      }
+
+      this.startTime = year + "-" + month + "-" + data+" "+date.getHours()+":"+date.getMinutes();
+
+   
+    
+  },
+  methods: {
+    closeDialog() {
+      this.$emit("close", false);
+    },
+    handleSubmit() {
+      var self = this;
+
+      this.$refs["form"].validate((valid) => {
+		  
+        if (valid) {
+          (function () {
+          
+			
+			if (self.businessKey.length == 0) {
+				return parkingWhiteApi.pcGiveParkingMember(self.formModel);
+			} else {
+				   self.formModel.id=self.businessKey;
+				return parkingWhiteApi.editsubmit(self.formModel);
+			}
+			
+             
+          })().then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              self.$message({
+                message: "保存成功!",
+                type: "success",
+              });
+
+              self.$emit("close", true);
+            } else {
+              self.$message({
+                message: jsonData.message + "",
+                type: "warning",
+              });
+
+              //self.$emit("close", false);
+            }
+          });
+        }
+      });
+    },
+  },
+  mounted: function () {
+    
+      var self = this;
+    
+      (function () {
+        if (self.businessKey.length == 0) {
+          return parkingWhiteApi.create();
+        } else {
+          return parkingWhiteApi.edit(self.businessKey);
+        }
+      })()
+        .then((response) => {
+          var jsonData = response.data;
+		  
+          self.loading = false;
+    
+          if (jsonData.result) {
+			    if (self.businessKey.length == 0) {
+					 self.formModel = jsonData.data;
+				}else{
+					
+					 self.formModel = jsonData.data.data[0];
+				}
+           
+			//self.formModel.days=null;
+    		  if(!self.formModel.memberCarNum){
+				  
+    			  self.formModel.memberCarNum="鄂D"
+    		  }
+          } else {
+            self.$message.error(jsonData.message + "");
+          }
+        })
+        .catch((error) => {
+          self.$message.error(error + "");
+        });
+  },
+};
+</script>

+ 539 - 0
src/views/base/parkingWhite-list.vue

@@ -0,0 +1,539 @@
+<template>
+  <div>
+    <el-breadcrumb separator=">">
+      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="#">停车场管理</a>
+      </el-breadcrumb-item>
+      <el-breadcrumb-item>
+        <a href="/parkingWhite">车辆白名单管理</a>
+      </el-breadcrumb-item>
+    </el-breadcrumb>
+    <el-divider></el-divider>
+    <!--
+      要resetFields起作用,必须配置:model和prop
+    -->
+    <el-form
+      ref="queryForm"
+      :model="queryModel"
+      inline
+      class="demo-form-inline"
+    >
+      <el-form-item label="车牌号码" prop="carNum">
+        <el-input
+          type="text"
+          size="mini"
+          v-model="queryModel.carNumber"
+        ></el-input>
+      </el-form-item>
+     
+      <el-form-item label="商户名称" v-show="!detail.enableMember" prop="merchantName">
+        <el-input
+          type="text"
+          size="mini"
+		  
+          v-model="queryModel.merchantName"
+        ></el-input>
+      </el-form-item>
+      <el-form-item label="当前状态" prop="useStatus">
+        <el-select size="mini" v-model="queryModel.status">
+          <el-option label="全部" value=""></el-option>
+          <el-option label="有效" value="0"></el-option>
+          <el-option label="无效" value="1"></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="生效时间" prop="startTime">
+        <el-date-picker
+          v-model="queryModel.startTime"
+          type="daterange"
+          size="mini"
+          range-separator="至"
+          start-placeholder="开始时间"
+          end-placeholder="结束时间"
+          placeholder="选择时间范围"
+          value-format="yyyy-MM-dd"
+        >
+        </el-date-picker>
+      </el-form-item>
+	  
+	  
+	  <el-form-item label="截止时间" prop="endTime">
+	    <el-date-picker
+	      v-model="queryModel.endTime"
+	      type="daterange"
+	      size="mini"
+	      range-separator="至"
+	      start-placeholder="开始时间"
+	      end-placeholder="结束时间"
+	      placeholder="选择时间范围"
+	      value-format="yyyy-MM-dd"
+	    >
+	    </el-date-picker>
+	  </el-form-item>
+	  
+	  
+      <el-form-item>
+        <el-button
+          type="primary"
+          size="mini"
+          icon="ios-search"
+          @click="changePage(1)"
+          :loading="loading"
+          >查询</el-button
+        >&nbsp;
+        <el-button
+          type="info"
+          size="mini"
+          style="margin-left: 8px"
+          @click="handleReset('queryForm')"
+          >重置</el-button
+        >&nbsp;
+      </el-form-item>
+    </el-form>
+    <el-divider></el-divider>
+    <el-row class="button-group">
+		<el-button
+		  type="primary"
+		  size="small"
+		  plain
+		  icon="el-icon-circle-plus"
+		  @click="handleAdd"
+		  v-show="detail.enableMember"
+		  >录入车辆</el-button
+		>
+		
+      <el-button
+        type="primary"
+        size="small"
+        plain
+        icon="el-icon-download"
+        :loading="downloadLoading"
+        @click="downloadXls"
+      >导出数据</el-button>
+    </el-row>
+    <el-table
+      :data="tableData"
+      style="min-height: 400px"
+      v-loading="loading"
+      stripe
+      @sort-change="sortChange"
+      @selection-change="handleSelectionChange"
+    >
+     <el-table-column
+       type="index"
+       label="序号"
+       :index="indexMethod"
+       width="50"
+     ></el-table-column>
+      <el-table-column
+        prop="memberCarNum"
+        label="车牌号码"
+        width="130"
+      ></el-table-column>
+      <el-table-column
+        prop="merchantName"
+        label="所属商户"
+        width="180"
+      ></el-table-column>
+ 
+      <el-table-column prop="statusName" label="当前状态" width="90">
+      
+      </el-table-column>
+	  
+    
+      <el-table-column
+        prop="memberStartTime"
+        label="生效时间"
+        width="180"
+      ></el-table-column>
+      <el-table-column
+        prop="memberEndTime"
+        label="截止时间"
+        width="180"
+      ></el-table-column>
+	  
+	  <el-table-column label="操作" width="250" fixed="right">
+	    <template slot-scope="{ row }">
+	      
+	      <el-row>
+	        <el-col>
+	          
+	          <el-link type="warning" @click="handleEdit(row)">编辑</el-link>-
+	          <el-link type="danger" @click="handleDelete(row)">删除</el-link>
+	        </el-col>
+	      </el-row>
+	    </template>
+	  </el-table-column>
+	  
+    </el-table>
+    <el-pagination
+      :current-page.sync="pageIndex"
+      :total="totalElements"
+      :page-sizes="pageSizeList"
+      @current-change="changePage"
+      @size-change="pageSizeChange"
+      layout="total, sizes, prev, pager, next, jumper"
+    ></el-pagination>
+	
+	<parkingWhite-detail
+	  v-if="showModal"
+		:businessKey="businessKey"
+	  :merchantName="detail.merchantName"
+	  :memberLeaveTime="detail.memberLeaveTime"
+	  @close="onDetailModalClose"
+	></parkingWhite-detail>
+	
+  </div>
+</template>
+<script>
+import Constant from "@/constant";
+import parkingWhiteApi from "@/api/base/parkingWhite";
+
+ import dataDictionaryApi from "@/api/sys/dataDictionary";
+import companyInfoApi from "@/api/base/companyInfo";
+import SelectTree from "@/components/SelectTree";
+import NProgress from "nprogress"; // progress bar
+import ParkingWhiteDetail from "./parkingWhite-detail";
+
+import "nprogress/nprogress.css"; // progress bar style
+
+export default {
+  name: "baseParkingWhiteList",
+  data() {
+    var self = this;
+
+    return {
+	  detail:{},
+      queryModel: {
+        id: "",
+		carNumber:"",
+        merchantName: "",
+   
+        startTime: ["", ""],
+		endTime: ["", ""],
+        status	: "",
+      },
+      loading: false,
+      tableData: [],
+      pageIndex: 1,
+      pageSize: 10,
+      totalPages: 0,
+      totalElements: 0,
+      field: "",
+      direction: "",
+      pageSizeList: [10, 20, 30],
+      multipleSelection: [],
+      showModal: false,
+      modalTitle: "",
+      businessKey: "",
+      typeResult: [],
+      companyResult: [],
+      props: {
+        // 配置项(必选)
+        value: "id",
+        label: "name",
+        children: "children",
+      },
+      downloadLoading: false,
+    };
+  },
+  created() {
+    var self = this;
+
+  
+  },
+  methods: {
+	 handleEdit(record) {
+	   this.modalTitle = "编辑";
+	   this.businessKey = record.id;
+	   this.showModal = true;
+	 },
+	 handleDelete(record) {
+	   var self = this;
+	 
+	   self
+	     .$confirm("是否确认删除?", "提示", {
+	       confirmButtonText: "确定",
+	       cancelButtonText: "取消",
+	       type: "warning",
+	     })
+	     .then(() => {
+	       parkingWhiteApi.remove(record.id).then(function (response) {
+	         var jsonData = response.data;
+	 
+	         if (jsonData.result) {
+	           // var index = self.tableData.indexOf(record);
+	           // self.tableData.splice(index, 1);
+	           self.changePage(self.pageIndex);
+	 
+	           self.$message({
+	             type: "success",
+	             message: "删除成功!",
+	           });
+	         }
+	       });
+	     });
+	 },
+    indexMethod(index) {
+      return (this.pageIndex - 1) * this.pageSize + (index + 1);
+    },
+	init(){
+		var self = this;
+		
+		//self.loading = true;
+		
+		parkingWhiteApi
+		  .parkingMemberDetail()
+		  .then(function (response) {
+		    //self.loading = false;
+			
+		     self.detail = response.data.data;
+		
+		  })
+		  .catch((error) => {
+		   // self.loading = false;
+		    // self.$message.error(error + "");
+		  });
+	},
+    changePage(pageIndex) {
+      var self = this;
+
+      self.loading = true;
+
+      self.pageIndex = pageIndex;
+      var formData = new FormData();
+
+      formData.append("pageIndex", self.pageIndex);
+      formData.append("pageSize", self.pageSize);
+
+      formData.append("id", self.queryModel.id);
+      formData.append("merchantName", self.queryModel.merchantName);
+ 
+  
+      formData.append("carNumber", self.queryModel.carNumber);
+      formData.append("verifyTime", self.queryModel.verifyTime);
+
+      if (self.queryModel.startTime&&self.queryModel.startTime[0] != null) {
+        formData.append("startTime1", self.queryModel.startTime[0]);
+      }
+
+      if (self.queryModel.startTime&&self.queryModel.startTime[1] != null) {
+        formData.append("startTime2", self.queryModel.startTime[1]);
+      }
+
+   if (self.queryModel.endTime&&self.queryModel.endTime[0] != null) {
+        formData.append("endTime1", self.queryModel.endTime[0]);
+      }
+
+      if (self.queryModel.endTime&&self.queryModel.endTime[1] != null) {
+        formData.append("endTime2", self.queryModel.endTime[1]);
+      }
+	  
+      formData.append("status", self.queryModel.status);
+
+      if (this.field != null) {
+        formData.append("field", this.field);
+      }
+
+      if (this.direction != null) {
+        formData.append("direction", this.direction);
+      }
+
+      parkingWhiteApi
+        .pageList(formData)
+        .then(function (response) {
+          self.loading = false;
+
+          var jsonData = response.data.data;
+
+          self.tableData = jsonData.data;
+          self.totalPages = jsonData.totalPages;
+          self.totalElements = jsonData.recordsTotal;
+        })
+        .catch((error) => {
+          self.loading = false;
+          // self.$message.error(error + "");
+        });
+    },
+    pageSizeChange(pageSize) {
+      this.pageSize = pageSize;
+
+      this.$nextTick(() => {
+        this.changePage(this.pageIndex);
+      });
+    },
+    sortChange(data) {
+      this.field = data.column.field;
+      this.direction = data.order;
+
+      this.changePage(this.pageIndex);
+    },
+    handleSelectionChange(val) {
+      this.multipleSelection = val;
+    },
+    handleReset(name) {
+      this.$refs[name].resetFields();
+    },
+    handleAdd() {
+      this.modalTitle = "录入车辆";
+	  this.businessKey = "";
+	  
+      this.merchantName = this.detail.merchantName;
+	  this.reduce = this.detail.reduce;
+      this.showModal = true;
+    },
+    handleEdit(record) {
+      this.modalTitle = "编辑";
+      this.businessKey = record.id;
+      this.showModal = true;
+    },
+    handleDelete(record) {
+      var self = this;
+
+      self
+        .$confirm("是否确认删除?", "提示", {
+          confirmButtonText: "确定",
+          cancelButtonText: "取消",
+          type: "warning",
+        })
+        .then(() => {
+          parkingWhiteApi.remove(record.id).then(function (response) {
+            var jsonData = response.data;
+
+            if (jsonData.result) {
+              // var index = self.tableData.indexOf(record);
+              // self.tableData.splice(index, 1);
+              self.changePage(self.pageIndex);
+
+              self.$message({
+                type: "success",
+                message: "删除成功!",
+              });
+            }
+          });
+        });
+    },
+    handleBatchDelete() {
+      var self = this;
+
+      var idList = this.multipleSelection.map((record) => {
+        return record.id;
+      });
+
+      this.$confirm("是否确认删除选中项?", "提示", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning",
+      }).then(() => {
+        parkingWhiteApi.batchRemove(idList).then(function (response) {
+          var jsonData = response.data;
+
+          if (jsonData.result) {
+            self.changePage(self.pageIndex);
+
+            self.$message({
+              type: "success",
+              message: "删除成功!",
+            });
+          }
+        });
+      });
+    },
+    onDetailModalClose(refreshed) {
+      //保存成功后回调
+      this.showModal = false;
+
+      if (refreshed) {
+        this.changePage(this.pageIndex);
+      }
+    },
+    downloadXls() {
+      //导出
+      var self = this;
+      self.downloadLoading = true;
+      self.loading = true;
+      self.loadingText = "数据导出中,请稍后...";
+
+      var formData = new FormData();
+
+      formData.append("pageIndex", self.pageIndex);
+      formData.append("pageSize", self.pageSize);
+
+      formData.append("id", self.queryModel.id);
+      formData.append("merchantName", self.queryModel.merchantName);
+      formData.append("type", self.queryModel.type);
+
+      if (self.queryModel.companyId != null) {
+        formData.append("companyId", self.queryModel.companyId);
+      }
+      formData.append("carNum", self.queryModel.carNum);
+      formData.append("verifyTime", self.queryModel.verifyTime);
+
+      if (self.queryModel.verifyTimeRange[0] != null) {
+        formData.append("verifyStartTime", self.queryModel.verifyTimeRange[0]);
+      }
+
+      if (self.queryModel.verifyTimeRange[1] != null) {
+        formData.append("verifyEndTime", self.queryModel.verifyTimeRange[1]);
+      }
+
+      formData.append("useStatus", self.queryModel.useStatus);
+
+      if (this.field != null) {
+        formData.append("field", this.field);
+      }
+
+      if (this.direction != null) {
+        formData.append("direction", this.direction);
+      }
+
+      parkingWhiteApi.exportXls(formData).then(function(response) {
+        var jsonData = response.data;
+        self.downloadLoading = false;
+        self.loading = false;
+        if (jsonData.result) {
+            //下载有错误信息提示的报表
+            self.$message({
+              showClose: true,
+              dangerouslyUseHTMLString: true,
+              message: `报表已生成,<a href="${jsonData.data}" target="_blank">点击下载报表</a>&nbsp;`,
+              duration: 60000,
+              type: 'success'
+            });
+        }
+        else{
+          self.$message.error(jsonData.message);
+        }
+      });
+    },
+  },
+  mounted: function () {
+    this.init();
+	this.changePage(1);
+  },
+  components: {
+    "el-select-tree": SelectTree,
+	"parkingWhite-detail":ParkingWhiteDetail,
+  },
+};
+</script>
+<style lang="scss" scoped>
+.el-breadcrumb {
+  margin: 10px;
+  line-height: 20px;
+}
+
+.el-divider {
+  margin: 5px 0;
+}
+
+.demo-form-inline {
+  margin-left: 10px;
+  text-align: left;
+}
+
+.button-group {
+  margin-left: 10px;
+  text-align: left;
+}
+</style>