XAWDJ0277HWXPT2\Administrator před 5 roky
rodič
revize
1e66866269
63 změnil soubory, kde provedl 6137 přidání a 81 odebrání
  1. 1 1
      web/css/chunk-2838ffbd.1649794f.css
  2. 1 0
      web/css/chunk-3f41bc09.d60e5254.css
  3. 0 1
      web/css/chunk-485d9bbe.419bdf9f.css
  4. 1 0
      web/css/chunk-491726a1.9745a476.css
  5. 1 0
      web/css/chunk-565b1914.72fe42eb.css
  6. 1 0
      web/css/chunk-66880d66.6cb2574c.css
  7. 1 0
      web/css/chunk-68c91555.81fb913f.css
  8. 1 0
      web/css/chunk-6bb6a4fc.2ebd85c3.css
  9. 1 0
      web/css/chunk-7bd5a1e4.a124d3f2.css
  10. 1 0
      web/css/chunk-87aeea08.05975ca9.css
  11. 1 0
      web/css/chunk-982fad50.49aa2682.css
  12. 0 1
      web/css/chunk-e4e87226.df6810ce.css
  13. binární
      web/img/permissions.00f90a7b.png
  14. 1 1
      web/index.html
  15. 2 0
      web/js/app.0c9f286c.js
  16. 1 0
      web/js/app.0c9f286c.js.map
  17. 0 2
      web/js/app.b71075e2.js
  18. 0 1
      web/js/app.b71075e2.js.map
  19. 1 1
      web/js/chunk-2838ffbd.3784491d.js
  20. 1 1
      web/js/chunk-2838ffbd.3784491d.js.map
  21. 2 0
      web/js/chunk-3f41bc09.6eb6a330.js
  22. 1 0
      web/js/chunk-3f41bc09.6eb6a330.js.map
  23. 0 4
      web/js/chunk-485d9bbe.cb33d7fc.js
  24. 0 1
      web/js/chunk-485d9bbe.cb33d7fc.js.map
  25. 2 0
      web/js/chunk-491726a1.b9a0230d.js
  26. 1 0
      web/js/chunk-491726a1.b9a0230d.js.map
  27. 2 0
      web/js/chunk-565b1914.39dedb05.js
  28. 1 0
      web/js/chunk-565b1914.39dedb05.js.map
  29. 2 0
      web/js/chunk-66880d66.1d5fe16d.js
  30. 1 0
      web/js/chunk-66880d66.1d5fe16d.js.map
  31. 2 0
      web/js/chunk-68c91555.b13007a2.js
  32. 1 0
      web/js/chunk-68c91555.b13007a2.js.map
  33. 4 0
      web/js/chunk-6bb6a4fc.9de0535d.js
  34. 1 0
      web/js/chunk-6bb6a4fc.9de0535d.js.map
  35. 2 0
      web/js/chunk-7bd5a1e4.36dd5005.js
  36. 1 0
      web/js/chunk-7bd5a1e4.36dd5005.js.map
  37. 2 0
      web/js/chunk-7ef40bfa.5012ae6b.js
  38. 1 0
      web/js/chunk-7ef40bfa.5012ae6b.js.map
  39. 0 2
      web/js/chunk-7ef40bfa.c9139786.js
  40. 0 1
      web/js/chunk-7ef40bfa.c9139786.js.map
  41. 2 0
      web/js/chunk-87aeea08.75b718d4.js
  42. 1 0
      web/js/chunk-87aeea08.75b718d4.js.map
  43. 2 0
      web/js/chunk-982fad50.88c568ea.js
  44. 1 0
      web/js/chunk-982fad50.88c568ea.js.map
  45. 0 2
      web/js/chunk-e4e87226.0a9d2ed5.js
  46. 0 1
      web/js/chunk-e4e87226.0a9d2ed5.js.map
  47. binární
      webConfig/public/favicon.ico
  48. 51 1
      webConfig/src/App.vue
  49. 10 0
      webConfig/src/api/allUel.js
  50. 5 5
      webConfig/src/components/header.vue
  51. 5 5
      webConfig/src/components/sideBar.vue
  52. binární
      webConfig/src/img/rightSidebar.png
  53. binární
      webConfig/src/img/userManagement/permissions.png
  54. 42 0
      webConfig/src/router.js
  55. 1781 0
      webConfig/src/views/alarmMaintenance/alarmMaintenance.vue
  56. 761 0
      webConfig/src/views/alarmMaintenance/maintenanceRecord.vue
  57. 945 0
      webConfig/src/views/alarmMaintenance/repairPersonnel.vue
  58. 442 0
      webConfig/src/views/alarmMaintenance/streetLightInformation.vue
  59. 11 6
      webConfig/src/views/dashboard.vue
  60. 1540 0
      webConfig/src/views/historicalData/historicalData.vue
  61. 381 0
      webConfig/src/views/operationLog/operationLog.vue
  62. 12 10
      webConfig/src/views/projectManagement.vue
  63. 103 34
      webConfig/src/views/userManagement.vue

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
web/css/chunk-2838ffbd.1649794f.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-3f41bc09.d60e5254.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/css/chunk-485d9bbe.419bdf9f.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-491726a1.9745a476.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-565b1914.72fe42eb.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-66880d66.6cb2574c.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-68c91555.81fb913f.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-6bb6a4fc.2ebd85c3.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-7bd5a1e4.a124d3f2.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-87aeea08.05975ca9.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/css/chunk-982fad50.49aa2682.css


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/css/chunk-e4e87226.df6810ce.css


binární
web/img/permissions.00f90a7b.png


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
web/index.html


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/app.0c9f286c.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/app.0c9f286c.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2
web/js/app.b71075e2.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/js/app.b71075e2.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
web/js/chunk-2838ffbd.3784491d.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 1
web/js/chunk-2838ffbd.3784491d.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-3f41bc09.6eb6a330.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-3f41bc09.6eb6a330.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 4
web/js/chunk-485d9bbe.cb33d7fc.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/js/chunk-485d9bbe.cb33d7fc.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-491726a1.b9a0230d.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-491726a1.b9a0230d.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-565b1914.39dedb05.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-565b1914.39dedb05.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-66880d66.1d5fe16d.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-66880d66.1d5fe16d.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-68c91555.b13007a2.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-68c91555.b13007a2.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 4 - 0
web/js/chunk-6bb6a4fc.9de0535d.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-6bb6a4fc.9de0535d.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-7bd5a1e4.36dd5005.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-7bd5a1e4.36dd5005.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-7ef40bfa.5012ae6b.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-7ef40bfa.5012ae6b.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2
web/js/chunk-7ef40bfa.c9139786.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/js/chunk-7ef40bfa.c9139786.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-87aeea08.75b718d4.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-87aeea08.75b718d4.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 2 - 0
web/js/chunk-982fad50.88c568ea.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1 - 0
web/js/chunk-982fad50.88c568ea.js.map


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 2
web/js/chunk-e4e87226.0a9d2ed5.js


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 0 - 1
web/js/chunk-e4e87226.0a9d2ed5.js.map


binární
webConfig/public/favicon.ico


+ 51 - 1
webConfig/src/App.vue

@@ -134,7 +134,57 @@
                     allUel[i][key]=allUel[i][key].replace(subStr,street);
                 }
             }
