panxiandiao_i 5 éve
szülő
commit
23b2c38130

+ 9 - 0
src/api/defectManage.js

@@ -60,6 +60,15 @@ export function taskListCreate(data) {
     data
   })
 }
+// 任务管理列表获取
+export function taskListGet(data) {
+  return request({
+    url: mockUrl + '/task/list',
+    method: 'post',
+    data
+  })
+}
+
 // 下拉
 export function bugGetEnum() {
   return request({

+ 110 - 0
src/api/htVehicle.js

@@ -0,0 +1,110 @@
+import request from '@/utils/request'
+import { mockUrl } from '@/apiConfig/virtualDevices'
+// ================================== Rule ======================================
+
+// 获取锁类型、锁供应商类型
+export function queryLockCreateInfo() {
+  return request({
+    url: mockUrl + '/htw/device/queryLockCreateInfo',
+    method: 'get'
+  })
+}
+
+// 查看详情
+export function queryVehicleCreateInfo(params) {
+  return request({
+    url: mockUrl + `/htw/device/queryVehicleCreateInfo?lockModel=` + params,
+    method: 'get',
+    params
+  })
+}
+
+// 获取车类型、车辆供应商类型
+// export function queryVehicleCreateInfo(data) {
+//     return request({
+//         url: mockUrl + '/htw/device/queryVehicleCreateInfo',
+//         method: 'post',
+//         data
+//     })
+// }
+
+// 新建设备
+export function createDevice(data) {
+  return request({
+    url: mockUrl + '/htw/device/createDevice',
+    method: 'post',
+    data
+  })
+}
+
+// 删除设备
+export function deleteDevice(data) {
+  return request({
+    url: mockUrl + `/htw/device/deleteDevice?vehicleId=` + data,
+    method: 'get',
+    data
+  })
+}
+
+// 设备上线开关
+export function deviceOnline(data) {
+  return request({
+    url: mockUrl + '/htw/device/opt/deviceOnline?lockNo=' + data,
+    method: 'get',
+    data
+  })
+}
+
+// 设备下线开关
+export function deviceOffline(data) {
+  return request({
+    url: mockUrl + '/htw/device/opt/deviceOffline?lockNo=' + data,
+    method: 'get',
+    data
+  })
+}
+
+// 设备开锁
+export function unlockVehicle(data) {
+  return request({
+    url: mockUrl + '/htw/device/opt/unlockVehicle?lockNo=' + data,
+    method: 'get',
+    data
+  })
+}
+
+// 设备关锁
+export function lockVehicle(data) {
+  return request({
+    url: mockUrl + '/htw/device/opt/lockVehicle?vehicleId=' + data,
+    method: 'get',
+    data
+  })
+}
+
+// 编辑
+export function updateLockAttr(data) {
+  return request({
+    url: mockUrl + '/htw/user/device/updateLockAttr',
+    method: 'post',
+    data
+  })
+}
+
+// 查询用户设备详情(首页刚进来)
+export function getDevices(data) {
+  return request({
+    url: mockUrl + '/htw/user/device/getDevices',
+    method: 'post',
+    data
+  })
+}
+
+// 查询设备属性
+export function getLockAttrInfo(data) {
+  return request({
+    url: mockUrl + '/htw/user/device/getLockAttrInfo',
+    method: 'post',
+    data
+  })
+}

+ 3 - 0
src/apiConfig/virtualDevices.js

@@ -0,0 +1,3 @@
+/*eslint-disable*/ //规避eslint的检查,如没有eslint可不写
+// export const mockUrl = 'http://mock.Intra.xiaojukeji.com' // 线上
+export const mockUrl = 'http://10.96.113.197:9999/virtual-devices' // 线下

+ 76 - 26
src/router/index.js

@@ -86,10 +86,60 @@ export const constantRoutes = [
         meta: { title: '我的工作台' }
       },
       {
-        path: 'projectPage',
-        name: 'projectPage',
-        component: () => import('@/views/Platform/projectPage'),
-        meta: { title: '项目管理' }
+        path: '/Platform/projectManage',
+        name: '项目管理',
+        component: () => import('@/views/Platform/presentation/testa'),
+        redirect: '/Platform/projectManage/projectList',
+        meta: { title: '项目管理' },
+        children: [
+          {
+            path: 'projectList',
+            name: '项目列表',
+            component: () => import('@/views/projectManage/projectList/projectListIndex'),
+            meta: { title: '项目列表' }
+          },
+          {
+            path: 'projectCreate',
+            hidden: true,
+            name: '项目创建',
+            component: () => import('@/views/projectManage/projectList/projectCreate'),
+            meta: { title: '项目创建' }
+          },
+          {
+            path: 'projectPreview',
+            hidden: true,
+            name: '项目查看',
+            component: () => import('@/views/projectManage/projectList/projectPreview'),
+            meta: { title: '项目查看' }
+          },
+          {
+            path: 'taskList',
+            name: '任务列表',
+            component: () => import('@/views/projectManage/taskList/taskListIndex'),
+            meta: { title: '任务列表' }
+          },
+          {
+            path: 'taskCreate',
+            hidden: true,
+            name: '任务创建',
+            component: () => import('@/views/projectManage/taskList/taskCreate'),
+            meta: { title: '任务创建' }
+          },
+          {
+            path: 'taskPreview',
+            hidden: true,
+            name: '任务查看',
+            component: () => import('@/views/projectManage/taskList/taskPreview'),
+            meta: { title: '任务查看' }
+          },
+          {
+            path: 'taskUpdate',
+            hidden: true,
+            name: '任务更新',
+            component: () => import('@/views/projectManage/taskList/taskUpdateCreate'),
+            meta: { title: '任务更新' }
+          }
+        ]
       },
       {
         path: '/Platform/useCasePage',
@@ -420,28 +470,28 @@ export const constantRoutes = [
     ]
   },
 
-  // {
-  //   path: '/virtualDevices',
-  //   component: Layout,
-  //   redirect: '/virtualDevices/HTvehicle',
-  //   name: '虚拟硬件',
-  //   meta: { title: '虚拟硬件', icon: 'module' },
-  //   children: [
-  //     {
-  //       path: 'HTvehicle',
-  //       name: '单车',
-  //       component: () => import('@/views/virtualDevices/HTvehicle'),
-  //       meta: { title: '单车' }
-  //     },
-  //     {
-  //       path: 'HTvehicl1e',
-  //       name: '电单车'
-  //       // hidden: true,
-  //       // component: () => import('@/views/virtualDevices/HTvehicle'),
-  //       // meta: { title: '电单车' }
-  //     }
-  //   ]
-  // },
+  {
+    path: '/virtualDevices',
+    component: Layout,
+    redirect: '/virtualDevices/HTvehicle',
+    name: '虚拟硬件',
+    meta: { title: '虚拟硬件', icon: 'module' },
+    children: [
+      {
+        path: 'HTvehicle',
+        name: '单车',
+        component: () => import('@/views/virtualDevices/HTvehicle'),
+        meta: { title: '单车' }
+      },
+      {
+        path: 'HTvehicl1e',
+        name: '电单车'
+        // hidden: true,
+        // component: () => import('@/views/virtualDevices/HTvehicle'),
+        // meta: { title: '电单车' }
+      }
+    ]
+  },
 
   {
     path: '/online-quality',

+ 3 - 1
src/views/projectManage/projectList/projectListIndex.vue

@@ -137,7 +137,9 @@ export default {
       }
       projectInit(this.queryListData).then(response => {
         this.list = response.data
-        this.total = this.list.length
+        if (response.data) {
+          this.total = response.data.length
+        }
         this.statusOptionss = response.query.processStatusEnumList
       })
     },

+ 0 - 0
src/views/virtualDevices/HMvehicle.vue


+ 689 - 0
src/views/virtualDevices/HTvehicle.vue

@@ -0,0 +1,689 @@
+<template>
+  <div class="set-background">
+    <div class="block">
+      <el-form :model="listQuery">
+        <div class="set-head">
+          车辆ID<el-input v-model="listQuery.vehicleId" placeholder="请填写" style="width:18%;" /> &nbsp;
+          锁ID <el-input v-model="listQuery.lockNo" placeholder="请填写" style="width:18%;" />&nbsp;
+          锁类型 <el-select v-model="listQuery.lockModel" placeholder="请填写" style="width:18%;" filterable clearable>
+            <el-option v-for="item in lockModelList" :key="item.model" :label="item.modelName" :value="item.model" />
+          </el-select>&nbsp;
+          状态 <el-select v-model="listQuery.lockStatus" placeholder="请填写" style="width: 18%;" filterable clearable>
+            <el-option v-for="item in lockStatusOptions" :key="item.value" :label="item.label" :value="item.value" />
+          </el-select>&nbsp;
+        </div>
+        <div class="set-between">
+          <el-button type="primary" icon="el-icon-search" @click="getDevicesList(listQuery)">搜索</el-button>
+          <el-button type="primary" icon="el-icon-edit" @click="dialogFormVisible = true, createdCode()">新增</el-button>
+        </div>
+      </el-form>
+      <div class="set-locate">
+        <el-table :key="tableKey" :data="list" fit highlight-current-row style="width: 100%;" border :header-cell-style="{background:'#F0F7FF',color:'#606266'}">
+          <el-table-column label="车辆ID" prop="vehicleId" align="center" min-width="120">
+            <template slot-scope="scope"><a href="javascript:void(0)" style="color:#20a0ff" @click="dialogDetailVisible = true,deviceDetails(scope.row)">{{ scope.row.vehicleId }}</a></template>
+          </el-table-column>
+          <!-- <el-table-column label="锁ID" min-width="100px" align="center">
+            <template slot-scope="scope"><span>{{ scope.row.lockNo }}</span></template>
+          </el-table-column> -->
+          <el-table-column label="锁ID" prop="lockNo" min-width="100px" align="center" />
+          <el-table-column label="锁类型" min-width="80px" align="center">
+            <template slot-scope="scope"><span>{{ scope.row.lockModelInfo.modelName }}</span></template>
+          </el-table-column>
+
+          <el-table-column label="在线状态" class-name="status-col" min-width="100">
+            <template slot-scope="{row}"><el-tag :type="row.isOnline | statusFilter">{{ statusMaps.get(row.isOnline) }}</el-tag></template>
+          </el-table-column>
+          <el-table-column label="锁状态" class-name="status-col" min-width="100px">
+            <template slot-scope="{row}"><el-tag :type="row.lockStatus | statusFilter">{{ lockStatusMaps.get(row.lockStatus) }}</el-tag></template>
+          </el-table-column>
+          <el-table-column label="经度" min-width="80px" align="center">
+            <template slot-scope="scope"><span>{{ scope.row.deviceLng }}</span></template>
+          </el-table-column>
+          <el-table-column label="纬度" min-width="80px" align="center">
+            <template slot-scope="scope"><span>{{ scope.row.deviceLat }}</span></template>
+          </el-table-column>
+          <el-table-column label="创建时间" min-width="120px" align="center">
+            <template slot-scope="scope"><span>{{ scope.row.createTime }}</span></template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" min-width="300px" class-name="small-padding fixed-width" fixed="right">
+            <template slot-scope="{row}">
+              <el-button v-if="row.isOnline!=1" size="mini" type="success" @click="handleDeviceStatus(row, 1)">上线</el-button>
+              <el-button v-if="row.isOnline!=0" size="mini" type="danger" @click="handleDeviceStatus(row, 0)">下线</el-button>
+              <el-button type="primary" size="mini" @click="handleUpdate(row)">编辑</el-button>
+              <el-button type="danger" size="mini" @click="deleteCodeData(row)">删除</el-button>
+              <el-button v-if="row.lockStatus!=0" size="mini" type="info" @click="handleLockStatus(row, 0)">关锁</el-button>
+              <el-button v-if="row.lockStatus!=1" size="mini" type="warning" @click="handleLockStatus(row, 1)">开锁</el-button>
+              <!-- <i v-if="row.lockStatus!=0" style="font-size: 25px;" class="el-icon-unlock" @click="handleLockStatus(row, 0)" />
+              <i v-if="row.lockStatus!=1" style="font-size: 25px;" class="el-icon-lock" @click="handleLockStatus(row, 1)" /> -->
+
+            </template>
+          </el-table-column>
+        </el-table>
+
+        <el-pagination
+          align="center"
+          background
+          layout="prev, pager, next"
+          :total="1000"
+        />
+      </div>
+    </div>
+
+    <!-- 新增 -->
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogFormVisible" width="75%">
+      <el-form ref="addDeviceForms" :rules="addDeviceDataRules" :model="addDeviceData" label-position="left" label-width="80px" style="width: 100%; margin-left:0px; margin-top:25px">
+        <div class="set-font" style="display:flex;justfy-content:space-between" width="100%">
+          <div style="margin-left: 14%;">
+            <el-form-item label="业务线" prop="bizType">
+              <el-input v-model="addDeviceData.bizType" :disabled="true" style="width:100%;" placeholder="单车" />
+            </el-form-item>
+
+            <el-form-item label="锁类型" prop="lockModel">
+              <el-select v-model="addDeviceData.lockModel" class="filter-item" filterable clearable placeholder="请填写" @change="chooseLockType()">
+                <el-option v-for="item in lockModelList" :key="item.model" :label="item.modelName" :value="item.model" />
+              </el-select>
+            </el-form-item>
+
+            <el-form-item label="锁供应商" prop="lockSupplier">
+              <el-select v-model="addDeviceData.lockSupplier" :disabled="shouldShow" class="filter-item" filterable clearable placeholder="请填写">
+                <el-option v-for="item in lockSupplierList" :key="item.supplierId" :label="item.supplierName" :value="item.supplierId" />
+              </el-select>
+            </el-form-item>
+          </div>
+          <div style="margin-left: 10%;">
+            <el-form-item label="车辆个数" prop="deviceNum">
+              <el-input v-model="addDeviceData.deviceNum" style="width:100%;" placeholder="请填写" />
+            </el-form-item>
+
+            <el-form-item label="车供应商" style="flex-grow:1" prop="bikeSupplier">
+              <el-select v-model="addDeviceData.bikeSupplier" class="filter-item" filterable clearable placeholder="请填写">
+                <el-option v-for="item in bikeSupplierList" :key="item.supplierId" :label="item.supplierName" :value="item.supplierId" />
+              </el-select>
+            </el-form-item>
+
+            <el-form-item label="车辆类型" prop="bikeModel">
+              <el-select v-model="addDeviceData.bikeModel" class="filter-item" filterable clearable placeholder="请填写">
+                <el-option v-for="item in bikeModelList" :key="item.model" :label="item.modelName" :value="item.model" />
+              </el-select>
+            </el-form-item>
+          </div>
+        </div>
+      </el-form>
+      <br><br><br>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogFormVisible = false">取消</el-button>
+        <el-button v-if="showSubmitBtn" type="primary" @click="createData(addDeviceData)">确定</el-button>
+      </div>
+    </el-dialog>
+    <!-- 查看详情 -->
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogDetailVisible" width="73%">
+      <el-form ref="serviceDataForms" :rules="serviceDataRules" :model="detailData" label-width="70px" style="width: 100%; margin-left:80px;">
+        <!-- <div class="set-font" style="display:flex;justfy-content:space-between">
+          <div style="margin-left: 20%;">
+            <el-form-item label="业务线" prop="bizType">
+              <el-input v-model="detailData.bizType" :disabled="true" style="width:200px;" placeholder="单车" />
+            </el-form-item>
+
+            <el-form-item label="锁ID" prop="lockNo">
+              <el-input v-model="detailData.lockNo" :disabled="true" style="width:200px;color:#3e3c3c !important" placeholder="无" />
+            </el-form-item>
+
+            <el-form-item label="车辆ID" prop="vehicleId">
+              <el-input v-model="detailData.vehicleId" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="锁状态" prop="lockStatus">
+              <el-input v-model="detailData.lockStatus" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="经度" prop="deviceLng">
+              <el-input v-model="detailData.deviceLng" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="纬度" prop="deviceLat">
+              <el-input v-model="detailData.deviceLat" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+
+          </div>
+          <div style="margin-left: 30%;">
+            <el-form-item label="EcuID" prop="deviceId">
+              <el-input v-model="detailData.deviceId" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="IccID" prop="iccid">
+              <el-input v-model="detailData.iccid" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="Mac地址" prop="macAddr">
+              <el-input v-model="detailData.macAddr" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="电量信息" prop="lockBatteryLevel">
+              <el-input v-model="detailData.lockBatteryLevel" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="bluetooth_key" prop="bluetoothKey">
+              <el-input v-model="detailData.bluetoothKey" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+            <el-form-item label="bluetooth_password" prop="bluetoothPassword">
+              <el-input v-model="detailData.bluetoothPassword" :disabled="true" style="width:200px;" placeholder="无" />
+            </el-form-item>
+
+          </div>
+        </div> -->
+        <!-- <div class="set-font" style="width:100%"> -->
+        <div class="table-th" style="width:82%;margin-top=15px">
+          <table cellspacing="0" width="103%;" bordercolor="#ddd" class="border-color">
+            <tr width="100%">
+              <th width="12%" height="40" style="background-color:#F1F4F7;">业务线</th>
+              <td width="15%">单车</td>
+              <th width="10%" style="background-color:#F1F4F7">锁ID</th>
+              <td width="15%"> {{ detailData.lockNo }}</td>
+            </tr>
+            <tr>
+              <th width="12%" height="40" style="background-color:#F1F4F7">经度</th>
+              <td>{{ detailData.deviceLng }}</td>
+              <th style="background-color:#F1F4F7">纬度 </th>
+              <td> {{ detailData.deviceLat }}</td>
+            </tr>
+            <tr>
+              <th width="12%" height="40" style="background-color:#F1F4F7">锁状态</th>
+              <td>{{ detailData.lockStatus }}</td>
+              <th style="background-color:#F1F4F7">车辆ID </th>
+              <td> {{ detailData.vehicleId }}</td>
+            </tr>
+            <tr>
+              <th height="40" style="background-color:#F1F4F7">EcuID</th>
+              <td>  {{ detailData.deviceId }}</td>
+              <th style="background-color:#F1F4F7">IccID</th>
+              <td> {{ detailData.iccid }}</td>
+            </tr>
+            <tr>
+              <th height="40" style="background-color:#F1F4F7">电量信息</th>
+              <td> {{ detailData.lockBatteryLevel }}</td>
+              <th style="background-color:#F1F4F7">Mac地址</th>
+              <td> {{ detailData.macAddr }}</td>
+            </tr>
+            <tr>
+              <th style="background-color:#F1F4F7">bluetooth_key</th>
+              <td> {{ detailData.bluetoothKey }}</td>
+              <th height="40" style="background-color:#F1F4F7">bluetoothPassword</th>
+              <td> {{ detailData.bluetoothPassword }}</td>
+            </tr>
+          </table>
+        </div>
+        <!-- </div> -->
+
+      </el-form>
+      <br><br><br>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogDetailVisible = false">关闭</el-button>
+        <!-- <el-button v-if="showSubmitBtn" type="primary">确定</el-button> -->
+      </div>
+    </el-dialog>
+    <!--  编辑 -->
+    <el-dialog :title="textMap[dialogStatus]" :visible.sync="dialogUpdateVisible" width="75%" class="setPercent">
+      <el-form ref="serviceDataForms" :rules="serviceDataRules" :model="serviceData" label-position="left" label-width="70px" style="width: 100%; margin-left:80px;">
+        <div class="set-font" style="width:100%">
+          <div class="block-edit">
+            <div style="display:flex;justify-content:space-between;width:92%">
+              <el-form-item label="经度" prop="deviceLat">
+                <el-input v-model="serviceData.deviceLat" style="width:100%;" placeholder="单车" />
+              </el-form-item>
+              <el-form-item label="电量" prop="lockBatteryLevel">
+                <el-input v-model="serviceData.lockBatteryLevel" style="width:100%;" placeholder="请填写" />
+              </el-form-item>
+            </div>
+            <div style="display:flex;justify-content:space-between;width:92%">
+              <el-form-item label="纬度" prop="deviceLng">
+                <el-input v-model="serviceData.deviceLng" style="width:100%;" placeholder="请填写" />
+              </el-form-item>
+            </div>
+          </div>
+          <div class="block-edit table-th" style="width:82%">
+            <table cellspacing="0" width="103%;" bordercolor="#ddd" class="border-color">
+              <tr width="100%">
+                <th width="12%" height="40" style="background-color:#F1F4F7;">业务线</th>
+                <td width="15%">单车</td>
+                <th width="10%" style="background-color:#F1F4F7">锁ID</th>
+                <td width="15%"> {{ serviceData.lockNo }}</td>
+              </tr>
+              <tr>
+                <th width="12%" height="40" style="background-color:#F1F4F7">锁状态</th>
+                <td>{{ serviceData.lockStatus }}</td>
+                <th style="background-color:#F1F4F7">车辆ID </th>
+                <td> {{ serviceData.vehicleId }}</td>
+              </tr>
+              <tr>
+                <th height="40" style="background-color:#F1F4F7">EcuID</th>
+                <td>  {{ serviceData.deviceId }}</td>
+                <th style="background-color:#F1F4F7">IccID</th>
+                <td> {{ serviceData.iccid }}</td>
+              </tr>
+              <tr>
+                <th height="40" style="background-color:#F1F4F7">Mac地址</th>
+                <td> {{ serviceData.macAddr }}</td>
+                <th style="background-color:#F1F4F7">bluetooth_key</th>
+                <td> {{ serviceData.bluetoothKey }}</td>
+              </tr>
+              <tr>
+                <th height="40" style="background-color:#F1F4F7">bluetooth_password</th>
+                <td> {{ serviceData.bluetoothPassword }}</td>
+                <th style="background-color:#F1F4F7" />
+                <td />
+              </tr>
+            </table>
+          </div>
+        </div>
+      </el-form>
+      <br><br><br>
+      <div slot="footer" class="dialog-footer">
+        <el-button @click="dialogUpdateVisible = false">取消</el-button>
+        <el-button v-if="showSubmitBtn" type="primary" @click="updateData(serviceData)">确定</el-button>
+      </div>
+    </el-dialog>
+
+  </div>
+</template>
+
+<script>
+import { queryLockCreateInfo, queryVehicleCreateInfo, createDevice, deleteDevice, deviceOnline, deviceOffline, unlockVehicle, lockVehicle, updateLockAttr, getDevices } from '@/api/htVehicle'
+import waves from '@/directive/waves' // waves directive
+import { parseTime } from '@/utils'
+// import Pagination from '@/components/Pagination' // secondary package based on el-pagination
+
+var envSelections = []
+var consumerSelections = []
+
+export default {
+  name: 'HTvehicle',
+  // components: { Pagination },
+  directives: { waves },
+  filters: {
+    statusFilter(status) {
+      const statusMap = {
+        1: 'success',
+        draft: 'info',
+        0: 'danger'
+      }
+      return statusMap[status]
+    }
+  },
+  data() {
+    return {
+
+      dialogFormVisible: false,
+      dialogDetailVisible: false,
+      dialogUpdateVisible: false,
+      shouldShow: false,
+      total: 0,
+      num: '',
+      tableKey: 0,
+      list: null,
+      curIndex: 1,
+      pageSize: 10,
+      statusMaps: new Map([[1, '在线'], [0, '下线']]),
+      lockStatusMaps: new Map([[1, '已开锁'], [0, '已关锁']]),
+      statusOperateMaps: new Map([[1, '在线'], [0, '离线']]),
+      options: [{ value: '', label: '全部显示' }, { value: '1', label: '在线' }, { value: '0', label: '离线' }],
+      bizType: [{ value: '1', label: '电单车' }, { value: '2', label: '单车' }],
+      lockStatusOptions: [{ value: '1', label: '已开锁' }, { value: '2', label: '已关锁' }],
+      lockModelList: [],
+      lockSupplierList: [],
+      bikeModelList: [],
+      bikeSupplierList: [],
+      listQuery: {},
+      textMap: {
+        update: '编辑',
+        create: '新增',
+        details: '设备详情'
+      },
+      userInformation: localStorage.getItem('username'),
+      userNames: localStorage.getItem('realname'),
+      userData: '',
+      importanceOptions: [1, 2, 3],
+      envSelectDataType: '',
+      envSelections,
+      consumerSelections,
+      sortOptions: [{ label: 'ID Ascending', key: '+id' }, { label: 'ID Descending', key: '-id' }],
+      statusOptions: ['published', 'draft', 'deleted'],
+      showReviewer: false,
+      showSubmitBtn: true,
+      addDeviceData: {
+        bizType: '单车',
+        lockModel: '',
+        bikeModel: '',
+        deviceNum: '',
+        lockSupplier: '',
+        bikeSupplier: ''
+      },
+      detailData: {
+        bizType: '单车',
+        vehicleId: ''
+
+      },
+      serviceData: {
+        bizType: '单车'
+
+      },
+      serviceDataRules: {},
+      serviceDataExt: {
+        id: 0
+      },
+      dialogStatus: '',
+      listLoading: true,
+      dialogDetails: false,
+
+      dialogPvVisible: false,
+      pvData: [],
+      addDeviceDataRules: {
+        lockModel: [{ required: true, message: '锁类型不能为空', trigger: 'change' }],
+        bikeModel: [{ required: true, message: '车辆类型不能为空', trigger: 'change' }],
+        deviceNum: [{ required: true, message: '车辆个数不能为空', trigger: 'change' }],
+        lockSupplier: [{ required: true, message: '锁供应商不能为空', trigger: 'change' }],
+        bikeSupplier: [{ required: true, message: '车辆供应商不能为空', trigger: 'change' }]
+
+      },
+      downloadLoading: false
+    }
+  },
+  created() {
+    this.getMyDevicesList()
+    this.getLockModelList()
+  },
+  methods: {
+    createdCode() {
+      this.dialogStatus = 'create'
+      // this.$set(this.addDeviceData, 'lockModel', '')
+      // this.$set(this.addDeviceData, 'lockSupplier', '')
+      // this.$set(this.addDeviceData, 'deviceNum', '')
+      // this.$set(this.addDeviceData, 'bikeSupplier', '')
+      // this.$set(this.addDeviceData, 'bikeModel', '')
+      this.$refs.addDeviceForms.resetFields()
+    },
+    // 查看设备详情
+    deviceDetails(vel) {
+      this.dialogStatus = 'details'
+      console.log('参数:' + vel)
+      this.detailData = vel
+    },
+
+    //  获取锁类型、锁供应商类型
+    getLockModelList() {
+      queryLockCreateInfo().then(response => {
+        // console.log(response.data)
+        this.lockModelList = response.data.modelInfos
+        this.lockSupplierList = response.data.supplierInfos
+      })
+      // queryLockCreateInfo().catch(res => {
+      //   console.log(res)
+      // })
+    },
+
+    // 获取车类型、车供应商
+    chooseLockType() {
+      // console.log(this.addDeviceData.lockModel)
+      queryVehicleCreateInfo(this.addDeviceData.lockModel).then(response => {
+        // console.log(response.data)
+        this.bikeModelList = response.data.modelInfos
+        this.bikeSupplierList = response.data.supplierInfos
+        console.log(this.bikeModelList)
+      })
+    },
+
+    // 搜索
+    getDevicesList(vel) {
+      this.listQuery = vel
+      this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+      this.objData = { deviceQueryInfo: this.listQuery, user: this.userData }
+      getDevices(this.objData).then(response => {
+        this.list = response.data
+        this.total = response.data.total
+      })
+    },
+    // 进首页
+    getMyDevicesList() {
+      this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+      this.objData = { deviceQueryInfo: this.listQuery, user: this.userData }
+      getDevices(this.objData).then(response => {
+        this.list = response.data
+        this.serviceData = response.data
+        this.detailData = response.data
+        this.total = response.data.total
+        console.log(this.detailData)
+      })
+    },
+    // 编辑
+    handleUpdate(vel) {
+      console.log(vel)
+      this.dialogStatus = 'update'
+      this.serviceData = vel
+      this.dialogUpdateVisible = true
+      this.$refs.serviceDataForms.resetFields()
+    },
+    updateData(vel) {
+      if (vel === this.serviceData) {
+        this.bizData = {
+          lockNo: vel.lockNo,
+          lockBatteryLevel: vel.lockBatteryLevel,
+          deviceLat: vel.deviceLat,
+          deviceLng: vel.deviceLng
+        }
+      } else {
+        this.bizData = vel
+        this.bizData.lockNo = vel.lockNo
+        this.bizData.lockBatteryLevel = vel.lockBatteryLevel
+        this.bizData.deviceLat = vel.deviceLat
+        this.bizData.deviceLng = vel.deviceLng
+      }
+
+      updateLockAttr(this.bizData).then(response => {
+        if (response.code === 200) {
+          this.dialogUpdateVisible = false
+          // this.getList()
+          this.$notify({ title: 'Success', message: response.msg, type: 'success', duration: 3000 })
+        } else {
+          this.$notify({ title: 'Failed', message: response.msg, type: 'error', duration: 3000 })
+        }
+      })
+    },
+    // 删除设备
+    explain() {
+      if (this.showexplain === false) {
+        this.showexplain = true
+      } else {
+        this.showexplain = false
+      }
+    },
+    deleteCodeData(e) {
+      this.$confirm('确定要删除这条车辆信息吗?', '提示', {
+        confirmButtonText: '确定',
+        cancelButtonText: '取消',
+        type: 'warning'
+      }).then(() => {
+        this.handleDelete(e)
+      }).catch(() => {
+        this.$message({
+          type: 'info',
+          message: '已取消删除'
+        })
+      })
+    },
+
+    handleDelete(row) {
+      // var deleteData = { 'vehicleId': row.vehicleId }
+      deleteDevice(row.vehicleId).then(response => {
+        if (response.code === 200) {
+          this.getMyDevicesList()
+          this.$notify({ title: 'Success', message: response.msg, type: 'success', duration: 3000 })
+        } else {
+          this.getMyDevicesList()
+          this.$notify({ title: 'Failed', message: response.msg, type: 'error', duration: 3000 })
+        }
+      })
+    },
+
+    // 设备上线、下线调用
+    handleDeviceStatus(row, isOnline) {
+      // var statusData = { 'lockNo': row.lockNo }
+      if (isOnline === 1) {
+        deviceOnline(row.lockNo).then(response => {
+          if (response.code === 200) {
+            row.isOnline = isOnline
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.statusOperateMaps.get(isOnline) + '成功!', type: 'success' })
+          } else {
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.statusOperateMaps.get(isOnline) + '失败!', type: 'danger' })
+          }
+        })
+      }
+      if (isOnline === 0) {
+        deviceOffline(row.lockNo).then(response => {
+          if (response.code === 200) {
+            row.isOnline = isOnline
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.statusOperateMaps.get(isOnline) + '成功!', type: 'success' })
+          } else {
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.statusOperateMaps.get(isOnline) + '失败!', type: 'danger' })
+          }
+        })
+      }
+    },
+
+    // 点击锁开启,关闭时调用
+    handleLockStatus(row, lockStatus) {
+      if (lockStatus === 1) {
+        unlockVehicle(row.lockNo).then(response => {
+          if (response.code === 200) {
+            row.lockStatus = lockStatus
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.lockStatusMaps.get(lockStatus) + '成功!', type: 'success' })
+          } else {
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.lockStatusMaps.get(lockStatus) + '失败!', type: 'danger' })
+          }
+        })
+      }
+      if (lockStatus === 0) {
+        lockVehicle(row.vehicleId).then(response => {
+          if (response.code === 200) {
+            row.lockStatus = lockStatus
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.lockStatusMaps.get(lockStatus) + '成功!', type: 'success' })
+          } else {
+            this.$message({ message: '锁ID:' + row.lockNo.toString() + ' ' + this.lockStatusMaps.get(lockStatus) + '失败!', type: 'danger' })
+          }
+        })
+      }
+    },
+
+    // 新建点击提交时调用
+    createData(ele) {
+      this.$refs['addDeviceForms'].validate((valid) => {
+        if (valid) {
+          this.addDeviceData = ele
+          this.addDeviceData.bizType = 2
+          this.userData = { id: '', ename: this.userInformation, name: this.userNames }
+          this.objData = { htwDeviceInfo: this.addDeviceData, user: this.userData }
+          createDevice(this.objData).then(response => {
+            console.log(response)
+            if (response.code === 200) {
+              this.getMyDevicesList()
+              this.$notify({ title: 'Success', message: response.msg, type: 'success', duration: 3000 })
+              this.dialogFormVisible = false
+            } else {
+              this.$notify({ title: 'Failed', message: response.msg, type: 'error', duration: 3000 })
+            }
+          }).catch((error) => {
+            console.log('2323' + error)
+          })
+        }
+      })
+    },
+
+    formatJson(filterVal, jsonData) {
+      return jsonData.map(v => filterVal.map(j => {
+        if (j === 'timestamp') {
+          return parseTime(v[j])
+        } else {
+          return v[j]
+        }
+      }))
+    },
+    redirectTo(id, mehtodName, methodProtocol) {
+      console.log(methodProtocol)
+      this.$router.push({
+        path: `/mock/httpmock/${id}`, query: { mehtodName: mehtodName, methodProtocol: methodProtocol }
+      })
+    }
+  }
+}
+</script>
+<style lang="stylus" scoped>
+  .set-background
+    background-color #F1F4F7
+    display flex
+    justify-content center
+    min-width 700px
+    .setPercent >>> .el-dialog__body
+      width 100%
+    .block
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 93%
+      margin 25px 0
+      padding 20px
+      min-height calc(100vh - 100px)
+    .block >>> .el-form
+      display flex
+      justify-content space-between
+    .block >>> .el-form-item
+      display flex
+      width 20%
+      margin-right 10px
+    .block >>> .el-select
+      width 13%
+      margin-right 10px
+    .block >>> .el-form-item__content
+      margin-left 0 !important
+    .block >>> th
+      background-color #F0F7FF !important
+    .set-head
+      font-size 13px
+      width 100%
+      color #333B4A
+    // .set-head >>> .el-input
+    //   width 18%
+    .set-between
+      display flex
+    .set-between >>> .el-button
+      height 40px
+    .set-locate
+      margin-top 20px
+      .specail-lock
+        display flex
+        justify-content center
+      .el-icon-lock
+        font-size 20px
+        margin 4px 7px 0 0
+        opacity 0.7
+    .set-font >>> .el-input__inner
+      color #3e3c3c
+    .set-font >>>  .is-disabled input::placeholder
+      color #3e3c3c
+    .block-edit
+      background-color rgba(255,255,255,1)
+      box-shadow 0px 0px 11px 0px rgba(238,240,245,1)
+      border-radius 7px
+      width 59vw
+      margin-top 25px
+      padding 20px
+    .table-th
+      text-align center
+      .border-color
+        margin-left -12px
+        border-right 0px solid #dcdfe6
+        border-bottom 0px solid #dcdfe6
+        border-left 1px solid #dcdfe6
+        border-top 1px solid #dcdfe6
+      .border-color td
+        border-bottom 1px solid #dcdfe6
+        border-right 1px solid #dcdfe6
+      .border-color th
+        border-bottom 1px solid #dcdfe6
+        border-right 1px solid #dcdfe6
+    .table-th >>> .table
+      border-top 1px solid #999
+      border-left 1px solid #999
+      border-spacing 0
+
+</style>