zhengqiang 5 年之前
父節點
當前提交
2e0ab042ad

+ 2 - 1
.env.production

@@ -1,2 +1,3 @@
 VUE_APP_BACKEND_URL=/
-VUE_APP_IMAGE_URL=http://wisdomhouseadmin.sudaonline.net
+#VUE_APP_IMAGE_URL=http://wisdomhouseadmin.sudaonline.net
+VUE_APP_BACKEND_URL=http://zldb.xiaoxinda.com:8088/epay-server

+ 15 - 2
src/api/base/electricClientInfo.js

@@ -13,6 +13,10 @@ function edit(id){
   return request.get(constant.serverUrl + "/base/electricClientInfo/edit/" + id);
 }
 
+function syncDevice(id){
+  return request.get(constant.serverUrl + `/base/electricClientInfo/syncDevice?id=${id}`);
+}
+
 function add(formModel){
   return request.post(constant.serverUrl + "/base/electricClientInfo/add", formModel,{
     headers: {
@@ -41,6 +45,15 @@ function batchRemove(idList){
   });
 }
 
-export default {
-  pageList,create,edit,add,update,remove,batchRemove
+function powerSwitch(roomId,cmd){
+  var formData = new FormData();
+  
+  formData.append("roomId", roomId);
+  formData.append("cmd", cmd);
+
+  return request.post(constant.serverUrl + "/base/electricClientInfo/powerSwitch", formData);
 }
+
+export default {
+  pageList,create,edit,add,update,remove,batchRemove, powerSwitch,syncDevice
+}

+ 5 - 1
src/api/base/roomInfo.js

@@ -49,6 +49,10 @@ function query(formData) {
   return request.post(constant.serverUrl + "/base/roomInfo/query", formData);
 }
 
+function queryTree(formData) {
+  return request.post(constant.serverUrl + "/base/roomInfo/queryTree", formData);
+}
+
 export default {
-  pageList,create,edit,add,update,remove,batchRemove,query
+  pageList,create,edit,add,update,remove,batchRemove,query,queryTree
 }

+ 65 - 16
src/views/base/electricClientInfo-detail.vue

@@ -17,7 +17,7 @@
         <el-form-item label="户号" prop="customerNo">
           <el-input v-model="formModel.customerNo" placeholder="请输入户号" style="width:300px"></el-input>
         </el-form-item>
-        <el-form-item label="房间号" prop="roomId">
+        <!-- <el-form-item label="房间号" prop="roomId">
           <el-select
             v-model="formModel.roomId"
             filterable
@@ -34,6 +34,21 @@
             ></el-option>
           </el-select>
           <el-button icon="el-icon-search" circle size="small" @click="innerVisible=true;"></el-button>
+        </el-form-item> -->
+        <el-form-item label="房间号" prop="roomName">
+          <el-input
+            placeholder="请选择"
+            v-model="formModel.roomName"
+            readonly="readonly"
+            style="width:300px"
+            @click.native="isShowSelect = !isShowSelect">
+          </el-input>
+        <el-tree  v-if="isShowSelect"
+          :props="props"
+          :load="loadNode"
+          lazy
+          @node-click="handleNodeClick">
+        </el-tree>
         </el-form-item>
         <el-form-item label="电表号" prop="meterId">
           <el-select
@@ -52,13 +67,12 @@
             ></el-option>
           </el-select>
           <el-button icon="el-icon-search" circle size="small" @click="innerVisible=true;"></el-button>
-        </el-form-item>
-        <el-form-item label="电量" prop="electricityRemaining">
           <el-input
-            v-model="formModel.electricityRemaining"
-            placeholder="请输入电量"
-            style="width:300px"
-          ></el-input>
+          type="hidden"
+            v-model="formModel.roomId"
+            icon="caret-bottom" 
+            readonly="readonly">
+          </el-input>
         </el-form-item>
       </el-form>
     </div>
@@ -82,14 +96,11 @@ export default {
         customerNo: [
           { required: true, message: "户号不能为空", trigger: "blur" }
         ],
-        roomId: [
-          { required: true, message: "房间号ID不能为空", trigger: "blur" }
+        roomName: [
+          { required: true, message: "房间号不能为空", trigger: "blur" }
         ],
         meterId: [
-          { required: true, message: "电表号ID不能为空", trigger: "blur" }
-        ],
-        electricityRemaining: [
-          { required: true, message: "剩余电量不能为空", trigger: "blur" }
+          { required: true, message: "电表号不能为空", trigger: "blur" }
         ]
       },
       showDialog: true,
@@ -97,7 +108,14 @@ export default {
       submitting: false,
       formModel: {},
       roomInfoList: [],
-      meterInfoList: []
+      meterInfoList:[],
+      props: {
+        id:'id',
+        label: 'name',
+        children: 'children'
+      },
+      isShowSelect: false,
+      count: 1
     };
   },
   computed: {
@@ -127,7 +145,6 @@ export default {
         if (valid) {
           (function() {
             var id = self.formModel.id;
-
             if (id == null || id.length == 0) {
               return electricClientInfoApi.add(self.formModel);
             } else {
@@ -187,7 +204,39 @@ export default {
           this.$message.error(jsonData.message + "");
         }
       });
-    }
+    },
+    handleNodeClick(data,Node) {
+      if (Node.parent.level === 2) {
+        this.formModel.roomName = data.name;
+        this.formModel.roomId = data.id;
+        // 关闭选择器
+        this.isShowSelect = false;
+      }
+    },
+    loadNode(node, resolve) {
+        if (node.level === 0) {
+          return roomInfoApi.queryTree(formData).then(response => {
+            var jsonData = response.data;
+            if (jsonData.result) {
+              return resolve(jsonData.data);
+            } else {
+              this.$message.error(jsonData.message + "");
+            }
+          });
+        }else{
+          var formData = new FormData();
+          var parentId = node.data.id;
+          formData.append("parentId", parentId);
+          return roomInfoApi.queryTree(formData).then(response => {
+            var jsonData = response.data;
+            if (jsonData.result) {
+              return resolve(jsonData.data);
+            } else {
+              this.$message.error(jsonData.message + "");
+            }
+          });
+        }
+      }
   },
   async mounted() {
     var self = this;

+ 59 - 14
src/views/base/electricClientInfo-list.vue

@@ -17,6 +17,9 @@
       <el-form-item label="户号" prop="customerNo">
         <el-input type="text" size="mini" v-model="queryModel.customerNo"></el-input>
       </el-form-item>
+      <el-form-item label="电表名称" prop="meterName">
+        <el-input type="text" size="mini" v-model="queryModel.meterName"></el-input>
+      </el-form-item>
       <el-form-item>
         <el-button
           type="primary"
@@ -55,38 +58,55 @@
     >
       <el-table-column type="selection" width="55"></el-table-column>
       <el-table-column
-        prop="customerNo"
-        sort-by="customer_no"
-        label="户号"
+        prop="area.name"
+        label="园区"
         sortable="custom"
         width="120"
       ></el-table-column>
-      <el-table-column prop="area.name" label="园区" sortable="custom" width="120"></el-table-column>
-      <el-table-column prop="building.name" label="楼栋" sortable="custom" width="120"></el-table-column>
-      <el-table-column prop="room.name" label="房间" sortable="custom" width="120"></el-table-column>
       <el-table-column
-        prop="meterName"
-        sort-by="meter_name"
-        label="电表名称"
+        prop="building.name"
+        label="楼栋"
         sortable="custom"
         width="120"
       ></el-table-column>
       <el-table-column
-        prop="room.useTypeN"
-        sort-by="use_type"
-        label="用电类型"
+        prop="room.name"
+        label="房间"
         sortable="custom"
         width="120"
       ></el-table-column>
+      <el-table-column
+        prop="meterName"
+        sort-by="meter_name"
+        label="电表名称"
+        sortable="custom"
+        width="180"
+      ></el-table-column>
+      <el-table-column
+        prop="customerNo"
+        sort-by="customer_no"
+        label="电表户号"
+        sortable="false"
+        width="90"
+      ></el-table-column>
+      <el-table-column prop="room.useTypeN" sort-by="use_type" label="用电类型" sortable="custom" width="90"></el-table-column>
       <el-table-column
         prop="electricityRemaining"
         sort-by="electricity_remaining"
         label="剩余电量"
-        sortable="custom"
-        width="180"
+        sortable="false"
+        width="90"
+      ></el-table-column>
+      <el-table-column
+        prop="rechargeTimes"
+        sort-by="recharge_times"
+        label="充电次数"
+        sortable="false"
+        width="90"
       ></el-table-column>
       <el-table-column label="操作">
         <template slot-scope="{row}">
+          <el-button size="mini" type="success" @click="handleSync(row)">查询电量</el-button>
           <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
           <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
         </template>
@@ -125,6 +145,7 @@ export default {
         customerNo: "",
         roomId: "",
         meterId: "",
+        meterName:"",
         electricityTotal: "",
         amountTotal: "",
         buyNum: "",
@@ -175,6 +196,8 @@ export default {
         self.queryModel.electricityRemaining
       );
       formData.append("amountRemaining", self.queryModel.amountRemaining);
+      formData.append("meterName", self.queryModel.meterName);
+      
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -224,6 +247,28 @@ export default {
       this.modalTitle = "编辑";
       this.businessKey = record.id;
       this.showModal = true;
+    },    
+    handleSync(record) {
+      var self = this;
+
+      self.loading = true;
+
+      electricClientInfoApi.syncDevice(record.id).then(function(response) {
+        var jsonData = response.data;
+
+        self.loading = false;
+
+        if (jsonData.result) {
+          // var index = self.tableData.indexOf(record);
+          // self.tableData.splice(index, 1);
+          self.changePage(self.pageIndex);
+
+          self.$message({
+            type: "success",
+            message: "查询成功!"
+          });
+        }
+      });
     },
     handleDelete(record) {
       var self = this;

+ 1 - 1
src/views/base/electricMeterInfo-detail.vue

@@ -35,7 +35,7 @@
             <el-option
               v-for="terminal in terminalListFilter"
               :key="terminal.id"
-              :label="terminal.name"
+              :label="terminal.remark"
               :value="terminal.id"
             ></el-option>
           </el-select>

+ 17 - 16
src/views/base/electricMeterInfo-list.vue

@@ -16,20 +16,21 @@
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
       <el-form-item label="所属终端" prop="terminalId">
         <el-select
-          v-model="queryModel.terminalId"
-          filterable
-          remote
-          placeholder
-          :remote-method="queryTerminal"
-          style="width:300px"
-        >
-          <el-option
-            v-for="terminal in queryTerminalResult"
-            :key="terminal.id"
-            :label="terminal.name"
-            :value="terminal.id"
-          ></el-option>
-        </el-select>
+            v-model="queryModel.terminalId"
+            filterable
+            remote
+            placeholder
+            size="mini"
+            :remote-method="queryTerminal"
+            style="width:300px"
+          >
+            <el-option
+              v-for="terminal in queryTerminalResult"
+              :key="terminal.id"
+              :label="terminal.remark"
+              :value="terminal.id"
+            ></el-option>
+          </el-select>
       </el-form-item>
       <el-form-item>
         <el-button
@@ -72,8 +73,8 @@
       <el-table-column prop="meterNo" sort-by="meter_no" label="表号" sortable="custom" width="180"></el-table-column>
       <el-table-column prop="unitNo" sort-by="unit_no" label="单位号" sortable="custom" width="180"></el-table-column>
       <el-table-column
-        prop="terminalName"
-        sort-by="terminalName"
+        prop="terminalRemark"
+        sort-by="terminalRemark"
         label="所属终端"
         sortable="custom"
         width="180"

+ 3 - 1
src/views/base/rechange-detail.vue

@@ -69,10 +69,12 @@ export default {
         if (valid) {
           (function() {
             self.formModel.clientId = self.businessKey;
+            self.submitting = true;
+
             return rechargeRecordApi.saveRecord(self.formModel);
           })().then(function(response) {
             var jsonData = response.data;
-
+            self.submitting = false;
             if (jsonData.result) {
               self.$message({
                 message: "保存成功!",

+ 151 - 8
src/views/base/rechange-list.vue

@@ -14,14 +14,57 @@
       要resetFields起作用,必须配置:model和prop
     -->
     <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
-      <el-form-item label="户号" prop="customerNo">
-        <el-input type="text" size="mini" v-model="queryModel.customerNo"></el-input>
+      <el-form-item label="园区" prop="areaId" >
+       <el-select
+            size="mini"
+            v-model="queryModel.areaId"
+            filterable
+            placeholder="请选择"
+            @change="changeArea"
+          >
+            <el-option
+              v-for="area in queryAreaResult"
+              :key="area.id"
+              :label="area.name"
+              :value="area.id"
+            ></el-option>
+        </el-select>
+      </el-form-item>
+      <el-form-item label="楼栋" prop="buildingId" >
+      <el-select
+            size="mini"
+            v-model="queryModel.buildingId"
+            filterable
+            placeholder="请选择"
+            @change="changeBuilding"
+          >
+            <el-option
+              v-for="building in queryBuildingResult"
+              :key="building.id"
+              :label="building.name"
+              :value="building.id"
+            ></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="房间号ID" prop="roomId">
-        <el-input type="text" size="mini" v-model="queryModel.roomId"></el-input>
+      <el-form-item label="房间" prop="roomsId" >
+      <el-select
+            size="mini"
+            v-model="queryModel.roomsId"
+            filterable
+            placeholder="请选择"
+            @change="changeRoom"
+          >
+            <el-option
+              v-for="rooms in queryRoomResult"
+              :key="rooms.id"
+              :label="rooms.name"
+              :value="rooms.id"
+            ></el-option>
+        </el-select>
       </el-form-item>
-      <el-form-item label="电表号ID" prop="meterId">
-        <el-input type="text" size="mini" v-model="queryModel.meterId"></el-input>
+      <pre></pre>
+      <el-form-item label="户号" prop="customerNo">
+        <el-input type="text" size="mini" v-model="queryModel.customerNo"></el-input>
       </el-form-item>
       <el-form-item>
         <el-button
@@ -79,9 +122,32 @@
         sortable="custom"
         width="120"
       ></el-table-column>
+      <el-table-column
+        prop="rechargeTimes"
+        sort-by="recharge_times"
+        label="充电次数"
+        sortable="custom"
+        width="180"
+      ></el-table-column>      
+      <el-table-column
+        label="开关"
+        width="80"
+      >
+        <template slot-scope="{row}">
+          <el-switch
+            v-model="row.active"
+            active-color="#13ce66"
+            inactive-color="#ff4949"
+            @change="powerSwitch(row)"
+            >
+          </el-switch>
+        </template>
+      </el-table-column>
       <el-table-column label="操作">
         <template slot-scope="{row}">
           <el-button size="mini" type="warning" @click="toRechange(row)">线下充值</el-button>
+          <!-- <el-button size="mini" type="success" @click="powerSwitch(row,1)">打开电源</el-button>
+          <el-button size="mini" type="danger" @click="pwoerSwitch(row,2)">关闭电源</el-button> -->
         </template>
       </el-table-column>
     </el-table>
@@ -105,6 +171,7 @@
 import Constant from "@/constant";
 import RechangeDetail from "./rechange-detail";
 import electricClientInfoApi from "@/api/base/electricClientInfo";
+import roomInfoApi from "@/api/base/roomInfo";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
@@ -127,7 +194,10 @@ export default {
         createTime: "",
         updateBy: "",
         updateTime: "",
-        delFlag: ""
+        delFlag: "",
+        areaId: "",
+        buildingId: "",
+        roomsId: ""
       },
       loading: false,
       tableData: [],
@@ -141,7 +211,10 @@ export default {
       multipleSelection: [],
       showModal: false,
       modalTitle: "",
-      businessKey: ""
+      businessKey: "",
+      queryAreaResult:[],
+      queryBuildingResult:[],
+      queryRoomResult:[]
     };
   },
   methods: {
@@ -168,6 +241,9 @@ export default {
         self.queryModel.electricityRemaining
       );
       formData.append("amountRemaining", self.queryModel.amountRemaining);
+      formData.append("areaId", self.queryModel.areaId);
+      formData.append("buildingId", self.queryModel.buildingId);
+      formData.append("roomsId", self.queryModel.roomsId);
 
       if (this.field != null) {
         formData.append("field", this.field);
@@ -220,9 +296,76 @@ export default {
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
+    },
+    selectRoomList(keywords,roomType){
+        var roomData = new FormData();
+        roomData.append("parentId",keywords);
+        roomData.append("type",roomType);
+        roomData.append("limit",100);
+
+        return roomInfoApi.query(roomData).then(response=>{
+          var jsonData = response.data;
+
+          if(jsonData.result){
+            console.log(jsonData.data);
+            if(roomType == "1"){
+              this.queryAreaResult = jsonData.data;
+            }else if(roomType == "2"){
+              this.queryModel.building = "";
+              this.queryModel.room = "";
+              this.queryBuildingResult = jsonData.data;
+            }else{
+              this.queryModel.room = "";
+              this.queryRoomResult = jsonData.data;
+            }
+          }
+          else{
+            this.$message.error(jsonData.message + "");
+          }
+        });
+    },
+    querySelectArea() {
+      this.queryModel.area = "";
+      this.queryModel.building = "";
+      this.queryModel.rooms = "";
+      this.selectRoomList("","1");
+    },
+    changeArea(keywords) {
+      this.queryModel.rooms = "";
+      this.queryRoomResult = "";
+      this.queryModel.building = "";
+      this.queryBuildingResult = "";
+      this.selectRoomList(keywords,"2");
+    },
+    changeBuilding(keywords) {
+      this.queryModel.rooms = "";
+      this.queryRoomResult = "";
+      this.selectRoomList(keywords,"3");
+    },
+    changeRoom(keywords){
+      this.$forceUpdate();
+    },
+    powerSwitch(record) {
+      var cmd = record.active ? 1 : 0;
+      electricClientInfoApi.powerSwitch(record.roomId, cmd).then(resp => {
+        var jsonData = resp.data;
+
+        if (jsonData.result) {
+          this.$message({
+            message: "操作成功!",
+            type: "success"
+          });
+        } else {
+          this.$message({
+            message: jsonData.message + "",
+            type: "warning"
+          });
+        }
+      });
     }
   },
   mounted: function() {
+    this.querySelectArea();
     this.changePage(1);
   },
   components: {

+ 202 - 34
src/views/base/rechargeRecord-list.vue

@@ -13,38 +13,108 @@
     <!--
       要resetFields起作用,必须配置:model和prop
     -->
-    <el-form ref="queryForm" :model="queryModel" inline class="demo-form-inline">
-      <el-form-item label="交易流水号" prop="serialNumber">
-        <el-input type="text" size="mini" v-model="queryModel.serialNumber"></el-input>
-      </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 ref="queryForm" :model="queryModel" inline class="demo-form-inline" label-width="100px">
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="园区" prop="areaId">
+            <el-select
+              size="mini"
+              v-model="queryModel.areaId"
+              filterable
+              placeholder="请选择"
+              @change="changeArea"
+            >
+              <el-option
+                v-for="area in queryAreaResult"
+                :key="area.id"
+                :label="area.name"
+                :value="area.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="楼栋" prop="buildingId">
+            <el-select
+              size="mini"
+              v-model="queryModel.buildingId"
+              filterable
+              placeholder="请选择"
+              @change="changeBuilding"
+            >
+              <el-option
+                v-for="building in queryBuildingResult"
+                :key="building.id"
+                :label="building.name"
+                :value="building.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="房间" prop="roomsId">
+            <el-select
+              size="mini"
+              v-model="queryModel.roomsId"
+              filterable
+              placeholder="请选择"
+              @change="changeRoom"
+            >
+              <el-option
+                v-for="rooms in queryRoomResult"
+                :key="rooms.id"
+                :label="rooms.name"
+                :value="rooms.id"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <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-col>
+      </el-row>
+      <el-row>
+        <el-col :span="6">
+          <el-form-item label="交易流水号" prop="serialNumber">
+            <el-input type="text" size="mini" v-model="queryModel.serialNumber" style="width:190px;"></el-input>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="支付类型" prop="buyType" placeholder="请选择">
+            <el-select size="mini" v-model="queryModel.buyType">
+              <el-option value="alipay" label="支付宝" />
+              <el-option value="weipay" label="微信" />
+              <el-option value="cash" label="线下支付" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+        <el-col :span="6">
+          <el-form-item label="支付状态" prop="paymentStatus" placeholder="请选择">
+            <el-select size="mini" v-model="queryModel.paymentStatus">
+              <el-option value="10" label="未支付"/>
+              <el-option value="20" label="已支付" />
+              <el-option value="30" label="支付失败" />
+            </el-select>
+          </el-form-item>
+        </el-col>
+      </el-row>
     </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">新增</el-button>
-      <el-button
-        type="primary"
-        size="small"
-        plain
-        icon="el-icon-circle-plus"
-        :disabled="multipleSelection.length==0"
-        @click="handleBatchDelete"
-      >删除选中项</el-button>
-    </el-row>
+    <el-row class="button-group"></el-row>
     <el-table
       :data="tableData"
       style="min-height:400px;"
@@ -63,6 +133,13 @@
       <el-table-column prop="area.name" label="园区" sortable="custom" width="120"></el-table-column>
       <el-table-column prop="building.name" label="楼栋" sortable="custom" width="120"></el-table-column>
       <el-table-column prop="room.name" label="房间" sortable="custom" width="120"></el-table-column>
+      <el-table-column
+        prop="dumpEnergy"
+        sort-by="dump_energy"
+        label="剩余电量"
+        sortable="custom"
+        width="120"
+      ></el-table-column>
       <el-table-column
         prop="buyElectricity"
         sort-by="buy_electricity"
@@ -77,20 +154,45 @@
         sortable="custom"
         width="120"
       ></el-table-column>
-      <el-table-column prop="buyType" sort-by="buy_type" label="支付类型" sortable="custom" width="120"></el-table-column>
+      <el-table-column prop="buyType" sort-by="buy_type" label="支付类型" sortable="custom" width="120">
+        <template slot-scope="scope">
+          <p v-if="scope.row.buyType=='alipay'">支付宝</p>
+          <p v-if="scope.row.buyType=='weipay'">微信</p>
+          <p v-if="scope.row.buyType=='cash'">线下支付</p>
+        </template>
+      </el-table-column>
       <el-table-column
         prop="paymentStatus"
         sort-by="payment_status"
         label="支付状态"
         sortable="custom"
         width="120"
-      ></el-table-column>
+      >
+        <template slot-scope="scope">
+          <p v-if="scope.row.paymentStatus=='10'">未支付</p>
+          <p v-if="scope.row.paymentStatus=='20'">已支付</p>
+          <p v-if="scope.row.paymentStatus=='30'">支付失败</p>
+        </template>
+      </el-table-column>
       <el-table-column
         prop="chargingStatus"
         sort-by="charging_status"
         label="充电状态"
         sortable="custom"
         width="120"
+      >
+        <template slot-scope="scope">
+          <p v-if="scope.row.chargingStatus=='10'">未充电</p>
+          <p v-if="scope.row.chargingStatus=='20'">已充电</p>
+          <p v-if="scope.row.chargingStatus=='30'">充电失败</p>
+        </template>
+      </el-table-column>
+      <el-table-column
+        prop="createTime"
+        sort-by="create_time"
+        label="创建时间"
+        sortable="custom"
+        width="180"
       ></el-table-column>
       <el-table-column
         prop="paymentTime"
@@ -120,6 +222,7 @@
 import Constant from "@/constant";
 import RechargeRecordDetail from "./rechargeRecord-detail";
 import rechargeRecordApi from "@/api/base/rechargeRecord";
+import roomInfoApi from "@/api/base/roomInfo";
 import NProgress from "nprogress"; // progress bar
 import "nprogress/nprogress.css"; // progress bar style
 
@@ -138,7 +241,11 @@ export default {
         serialNumber: "",
         buyAmount: "",
         buyElectricity: "",
-        buyType: ""
+        buyType: "",
+        paymentStatus: "20",
+        areaId: "",
+        buildingId: "",
+        roomsId: ""
       },
       loading: false,
       tableData: [],
@@ -152,7 +259,10 @@ export default {
       multipleSelection: [],
       showModal: false,
       modalTitle: "",
-      businessKey: ""
+      businessKey: "",
+      queryAreaResult: [],
+      queryBuildingResult: [],
+      queryRoomResult: []
     };
   },
   methods: {
@@ -178,6 +288,11 @@ export default {
       formData.append("buyElectricity", self.queryModel.buyElectricity);
       formData.append("buyType", self.queryModel.buyType);
 
+      formData.append("paymentStatus", self.queryModel.paymentStatus);
+      formData.append("areaId", self.queryModel.areaId);
+      formData.append("buildingId", self.queryModel.buildingId);
+      formData.append("roomsId", self.queryModel.roomsId);
+
       if (this.field != null) {
         formData.append("field", this.field);
       }
@@ -286,10 +401,59 @@ export default {
       if (refreshed) {
         this.changePage(this.pageIndex);
       }
+    },
+    selectRoomList(keywords, roomType) {
+      var roomData = new FormData();
+      roomData.append("parentId", keywords);
+      roomData.append("type", roomType);
+      roomData.append("limit", 100);
+
+      return roomInfoApi.query(roomData).then(response => {
+        var jsonData = response.data;
+
+        if (jsonData.result) {
+          console.log(jsonData.data);
+          if (roomType == "1") {
+            this.queryAreaResult = jsonData.data;
+          } else if (roomType == "2") {
+            this.queryModel.building = "";
+            this.queryModel.room = "";
+            this.queryBuildingResult = jsonData.data;
+          } else {
+            this.queryModel.room = "";
+            this.queryRoomResult = jsonData.data;
+          }
+        } else {
+          this.$message.error(jsonData.message + "");
+        }
+      });
+    },
+    querySelectArea() {
+      this.queryModel.area = "";
+      this.queryModel.building = "";
+      this.queryModel.rooms = "";
+      this.selectRoomList("", "1");
+    },
+    changeArea(keywords) {
+      this.queryModel.rooms = "";
+      this.queryRoomResult = "";
+      this.queryModel.building = "";
+      this.queryBuildingResult = "";
+      this.selectRoomList(keywords, "2");
+    },
+    changeBuilding(keywords) {
+      this.queryModel.rooms = "";
+      this.queryRoomResult = "";
+      this.selectRoomList(keywords, "3");
+    },
+    changeRoom(keywords) {
+      this.$forceUpdate();
     }
   },
   mounted: function() {
+    this.querySelectArea();
     this.changePage(1);
+    this.queryModel.paymentStatus = "20";
   },
   components: {
     "rechargeRecord-detail": RechargeRecordDetail
@@ -309,6 +473,10 @@ export default {
 .demo-form-inline {
   margin-left: 10px;
   text-align: left;
+
+  .el-form-item{
+    margin-bottom: 0px;
+  }  
 }
 
 .button-group {

+ 20 - 20
src/views/base/roomInfo-detail.vue

@@ -16,11 +16,8 @@
         <el-form-item label="名称" prop="name">
           <el-input v-model="formModel.name" placeholder="请输入名称" style="width:300px"></el-input>
         </el-form-item>
-        <el-form-item label="编号" prop="number">
-          <el-input v-model="formModel.number" placeholder="请输入编号" style="width:300px"></el-input>
-        </el-form-item>
         <el-form-item label="类型:" prop="type">
-          <el-select v-model="formModel.type" @change="selectType">
+          <el-select v-model="formModel.type" @change="selectType" disabled="disabled">
             <el-option label="园区" value="1"></el-option>
             <el-option label="楼栋" value="2"></el-option>
             <el-option label="房号" value="3"></el-option>
@@ -55,7 +52,7 @@
             placeholder
             :remote-method="queryRoomInfo"
             style="width:300px"
-            :disabled="parentDisabled"
+            :disabled="true"
           >
             <el-option
               v-for="roomInfo in roomInfoListFilter"
@@ -64,7 +61,7 @@
               :value="roomInfo.id"
             ></el-option>
           </el-select>
-        </el-form-item>
+        </el-form-item> 
       </el-form>
     </div>
     <span slot="footer" class="dialog-footer">
@@ -79,14 +76,14 @@ import roomInfoApi from "@/api/base/roomInfo";
 import dataDictionaryApi from "@/api/sys/dataDictionary";
 
 export default {
-  props: ["businessKey", "title", "parentId"],
+  props: ["businessKey", "title","parentId"],
   data() {
     var validateUseType = (rule, value, callback) => {
-      if (this.formModel.type == 3 && value === "") {
-        callback(new Error("用电类型不能为空!"));
-      } else {
-        callback();
-      }
+        if(this.formModel.type == 3 && value==='') {
+          callback(new Error('用电类型不能为空!'));
+        } else {
+          callback();
+        }
     };
 
     return {
@@ -99,7 +96,9 @@ export default {
             trigger: "change"
           }
         ],
-        useType: [{ validator: validateUseType, trigger: "blur" }],
+        useType: [
+          { validator: validateUseType, trigger: "blur" }
+        ],
         sortNo: [{ required: true, message: "排序号不能为空", trigger: "blur" }]
       },
       roomInfoList: [],
@@ -121,11 +120,11 @@ export default {
 
       var roomMap = {};
 
-      self.roomInfoList.forEach(room => {
+      self.roomInfoList.forEach((room)=>{
         roomMap[room.id] = room;
       });
 
-      for (var key in roomMap) {
+      for(var key in roomMap){
         list.push(roomMap[key]);
       }
 
@@ -158,8 +157,8 @@ export default {
               });
 
               self.$emit("close", {
-                result: true,
-                data: jsonData.data
+                result : true,
+                data : jsonData.data
               });
             } else {
               self.$message({
@@ -168,7 +167,7 @@ export default {
               });
 
               self.$emit("close", {
-                result: false
+                result : false
               });
             }
           });
@@ -177,6 +176,7 @@ export default {
     },
     queryRoomInfo(keywords) {
       var formData = new FormData();
+      
       formData.append("keywords", keywords);
       formData.append("parentType", this.parentType);
       //formData.append("excludeId", this.formModel.id);
@@ -226,7 +226,7 @@ export default {
   async mounted() {
     var self = this;
     self.loading = true;
-
+    
     await this.queryUseType("d18b7e03-63ed-4d86-b2b3-b93a7de2673b");
     await this.queryRoomInfo("");
 
@@ -240,7 +240,7 @@ export default {
       .then(response => {
         var jsonData = response.data;
         self.loading = false;
-
+        
         if (jsonData.result) {
           self.formModel = jsonData.data;
 

+ 39 - 41
src/views/base/roomInfo-list.vue

@@ -25,7 +25,7 @@
         icon="el-icon-circle-plus"
         :disabled="multipleSelection.length==0"
         @click="handleBatchDelete"
-      >删除选中项</el-button>-->
+      >删除选中项</el-button> -->
     </el-row>
     <el-table
       :data="tableData"
@@ -39,7 +39,6 @@
       @selection-change="handleSelectionChange"
     >
       <el-table-column prop="name" sort-by="name_" label="名称" sortable="custom" width="180"></el-table-column>
-      <el-table-column prop="number" sort-by="number_" label="编号" sortable="custom" width="180"></el-table-column>
       <el-table-column prop="type" sort-by="type_" label="类型" sortable="custom" width="180">
         <template slot-scope="scope">
           <p v-if="scope.row.type=='1'">园区</p>
@@ -57,12 +56,9 @@
       <el-table-column prop="sortNo" sort-by="sort_no" label="排序号" sortable="custom" width="180"></el-table-column>
       <el-table-column label="操作">
         <template slot-scope="{row}">
-          <el-button
-            size="mini"
-            type="primary"
-            @click="handleAdd(row)"
-            v-show="row.type!=3"
-          >{{row.type==1 ? "添加楼栋" : "添加房间"}}</el-button>
+          <el-button size="mini" type="primary" @click="handleAdd(row)" v-show="row.type!=3">
+              {{row.type==1 ? "添加楼栋" : "添加房间"}}
+          </el-button>
           <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>
           <el-button size="mini" type="danger" @click="handleDelete(row)">删除</el-button>
         </template>
@@ -114,9 +110,9 @@ export default {
       multipleSelection: [],
       showModal: false,
       modalTitle: "",
-      operation: "",
+      operation:'',
       businessKey: "",
-      selectedRecord: null
+      selectedRecord : null
       //loadNodeMap: new Map()
     };
   },
@@ -125,7 +121,7 @@ export default {
       if (row != null) {
         const id = row.id;
         var formData = new FormData();
-
+        
         formData.append("parentId", id);
         // const pid = tree.id;
         // this.loadNodeMap.set(pid, { tree, treeNode, resolve });
@@ -204,9 +200,10 @@ export default {
       this.operation = "add";
       this.businessKey = "";
 
-      if (record != null) {
+      if(record!=null){
         this.selectedRecord = record;
-      } else {
+      }
+      else{
         this.selectedRecord = {};
       }
 
@@ -219,40 +216,40 @@ export default {
       this.selectedRecord = record;
       this.showModal = true;
     },
-    loopDelete(list, id) {
+    loopDelete(list,id){
       var rs = false;
 
-      for (var i = 0; i < list.length; i++) {
-        if (list[i].id == id) {
-          list.splice(i, 1);
+      for(var i=0;i<list.length;i++){
+        if(list[i].id == id){
+          list.splice(i,1);
           rs = true;
           break;
         }
 
-        if (list[i].children != null) {
-          rs = this.loopDelete(list[i].children, id);
+        if(list[i].children!=null){
+          rs = this.loopDelete(list[i].children,id);
 
-          if (rs) {
+          if(rs){
             break;
           }
         }
       }
 
       return rs;
-    },
-    loopFind(list, id) {
+    },    
+    loopFind(list,id){
       var rs = null;
 
-      for (var i = 0; i < list.length; i++) {
-        if (list[i].id == id) {
+      for(var i=0;i<list.length;i++){
+        if(list[i].id == id){
           rs = list[i];
           break;
         }
 
-        if (list[i].children != null) {
-          rs = this.loopFind(list[i].children, id);
+        if(list[i].children!=null){
+          rs = this.loopFind(list[i].children,id);
 
-          if (rs != null) {
+          if(rs!=null){
             break;
           }
         }
@@ -263,8 +260,7 @@ export default {
     handleDelete(record) {
       var self = this;
 
-      self
-        .$confirm("是否确认删除?", "提示", {
+      self.$confirm("是否确认删除?", "提示", {
           confirmButtonText: "确定",
           cancelButtonText: "取消",
           type: "warning"
@@ -274,7 +270,7 @@ export default {
             var jsonData = response.data;
 
             if (jsonData.result) {
-              var rs = self.loopDelete(self.tableData, record.id);
+              var rs = self.loopDelete(self.tableData,record.id);
 
               self.$message({
                 type: "success",
@@ -317,32 +313,34 @@ export default {
       if (retObj.result) {
         var retData = retObj.data;
 
-        if (this.operation == "edit") {
+        if(this.operation=="edit"){
           this.selectedRecord.name = retData.name;
           this.selectedRecord.number = retData.number;
           this.selectedRecord.type = retData.type;
           this.selectedRecord.useType = retData.useType;
           this.selectedRecord.sortNo = retData.sortNo;
 
-          if (this.selectedRecord.parentId != retData.parentId) {
-            this.loopDelete(this.tableData, this.selectedRecord.id);
+          if(this.selectedRecord.parentId != retData.parentId){
+            this.loopDelete(this.tableData,this.selectedRecord.id);
 
-            var parent = this.loopFind(this.tableData, retData.parentId);
+            var parent = this.loopFind(this.tableData,retData.parentId);
 
-            if (parent != null) {
-              if (parent.children == null) {
-                parent.children = [];
+            if(parent!=null){
+              if(parent.children==null){
+                parent.children = []
               }
 
               parent.children.push(retData);
             }
           }
-        } else if (this.operation == "add") {
-          if (this.selectedRecord.id == null) {
+        }
+        else if(this.operation=="add"){
+          if(this.selectedRecord.id==null){
             console.log("tableData.push");
             this.tableData.push(retData);
-          } else {
-            if (this.selectedRecord.children == null) {
+          }
+          else{
+            if(this.selectedRecord.children==null){
               this.selectedRecord.children = [];
             }
 

+ 1 - 3
src/views/base/terminalInfo-detail.vue

@@ -39,9 +39,7 @@ export default {
   data() {
     return {
       ruleValidate: {
-        name: [
-          { required: true, message: "终端名称不能为空", trigger: "blur" }
-        ],
+        name: [{ required: true, message: "终端名称不能为空", trigger: "blur" }],
         sortNo: [{ required: true, message: "排序号不能为空", trigger: "blur" }]
       },
       showDialog: true,

+ 13 - 0
src/views/base/terminalInfo-list.vue

@@ -57,6 +57,19 @@
       <el-table-column prop="name" sort-by="name_" label="终端名称" sortable="custom" width="180"></el-table-column>
       <el-table-column prop="remark" sort-by="remark_" label="备注" sortable="custom" width="180"></el-table-column>
       <el-table-column prop="sortNo" sort-by="sort_no" label="排序号" sortable="custom" width="180"></el-table-column>
+      <el-table-column
+        label="是否在线"
+        width="80"
+      >
+        <template slot-scope="{row}">
+          <el-switch
+            v-model="row.active"
+            active-color="#13ce66"
+            disabled
+            >
+          </el-switch>
+        </template>
+      </el-table-column>
       <el-table-column label="操作">
         <template slot-scope="{row}">
           <el-button size="mini" type="warning" @click="handleEdit(row)">编辑</el-button>