-            this.login();
+            // this.login();
+
+            var storage = window.localStorage;
+            let data = {
+                data:{
+                    avatar: "",
+                    client_key: "23be0e4c9a2e91b330bfeb7d20229e71",
+                    id: "1",
+                    name: "admin",
+                    role: 1,
+                    token: "27cc9eaa89c63c65df47901692a70bc7",
+                    username: "admin",
+                    version: "0",
+                }
+                // data:{
+                //     avatar: "",
+                //     client_key: "23be0e4c9a2e91b330bfeb7d20229e71",
+                //     id: "78",
+                //     name: "plm",
+                //     role: 2,
+                //     token: "9e7a6e106700edab6102740ea89eb7c7",
+                //     username: "plm",
+                //     version: "0",
+                // }
+            }
+            data.data.version = this.version;
+            this.$store.commit('USERDATAFUN',{
+                username:data.data.username,
+                id:data.data.id,
+                role:data.data.role,
+                lastLoginTime:data.data.lastLoginTime,
+                client_key:data.data.client_key,
+                token:data.data.token,
+                number:data.data.number,
+                avatar:data.data.avatar,
+                version:data.data.version,
+            })
+            // this.$router.push({path:'/dashboard'})
+            // this.$store.commit('ROUTERSTRFUN',{
+            //   routerStr:'/dashboard',
+            // })
+            storage.setItem('userData',JSON.stringify(data.data))
+            if(this.checkboxRememberPassword){
+              storage.setItem('rememberPassword','true');
+              storage.setItem('udfn',this.username);
+              storage.setItem('udfp',jqueryK.base64Encode(this.password));
+            }
+            
+            this.$store.commit('HEADERIDFUN',{
+                headerUpdate: this.headerUpdate+1,
+            })
         },
         methods:{
             login(){

+ 10 - 0
webConfig/src/api/allUel.js

@@ -183,6 +183,14 @@ const urls={
         // policyDetail:'http://newtest.solar-iot.com/api/policy/policy_detail',/*策略详情*/
         // delPolicy:'http://newtest.solar-iot.com/api/policy/del_policy',/*策略删除*/
     },
+    /*概览信息*/
+    dashboard:{
+        data:'http://120.77.179.55/api/home/data',/*概览信息*/
+        sta_info:'http://120.77.179.55/api/home/sta_info',/*统计信息*/
+        dev_list:'http://120.77.179.55/api/home/dev_list',/*设备统计列表*/
+        alarm_list:'http://120.77.179.55/api/home/alarm_list',/*故障信息列表*/
+
+    },
     /*个人中心*/
     user:{
         info:'http://120.77.179.55/api/user/info',/*用户信息*/
@@ -193,6 +201,8 @@ const urls={
         save_user_privilege:'http://120.77.179.55/api/user/save_user_privilege',/*编辑用户权限*/
         del:'http://120.77.179.55/api/user/del',/*删除用户*/
         block_user:'http://120.77.179.55/api/user/block_user',/*停用启用账号*/
+        update_avatar:'http://120.77.179.55/api/user/update_avatar',/*编辑用户头像*/
+
 
         // userInfo:'http://newtest.solar-iot.com/api/user/info',/*用户信息*/
         // updateUserInfo:'http://newtest.solar-iot.com/api/user/update_user_info',/*编辑用户信息*/

+ 5 - 5
webConfig/src/components/header.vue

@@ -17,15 +17,15 @@
                             <div class="nav_li" @click="linkToFun('GIS')" :class="{'select':routerStr == '/GIS'}"><i class="iconfont icon-daohangjiantou"></i><span class="span">GIS Map</span></div>
                         </div>
                         <div class="nav_ul">
-                            <div class="nav_title"><span class="span">Maintain</span></div>
-                            <div class="nav_li"><i class="iconfont icon-daohangjiantou"></i><span class="span">Alarm maintenance</span></div>
-                            <div class="nav_li"><i class="iconfont icon-daohangjiantou"></i><span class="span">Historical Data</span></div>
+                            <div class="nav_title"><span class="span">Maintain</span></div> 
+                            <div class="nav_li" @click="linkToFun('/alarmMaintenance')" :class="{'select':routerStr == '/alarmMaintenance'}"><i class="iconfont icon-daohangjiantou"></i><span class="span">Alarm maintenance</span></div>
+                            <div class="nav_li" @click="linkToFun('/historicalData')" :class="{'select':routerStr == '/historicalData'}"><i class="iconfont icon-daohangjiantou"></i><span class="span">Historical Data</span></div>
                         </div>
                         <div class="nav_ul">
                             <div class="nav_title"><span class="span">Set Up</span></div>
                             <div class="nav_li" @click="linkToFun('/userManagement')" :class="{'select':routerStr == '/userManagement'}"><i class="iconfont icon-daohangjiantou"></i><span class="span">User Management</span></div>
                             <!-- <div class="nav_li"><i class="iconfont icon-daohangjiantou"></i><span class="span">User Management</span></div> -->
-                            <div class="nav_li"><i class="iconfont icon-daohangjiantou"></i><span class="span">Operation Log</span></div>
+                            <div class="nav_li"  @click="linkToFun('/operationLog')" :class="{'select':routerStr == '/operationLog'}"><i class="iconfont icon-daohangjiantou"></i><span class="span">Operation Log</span></div>
                         </div>
                     </div>
                     <div class="nav_right">
@@ -42,7 +42,7 @@
         </div>
         <div class="right_btn_box">
             <span class="img_box">
-                <img :src="avatar" @click="linkToFun('/dashboard')" :onError="imgErrorSrc">
+                <img :src="avatar" @click="linkToFun('/userManagement')" :onError="imgErrorSrc">
             </span>
             <el-popover
                 placement="top-start"

+ 5 - 5
webConfig/src/components/sideBar.vue

@@ -16,7 +16,7 @@
                 <div class="sideBar_list" v-if="projectAll">
                     <p @click="click4()" style="padding-bottom: 0px;" :class="{'sideBar_project_select':projectId == 0}">{{version == 0?'全部项目':'All projects'}}</p>
                 </div>
-                <div class="sideBar_list" v-for="(obj,index) in sideBarList">
+                <div class="sideBar_list" v-for="(obj) in sideBarList" :key="obj.id">
                     <p @click="click1(obj)">
                         <i class="dian"></i>
                         <span class="company_name" :class="{'company_name_EN':version ==1}" :title="obj.name">{{obj.name}}</span>
@@ -24,7 +24,7 @@
                         <span>{{obj.type}}</span>
                     </p>
                     <div v-if="obj.type == '收起' || obj.type == 'Collapse'">
-                        <div :class="{'sideBar_project_select':projectId==item.id&&projectId}" v-for="(item,index) in obj.project_list" @click="click2(item)">
+                        <div :class="{'sideBar_project_select':projectId==item.id&&projectId}" v-for="(item) in obj.project_list"  :key="item.id" @click="click2(item)">
                             <span :title="item.projectname" :id="'sideBar_projectId_'+item.id">- {{item.projectname}}</span>
                         </div>
                     </div>
@@ -40,7 +40,7 @@
 </template>
 
 <script type="text/javascript">
-    import { mapGetters, mapActions } from 'vuex'
+    import { mapGetters } from 'vuex'
     export default{
         data(){
             return{
@@ -94,12 +94,12 @@
             screenChange(val){
                 this.sideBarCompanyList(val,this.searchType);
             },
-            userCompanyList(val){
+            userCompanyList(){
                 this.sideBarCompanyList(this.screen,this.searchType);
             },
         },
          watch:{
-            sideBarType(curVal,oldVal){
+            sideBarType(curVal){
                 let this_ = this;
                 if(curVal == 'on' && this.projectId != 0){
                     $('.sideBar .sideBar_box').animate({scrollTop: $('#sideBar_projectId_'+this_.projectId).offset().top - 250 + $('.sideBar .sideBar_box').scrollTop()})

binární
webConfig/src/img/rightSidebar.png


binární
webConfig/src/img/userManagement/permissions.png


+ 42 - 0
webConfig/src/router.js

@@ -10,6 +10,15 @@ const projectManagement = () => import('./views/projectManagement.vue');
 const GIS = () => import('./views/GISMap.vue');
 const userManagement = () => import('./views/userManagement.vue');
 
+const alarmMaintenance = () => import('./views/alarmMaintenance/alarmMaintenance.vue');
+const maintenanceRecord = () => import('./views/alarmMaintenance/maintenanceRecord.vue');
+const repairPersonnel = () => import('./views/alarmMaintenance/repairPersonnel.vue');
+const streetLightInformation = () => import('./views/alarmMaintenance/streetLightInformation.vue');
+
+const historicalData = () => import('./views/historicalData/historicalData.vue');
+
+const operationLog = () => import('./views/operationLog/operationLog.vue');
+
 const routes = [
     {
         path: '/',
@@ -35,6 +44,39 @@ const routes = [
         name: 'userManagement',
         component: userManagement
     },
+
+    {
+        path: '/alarmMaintenance',
+        name: 'alarmMaintenance',
+        component: alarmMaintenance
+    },
+    {
+        path: '/maintenanceRecord',
+        name: 'maintenanceRecord',
+        component: maintenanceRecord
+    },
+    {
+        path: '/repairPersonnel',
+        name: 'repairPersonnel',
+        component: repairPersonnel
+    },
+    {
+        path: '/streetLightInformation',
+        name: 'streetLightInformation',
+        component: streetLightInformation
+    },
+
+    {
+        path: '/historicalData',
+        name: 'historicalData',
+        component: historicalData
+    },
+    
+    {
+        path: '/operationLog',
+        name: 'operationLog',
+        component: operationLog
+    },
 ]
 
 const router = new VueRouter({

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1781 - 0
webConfig/src/views/alarmMaintenance/alarmMaintenance.vue


+ 761 - 0
webConfig/src/views/alarmMaintenance/maintenanceRecord.vue

@@ -0,0 +1,761 @@
+<template>
+    <!-- 维修记录 -->
+    <div class="maintenanceRecord_main">
+        <div class="main_top_bg">
+        </div>
+        <side-bar :sideBarList="projectNav" :projectId="projectId" :sideBarListIsOpen="sideBarListIsOpen" :projectSelectFun="projectSelectFun" :sideBarIsOn="sideBarIsOn" :sideBarType="sideBarType" :sideBarCompanyList="sideBarCompanyList"></side-bar>
+        <div class="wrap">
+            <div class="main_top clearfix">
+                <div class="search_box">
+                    <el-input :placeholder="version==0?'- 输入关键词进行搜索':'- Enter keywords to search'" v-model="keyword" class="search" @change="search">
+                        <template slot="prepend">{{version==0?'搜索':'Search'}}</template>
+                    </el-input>
+                </div>
+                <div class="button_box">
+                    <el-button round icon="el-icon-plus" @click="addRecordFun()">{{version==0?'添加记录':'Add record'}}</el-button>
+                </div>
+            </div>
+            <div class="information_box">
+                <el-table
+                    v-loading="loading.table"
+                    :data="tableData"
+                    border
+                    width="100%"
+                    height="calc(100% - 92px)"
+                    @selection-change="handleSelectionChange"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column
+                      type="selection"
+                      width="48">
+                    </el-table-column>
+                    <el-table-column
+                      :label="version==0?'编号':'Number'"
+                      prop="GL_index"
+                      align="center"
+                      width="82">
+                    </el-table-column>
+                    <!-- <el-table-column align="center" :show-overflow-tooltip="true" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*14+20" v-for="(item,index) in tableList" v-if="version ==0">
+                    </el-table-column> -->
+                    <el-table-column align="center" :show-overflow-tooltip="true" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*9+14" v-for="(item) in tableListEN">
+                    </el-table-column>
+                    <el-table-column
+                        :label="version==0?'操作':'operate'"
+                        align="center"
+                        :width="version==0?'120':'160'">
+                      <template slot-scope="scope">
+                        <el-button type="text" size="small" @click="editRecordFun(scope.row)">{{version==0?'管理':'management'}}</el-button>
+                        <el-button type="text" style="color:#fc8440" size="small" @click="delRepairInfo(scope.row)">{{version==0?'删除':'Delete'}}</el-button>
+                      </template>
+                    </el-table-column>
+                </el-table>
+                <div class="paging_box">
+                    <el-button type="primary" icon="el-icon-check" round @click="batchDel()">{{version==0?'删除勾选记录':'Delete check record'}}</el-button>
+                    <el-pagination
+                      @size-change="handleSizeChange"
+                      @current-change="handleCurrentChange"
+                      :current-page.sync="currentPage"
+                      :page-size="pageSize"
+                      :page-sizes="[20, 40, 60, 100]"
+                      layout="sizes, prev, pager, next, jumper"
+                      :total="total">
+                    </el-pagination>
+                </div>
+            </div>
+        </div>
+        <!-- 添加维修记录 -->
+        <el-dialog
+          :title="recordTitle"
+          :visible.sync="addRecordDialog"
+          class="record_dialog"
+          :class="{'record_dialog_en':version == 1}"
+          width="60%">
+          <el-form ref="addRecordForm" :model="addRecordForm" label-width="140px">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'维修人员名称:':'Maintenance personnel name:'" prop="repair_id" :rules="{required: true, message: '不能为空', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.repair_id" placeholder="" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in userList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'网络名称:':'Network name:'" prop="networkid" :rules="{required: true, message: '不能为空', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.networkid" placeholder="" @change="networksIdChange" :no-data-text="networksNoDataText" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in networksList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修的故障:':'Repair failure:'">
+                    <el-input v-model="addRecordForm.repair_hitch" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修方案时间:':'Maintenance schedule:'">
+                    <el-date-picker
+                      v-model="addRecordForm.repair_time"
+                      type="datetime">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'项目名称:':'project name:'" prop="projectid" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.projectid" placeholder="" @change="projectsIdChange" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in projects"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'路灯ID:':'Streetlight ID:'" prop="lampid" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.lampid" placeholder="" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in lampList"
+                        :key="item.id"
+                        :label="item.number"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修方案:':'maintenance proposal:'">
+                    <el-input v-model="addRecordForm.repair_solution" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'路段:':'Road section:'">
+                    <el-input v-model="addRecordForm.address" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+          </el-form>
+          <div class="dialog_foot">
+            <el-button type="primary" @click="recordKeep()" v-loading="loading.recordKeep">{{recordButton}}</el-button>
+          </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script type="text/javascript">
+    import {mapGetters} from 'vuex'
+    import sideBar from '../../components/sideBar.vue'
+    import baseApi from '../../api/base.js'
+    import allUrl from '../../api/allUel.js'
+    export default{
+        data(){
+            return{
+                keyword:'',
+                sideBarType:'off',
+                projectNav:[],
+                companyId:'',
+                projectId:'',
+                projects: [],
+                userList:[],
+                networksList:[],
+                networksNoDataText:'请先选择项目',
+                lampList:[],
+                lampNoDataText:'请先选择网络',
+                /*表格*/
+                tableList:[{prop:'project_name',label:'项目名称'},{prop:'network_name',label:'网络名称'},{prop:'lampid',label:'路灯ID'},{prop:'repair_path',label:'路段'},{prop:'userid',label:'维修人员id'},{prop:'name',label:'维修人员名字'},{prop:'repair_hitch',label:'维修故障'},{prop:'repair_solution',label:'维修方案'},{prop:'repair_time',label:'维修时间'}],
+                tableListEN:[{prop:'project_name',label:'Project name'},{prop:'network_name',label:'Network name'},{prop:'lampid',label:'Lamp ID'},{prop:'repair_path',label:'Section'},{prop:'userid',label:'Maintenance staff id'},{prop:'name',label:'Maintenance staff name'},{prop:'repair_hitch',label:'Repair failure'},{prop:'repair_solution',label:'maintenance proposal'},{prop:'repair_time',label:'Repair time'}],
+                tableData: [],
+                multipleSelection:[],
+                currentPage:1,
+                pageSize:20,
+                total:0,
+                addRecordDialog:false,
+                repairInfoId:'',
+                recordType:'add',
+                addRecordForm:{
+                    repair_id:'',
+                    projectid:'',
+                    networkid:'',
+                    lampid:'',
+                    repair_hitch:'',
+                    repair_solution:'',
+                    repair_time:'',
+                    address:'',
+                },
+                loading:{
+                    table:false,
+                    recordKeep:false,
+                },
+                recordTitle:'新建维修记录',
+                recordButton:'立 刻 创 建',
+            }
+        },
+        components:{sideBar},
+        computed:{
+            ...mapGetters({
+                token:'token',
+                username:'username',
+                client_key:'client_key',
+                projectsId:'projectsId',
+                version:'version',
+          })
+        },
+        mounted(){
+            if(this.version == 1){
+                this.recordTitle = 'New maintenance record';
+                this.recordButton = 'Inception';
+                this.networksNoDataText = 'Please select the item';
+                this.lampNoDataText = 'Please select the network first';
+            }
+            this.getProjectNav('默认');
+        },
+        methods:{
+            sideBarCompanyList(val,type){
+                baseApi.ajax_post(
+                    allUrl.device.projectNav,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        searchType:type,
+                        keyword:val,
+                    },
+                    {},
+                    data =>{
+                        // console.log(data,'公司列表')
+                        this.projectNav = data.data;
+                        for(var key in data.data){
+                            this.$set(data.data[key],'type','展开')
+                            if(this.version == 1){
+                                this.$set(data.data[key],'type','Unfold')
+                            }else{
+                                this.$set(data.data[key],'type','展开')
+                            }
+                            if(data.data[key].project_list){
+                                for(var d of data.data[key].project_list){
+                                    this.$set(d,'companyId',data.data[key].id)
+                                }
+                                if(data.data[key].id == this.companyId){
+                                    if(this.version == 1){
+                                        this.$set(data.data[key],'type','Collapse')
+                                    }else{
+                                        this.$set(data.data[key],'type','收起')
+                                    }
+                                }
+                            }
+                        }
+                    },
+                this)
+            },
+            search(){
+                this.repairList(1);
+            },
+            recordKeydown(e){
+                if(e.key == 'Enter'){
+                    this.recordKeep();
+                }
+            },
+            handleSelectionChange(val) {
+                this.multipleSelection = val;
+            },
+            /*获取公司项目列表*/
+            getProjectNav(value){
+                baseApi.ajax_post(
+                    allUrl.device.projectNav,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        // console.log(data,'公司列表')
+                        this.projectNav = data.data;
+
+                        var storage = window.localStorage;
+                        let projectId = storage.getItem("projectId");
+                        this.companyId = storage.getItem("companyId");
+
+                        for(var key in data.data){
+                            if(this.version == 1){
+                                this.$set(data.data[key],'type','Unfold')
+                            }else{
+                                this.$set(data.data[key],'type','展开')
+                            }
+                            if(data.data[key].project_list){
+                                for(var d of data.data[key].project_list){
+                                    this.$set(d,'companyId',data.data[key].id)
+                                }
+                            }
+                            if(this.companyId != 'false' && this.companyId){
+                                if(data.data[key].id == this.companyId){
+                                    if(this.version == 1){
+                                        this.$set(data.data[key],'type','Collapse')
+                                    }else{
+                                        this.$set(data.data[key],'type','收起')
+                                    }
+                                    this.projectId = projectId;
+                                    this.repairList(1)
+                                }
+                            }else{
+                                if(value == '默认'){
+                                    if(key == 0){
+                                        if(this.version == 1){
+                                            this.$set(data.data[key],'type','Collapse')
+                                        }else{
+                                            this.$set(data.data[key],'type','收起')
+                                        }
+                                        if(data.data[key].project_list.length > 0){
+                                            this.companyId = data.data[key].project_list[0].companyId;
+                                            this.projectId = data.data[key].project_list[0].id;
+                                            this.repairList(1);
+                                        }else{
+                                            /**/
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    },
+                this)
+            },
+            /*侧边栏打开关闭*/
+            sideBarIsOn(){
+                if(this.sideBarType == 'on'){
+                    this.sideBarType = 'off';
+                    if(document.getElementsByClassName('sideBar')[0]){
+                        document.getElementsByClassName('sideBar')[0].setAttribute('style', 'width: 0px ;transition:all 0.6s;');
+                    }
+                }else{
+                    this.sideBarType = 'on';
+                    if(document.getElementsByClassName('sideBar')[0]){
+                        document.getElementsByClassName('sideBar')[0].setAttribute('style', 'width: 300px ;transition:all 0.6s;');
+                    }
+                }
+            },
+            /*侧边栏里展开收起*/
+            sideBarListIsOpen(data){
+                if(data.type == '收起'){
+                    data.type = '展开';   
+                }else if(data.type == '展开'){
+                    data.type = '收起';   
+                }
+                if(this.version == 1){
+                    if(data.type == 'Collapse'){
+                        data.type = 'Unfold';   
+                    }else{
+                        data.type = 'Collapse'; 
+                    }
+                }
+            },
+            projectSelectFun(data){
+                // console.log(data)
+                var storage = window.localStorage;
+                storage.setItem('projectId',data.id);
+                storage.setItem('companyId',data.companyId);
+                this.companyId = data.companyId;
+                this.projectId = data.id;
+                this.repairList(1);
+            },
+            projectGet(){
+                baseApi.ajax_post(
+                    allUrl.home.projectGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        this.projects = data.data.projects;
+                        // console.log(data,'项目列表')
+                    },
+                this)
+            },
+            projectsIdChange(val,type){
+                baseApi.ajax_post(
+                    allUrl.alarm.networkGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        project_id:val,
+                    },
+                    {},
+                    data =>{
+                        this.networksList = data.data.networks;
+                        if(type != 1){
+                            this.addRecordForm.networkid = '';
+                            this.addRecordForm.lampid = '';
+                        }
+                        if(this.networksList.length == 0){
+                            if(this.version == 1){
+                                this.networksNoDataText = 'There is no network under the current project'
+                            }else{
+                                this.networksNoDataText = '当前项目下无网络'
+                            }
+                        }else{
+                            if(this.version == 1){
+                                this.networksNoDataText = 'Please select the item'
+                            }else{
+                                this.networksNoDataText = '请先选择项目'
+                            }
+                        }
+                        // console.log(data,'网络列表')
+                    },
+                this)
+            },
+            networksIdChange(val,type){
+                baseApi.ajax_post(
+                    allUrl.alarm.lampList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        networkid:val,
+                    },
+                    {},
+                    data =>{
+                        this.lampList = data.data;
+                        if(type != 1){
+                            this.addRecordForm.lampid = '';
+                        }
+                        if(this.lampList.length == 0){
+                            if(this.version == 1){
+                                this.lampNoDataText = 'There is no street lamp under the current network'
+                            }else{
+                                this.lampNoDataText = '当前网络下无路灯'
+                            }
+                        }
+                        // console.log(data,'网络列表')
+                    },
+                this)
+            },
+            addRecordFun(){
+                if(this.version == 1){
+                    this.recordTitle = 'New maintenance record';
+                    this.recordButton = 'Inception';
+                }else{
+                    this.recordTitle = '新建维修记录';
+                    this.recordButton = '立 刻 创 建';
+                }
+                this.recordType = 'add';
+                this.addRecordDialog = true;
+                this.$nextTick(function(){
+                    this.$refs['addRecordForm'].resetFields();
+                    for(let key in this.addRecordForm){
+                        this.addRecordForm[key] = '';
+                    }
+                    if(this.projectId){
+                        this.addRecordForm.projectid = this.projectId;
+                        this.projectsIdChange(this.projectId,1);
+                    }
+                    baseApi.ajax_post(
+                        allUrl.alarm.userList,
+                        {
+                            username:this.username,
+                            client_key:this.client_key,
+                            token:this.token,
+                        },
+                        {},
+                        data =>{
+                            this.userList = data.data.list;
+                            // console.log(data,'维修人员下拉列表')
+                        },
+                    this)
+                    this.projectGet();
+                })
+            },
+            editRecordFun(data){
+                if(this.version == 1){
+                    this.recordTitle = 'Edit maintenance record';
+                    this.recordButton = 'Save';
+                }else{
+                    this.recordTitle = '编辑维修记录';
+                    this.recordButton = '立 刻 保 存';
+                }
+                this.recordType = 'edit';
+                this.repairInfoId = data.id;
+                baseApi.ajax_post(
+                    allUrl.alarm.userList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        this.userList = data.data.list;
+                        // console.log(data,'维修人员下拉列表')
+                    },
+                this)
+                baseApi.ajax_post(
+                    allUrl.alarm.repairInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        repairid:data.id
+                    },
+                    {},
+                    data =>{
+                        for(let key in this.addRecordForm){
+                            this.addRecordForm[key] = data.data[key];
+                        }
+                        this.addRecordDialog = true;
+                        this.projectGet();
+                        this.projectsIdChange(data.data.projectid,1);
+                        this.networksIdChange(data.data.networkid,1);
+                    },
+                this)
+            },
+            recordKeep(){
+                this.$refs['addRecordForm'].validate((valid) => {
+                    if(valid){
+                        if(this.recordType == 'add'){
+                            this.saveRepairInfo(0)
+                        }else{
+                            this.saveRepairInfo(this.repairInfoId)
+                        }
+                    }
+                })
+            },
+            batchDel(){
+                let ids = '';
+                for(let d of this.multipleSelection){
+                    if(ids == ''){
+                        ids = d.id;
+                    }else{
+                        ids += ','+d.id;
+                    }
+                }
+                if(ids == ''){
+                    this.$message({
+                      showClose: true,
+                      message:this.version == 0?'请先勾选维修记录':'Please check the maintenance record first',
+                      type: 'warning'
+                    });
+                }else{
+                    this.$confirm(this.version == 0?'此操作将永久删除该记录, 是否继续?':'This operation will permanently delete the record. Continue?', this.version == 0?'提示':'prompt', {
+                      confirmButtonText: this.version == 0?'确定':'determine',
+                      cancelButtonText: this.version == 0?'取消':'Cancel',
+                      type: 'warning'
+                    }).then(() => {
+                      baseApi.ajax_post(
+                        allUrl.alarm.delRepairInfo,
+                        {
+                            username:this.username,
+                            client_key:this.client_key,
+                            token:this.token,
+                            id:ids,
+                        },
+                        {},
+                        data =>{
+                            this.$message({
+                              showClose: true,
+                              message:data.msg,
+                              type: 'success'
+                            });
+                            this.repairList(this.currentPage);
+                        },
+                      this)
+                    }).catch(() => {
+                      this.$message({
+                        type: 'info',
+                        message: this.version == 0?'已取消删除':'Canceled Del'
+                      });          
+                    });
+                }
+            },
+            delRepairInfo(data){
+                baseApi.ajax_post(
+                    allUrl.alarm.delRepairInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        id:data.id,
+                    },
+                    {},
+                    data =>{
+                        this.$message({
+                          showClose: true,
+                          message:data.msg,
+                          type: 'success'
+                        });
+                        this.repairList(this.currentPage);
+                    },
+                this)
+            },
+            saveRepairInfo(id){
+                this.loading.recordKeep = true;
+                baseApi.ajax_post(
+                    allUrl.alarm.saveRepairInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        id:id,
+                        ...this.addRecordForm,
+                    },
+                    {},
+                    data =>{
+                        this.$message({
+                          showClose: true,
+                          message:data.msg,
+                          type: 'success'
+                        });
+                        this.addRecordDialog = false;
+                        this.loading.recordKeep = false;
+                        this.repairList(this.currentPage);
+                        // console.log(data,'添加/编辑维修记录回调');
+                    },
+                this,
+                () =>{
+                    this.loading.recordKeep = false;
+                })
+            },
+            repairList(value){
+                this.loading.table = true;
+                baseApi.ajax_post(
+                    allUrl.alarm.repairList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        keyword:this.keyword,
+                        projectid:this.projectId,
+                        page:value,
+                        count:this.pageSize,
+                    },
+                    {},
+                    data =>{
+                        this.currentPage = value;
+                        this.total = data.data.total;
+                        this.tableData = data.data.list;
+                        let i = (this.currentPage - 1)*this.pageSize+1;
+                        for(let d of this.tableData){
+                            d.GL_index = i;
+                            i++;
+                        }
+                        this.loading.table = false;
+                        // console.log(data,'维修记录列表');
+                    },
+                this)
+            },
+            /*表格*/
+            tableRowClassName({ rowIndex}) {
+                if (rowIndex%2 == 0) {
+                  return 'row_bg';
+                }
+                return '';
+            },
+            /*分页*/
+            handleSizeChange(val) {
+                this.pageSize = val;
+                this.repairList(this.currentPage);
+            },
+            handleCurrentChange(val) {
+                // console.log(`当前页: ${val}`);
+                this.repairList(val)
+            },
+        }
+    }
+</script>
+
+<style type="text/css" lang="less">
+    .maintenanceRecord_main{
+        position: relative;
+        min-width: 1260px;
+        max-width: 1920px;
+        height: 100%;
+        min-height: 610px;
+        max-height: 920px;
+        margin: auto;
+        >.wrap{
+            padding: 0px 50px;
+            height: 100%;
+        }
+        >.main_top_bg{
+            // width:1920px;
+            width: 100%;
+            height:246px; 
+            position: absolute;
+            z-index: -1;
+            background:rgba(234,234,234,1);
+        }
+        .main_top{
+            width: 100%;
+            // height: 110px;
+            margin-bottom: 29px;
+            padding-top: 32px;
+            position: relative;
+            .search_box{
+                float: left;
+                width:344px;
+                height:50px;line-height: 50px;
+                background:rgba(255,255,255,1);
+                box-shadow: -5px 0px 0px 0px rgba(252,132,64,1);
+                .search{
+                    font-size:18px;
+                    font-family:PingFangSC-Regular;
+                    color:rgba(178,186,198,1);
+                }
+                .el-input__inner{
+                    height:50px;line-height: 50px;
+                    border: 0px;
+                }
+                .el-input-group__prepend{
+                    background: #ffffff;
+                    border: 0px;
+                    font-size: 18px;
+                    font-family:PingFangSC-Medium;
+                    color:rgba(26,26,26,1);
+                }
+            }
+            .button_box{
+                float: right;
+                .el-button{
+                    background: linear-gradient(140.3deg,rgba(252,132,64,1),rgba(254,113,33,1));
+                    color: #fff;
+                    margin-left: 18px;
+                }
+            }
+        }
+        .information_box{
+            width:100%;
+            height: calc(100% - 113px);
+            border-top: 1px solid #DDE4ED;
+            .paging_box{
+                text-align: center;
+                padding: 30px 0;
+                >.el-button{
+                    float: left;
+                    // width: 160px;
+                    height: 40px;line-height: 40px;
+                    font-size: 16px;color: #ffffff;
+                    padding:0px 22px;
+                    margin-top: -10px;
+                    background: linear-gradient(#fc8440, #fe7121);
+                    border: 0px;
+                }
+                .el-select .el-input.is-focus .el-input__inner{
+                    border-color: #fc8440;
+                }
+                .el-input.is-active .el-input__inner, .el-input__inner:focus{
+                    border-color: #fc8440;
+                }
+            }
+        }
+        .record_dialog{
+            .el-select{
+                width: 100%;
+            }
+            .el-date-editor.el-input, .el-date-editor.el-input__inner{
+                width: 100%;
+            }
+        }
+        .record_dialog_en{
+            .el-form-item__label{
+                line-height:20px;
+            }
+        }
+    }
+</style>

+ 945 - 0
webConfig/src/views/alarmMaintenance/repairPersonnel.vue

@@ -0,0 +1,945 @@
+<template>
+    <!-- 维修人员 -->
+    <div class="repairPersonnel_main">
+        <div class="main_top_bg">
+        </div>
+        <div class="additions" :class="{'additions_en':version == 1}" @click="additionsFun()">
+            <p>+</p>
+            <span>{{version==0?'添加人员':'Add people'}}</span>
+        </div>
+        <div class="wrap">
+            <div class="main_top clearfix">
+                <div class="search_box">
+                    <el-input :placeholder="version==0?'- 输入关键词进行搜索':'- Enter keywords to search'" v-model="keyword" class="search" @change="search">
+                        <template slot="prepend">{{version==0?'搜索':'Search'}}</template>
+                    </el-input>
+                </div>
+                <div class="button_box clearfix">
+                    <el-button type="primary">{{version==0?'姓名查看':'Name viewing'}} &nbsp;&nbsp;&nbsp;<i class="el-icon-caret-bottom"></i></el-button>
+                    <ul class="clearfix">
+                        <li v-for="(item) in alphabetList" :key="item.id" :class="{'li_select':tag == item}" @click="tag = item==tag?'':item">{{item}}</li>
+                    </ul>
+                </div>
+            </div>
+            <div class="content" v-for="n in rpListLength" :key="n">
+                <ul class="clearfix">
+                    <li v-for="(item,index) in repairPersonnelList" :key="item.id" @click="repairPersonnelFun(item,index)" v-show="index<(n*3) && index>=((n-1)*3)">
+                        <div class="clearfix">
+                            <div class="avatar" :style="{'background':'url('+item.url+')'}"></div>
+                            <div>
+                                <p><span>{{item.name}}</span><span>{{item.number}}{{version==0?'号':'Number'}}  {{item.department}}</span></p>
+                                <p>{{version==0?'维修数:':'Maintenance number: '}}{{item.repair_count}}</p>
+                            </div>
+                        </div>
+                        <div class="bottom" :class="{'marginRightSelect':repairPersonnelId == item.id}">
+                            <p><span>·</span>{{item.repair_path}}</p>
+                            <div>{{version==0?'近期维修':'Recent repairs'}}</div>
+                        </div>
+                        <div class="icon" v-if="repairPersonnelId == item.id">
+                            <div></div>
+                            <div></div>
+                        </div>
+                    </li>
+                </ul>
+                <div class="table_box" v-if="index == n">
+                    <div class="table_box_top">
+                        <ul class="clearfix">
+                        <!--     <li v-for="(item,index) in employeeInformationList" v-if="version==0">
+                                <span>{{item.key}}</span>
+                                <span>{{userInfoData[item.value]}}</span>
+                            </li> -->
+                            <li v-for="(item) in employeeInformationListEN" :key="item.key">
+                                <span>{{item.key}}</span>
+                                <span>{{userInfoData[item.value]}}</span>
+                            </li>
+                        </ul>
+                    </div>
+                    <div class="tableWrap">
+                        <el-table
+                            :data="tableData"
+                            width="100%"
+                            height="300"
+                            border
+                            :row-class-name="tableRowClassName">
+                            <el-table-column
+                              type="selection"
+                              width="48">
+                            </el-table-column>
+                           <!--  <el-table-column align="center" :show-overflow-tooltip="true" :prop="item.prop" :label="item.label" :key="item.id" :min-width="item.prop=='repair_time'?'160':(item.label.length+1)*14+20" v-for="(item,index) in tableList" v-if="version == 0">
+                            </el-table-column> -->
+                            <el-table-column align="center" :show-overflow-tooltip="true" :prop="item.prop" :label="item.label" :key="item.id" :min-width="item.prop=='repair_time'?'160':(item.label.length+1)*9+15" v-for="(item) in tableListEN">
+                            </el-table-column>
+                            <el-table-column
+                                :label="version==0?'操作':'operate'"
+                                align="center"
+                                width="100">
+                              <template slot-scope="scope">
+                                <el-button type="text" size="small" @click="editRecordFun(scope.row)">{{version==0?'编辑':'Edit'}}</el-button>
+                              </template>
+                            </el-table-column>
+                        </el-table>
+                    </div>
+                    <div class="table_box_bottom">
+                        <el-pagination
+                          @current-change="handleCurrentChange1"
+                          :current-page.sync="currentPage1"
+                          :page-size="16"
+                          layout="prev, pager, next"
+                          :total="total1">
+                        </el-pagination>
+                        <div class="button_box">
+                            <el-button @click="editItionsFun()">{{version==0?'编辑资料':'Edit information'}} <span class="icon_span">→</span></el-button>
+                            <el-button @click="delRepairUser()">{{version==0?'删除成员':'Remove member'}}<i class="el-icon-close"></i></el-button>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <div class="main_bottom">
+                <el-pagination
+                  @current-change="handleCurrentChange2"
+                  :current-page.sync="currentPage2"
+                  :page-size="18"
+                  layout="prev, pager, next"
+                  :total="total2">
+                </el-pagination>
+            </div>
+        </div>
+        <!-- 添加人员 -->
+        <el-dialog
+          :title="ItionsTitle"
+          :visible.sync="additionsDialog"
+          :class="{'addItions_en':version==1}"
+          width="60%">
+          <el-form ref="additionsForm" :model="additionsForm" label-width="140px">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'维修人员ID:':'Maintenance Person ID:'" prop="repair_id" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-input v-model="additionsForm.repair_id" @keyup.native="itionsKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'所属部门:':'Department:'" prop="department">
+                    <el-input v-model="additionsForm.department" @keyup.native="itionsKeydown($event)"></el-input>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'维修人员名称:':'Maintenance personnel name:'" prop="name" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-input v-model="additionsForm.name" @keyup.native="itionsKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'手机号码:':'cellphone number:'" prop="phone" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-input v-model="additionsForm.phone" @keyup.native="itionsKeydown($event)"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+              <el-form-item label="Email:">
+                <el-input v-model="additionsForm.email" @keyup.native="itionsKeydown($event)"></el-input>
+              </el-form-item>
+          </el-form>
+          <div class="dialog_foot">
+            <el-button type="primary" @click="saveRepairUser()" v-loading="loading.saveRepairUser">{{ItionsButton}}</el-button>
+          </div>
+        </el-dialog>
+        <!-- 编辑维修记录 -->
+        <el-dialog
+          :title="version=='0'?'编辑维修记录':'Edit maintenance record'"
+          :visible.sync="addRecordDialog"
+          class="record_dialog"
+          :class="{'record_dialog_en':version == 1}"
+          width="60%">
+          <el-form ref="addRecordForm" :model="addRecordForm" label-width="140px">
+              <el-row>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'维修人员名称:':'Maintenance personnel name:'" prop="repair_id" :rules="{required: true, message: '不能为空', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.repair_id" placeholder="" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in userList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'网络名称:':'Network name:'" prop="networkid" :rules="{required: true, message: '不能为空', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.networkid" placeholder="" @change="networksIdChange" :no-data-text="networksNoDataText" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in networksList"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修的故障:':'Repair failure:'">
+                    <el-input v-model="addRecordForm.repair_hitch" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修方案时间:':'Maintenance schedule:'">
+                    <el-date-picker
+                      v-model="addRecordForm.repair_time"
+                      type="datetime">
+                    </el-date-picker>
+                  </el-form-item>
+                </el-col>
+                <el-col :span="12">
+                  <el-form-item :label="version==0?'项目名称:':'project name:'" prop="projectid" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.projectid" placeholder="" @change="projectsIdChange" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in projects"
+                        :key="item.id"
+                        :label="item.name"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'路灯ID:':'Streetlight ID:'" prop="lampid" :rules="{required: true, message: version==0?'不能为空':'Not null', trigger: 'blur'}">
+                    <el-select v-model="addRecordForm.lampid" placeholder="" @keyup.native="recordKeydown($event)">
+                        <el-option
+                        v-for="item in lampList"
+                        :key="item.id"
+                        :label="item.number"
+                        :value="item.id">
+                        </el-option>
+                    </el-select>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'维修方案:':'maintenance proposal:'">
+                    <el-input v-model="addRecordForm.repair_solution" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                  <el-form-item :label="version==0?'路段:':'Road section:'">
+                    <el-input v-model="addRecordForm.address" @keyup.native="recordKeydown($event)"></el-input>
+                  </el-form-item>
+                </el-col>
+              </el-row>
+          </el-form>
+          <div class="dialog_foot">
+            <el-button type="primary" @click="recordKeep()" v-loading="loading.recordKeep">{{version==0?'立 刻 保 存':'Save'}}</el-button>
+          </div>
+        </el-dialog>
+    </div>
+</template>
+
+<script type="text/javascript">
+    import {mapGetters} from 'vuex'
+    import baseApi from '../../api/base.js'
+    import allUrl from '../../api/allUel.js'
+    export default{
+        data(){
+            return{
+                keyword:'',
+                value:1,
+                userid:'',
+                reportList:[{label:'姓名查看',value:1}],
+                alphabetList:['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'],
+                repairPersonnelList:[],
+                employeeInformationList:[{key:'维修员名称',value:'name'},{key:'维修员ID',value:'repair_id'},{key:'所属账号',value:'owner'},{key:'所属部门',value:'department'},{key:'手机号码',value:'telephone'},{key:'E-mail',value:'email'}],
+                employeeInformationListEN:[{key:'Maintenance staff name',value:'name'},{key:'Maintenance ID',value:'repair_id'},{key:'Account number',value:'owner'},{key:'Department',value:'department'},{key:'cellphone number',value:'telephone'},{key:'E-mail',value:'email'}],
+                userInfoData:[],
+                tag:'',
+                /*表格*/
+                tableList:[{prop:'projectname',label:'项目名称'},{prop:'networkname',label:'网络名称'},{prop:'lampid',label:'路灯ID'},{prop:'repair_path',label:'路段'},{prop:'repair_hitch',label:'故障维修'},{prop:'repair_solution',label:'维修方案'},{prop:'repair_time',label:'维修时间'}],
+                tableListEN:[{prop:'projectname',label:'Project name'},{prop:'networkname',label:'Network name'},{prop:'lampid',label:'Lamp ID'},{prop:'repair_path',label:'Section'},{prop:'repair_hitch',label:'malfunction repair'},{prop:'repair_solution',label:'maintenance proposal'},{prop:'repair_time',label:'Repair time'}],
+                tableData: [],
+                currentPage1:1,
+                total1:0,
+                currentPage2:1,
+                total2:0,
+                rpListLength:0,
+                repairPersonnelId:'',
+                index:'',
+                additionsDialog:false,
+                ItionsTitle:'添加维修人员',
+                ItionsButton:'立 刻 新 建',
+                additionsForm:{
+                    repair_id:'',
+                    name:'',
+                    department:'',
+                    phone:'',
+                    email:'',
+                },
+                itionsType:'',
+                loading:{
+                    saveRepairUser:false,
+                    recordKeep:false,
+                },
+                addRecordDialog:false,
+                addRecordForm:{
+                    repair_id:'',
+                    projectid:'',
+                    networkid:'',
+                    lampid:'',
+                    repair_hitch:'',
+                    repair_solution:'',
+                    repair_time:'',
+                    address:'',
+                },
+                userList:[],
+                projects:[],
+                networksNoDataText:'请先选择项目',
+                lampList:[],
+                networksList:[],
+                lampNoDataText:'请先选择网络',
+                repairInfoId:'',
+            }
+        },
+        computed:{
+            ...mapGetters({
+                token:'token',
+                username:'username',
+                client_key:'client_key',
+                projectsId:'projectsId',
+                version:'version',
+          })
+        },
+        mounted(){
+            this.repairUserList(1)
+        },
+        methods:{
+            search(){
+                // console.log(val)
+                this.repairUserList(1)
+            },
+            itionsKeydown(e){
+                if(e.key == 'Enter'){
+                    this.saveRepairUser();
+                }
+            },
+            recordKeydown(e){
+                if(e.key == 'Enter'){
+                    this.recordKeep();
+                }
+            },
+            recordKeep(){
+                this.$refs['addRecordForm'].validate((valid) => {
+                    if(valid){
+                        this.saveRepairInfo(this.repairInfoId)
+                    }
+                })
+            },
+            saveRepairInfo(id){
+                this.loading.recordKeep = true;
+                baseApi.ajax_post(
+                    allUrl.alarm.saveRepairInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        id:id,
+                        ...this.addRecordForm,
+                    },
+                    {},
+                    data =>{
+                        this.$message({
+                          showClose: true,
+                          message:data.msg,
+                          type: 'success'
+                        });
+                        this.addRecordDialog = false;
+                        this.loading.recordKeep = false;
+                        this.userInfo(this.currentPage1)
+                    },
+                this,
+                () =>{
+                    this.loading.recordKeep = false;
+                })
+            },
+            editRecordFun(data){
+                // console.log(data)
+                this.repairInfoId = data.id;
+                baseApi.ajax_post(
+                    allUrl.alarm.userList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        this.userList = data.data.list;
+                        // console.log(data,'维修人员下拉列表')
+                    },
+                this)
+                baseApi.ajax_post(
+                    allUrl.alarm.repairInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        repairid:data.id
+                    },
+                    {},
+                    data =>{
+                        for(let key in this.addRecordForm){
+                            this.addRecordForm[key] = data.data[key];
+                        }
+                        this.addRecordDialog = true;
+                        this.projectGet();
+                        this.projectsIdChange(data.data.projectid,1);
+                        this.networksIdChange(data.data.networkid,1);
+                    },
+                this)
+            },
+            projectGet(){
+                baseApi.ajax_post(
+                    allUrl.home.projectGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        this.projects = data.data.projects;
+                        // console.log(data,'项目列表')
+                    },
+                this)
+            },
+            projectsIdChange(val,type){
+                baseApi.ajax_post(
+                    allUrl.alarm.networkGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        project_id:val,
+                    },
+                    {},
+                    data =>{
+                        this.networksList = data.data.networks;
+                        if(type != 1){
+                            this.addRecordForm.networkid = '';
+                            this.addRecordForm.lampid = '';
+                        }
+                        if(this.networksList.length == 0){
+                            if(this.version == 1){
+                                this.networksNoDataText = 'There is no network under the current project'
+                            }else{
+                                this.networksNoDataText = '当前项目下无网络'
+                            }
+                        }else{
+                            if(this.version == 1){
+                                this.networksNoDataText = 'Please select the item'
+                            }else{
+                                this.networksNoDataText = '请先选择项目'
+                            }
+                        }
+                        // console.log(data,'网络列表')
+                    },
+                this)
+            },
+            networksIdChange(val,type){
+                baseApi.ajax_post(
+                    allUrl.alarm.lampList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        networkid:val,
+                    },
+                    {},
+                    data =>{
+                        this.lampList = data.data;
+                        if(type != 1){
+                            this.addRecordForm.lampid = '';
+                        }
+                        if(this.lampList.length == 0){
+                            if(this.version == 1){
+                                this.lampNoDataText = 'There is no street lamp under the current network'
+                            }else{
+                                this.lampNoDataText = '当前网络下无路灯'
+                            }
+                        }
+                        // console.log(data,'网络列表')
+                    },
+                this)
+            },
+            delRepairUser(){
+                this.$confirm(this.version==0?'此操作将永久删除该成员, 是否继续?':'This will permanently delete the member. Continue?', this.version==0?'提示':'prompt', {
+                  confirmButtonText: this.version==0?'确定':'determine',
+                  cancelButtonText: this.version==0?'取消':'cancel',
+                  type: 'warning'
+                }).then(() => {
+                  baseApi.ajax_post(
+                    allUrl.alarm.delRepairUser,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        userid:this.userid,
+                    },
+                    {},
+                    data =>{
+                        this.$message({
+                          showClose: true,
+                          message:data.msg,
+                          type: 'success'
+                        });
+                        this.repairPersonnelId = -1;
+                        this.index = 0;
+                        this.repairUserList(this.currentPage2)
+                    },
+                  this)
+                }).catch(() => {
+                  this.$message({
+                    type: 'info',
+                    message: this.version == 0?'已取消删除':'Canceled Del'
+                  });          
+                });
+            },
+            additionsFun(){
+                this.ItionsTitle = '添加维修人员';
+                this.ItionsButton = '立 刻 新 建';
+                if(this.version == 1){
+                    this.ItionsTitle = 'Adding maintenance personnel';
+                    this.ItionsButton = 'Immediately NEW';
+                }
+                this.additionsDialog = true;
+                this.$nextTick(function(){
+                    this.$refs['additionsForm'].resetFields();
+                    for(let key in this.additionsForm){
+                        this.additionsForm[key] = '';
+                    }
+                    this.itionsType = 'add';
+                })
+            },
+            editItionsFun(){
+                this.ItionsTitle = '编辑维修人员';
+                this.ItionsButton = '立 刻 保 存';
+                if(this.version == 1){
+                    this.ItionsTitle = 'Editors maintenance personnel';
+                    this.ItionsButton = 'Save';
+                }
+                this.additionsDialog = true;
+                this.$nextTick(function(){
+                    this.$refs['additionsForm'].resetFields();
+                    for(let key in this.additionsForm){
+                        this.additionsForm[key] = this.userInfoData[key];
+                    }
+                    this.itionsType = 'edit';
+                })
+            },
+            saveRepairUser(){
+                let userid;
+                if(this.itionsType == 'edit'){
+                    userid = this.userid;
+                }else{
+                    userid = 0;
+                }
+                this.$refs['additionsForm'].validate((valid) => {
+                    if(valid){
+                        this.loading.saveRepairUser = true;
+                        baseApi.ajax_post(
+                            allUrl.alarm.saveRepairUser,
+                            {
+                                username:this.username,
+                                client_key:this.client_key,
+                                token:this.token,
+                                userid:userid,
+                                ...this.additionsForm,
+                            },
+                            {},
+                            data =>{
+                                this.$message({
+                                  showClose: true,
+                                  message:data.msg,
+                                  type: 'success'
+                                });
+                                this.loading.saveRepairUser = false;
+                                this.repairPersonnelId = -1;
+                                this.index = 0;
+                                this.repairUserList(this.currentPage2);
+                                this.additionsDialog = false;
+                            },
+                        this,
+                        ()=>{
+                            this.loading.saveRepairUser = false;
+                        })
+                    }
+                })
+            },
+            userInfo(value){
+                baseApi.ajax_post(
+                    allUrl.alarm.userInfo,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        userid:this.userid,
+                        page:value,
+                        count:16,
+                    },
+                    {},
+                    data =>{
+                        this.currentPage1 = value;
+                        this.userInfoData = data.data;
+                        this.tableData = data.data.repair_list;
+                        this.total1 = data.data.total*16;
+                    },
+                this)
+            },
+            repairUserList(value){
+                baseApi.ajax_post(
+                    allUrl.alarm.repairUserList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        keyword:this.keyword,
+                        page:value,
+                        count:18,
+                        tag:this.tag,
+                    },
+                    {},
+                    data =>{
+                        this.currentPage2 = value;
+                        this.repairPersonnelList = data.data.list;
+                        this.rpListLength = this.repairPersonnelList.length;
+                        this.total2 = data.data.total*18;
+                    },
+                this)
+            },
+             /*表格*/
+            tableRowClassName({ rowIndex}) {
+                if (rowIndex%2 != 0) {
+                  return 'row_bg';
+                }
+                return '';
+            },
+            /*分页*/
+            handleCurrentChange1(val) {
+                this.userInfo(val)
+            },
+            handleCurrentChange2(val) {
+                this.repairUserList(val)
+            },
+            repairPersonnelFun(data,index){
+                if(this.repairPersonnelId == data.id){
+                    this.repairPersonnelId = -1;
+                    this.index = 0;
+                }else{
+                    this.repairPersonnelId = data.id;
+                    this.index = parseInt(index/3)+1;   
+                }
+                this.userid = data.id;
+                this.userInfo(1)
+            }
+        },
+        watch:{
+            tag(){
+                this.repairUserList(1);
+            }
+        }
+    }
+</script>
+
+<style type="text/css" lang="less">
+    .repairPersonnel_main{
+        position: relative;
+        min-width: 1260px;
+        .additions{
+            position: fixed;
+            right: 0px;top:270px;
+            z-index: 2;
+            background: #373b44;
+            border-radius: 10px;
+            width: 36px;
+            padding: 0px 15px 15px 15px;
+            color: #fff;
+            text-align: center;
+            cursor: pointer;
+            p{
+                padding: 5px 0;
+                font-size: 26px;
+            }
+        }
+        .additions_en{
+            width: auto;
+        }
+        >.wrap{
+            padding: 0px 46px 50px 50px;
+        }
+        >.main_top_bg{
+            width: 100%;
+            height:246px; 
+            position: absolute;
+            z-index: -1;
+            background:rgba(234,234,234,1);
+        }
+        .main_top{
+            width: 100%;
+            // height: 110px;
+            margin-bottom: 36px;
+            padding-top: 32px;
+            position: relative;
+            .search_box{
+                float: left;
+                width:344px;
+                height:50px;line-height: 50px;
+                background:rgba(255,255,255,1);
+                box-shadow: -5px 0px 0px 0px rgba(252,132,64,1);
+                .search{
+                    font-size:18px;
+                    font-family:PingFangSC-Regular;
+                    color:rgba(178,186,198,1);
+                }
+                .el-input__inner{
+                    height:50px;line-height: 50px;
+                    border: 0px;
+                }
+                .el-input-group__prepend{
+                    background: #ffffff;
+                    border: 0px;
+                    font-size: 18px;
+                    font-family:PingFangSC-Medium;
+                    color:rgba(26,26,26,1);
+                }
+            }
+            .button_box{
+                float: right;
+                margin-top: 5px;
+                // .el-button{
+                //  background: linear-gradient(140.3deg,rgba(252,132,64,1),rgba(254,113,33,1));
+                //  color: #fff;
+                //  margin-left: 18px;
+                // }
+                .el-button {
+                    width: 142px;
+                    float: left;
+                    .el-input__inner{
+                        background: linear-gradient(#3682fb, #38a1f6);
+                        border-radius: 20px;
+                        color: #fff;
+                        text-align: center;
+                    }
+                }
+                ul{
+                    float: left;
+                    margin-left:10px;
+                }
+                li{
+                    float: left;
+                    height: 40px;line-height: 40px;
+                    padding: 0 6px;
+                    cursor: pointer;
+                    color: #222222;
+                    // font-weight: bold;
+                }
+                li:hover{
+                    color:#FC8440;
+                    font-weight: bold;
+                }
+                .li_select{
+                    color:#FC8440;
+                    font-weight: bold;
+                    text-decoration:underline;
+                }
+            }
+        }
+        .content{
+            >ul{
+                li{
+                    float: left;
+                    width: calc(33.33% - 22px);
+                    margin: 0 0 30px 20px;
+                    border: 1px solid #d9d9d9;border-radius: 5px;
+                    cursor: pointer;
+                    position: relative;
+                    >div:first-child{
+                        background: #fff;
+                        .avatar{
+                            float: left;
+                            width: 60px;height: 60px;background-size: 100% 100%;
+                            border-radius: 30px;
+                            margin: 20px 22px 27px 20px;
+                            background: #eee !important;
+                        }
+                        >div:last-child{
+                            float: left;
+                            margin-top: 30px;
+                            width: calc(100% - 110px);
+                            p{
+                                font-size: 14px;color: #666666;
+                                span:first-child{
+                                    font-size: 18px;color: #222222;
+                                    display: inline-block;
+                                    max-width: calc(100% - 100px);
+                                    margin-right: 20px;
+                                    white-space: nowrap;
+                                    overflow: hidden;
+                                    text-overflow: ellipsis;
+                                }
+                            }
+                            p:last-child{
+                                margin-top: 5px;
+                            }
+                        }
+                    }
+                    >.bottom{
+                        height: 80px;line-height: 80px;
+                        color: #666666;font-size: 16px;
+                        background: #eaeaea;
+                        padding-left: 30px;
+                        position: relative;
+                        span{
+                            display: inline-block;
+                            margin-right: 20px;
+                            font-size: 16px;
+                        }
+                        div{
+                            position: absolute;
+                            top: -10px;
+                            height: 21px;
+                            // width: 71px;
+                            padding: 0 20px;
+                            line-height: 21px;
+                            text-align: center;
+                            background: #fc8440;
+                            color: #fff;font-size: 12px;
+                            border-radius: 10px;
+                        }
+                    }
+                    >.marginRightSelect{
+                        background: #373b44;
+                        color: #ffffff;
+                    }
+                    .icon{
+                        position: absolute;
+                        top: 166px;
+                        left: 28px;
+                        margin-left: -5px;
+                        z-index: 1;
+                        div:first-child{
+                            background: #373B44;
+                            width: 2px;
+                            height:48px;
+                            border-radius: 1px;
+                            margin: 0 4px;
+                        }
+                        div:last-child{
+                            width:10px;
+                            height:10px;
+                            background: #373B44;
+                            border-radius: 5px;
+                            margin-top: -1px;
+                        }
+                    }
+                }
+                li:nth-child(3n+1){
+                    margin:0px;
+                    width: calc(33.33% - 2px);
+                }
+            }
+        }
+        .table_box{
+            width: 100%;height: 427px;
+            background: #494e54;
+            margin-bottom: 30px;
+            .table_box_top{
+                height: 74px;line-height: 74px;
+                li{
+                    float: left;
+                    margin-left: 35px;
+                    span{
+                        font-size: 14px;color: #fff;
+                    }
+                    span:first-child{
+                        opacity: 0.6;
+                        margin-right: 10px;
+                    }
+                }
+            }
+            .tableWrap{
+                height: 300px;width: 100%;
+                // overflow: auto;
+                tr:hover>td{
+                    background: inherit;
+                }
+                .el-table{
+                    background: #373b44;
+                    th,tr{
+                        background: #373b44;
+                        .cell{
+                            color: #fff;
+                            opacity: 0.6;
+                        }
+                    }
+                    td,th.is-leaf {
+                        border-bottom: 1px solid #5a5e67;
+                    }
+                    .row_bg{
+                        background: #313641;
+                    }
+                    .el-table--border, .el-table--group{
+                        border: 0px;
+                    }
+                    .el-table--border::after, .el-table--group::after, .el-table::before{
+                        background: #373b44;
+                    }
+                }
+                .el-table--border td, .el-table--border th, .el-table__body-wrapper .el-table--border.is-scrolling-left~.el-table__fixed{
+                    border-right: 1px solid #5a5e67;
+                }
+            }
+            .table_box_bottom{
+                text-align: center;
+                padding:10px 0;
+                .el-pagination .btn-next, .el-pagination .btn-prev{
+                    background: #494e54;
+                    color: #fff;
+                }
+                .el-pager li{
+                    background: #494e54;
+                    color: #fff;
+                }
+                .el-pager li.active{
+                    color: #000;
+                    background: #fff;
+                    border-radius: 20px;
+                }
+                >.el-button{
+                    float: left;
+                    width: 178px;height: 54px;line-height: 54px;
+                    background: linear-gradient(#3682fb, #38a1f6);
+                    padding:0px;
+                    font-size: 16px;
+                    margin-top: -10px
+                }
+                >.report_bottton{
+                    background: linear-gradient(#fc8440, #fe7121);
+                    border: 0px;
+                    color: #ffffff;
+                }
+                .button_box{
+                    float: right;
+                    margin:-35px 30px 0 0;
+                    .el-button:first-child{
+                        background: #7cb2ff;
+                    }
+                    .el-button:last-child{
+                        background: #fe7528;
+                    }
+                    .el-button{
+                        position: relative;
+                        color: #fff;
+                        border: 0px;
+                        padding-right: 40px;
+                        .el-icon-close{
+                            position: absolute;
+                            top: 12px;right: 5px;
+                        }
+                        .icon_span{
+                            position: absolute;
+                            top: 10px;right: 10px;
+                        }
+                    }
+                    .el-button+.el-button{
+                        margin-left: 18px;
+                    }
+                }
+            }
+        }
+        .main_bottom{
+            text-align: center;
+        }
+    }
+    .addItions_en{
+        .el-form-item__label{
+            line-height:20px;
+        }
+    }
+</style>

+ 442 - 0
webConfig/src/views/alarmMaintenance/streetLightInformation.vue

@@ -0,0 +1,442 @@
+<template>
+    <!-- 单个路灯 -->
+    <div class="alarmMaintenance_main">
+        <div class="main_top_bg">
+        </div>
+        <div class="right_sidebar_box">
+            <div class="right_sidebar_bg" v-if="rightSideBarType=='on'"></div>
+            <div class="right_sidebar">
+                <div class="sideBar_box">
+                    <div class="clearfix" @click="routerLink('repairPersonnel')">
+                        <span>{{version==0?'维修员':'Repairman'}}</span>
+                        <span>{{repairmenNumber}}&nbsp;&nbsp;个&nbsp;&nbsp;&nbsp;&nbsp;<i class="el-icon-arrow-right"></i>&nbsp;&nbsp;</span>
+                    </div>
+                    <p>{{version==0?'近期维修':'Recent repairs'}}<span @click="routerLink('maintenanceRecord')">{{version==0?'查看全部':'view all'}}</span></p>
+                    <ul>
+                        <li class="right_sideBar_list" v-for="(item) in projectList" :key="item.id">
+                            <p>{{item.name}}<span>{{version==0?'维修员':'Maintenance staff'}}&nbsp;&nbsp;&nbsp;&nbsp;{{item.repairPersonnel}}</span></p>
+                            <p><span>{{item.id}}</span>{{item.maintenancePlan}}</p>
+                            <div class="clearfix">
+                                <span>{{item.time}}</span>
+                            </div>
+                        </li>
+                    </ul>
+                </div>
+                <div class="sideBar_button" @click="rightSideBarIsOn()">
+                    <img src="../../img/rightSidebar.png" height="56" width="33">
+                </div>
+            </div>
+        </div>
+        <div class="wrap">
+            <div class="main_top clearfix">
+                <div class="title_box">
+                    <p>{{version==0?'报警路灯:':'Alarm street lamp:'}}{{lampName}}</p>
+                </div>
+                <div class="button_box">
+                    <el-button round @click="exportExcel()" v-loading="loading.exportExcel">{{version == 0 ?'导出Excel' : 'Export Excel'}}</el-button>
+                    <el-button round @click="printing()" v-loading="loading.printing">{{version == 0 ?'打印列表' : 'Print'}}</el-button>
+                </div>
+            </div>
+            <div class="information_box">
+                <el-table
+                    :data="tableData"
+                    ref="elTable"
+                    v-loading="loading.table"
+                    border
+                    width="100%"
+                    :height="showOverflowTooltip?'calc(100% - 92px)':''"
+                    :row-class-name="tableRowClassName">
+                    <el-table-column
+                      v-if="version == 0"
+                      label="编号"
+                      prop="GL_index"
+                      align="center"
+                      :show-overflow-tooltip="showOverflowTooltip"
+                      width="52">
+                    </el-table-column>
+                    <el-table-column
+                      v-if="version == 1"
+                      label="Number"
+                      prop="GL_index"
+                      align="center"
+                      :show-overflow-tooltip="showOverflowTooltip"
+                      width="82">
+                    </el-table-column>
+                    <!-- <el-table-column align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*14+20" v-for="(item,index) in tableList" v-if="version ==0">
+                    </el-table-column> -->
+                    <el-table-column align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*9+15" v-for="(item) in tableListEN">
+                    </el-table-column>
+                </el-table>
+                <div class="paging_box">
+                    <el-pagination
+                      @current-change="handleCurrentChange"
+                      :current-page="currentPage"
+                      :page-size="16"
+                      layout="prev, pager, next, jumper"
+                      :total="total">
+                    </el-pagination>
+                </div>
+            </div>
+        </div>
+        <button type="button" id="btn2" style="display: none"></button>
+    </div>
+</template>
+
+<script type="text/javascript">
+    import {mapGetters} from 'vuex'
+    // import sideBar from '../../components/sideBar.vue'
+    import baseApi from '../../api/base.js'
+    import allUrl from '../../api/allUel.js'
+    export default{
+        data(){
+            return{
+                lampId:'',
+                lampName:'',
+                /*表格*/
+                tableList:[{prop:'project',label:'项目名称'},{prop:'number',label:'报警路灯'},{prop:'stralarmtype',label:'报警事件'},{prop:'statusStr',label:'是否已处理'},{prop:'updatetime',label:'更新时间'}],
+                tableListEN:[{prop:'project',label:'Project name'},{prop:'number',label:'Lamp number'},{prop:'stralarmtype',label:'Alarm event'},{prop:'statusStr',label:'Handle or not'},{prop:'updatetime',label:'Update time'}],
+                tableData: [],
+                currentPage:1,
+                total:0,
+                /*右侧边栏*/
+                rightSideBarType:'off',
+                repairmenNumber:36,
+                projectList:[],
+                /*巡检弹框*/
+                inspectionSetupDialog:false,
+                inspectionSetupform:{},
+                patrolOrderList:[],
+                loading:{
+                    exportExcel:false,
+                    table:false,
+                    printing:false,
+                },
+                showOverflowTooltip:true,
+            }
+        },
+        components:{},
+        computed:{
+            ...mapGetters({
+                token:'token',
+                username:'username',
+                client_key:'client_key',
+                projectsId:'projectsId',
+                version:'version',
+          })
+        },
+        mounted(){
+            var url = window.location.hash.split("?")[1]; //获取url中"?"符后的字串
+            var theRequest = new Object();
+            if (url) {
+                let arr = url.split("&");
+                for (var i = 0; i < arr.length; i++) {
+                    theRequest[arr[i].split("=")[0]] = decodeURIComponent(arr[i].split("=")[1]);
+                }
+                this.lampId = theRequest.id;
+                this.lampName = theRequest.name;
+                this.alarmGet(1,0)
+            }
+            // console.log(this.lampId)
+            this.nearRepairList();
+        },
+        methods:{
+            exportExcel(){
+                this.alarmGet(1,1)
+            },
+            printing(){
+                this.loading.printing = true;
+                baseApi.ajax_post(
+                    allUrl.alarm.alarmGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        lampid:this.lampId,
+                        type:1,
+                        download:0,
+                        page:(this.currentPage - 1)*16,
+                        count:200,
+                        print:1,
+                    },
+                    {},
+                    data =>{
+                        this.loading.printing = false;
+                        this.loading.table = false;
+                        // this.total = data.data.list.total*16;
+                        this.tableData = data.data.list.history_list;
+                        let i = (this.currentPage - 1)*16+1;
+                        for(let d of this.tableData){
+                            d.GL_index = i;
+                            i++;
+                        }
+                        this.showOverflowTooltip = false;
+                        $(".el-table").css({width:'1250px',borderBottom:'1px solid #ebeef5',zoom:'0.83'});
+                        this.$refs.elTable.doLayout();
+                        let this_ = this;
+                        this.$nextTick(function(){
+                            $(".el-table").print({
+                                globalStyles : true,
+                                mediaPrint : false,
+                                iframe : true,
+                                deferred: $.Deferred().done(function() {
+                                    $(".el-table").css({width:'100%',borderBottom:'',zoom:'1'});
+                                    this_.showOverflowTooltip = true;
+                                    this_.$refs.elTable.doLayout();
+                                    this_.alarmGet(this_.currentPage,0)
+                                })
+                            });
+                        })
+                    },
+                this)
+            },
+            alarmGet(value,download){
+                if(download == 0){
+                    this.loading.table = true;
+                }else{
+                    this.loading.exportExcel =true;
+                }
+                baseApi.ajax_post(
+                    allUrl.alarm.alarmGet,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        lampid:this.lampId,
+                        type:1,
+                        download:download,
+                        page:value,
+                        count:16,
+                    },
+                    {},
+                    data =>{
+                        if(download == 0){
+                            this.loading.table = false;
+                            this.total = data.data.list.total*16;
+                            this.tableData = data.data.list.history_list;
+                            this.currentPage = value;
+                            let i = (this.currentPage - 1)*16+1;
+                            for(let d of this.tableData){
+                                d.GL_index = i;
+                                i++;
+                            }
+                        }else{
+                            this.loading.exportExcel = false;
+                            // var $eleBtn2 = $("#btn2");
+                            var $eleForm = $("<form method='get'></form>");
+                            $eleForm.attr("action",data.data.path);
+                            $(document.body).append($eleForm);
+                            //提交表单,实现下载
+                            $eleForm.submit();
+                        }
+                    },
+                this)
+            },
+            nearRepairList(){
+                baseApi.ajax_post(
+                    allUrl.alarm.nearRepairList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                    },
+                    {},
+                    data =>{
+                        // console.log(data,'---------')
+                        this.repairman = data.data.total;
+                        this.projectList = data.data.repair_list;
+                    },
+                this)
+            },
+            /*右侧边栏打开*/
+            rightSideBarIsOn(){
+                if(this.rightSideBarType == 'on'){
+                    this.rightSideBarType = 'off';
+                    if(document.getElementsByClassName('right_sidebar')[0]){
+                        document.getElementsByClassName('right_sidebar')[0].setAttribute('style', 'width: 0px ;transition:all 0.6s;');
+                    }
+                }else{
+                    this.rightSideBarType = 'on';
+                    if(document.getElementsByClassName('right_sidebar')[0]){
+                        document.getElementsByClassName('right_sidebar')[0].setAttribute('style', 'width: 470px ;transition:all 0.6s;');
+                    }
+                }
+            },
+            /*表格*/
+            tableRowClassName({ rowIndex}) {
+                if (rowIndex%2 == 0) {
+                  return 'row_bg';
+                }
+                return '';
+            },
+            /*分页*/
+            handleCurrentChange(val) {
+                this.alarmGet(val,0)
+            },
+            routerLink(type){
+                window.open('#/'+type);
+            }
+        }
+    }
+</script>
+
+<style type="text/css" lang="less">
+    .alarmMaintenance_main{
+        position: relative;
+        min-width: 1260px;
+        max-width: 1920px;
+        height: 100%;
+        min-height: 610px;
+        max-height: 920px;
+        margin: auto;
+        .right_sidebar_box{
+        }
+        >.wrap{
+            padding: 0px 50px;
+            height: 100%;
+        }
+        >.main_top_bg{
+            // width:1920px;
+            width: 100%;
+            height:246px; 
+            position: absolute;
+            z-index: -1;
+            background:rgba(234,234,234,1);
+        }
+        .right_sidebar_bg{
+            background: #000;
+            opacity: 0.1;
+            position: absolute;
+            width: 100%;height: 100%;
+            z-index: 2;
+        }
+        .right_sidebar{
+            position: absolute;
+            right: 0px;
+            width:0px;
+            height: 100%;
+            background:#494e54;
+            z-index: 2;
+            .sideBar_box{
+                width: calc(100%);
+                height: 100%;
+                overflow: hidden;
+                >div{
+                    margin: 20px 20px 0 20px;
+                    width: 430px;
+                    height: 50px;line-height: 50px;
+                    font-size: 16px;color: #fff;
+                    background: #373b44;
+                    cursor: pointer;
+                    span:first-child{
+                        margin-left: 20px;
+                    }
+                    span:last-child{
+                        float: right;
+                    }
+                }
+                >p{
+                    font-size: 16px;color: #fe7527;
+                    width: 430px;
+                    margin: 30px 20px;
+                    span{
+                        float: right;
+                        font-size: 14px;color: #fff;
+                        cursor: pointer;
+                    }
+                }
+                ul{
+                    height: calc(100% - 150px);
+                    width: 100%;
+                    overflow: auto;
+                }
+                li{
+                    margin: 20px 0 10px 20px;
+                    padding: 14px;
+                    width: 408px;
+                    background: #373b44;
+                    p:first-child{
+                        font-size: 16px;color: #fff;
+                        span{
+                            float: right;
+                            font-size: 12px;color: #fff;opacity: 0.8;
+                        }
+                    }
+                    p:nth-child(2){
+                        color: #fff;font-size: 12px;opacity: 0.8;
+                        margin-top: 16px;
+                    }
+                    >div{
+                        span{
+                            display: inline-block;
+                            font-size: 12px;color: #fff;opacity: 0.6;
+                            float: right;
+                            margin-top: 16px;
+                        }
+                    }
+                }
+            }
+            .sideBar_button{
+                position: absolute;
+                height: 56px;
+                top: 30px;
+                left: -33px;
+                cursor: pointer;
+            }
+        }
+        .main_top{
+            width: 100%;
+            // height: 110px;
+            margin-bottom: 29px;
+            padding-top: 32px;
+            position: relative;
+            .title_box{
+                float: left;
+                width:400px;
+                height:50px;line-height: 50px;
+                color: #1a1a1a;font-size: 28px;
+            }
+            .button_box{
+                float: right;
+                .el-button{
+                    background: linear-gradient(140.3deg,rgba(252,132,64,1),rgba(254,113,33,1));
+                    color: #fff;
+                    margin-left: 18px;
+                }
+            }
+        }
+        .information_box{
+            width:100%;
+            height: calc(100% - 120px);
+            border-top: 1px solid #DDE4ED;
+            .el-table{
+                .tag_select{
+                    cursor: pointer;
+                }
+                .tag_select:hover{
+                    color: #fc8440;
+                }
+                tr:hover>td{
+                    background: inherit;
+                }
+            }
+            .paging_box{
+                text-align: center;
+                padding: 30px 0;
+                >.el-button{
+                    float: left;
+                    width: 178px;height: 54px;line-height: 54px;
+                    background: linear-gradient(#3682fb, #38a1f6);
+                    padding:0px;
+                    font-size: 16px;
+                    margin-top: -10px;
+                }
+                >.report_bottton{
+                    background: linear-gradient(#fc8440, #fe7121);
+                    border: 0px;
+                    color: #ffffff;
+                }
+            }
+        }
+    }
+</style>
+

+ 11 - 6
webConfig/src/views/dashboard.vue

@@ -35,7 +35,7 @@
                                 10:28
                             </div>
                             <div class="right">
-                                <p class="p1">Goodmorning,Eunice Gomez</p>
+                                <p class="p1">Good morning,{{username}} ({{roleArr[role]}})</p>
                                 <p class="p2">2020-05-20</p>
                             </div>
                         </div>
@@ -273,6 +273,7 @@
         name:'dashboard',
         data(){
             return{
+                roleArr:['','Admin','Manufacturer','Supplier','PO','Upazilla','Monitoring','Controlling'],
                 keywords:'',
                 division:'',
                 divisionNav:[{id:'0',name:'division'}],
@@ -302,6 +303,7 @@
                 token:'token',
                 client_key:'client_key',
                 username:'username',
+                role:'role',
                 version:'version',
             }),
             divisionName(){
@@ -381,11 +383,8 @@
             commandDropdown(obj){
                 this.$set(this,obj.key,obj.id)
             },
-            tableEnter(data){
-              this.tableShowId = data.id;
-            },
-            tableLeave(){
-              this.tableShowId = '-1';
+            getData(){
+
             },
             /*设备列表*/
             getLightListKeyUp(e){
@@ -395,6 +394,12 @@
             },
             getLightList(){
 
+            },
+            tableEnter(data){
+              this.tableShowId = data.id;
+            },
+            tableLeave(){
+              this.tableShowId = '-1';
             },
             echartsMapInit(){
                 this.$nextTick(function(){

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1540 - 0
webConfig/src/views/historicalData/historicalData.vue


+ 381 - 0
webConfig/src/views/operationLog/operationLog.vue

@@ -0,0 +1,381 @@
+<template>
+    <!-- 操作日志 -->
+    <div class="operationLog_main">
+        <div class="main_top_bg">
+        </div>
+        <div class="wrap">
+            <div class="main_top clearfix">
+                <div class="search_box">
+                    <el-input v-if="version == 0" placeholder="- 输入关键词进行搜索" v-model="keyword" class="search" @change = "search">
+                        <template slot="prepend" @click="search()">搜索</template>
+                    </el-input>
+                    <el-input v-if="version == 1" placeholder="- Enter keywords to search" v-model="keyword" class="search" @change = "search">
+                        <template slot="prepend" @click="search()">Search</template>
+                    </el-input>
+                </div>
+                <div class="button_box">
+                    <el-select v-model="reportType" placeholder="" @change="reportTypeFun" v-if="version == 0">
+                        <el-option
+                          v-for="item in reportList"
+                          :key="item.value"
+                          :label="item.label"
+                          :value="item.value">
+                        </el-option>
+                    </el-select>
+                    <el-select v-model="reportType" placeholder="" @change="reportTypeFun" v-if="version == 1">
+                        <el-option
+                          v-for="item in reportListEN"
+                          :key="item.value"
+                          :label="item.label"
+                          :value="item.value">
+                        </el-option>
+                    </el-select>
+                    <el-button round @click="exportExcel()" v-loading="loading.exportExcel">{{version == 0 ?'导出Excel' : 'Export Excel'}}</el-button>
+                    <el-button round @click="printing()" v-loading="loading.printing">{{version == 0 ?'打印列表' : 'Print'}}</el-button>
+                </div>
+            </div>
+            <div class="information_box">
+                <el-table
+                    v-loading="loading.table"
+                    v-if="version == 0"
+                    ref="elTable"
+                    :data="tableData"
+                    border
+                    width="100%"
+                    :height="showOverflowTooltip?'calc(100% - 92px)':''"
+                    :row-class-name="tableRowClassName">
+                    <!-- <el-table-column
+                      type="selection"
+                      width="48">
+                    </el-table-column> -->
+                    <el-table-column
+                      v-if="version == 0"
+                      label="编号"
+                      prop="GL_index"
+                      align="center"
+                      width="82">
+                    </el-table-column>
+                    <el-table-column
+                      v-if="version == 1"
+                      label="Number"
+                      prop="GL_index"
+                      align="center"
+                      width="82">
+                    </el-table-column>
+                    <el-table-column align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" width="160px" v-for="(item) in tableList">
+                    </el-table-column>
+                    <!-- <el-table-column align="left" header-align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*14+20" v-for="(item,index) in tableList" v-if="index == 4">
+                    </el-table-column> -->
+                </el-table>
+                <el-table
+                    v-if="version == 1"
+                    :data="tableData"
+                    ref="elTable"
+                    border
+                    width="100%"
+                    :height="showOverflowTooltip?'calc(100% - 92px)':''"
+                    :row-class-name="tableRowClassName">
+                    <!-- <el-table-column
+                      type="selection"
+                      width="48">
+                    </el-table-column> -->
+                    <el-table-column
+                      label="Index"
+                      prop="GL_index"
+                      align="center"
+                      width="80">
+                    </el-table-column>
+                    <el-table-column align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" width="160px" v-for="(item) in tableListEN">
+                    </el-table-column>
+                    <!-- <el-table-column align="left" header-align="center" :show-overflow-tooltip="showOverflowTooltip" :prop="item.prop" :label="item.label" :key="item.id" :min-width="(item.label.length+1)*9+20" v-for="(item,index) in tableListEN" v-if="index == 4">
+                    </el-table-column> -->
+                </el-table>
+                <div class="paging_box">
+                    <el-pagination
+                      @size-change="handleSizeChange"
+                      @current-change="handleCurrentChange"
+                      :current-page.sync="currentPage"
+                      :page-size="pageSize"
+                      :page-sizes="[20, 40, 60, 100]"
+                      layout="sizes, prev, pager, next, jumper"
+                      :total="total">
+                    </el-pagination>
+                </div>
+            </div>
+        </div>
+        <button type="button" id="btn2" style="display: none"></button>
+    </div>
+</template>
+
+<script type="text/javascript">
+    import {mapGetters} from 'vuex'
+    import baseApi from '../../api/base.js'
+    import allUrl from '../../api/allUel.js'
+    export default{
+        data(){
+            return{
+                keyword:'',
+                reportType:'login',
+                reportList:[{label:'登录/登出日志',value:'login'},{label:'添加日志',value:'insert'},{label:'修改日志',value:'update'},{label:'指令日志',value:'cmd'},{label:'删除日志',value:'delete'},{label:'其他日志',value:'other'},],
+                reportListEN:[{label:'Sign In/Sign out',value:'login'},{label:'Add',value:'insert'},{label:'Modify',value:'update'},{label:'Commands',value:'cmd'},{label:'Delete',value:'delete'},{label:'Others',value:'other'},],
+                /*表格*/
+                tableList:[{prop:'time',label:'操作时间'},{prop:'type',label:'操作类型'},{prop:'username',label:'操作用户ID'},{prop:'realname',label:'操作用户名'},{prop:'content',label:'操作内容'}],
+                tableListEN:[{prop:'time',label:'Operation time'},{prop:'type',label:'Operation type'},{prop:'username',label:'User ID'},{prop:'realname',label:'Username'},{prop:'content',label:'Behavior'}],
+                tableData: [],
+                currentPage:1,
+                pageSize:20,
+                total:0,
+                loading:{
+                    exportExcel:false,
+                    table:false,
+                    printing:false,
+                },
+                showOverflowTooltip:true,
+            }
+        },
+        computed:{
+            ...mapGetters({
+                token:'token',
+                username:'username',
+                client_key:'client_key',
+                projectsId:'projectsId',
+                version:'version',
+          })
+        },
+        mounted(){
+            this.getList(1,0);
+        },
+        methods:{
+            search(val){
+                console.log(val)
+                this.getList(1,0)
+            },
+            printing(){
+                this.loading.printing = true;
+                baseApi.ajax_post(
+                    allUrl.syslog.getList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        keyword:this.keyword,
+                        type:this.reportType,
+                        page:(this.currentPage - 1)*this.pageSize,
+                        count:200,
+                        download:0,
+                        print:1,
+                    },
+                    {},
+                    data =>{
+                        this.loading.printing = false;
+                        this.loading.table = false;
+                        // this.total = data.data.total*16;
+                        this.tableData = data.data.list;
+                        let i = (this.currentPage - 1)*this.pageSize+1;
+                        for(let d of this.tableData){
+                            d.GL_index = i;
+                            i++;
+                            for(let key in d){
+                                if(d[key] == null || d[key] == ''){
+                                    d[key] = ' ';
+                                }
+                            }
+                        }
+                        this.showOverflowTooltip = false;
+                        $(".el-table").css({width:'1050px',borderBottom:'1px solid #ebeef5'});
+                        this.$refs.elTable.doLayout();
+                        let this_ = this;
+                        this.$nextTick(function(){
+                            $(".el-table").print({
+                                globalStyles : true,
+                                mediaPrint : false,
+                                iframe : true,
+                                deferred: $.Deferred().done(function() {
+                                    $(".el-table").css({width:'100%',borderBottom:''});
+                                    this_.showOverflowTooltip = true;
+                                    this_.$refs.elTable.doLayout();
+                                    this_.getList(this_.currentPage,0);
+                                })
+                            });
+                        })
+                    },
+                this)
+            },
+            exportExcel(){
+                this.getList(this.currentPage,1)
+            },
+            reportTypeFun(val){
+                console.log(val)
+                this.getList(1,0)
+            },
+            getList(value,type){
+                if(type == 0){
+                    this.loading.table = true;
+                }else{
+                    this.loading.exportExcel = true;
+                }
+                baseApi.ajax_post(
+                    allUrl.syslog.getList,
+                    {
+                        username:this.username,
+                        client_key:this.client_key,
+                        token:this.token,
+                        keyword:this.keyword,
+                        type:this.reportType,
+                        page:value,
+                        count:this.pageSize,
+                        download:type,
+                    },
+                    {},
+                    data =>{
+                        if(type == 0){
+                            this.loading.table = false;
+                            this.currentPage = value;
+                            this.total = data.data.total*this.pageSize;
+                            this.tableData = data.data.list;
+                            let i = (this.currentPage - 1)*this.pageSize+1;
+                            for(let d of this.tableData){
+                                d.GL_index = i;
+                                i++;
+                                for(let key in d){
+                                    if(d[key] == null || d[key] == ''){
+                                        d[key] = ' ';
+                                    }
+                                }
+                            }
+                            // console.log(data,'日志列表')
+                        }else if(type == 1){
+                            this.loading.exportExcel = false;
+                            // var $eleBtn2 = $("#btn2");
+                            var $eleForm = $("<form method='get'></form>");
+                            $eleForm.attr("action",data.data.path);
+                            $(document.body).append($eleForm);
+                            //提交表单,实现下载
+                            $eleForm.submit();
+                        }
+                    },
+                this)
+            },
+            /*表格*/
+            tableRowClassName({rowIndex}) {
+                if (rowIndex%2 == 0) {
+                  return 'row_bg';
+                }
+                return '';
+            },
+            /*分页*/
+            handleSizeChange(val) {
+                this.pageSize = val;
+                this.getList(this.currentPage,0);
+            },
+            handleCurrentChange(val) {
+                // console.log(`当前页: ${val}`);
+                this.getList(val,0)
+            },
+        }
+    }
+</script>
+
+<style type="text/css" lang="less">
+    .operationLog_main{
+        position: relative;
+        min-width: 1260px;
+        max-width: 1920px;
+        height: 100%;
+        min-height: 610px;
+        max-height: 920px;
+        >.wrap{
+            padding: 0px 50px;
+            height: 100%;
+        }
+        >.main_top_bg{
+            // width:1920px;
+            width: 100%;
+            height:246px; 
+            position: absolute;
+            z-index: -1;
+            background:rgba(234,234,234,1);
+        }
+        .main_top{
+            width: 100%;
+            // height: 110px;
+            margin-bottom: 29px;
+            padding-top: 32px;
+            position: relative;
+            .search_box{
+                float: left;
+                width:344px;
+                height:50px;line-height: 50px;
+                background:rgba(255,255,255,1);
+                box-shadow: -5px 0px 0px 0px rgba(252,132,64,1);
+                .search{
+                    font-size:18px;
+                    font-family:PingFangSC-Regular;
+                    color:rgba(178,186,198,1);
+                    .el-input-group__prepend{
+                        cursor: pointer;
+                    }
+                }
+                .el-input__inner{
+                    height:50px;line-height: 50px;
+                    border: 0px;
+                }
+                .el-input-group__prepend{
+                    background: #ffffff;
+                    border: 0px;
+                    font-size: 18px;
+                    font-family:PingFangSC-Medium;
+                    color:rgba(26,26,26,1);
+                }
+            }
+            .button_box{
+                float: right;
+                .el-select .el-input__inner{
+                    background: linear-gradient(#3682fb, #38a1f6);
+                    border-radius: 20px;
+                    color: #fff;
+                    text-align: center;
+                    border: 0;
+                }
+                .el-button{
+                    background: linear-gradient(140.3deg,rgba(252,132,64,1),rgba(254,113,33,1));
+                    color: #fff;
+                    margin-left: 18px;
+                }
+            }
+        }
+        .information_box{
+            height: calc(100% - 113px);
+            width:100%;
+            border-top: 1px solid #DDE4ED;
+            .el-table{
+                tr:hover>td{
+                    background: inherit;
+                }
+                .row_bg{
+                    background: #F6F6F9;
+                }
+            }
+            .paging_box{
+                text-align: center;
+                padding: 30px 0;
+                >.report_bottton{
+                    background: linear-gradient(#fc8440, #fe7121);
+                    border: 0px;
+                    color: #ffffff;
+                }
+                .el-pager li.active {
+                    color: #fff;
+                    background: #fc8440;
+                    border-radius: 20px;
+                }
+                .el-select .el-input.is-focus .el-input__inner{
+                    border-color: #fc8440;
+                }
+                .el-input.is-active .el-input__inner, .el-input__inner:focus{
+                    border-color: #fc8440;
+                }
+            }
+        }
+    }
+</style>

+ 12 - 10
webConfig/src/views/projectManagement.vue

@@ -2416,23 +2416,25 @@
                 .el-table{
                     width: 100%;
                     th,td{
-                        padding: 0.5rem 0;
-                    }
-                    th,td{
+                        padding: 0;
                         >.cell{
-                            font-size:1rem;
-                            font-family:PingFangSC-Medium,PingFang SC;
-                            font-weight:500;
-                            color:rgba(51,51,51,1);
+                            padding: 0 0.5rem;
                         }
                     }
                     th{
+                        height: 3.33rem;line-height: 3.33rem;
                         background:rgba(246,248,250,1);
-                        height: 2.3rem;line-height: 2.3rem;
+                        font-size:1rem;
+                        font-family:PingFang-SC-Medium,PingFang-SC;
+                        font-weight:500;
+                        color:rgba(102,102,102,1);
                     }
                     td{
-                        height: 3rem;line-height: 3rem;
-                        border-color: rgba(240, 240, 240, 1);
+                        height: 4.2rem;line-height: 4.2rem;
+                        font-size:1rem;
+                        font-family:PingFangSC-Medium,PingFang SC;
+                        font-weight:500;
+                        color:rgba(51,51,51,1);
                     }
                     // tr:hover>td{
                     //     background: rgba(246, 248, 250, 1);

+ 103 - 34
webConfig/src/views/userManagement.vue

@@ -10,7 +10,8 @@
                         <span>{{role_Name}}</span><i class="el-icon-caret-bottom el-icon--right"></i>
                     </span>
                     <el-dropdown-menu slot="dropdown" class="scrollbar_style dropdown_projectManagement_role_">
-                        <el-dropdown-item v-for="item in role_Nav" :class="{'select':item.id==role_}" :command="{'key':'role_','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
+                        <el-dropdown-item :class="{'select':role_ == '0'}" :command="{'key':'role_','id':'0'}" :key="'0'">All</el-dropdown-item>
+                        <el-dropdown-item v-for="item in roleList" :class="{'select':item.id==role_}" :command="{'key':'role_','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
                     </el-dropdown-menu>
                 </el-dropdown>
                 <el-input placeholder="search..." type='search' v-model="keywords" @keyup.native="getUserSub_listKeyUp($event)" class="input-with-select">
@@ -21,6 +22,9 @@
         </div>
         <div class="userRights_main">
             <div class="userRights_left">
+                <div class="editBtn" @click="editFun(userInfo)" title="Edit">
+                    <i class="iconfont icon-bianji" style="color: #A3AFBB"></i>
+                </div>
                 <el-upload
                   class="avatar-uploader"
                   :action="actionImg"
@@ -28,7 +32,7 @@
                   :show-file-list="false"
                   :on-success="handleAvatarSuccess"
                   :before-upload="beforeAvatarUpload">
-                  <img v-if="imageUrl" :src="imageUrl" class="avatar">
+                  <img v-if="userInfo.avatar" :src="userInfo.avatar" class="avatar">
                   <i v-else class="el-icon-plus avatar-uploader-icon"></i>
                 </el-upload>
                 <p class="name">{{userInfo.name}}</p>
@@ -58,12 +62,25 @@
                         <div class="val">{{userInfo.company}}</div>
                     </div>
                 </div>
-                <div class="bottom_authority">
+                <div class="bottom_authority" @click="jurisdictionFun(userInfo,'view')">
                     <p class="p1">Account authority</p>
-                    <p class="p2">48</p>
-                    <p class="p3"><i class="iconfont icon-celan-gou"></i><span>Check</span></p>
-                    <p class="p3"><i class="iconfont icon-celan-gou"></i><span>Control</span></p>
-                    <p class="p3"><i class="iconfont icon-celan-gou"></i><span>Monitor</span></p>
+                    <p class="p2">{{userData.permCount}}</p>
+                    <p class="p3">
+                        <i class="iconfont icon-celan-gou" v-if="userData.view == 1"></i>
+                        <i class="iconfont icon-celan-guanbi" v-if="userData.view == 0"></i>
+                        <span>View</span>
+                    </p>
+                    <p class="p3">
+                        <i class="iconfont icon-celan-gou" v-if="userData.operating == 1"></i>
+                        <i class="iconfont icon-celan-guanbi" v-if="userData.operating == 0"></i>
+                        <span>Operating</span>
+                    </p>
+                    <p class="p3">
+                        <i class="iconfont icon-celan-gou" v-if="userData.parameter == 1"></i>
+                        <i class="iconfont icon-celan-guanbi" v-if="userData.parameter == 0"></i>
+                        <span>Parameter</span>
+                    </p>
+                    <i class="iconfont icon-youjiantou-dan"></i>
                 </div>
             </div>
             <div class="userRights_right">
@@ -79,32 +96,32 @@
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.manuCount}}</p>
-                        <p class="p2">Manu accounts</p>
+                        <p class="p2">Manufacturer</p>
                         <div class="line"></div>
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.suppCount}}</p>
-                        <p class="p2">Supp accounts</p>
+                        <p class="p2">Supplier</p>
                         <div class="line"></div>
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.poCount}}</p>
-                        <p class="p2">PO accounts</p>
+                        <p class="p2">PO</p>
                         <div class="line"></div>
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.upaCount}}</p>
-                        <p class="p2">Upa accounts</p>
+                        <p class="p2">Upazilla</p>
                         <div class="line"></div>
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.monCount}}</p>
-                        <p class="p2">Monitor accounts</p>
+                        <p class="p2">Monitoring</p>
                         <div class="line"></div>
                     </div>
                     <div class="li">
                         <p class="p1">{{userData.conCount}}</p>
-                        <p class="p2">Control accounts</p>
+                        <p class="p2">Controlling</p>
                         <div class="line"></div>
                     </div>
                 </div>
@@ -137,14 +154,14 @@
                                     <div class="box">{{roleArr[scope.row[item.prop]]}}{{item.unit?item.unit:''}}</div>
                                 </div>
                                 <div v-if="item.prop == 'status'" class="State" v-loading="scope.row.block_userLoading">
-                                    <span class="pl_switch" :class="{'checked':scope.row['status'] === 1}" @click="blockUser(scope.row)"></span>
+                                    <span class="pl_switch" :class="{'checked':scope.row['status'] == '1'}" @click="blockUser(scope.row)"></span>
                                 </div>
                             </template>
                         </el-table-column>
 
                         <el-table-column
                             align="center"
-                            :width="100"
+                            :width="120"
                             :label="'Operation'">
                             <template slot-scope="scope">
                                 <span class="btn" @click="editFun(scope.row)" title="Edit">
@@ -177,11 +194,11 @@
                         </p>
                         <div class="form_item_main" v-if="item.open">
                             <div class="checkbox_inde">
-                                <el-checkbox :indeterminate="item.indeterminate" v-model="item.checkAll" @change="handleCheckAllChange(item)">All</el-checkbox>
+                                <el-checkbox :indeterminate="item.indeterminate" v-model="item.checkAll" :disabled="userId == userInfo.id" @change="handleCheckAllChange(item)">All</el-checkbox>
                             </div>
                             <div>
                                 <el-checkbox-group v-model="item.checkedCities" @change="handleCheckedCitiesChange(item)">
-                                    <el-checkbox v-for="obj in item.sub_list" :label="obj.id" :key="obj.id">{{obj.en_name}}</el-checkbox>
+                                    <el-checkbox v-for="obj in item.sub_list" :label="obj.id" :key="obj.id" :disabled="userId == userInfo.id">{{obj.en_name}}</el-checkbox>
                                 </el-checkbox-group>
                             </div>
                         </div>
@@ -189,7 +206,7 @@
                 </div>
                 <div class="btn_box">
                     <div class="cancel" @click="permissionsTkClose()">Cancel</div>
-                    <div class="btn" @click="permissionsSave()">Confirm</div>
+                    <div class="btn" @click="permissionsSave()" v-if="userId != userInfo.id">Confirm</div>
                 </div>
             </div>
         </div>
@@ -231,7 +248,7 @@
                         <div class="form_item">
                             <span class="laber">Account type</span>
                             <!-- <el-input v-model="accountForm.role" placeholder=""></el-input> -->
-                            <el-dropdown @command="commandDropdown" trigger="click" @visible-change="commandHide('dropdown_projectManagement_roleName')">
+                            <el-dropdown @command="commandDropdown" trigger="click" @visible-change="commandHide('dropdown_projectManagement_roleName')" v-if="accountForm.role != 1">
                                 <span class="el-dropdown-link">
                                     <span>{{accountFormRoleName}}</span><i class="el-icon-caret-bottom el-icon--right"></i>
                                 </span>
@@ -239,6 +256,7 @@
                                     <el-dropdown-item v-for="item in roleList" :class="{'select':item.id==accountForm.role}" :command="{'key':'accountForm.role','id':item.id}" :key="item.id">{{item.name}}</el-dropdown-item>
                                 </el-dropdown-menu>
                             </el-dropdown>
+                            <span class="text" v-if="accountForm.role == 1">Admin</span>
                         </div>
                     </div>
                 </div>
@@ -281,7 +299,9 @@
         data(){
             return{
                 userId:'',
-                userInfo:{},
+                userInfo:{
+                    avatar:'',
+                },
                 userData:{},
 
                 actionImg:'',
@@ -295,13 +315,11 @@
 
                 keywords:'',
                 role_:'',
-                role_Nav:[{id:'0',name:'All'},{id:'1',name:'admin'},{id:2,name:'Manu'},{id:3,name:'supp'},{id:4,name:'PO'},{id:5,name:'Upa'},{id:6,name:'Monitor'},{id:7,name:'Control'}],
+                role_Nav:[{id:'0',name:'All'},{id:'1',name:'admin'},{id:2,name:'Manufacturer'},{id:3,name:'Supplier'},{id:4,name:'PO'},{id:5,name:'Upazilla'},{id:6,name:'Monitoring'},{id:7,name:'Controlling'}],
                 rightDate:'',
                 rightDateNav:[{id:'0',name:'Today'}],
                 myChart1:'',
 
-                imageUrl: '',
-
                 faultInformationList:[],
                 faultInformationArr:[],
 
@@ -324,8 +342,8 @@
                 },
                 accountTkTitle:'Edit account',
                 accountType:'0',
-                roleArr:['','admin','Manu','supp','PO','Upa','Monitor','Control'],
-                roleList:[{id:2,name:'Manu'},{id:3,name:'supp'},{id:4,name:'PO'},{id:5,name:'Upa'},{id:6,name:'Monitor'},{id:7,name:'Control'}],
+                roleArr:['','Admin','Manufacturer','Supplier','PO','Upazilla','Monitoring','Controlling'],
+                roleList:[{id:2,name:'Manufacturer'},{id:3,name:'Supplier'},{id:4,name:'PO'},{id:5,name:'Upazilla'},{id:6,name:'Monitoring'},{id:7,name:'Controlling'}],
 
                 loading:{
                     faultInformationList:false,
@@ -361,19 +379,19 @@
             }
         },
         mounted(){
-            this.actionImg = allUel.common.update_file;
+            this.actionImg = allUel.user.update_avatar;
             this.imgUploadData.username = this.username;
             this.imgUploadData.client_key = this.client_key;
             this.imgUploadData.token = this.token;
 
             this.role_ = 0;
             this.faultInformationArr = [
+                {prop:'role',label:'Type',minWidth:120,type:1},
                 {prop:'name',label:'Name',minWidth:80,align:'left'},
-                {prop:'role',label:'Type',minWidth:60,type:1},
                 {prop:'id',label:'ID',minWidth:80,align:'left'},
                 {prop:'phone',label:'phone',minWidth:80,align:'left'},
                 {prop:'email',label:'E-mail',width:80,align:'left'},
-                {prop:'AffiliatedUnit',label:'Affiliated unit',minWidth:80},
+                {prop:'company',label:'Affiliated unit',minWidth:80},
                 {prop:'status',label:'State',minWidth:60,type:1},
             ];
             // this.faultInformationList = [
@@ -545,6 +563,11 @@
                         this.accountTkShowbg = false;
                         this.getUserSub_list();
                         this.getUserData();
+                        if(this.accountForm.id == this.userInfo.id){
+                            this.getUserInfo(this.userInfo.id,data=>{
+                                this.userInfo = data.data;
+                            });
+                        }
                     },
                     this,()=>{
                         this.accountTkShow = true;
@@ -715,7 +738,19 @@
             },
 
             handleAvatarSuccess(res, file) {
-                this.imageUrl = URL.createObjectURL(file.raw);
+                console.log(res, file)
+                if(res.code == '0000'){
+                    this.$message({
+                      showClose: true,
+                      message: res.msg,
+                      type: 'success'
+                    });
+                    this.userInfo.avatar = URL.createObjectURL(file.raw);
+                }else{
+                    this.$alert(res.msg, 'System hints', {
+                      confirmButtonText: 'Confirm',
+                    });
+                }
             },
             beforeAvatarUpload(file) {
                 const isJPG = file.type === 'image/jpeg';
@@ -879,6 +914,17 @@
                 width: 30rem;
                 height: 60rem;
                 border-right: 0.08rem solid rgba(240,240,240,1);
+                position: relative;
+                .editBtn{
+                    cursor: pointer;
+                    position: absolute;
+                    text-align: center;
+                    width: 1.6rem;height: 1.6rem;line-height: 1.6rem;
+                    right: 2rem;top: 2rem;
+                    i{
+                        font-size: 1.4rem;
+                    }
+                }
                 .avatar-uploader{
                     margin: 3.4rem auto 0;
                     width: 8.3rem;height: 8.3rem;
@@ -930,12 +976,21 @@
                     }
                 }
                 .bottom_authority{
-                    margin: 3.4rem 2rem 0rem;
-                    height:13.5rem;
-                    background:linear-gradient(134deg,rgba(252,169,64,1) 0%,rgba(252,132,64,1) 100%);
+                    margin: 1.4rem 2rem 0rem;
+                    height:15.4rem;
                     border-radius:0.5rem;
-                    border:0.08rem solid rgba(240,240,240,1);
+                    padding-top: 2rem; 
+                    // border:0.08rem solid rgba(240,240,240,1);
                     cursor: pointer;
+                    background-image: url('../img/userManagement/permissions.png');
+                    background-size: 100% 100%;
+                    background-position: center;
+                    position: relative;
+                    .icon-youjiantou-dan{
+                        color: #fff;
+                        font-size: 1.6rem;
+                        position: absolute;right: 1.5rem;top: 8rem;
+                    }
                     .p1{
                         margin-top: 1.2rem;
                         margin-left: 11.5rem;
@@ -956,6 +1011,9 @@
                         i{
                             font-size: 1.2rem;
                             color: #FFDB00;
+                            &.icon-celan-guanbi{
+                                font-size: 1rem;
+                            }
                         }
                         span{
                             margin-left: 0.6rem;
@@ -1011,6 +1069,7 @@
                             font-family:HiraginoSansGB-W3,HiraginoSansGB;
                             font-weight:normal;
                             color:rgba(101,112,133,1);
+                            margin-bottom: 0.2rem;
                         }
                         .line{
                             margin: 0 auto;
@@ -1029,7 +1088,10 @@
                     .el-table{
                         width: 100%;
                         th,td{
-                            padding: 0rem;
+                            padding: 0;
+                            >.cell{
+                                padding: 0 0.5rem;
+                            }
                         }
                         th{
                             height: 3.33rem;line-height: 3.33rem;
@@ -1058,6 +1120,8 @@
                             display: flex;
                             align-items: center;
                             justify-content: center;
+                            // width: calc(100% - 1rem);
+                            // margin: 0 0.5rem;
                             .box{
                                 padding: 0 1rem;
                                 height:1.8rem;line-height: 1.8rem;
@@ -1073,6 +1137,8 @@
                         .State{
                             display: flex;
                             align-items: center;
+                            // width: calc(100% - 1rem);
+                            // margin: 0 0.5rem;
                             .pl_switch{
                                 margin: 0 auto;
                                 position: relative;
@@ -1344,6 +1410,9 @@
                                 border: none;
                             }
                         }
+                        .text{
+                            margin-right: 15px;
+                        }
                     }
                 }
                 .form_ul{