Browse Source

气象站后台管理

lyn7568 5 years ago
parent
commit
ef898876f6

BIN
favicon.ico


+ 1 - 1
index.html

@ -4,7 +4,7 @@
4 4
    <meta charset="utf-8">
5 5
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
6 6
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
7
    <title>声脉桥梁云监控平台</title>
7
    <title>气象数据云监控平台</title>
8 8
  </head>
9 9
  <body>
10 10
    <div id="app"></div>

+ 16 - 34
src/api/bridge.js

@ -1,81 +1,63 @@
1 1
import request from '@/utils/request'
2 2
3
/*  添加桥梁 */
3
/*  添加站点 */
4 4
export function addDevice(params) {
5 5
  return request({
6
    url: '/ajax/bridge',
6
    url: '/ajax/site',
7 7
    method: 'post',
8 8
    data: params
9 9
  })
10 10
}
11 11
12
/*  更新桥梁信息 */
12
/*  更新站点信息 */
13 13
export function updateDevice(params) {
14 14
  return request({
15
    url: '/ajax/bridge/update',
15
    url: '/ajax/site/update',
16 16
    method: 'post',
17 17
    data: params
18 18
  })
19 19
}
20 20
21
/*  删除桥梁信息 */
21
/*  删除站点信息 */
22 22
export function deleteDevice(params) {
23 23
  return request({
24
    url: '/ajax/bridge/delete',
24
    url: '/ajax/site/delete',
25 25
    method: 'get',
26 26
    params
27 27
  })
28 28
}
29 29
30
/*  查询单个桥梁 */
30
/*  查询单个站点 */
31 31
export function queryDevice(params) {
32 32
  return request({
33
    url: '/ajax/bridge/qo',
33
    url: '/ajax/site/qo',
34 34
    method: 'get',
35 35
    params
36 36
  })
37 37
}
38 38
39
/*  分页查询桥梁 */
39
/*  分页查询站点 */
40 40
export function pageQueryDevice(params) {
41 41
  return request({
42
    url: '/ajax/bridge/pq',
42
    url: '/ajax/site/pq',
43 43
    method: 'get',
44 44
    params
45 45
  })
46 46
}
47 47
48
/*  校验桥梁编号 */
49
export function checkDeviceCode(params) {
50
  return request({
51
    url: '/ajax/bridge/checkCode',
52
    method: 'get',
53
    params
54
  })
55
}
56
57
/*  校验桥梁简称 */
58
export function checkBridgeShortName(params) {
48
/*  校验站点内部编号 */
49
export function checkDeviceSeq(params) {
59 50
  return request({
60
    url: '/ajax/bridge/checkShortName',
51
    url: '/ajax/site/checkSeq',
61 52
    method: 'get',
62 53
    params
63 54
  })
64 55
}
65
66
/*  校验桥梁全称 */
67
export function checkBridgeName(params) {
56
/*  校验站点外部编号 */
57
export function checkDeviceCode(params) {
68 58
  return request({
69
    url: '/ajax/bridge/checkName',
59
    url: '/ajax/site/checkCode',
70 60
    method: 'get',
71 61
    params
72 62
  })
73 63
}
74
75
/*  上传图片 */
76
export function uploadBridgeImg() {
77
  return request({
78
    url: '/ajax/bridge/upload',
79
    method: 'post'
80
  })
81
}

+ 17 - 8
src/api/userManagemen.js

@ -9,10 +9,19 @@ export function deleteUser(params) {
9 9
  })
10 10
}
11 11
12
/*  查询负责桥梁 */
13
export function queryResponsibleBridge(params) {
12
/*  密码重置 */
13
export function resetPw(params) {
14 14
  return request({
15
    url: '/ajax/bridge/byUserId',
15
    url: '/ajax/sys/resetPw',
16
    method: 'POST',
17
    data: params
18
  })
19
}
20
21
/*  查询负责site */
22
export function queryResponsibleSite(params) {
23
  return request({
24
    url: '/ajax/site/userSite',
16 25
    method: 'get',
17 26
    params
18 27
  })
@ -63,19 +72,19 @@ export function queryRegister(params) {
63 72
  })
64 73
}
65 74
66
/*  传感器所属采集盒编号列表 */
67
export function DeviceOfservice(params) {
75
/*   全部站点 */
76
export function siteAllList(params) {
68 77
  return request({
69
    url: '/ajax/bridge/list',
78
    url: '/ajax/site/all',
70 79
    method: 'get',
71 80
    params
72 81
  })
73 82
}
74 83
75
/*  更新用户权限 */
84
/*  配置站点 */
76 85
export function updatePermission(params) {
77 86
  return request({
78
    url: '/ajax/sys/userBridge/refresh',
87
    url: '	/ajax/sys/userSite',
79 88
    method: 'post',
80 89
    data: params
81 90
  })

+ 9 - 9
src/permission.js

@ -1,10 +1,10 @@
1 1
import router from './router'
2 2
import store from './store'
3
import NProgress from 'nprogress' // Progress 进度条
4
import 'nprogress/nprogress.css'// Progress 进度条样式
5
import { getCookiesName } from '@/utils/auth' // 验权
3
import NProgress from 'nprogress'
4
import 'nprogress/nprogress.css'
5
import { getCookiesName } from '@/utils/auth'
6 6
7
NProgress.configure({ showSpinner: false })// NProgress Configuration
7
NProgress.configure({ showSpinner: false })
8 8
9 9
const whiteList = ['/login', '/home'] // 不重定向白名单
10 10
router.beforeEach((to, from, next) => {
@ -14,12 +14,12 @@ router.beforeEach((to, from, next) => {
14 14
      next({ path: '/loginedHome' })
15 15
      NProgress.done()
16 16
    } else {
17
      if (store.getters.roles.length === 0) { // 判断当前用户是否已拉取完user_info信息
18
        store.dispatch('GetUserInfo').then(res => { // 拉取user_info
17
      if (store.getters.roles.length === 0) {
18
        store.dispatch('GetUserInfo').then(res => {
19 19
          if (res.success) {
20
            const roles = [res.data.type.toString()]
21
            store.dispatch('GenerateRoutes', { roles }).then(() => { // 根据roles权限生成可访问的路由表
22
              router.addRoutes(store.getters.addRouters) // 动态添加可访问路由表
20
            const roles = [sessionStorage.getItem('uType')]
21
            store.dispatch('GenerateRoutes', { roles }).then(() => {
22
              router.addRoutes(store.getters.addRouters)
23 23
              next({ ...to, replace: true })
24 24
            })
25 25
          }

+ 12 - 1
src/store/modules/user.js

@ -43,6 +43,11 @@ const user = {
43 43
            if (response.data) {
44 44
              const dataS = response.data
45 45
              if (dataS.active) {
46
                if (dataS.id === '77005D20EAB44360918AFD2EA5B868AE') {
47
                  sessionStorage.setItem('uType', '1')
48
                } else {
49
                  sessionStorage.setItem('uType', '0')
50
                }
46 51
                commit('SET_ACCOUNT', dataS.account)
47 52
                commit('SET_USERID', dataS.id)
48 53
                commit('SET_NAME', dataS.name)
@ -67,8 +72,12 @@ const user = {
67 72
              if (dataS.active) {
68 73
                commit('SET_ACCOUNT', dataS.account)
69 74
                commit('SET_USERID', dataS.id)
70
                commit('SET_ROLES', [dataS.type.toString()])
71 75
                commit('SET_NAME', dataS.name)
76
                if (sessionStorage.getItem('uType') === '1') {
77
                  commit('SET_ROLES', ['1'])
78
                } else {
79
                  commit('SET_ROLES', ['0'])
80
                }
72 81
              }
73 82
            }
74 83
          }
@ -89,6 +98,7 @@ const user = {
89 98
          commit('SET_NAME', '')
90 99
          commit('SET_SESSION', '')
91 100
          removeCookiesName()
101
          sessionStorage.removeItem('uType')
92 102
          resolve()
93 103
        }).catch(error => {
94 104
          reject(error)
@ -101,6 +111,7 @@ const user = {
101 111
      return new Promise(resolve => {
102 112
        commit('SET_SESSION', '')
103 113
        removeCookiesName()
114
        sessionStorage.removeItem('uType')
104 115
        resolve()
105 116
      })
106 117
    }

+ 13 - 2
src/styles/index.scss

@ -85,8 +85,19 @@ a:hover {
85 85
    display:block;
86 86
    height:28px;
87 87
    width:300px;
88
    background-image: url('/static/touchwave.png');
89
    background-size: 300px 28px;
88
    padding-left: 46px;
89
    position: relative;
90
    background-image: url('/static/logo.png');
91
    background-position: 0 center;
92
    background-repeat: no-repeat;
93
    background-size: 40px 33px;
94
    &:after{
95
      position: absolute;
96
      color: #fff;
97
      font-size: 24px;
98
      line-height: 34px;
99
      content: '气象数据云监控平台';
100
    }
90 101
  }
91 102
}
92 103
.load-box{

+ 82 - 138
src/views/baseInfoManage/bridgesInfo/index.vue

@ -1,11 +1,11 @@
1 1
<template>
2 2
  <div class="app-container">
3 3
    <div class="filter-container" style="margin-bottom:20px">
4
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入站点编号" v-model="listQuery.code">
4
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入站点编号" clearable v-model="listQuery.code">
5 5
      </el-input>
6
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入站点名称" v-model="listQuery.name">
6
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入站点名称" clearable v-model="listQuery.name">
7 7
      </el-input>
8
      <el-select v-model="listQuery.system" placeholder="选择状态" style="width: 200px;">
8
      <el-select v-model="listQuery.open" placeholder="选择状态" style="width: 200px;" clearable>
9 9
        <el-option v-for="item in systemList" :key="item.value" :label="item.label" :value="item.value">
10 10
        </el-option>
11 11
      </el-select>
@ -26,22 +26,22 @@
26 26
      </el-table-column>
27 27
      <el-table-column width="150px" align="center" label="内部编号">
28 28
        <template slot-scope="scope">
29
          <span>{{scope.row.code}}</span>
29
          <span>{{scope.row.seq}}</span>
30 30
        </template>
31 31
      </el-table-column>
32 32
      <el-table-column width="150px" align="center" label="站点名称">
33 33
        <template slot-scope="scope">
34
          <span>{{scope.row.shortName}}</span>
34
          <span>{{scope.row.name}}</span>
35 35
        </template>
36 36
      </el-table-column>
37 37
      <el-table-column min-width="150px" align="center" label="站点位置">
38 38
        <template slot-scope="scope">
39
          <span>{{citys[scope.row.addrCode]}}</span>
39
          <span>{{scope.row.location}}</span>
40 40
        </template>
41 41
      </el-table-column>
42 42
      <el-table-column min-width="150px" align="center" label="站点状态">
43 43
        <template slot-scope="scope">
44
          <span>{{scope.row.org}}</span>
44
          <span>{{scope.row.open?'公开':'未公开'}}</span>
45 45
        </template>
46 46
      </el-table-column>
47 47
      <el-table-column align="center" label="操作" width="230" class-name="small-padding fixed-width">
@ -52,7 +52,7 @@
52 52
        </template>
53 53
      </el-table-column>
54 54
    </el-table>
55
    <el-dialog title="站点信息" ref="ruleForm" :visible.sync="dialogTableVisible" width="860px" @close='closed'>
55
    <el-dialog title="站点信息" ref="ruleForm" :visible.sync="dialogTableVisible" :close-on-click-modal="false" width="860px" @close='closed'>
56 56
      <el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" class="form-main" label-position='top' status-icon>
57 57
        <el-row :gutter="10">
58 58
          <el-col :xs="24" :sm="24" :lg="24">
@ -63,18 +63,18 @@
63 63
                </el-form-item>
64 64
              </el-col>
65 65
              <el-col :span="12">
66
                <el-form-item label="内部编号" prop="code">
67
                  <el-input placeholder="请填写内部编号" v-model="ruleForm2.code" maxlength=10></el-input>
66
                <el-form-item label="内部编号" prop="seq">
67
                  <el-input placeholder="请填写内部编号" v-model="ruleForm2.seq" maxlength=10></el-input>
68 68
                </el-form-item>
69 69
              </el-col>
70 70
              <el-col :span="12">
71
                <el-form-item label="站点名称" prop="shortName">
72
                  <el-input placeholder="请填写站点名称" v-model="ruleForm2.shortName" maxlength=200></el-input>
71
                <el-form-item label="站点名称" prop="name">
72
                  <el-input placeholder="请填写站点名称" v-model="ruleForm2.name" maxlength=200></el-input>
73 73
                </el-form-item>
74 74
              </el-col>
75 75
              <el-col :span="12">
76
                <el-form-item label="站点状态" prop="shortName">
77
                  <el-select v-model="listQuery.system" placeholder="选择状态">
76
                <el-form-item label="站点状态" prop="open">
77
                  <el-select v-model="ruleForm2.open" placeholder="选择状态">
78 78
                    <el-option v-for="item in systemList" :key="item.value" :label="item.label" :value="item.value">
79 79
                    </el-option>
80 80
                  </el-select>
@ -82,14 +82,15 @@
82 82
              </el-col>
83 83
              <el-col :span="24">
84 84
                <el-form-item label="地理位置信息" prop="location">
85
                  <baidu-map class="map" center="中国" :zoom="4" :scroll-wheel-zoom="true" @click="getpoint" @ready="handler">
85
                  <baidu-map class="map" :center="defaultAddr" :zoom="15" :min-zoom="6" :max-zoom="20" :scroll-wheel-zoom="true" @click="getpoint" @ready="handler">
86 86
                    <bm-city-list anchor="BMAP_ANCHOR_TOP_LEFT"></bm-city-list>
87 87
                    <bm-marker :position="markerPoint" :dragging="true" @dragend="getpoint">
88 88
                    </bm-marker>
89 89
                    <bm-info-window :position="infoWindow.position" title="站点位置" :show="infoWindow.show" @close="infoWindowClose"
90
                      @open="infoWindowOpen">
90
                      @open="infoWindowOpen" :width="0" :height="0">
91 91
                      <p v-text="infoWindow.contents"></p>
92 92
                    </bm-info-window>
93
                    <bm-geolocation anchor="BMAP_ANCHOR_BOTTOM_RIGHT" :showAddressBar="true" :autoLocation="true"></bm-geolocation>
93 94
                  </baidu-map>
94 95
                </el-form-item>
95 96
              </el-col>
@ -118,10 +119,8 @@
118 119
</template>
119 120
120 121
<script>
121
  import { addDevice, updateDevice, deleteDevice, pageQueryDevice, checkDeviceCode, checkBridgeShortName, checkBridgeName } from '@/api/bridge'
122
  import { addDevice, updateDevice, deleteDevice, pageQueryDevice, checkDeviceSeq, checkDeviceCode } from '@/api/bridge'
122 123
  import waves from '@/directive/waves'
123
  import CityPicker from '@/components/CityPicker'
124
  import queryDict from '@/utils/queryDict'
125 124
  export default {
126 125
    name: 'complexTable',
127 126
    directives: {
@ -130,12 +129,12 @@
130 129
    data() {
131 130
      var code = (rule, value, callback) => {
132 131
        if (value === '') {
133
          callback(new Error('请输入桥梁编号'))
132
          callback(new Error('请输入站点编号'))
134 133
        } else {
135 134
          if (this.edit) {
136 135
            checkDeviceCode({ code: value, id: this.edit, active: 1 }).then(response => {
137 136
              if (response.data) {
138
                callback(new Error('桥梁编号已存在,请重新输入'))
137
                callback(new Error('站点编号已存在,请重新输入'))
139 138
              } else {
140 139
                callback()
141 140
              }
@ -143,7 +142,7 @@
143 142
          } else {
144 143
            checkDeviceCode({ code: value, active: 1 }).then(response => {
145 144
              if (response.data) {
146
                callback(new Error('桥梁编号已存在,请重新输入'))
145
                callback(new Error('站点编号已存在,请重新输入'))
147 146
              } else {
148 147
                callback()
149 148
              }
@ -151,22 +150,22 @@
151 150
          }
152 151
        }
153 152
      }
154
      var shortName = (rule, value, callback) => {
153
      var seq = (rule, value, callback) => {
155 154
        if (value === '') {
156
          callback(new Error('请输入桥梁简称'))
155
          callback(new Error('请输入站点内部编号'))
157 156
        } else {
158 157
          if (this.edit) {
159
            checkBridgeShortName({ shortName: value, id: this.edit, active: 1 }).then(response => {
158
            checkDeviceSeq({ seq: value, id: this.edit, active: 1 }).then(response => {
160 159
              if (response.data) {
161
                callback(new Error('桥梁简称已存在,请重新输入'))
160
                callback(new Error('站点内部编号已存在,请重新输入'))
162 161
              } else {
163 162
                callback()
164 163
              }
165 164
            })
166 165
          } else {
167
            checkBridgeShortName({ shortName: value, active: 1 }).then(response => {
166
            checkDeviceSeq({ seq: value, active: 1 }).then(response => {
168 167
              if (response.data) {
169
                callback(new Error('桥梁简称已存在,请重新输入'))
168
                callback(new Error('站点内部编号已存在,请重新输入'))
170 169
              } else {
171 170
                callback()
172 171
              }
@ -175,29 +174,19 @@
175 174
        }
176 175
      }
177 176
      var name = (rule, value, callback) => {
177
        var reg = /^[\u4E00-\u9FA5AA-Za-z0-9]+$/
178 178
        if (value === '') {
179
          callback(new Error('请输入桥梁全称'))
179
          callback(new Error('请选择站点名称'))
180 180
        } else {
181
          if (this.edit) {
182
            checkBridgeName({ name: value, id: this.edit, active: 1 }).then(response => {
183
              if (response.data) {
184
                callback(new Error('桥梁全称已存在,请重新输入'))
185
              } else {
186
                callback()
187
              }
188
            })
181
          if (!value.match(reg)) {
182
            callback(new Error('站点名称由中文文字、英文字母、数字组成,请重新输入'))
189 183
          } else {
190
            checkBridgeName({ name: value, active: 1 }).then(response => {
191
              if (response.data) {
192
                callback(new Error('桥梁全称已存在,请重新输入'))
193
              } else {
194
                callback()
195
              }
196
            })
184
            callback()
197 185
          }
198 186
        }
199 187
      }
200 188
      return {
189
        defaultAddr: { lng: 116.404, lat: 39.915 },
201 190
        infoWindow: {
202 191
          show: true,
203 192
          contents: '11',
@ -205,48 +194,35 @@
205 194
        },
206 195
        markerPoint: {},
207 196
        bmap: '',
208
        systemList: [{ label: '公开', value: 1 }, { label: '未公开', value: 0 }],
209
        citys: {},
197
        systemList: [{ label: '公开', value: true }, { label: '未公开', value: false }],
210 198
        edit: '',
211
        imageUrl: '',
212 199
        ruleForm2: {
213 200
          code: '',
214
          shortName: '',
201
          seq: '',
215 202
          name: '',
216
          addrCode: '',
217
          serviceDay: '',
203
          open: false,
218 204
          location: '',
219
          descp: '',
220
          remark: '',
221
          img: '',
222
          org: '',
223
          phone: '',
224
          email: ''
205
          lng: '',
206
          lat: '',
207
          remark: ''
225 208
        },
226 209
        rules2: {
227 210
          code: [
228 211
            { required: true, validator: code, trigger: 'blur' }
229 212
          ],
230
          shortName: [
231
            { required: true, validator: shortName, trigger: 'blur' }
213
          seq: [
214
            { required: true, validator: seq, trigger: 'blur' }
232 215
          ],
233 216
          name: [
234 217
            { required: true, validator: name, trigger: 'blur' }
235 218
          ],
236
          location: [
237
            { required: true, message: '请输入地理位置信息', trigger: 'blur' }
238
          ],
239
          org: [
240
            { required: true, message: '请输入维护机构名称', trigger: 'blur' }
241
          ],
242
          phone: [
243
            { required: true, message: '请输入联系电话', trigger: 'blur' }
219
          open: [
220
            { required: true, message: '请选择站点状态', trigger: 'blur' }
244 221
          ],
245
          addrCode: [
246
            { required: true, message: '请选择桥梁位置信息', trigger: 'blur' }
222
          location: [
223
            { required: true, message: '请选择站点所在地理位置', trigger: 'blur' }
247 224
          ]
248 225
        },
249
        timeout: null,
250 226
        dialogTableVisible: false,
251 227
        tableKey: 0,
252 228
        list: null,
@ -255,6 +231,7 @@
255 231
        listQuery: {
256 232
          name: '',
257 233
          code: '',
234
          open: null,
258 235
          active: 1,
259 236
          pageSize: 10,
260 237
          pageNo: 1
@ -267,10 +244,7 @@
267 244
      }
268 245
    },
269 246
    created() {
270
      this.getDictoryData()
271
    },
272
    components: {
273
      CityPicker
247
      this.getList()
274 248
    },
275 249
    methods: {
276 250
      handler({ BMap, map }) {
@ -284,6 +258,9 @@
284 258
            position: rs.point,
285 259
            contents: rs.address
286 260
          }
261
          this.ruleForm2.lat = rs.point.lat
262
          this.ruleForm2.lng = rs.point.lng
263
          this.ruleForm2.location = rs.address
287 264
          console.log(rs)
288 265
        })
289 266
      },
@ -293,29 +270,17 @@
293 270
      infoWindowOpen(e) {
294 271
        this.infoWindow.show = true
295 272
      },
296
      getDictoryData() {
297
        queryDict.applyDict('XZQH', dictData => {
298
          dictData.map(item => {
299
            this.citys[item.code] = item.fullCaption
300
          })
301
          this.getList()
302
        }) // 城市级联
303
      },
304 273
      submitForm(formName) {
305 274
        this.$refs[formName].validate((valid) => {
306 275
          if (valid) {
307
            if (this.ruleForm2.img === '') {
308
              this.ruleForm2.img = '/default-bridge.jpg'
309
            }
310 276
            if (!this.edit) {
311 277
              addDevice(this.ruleForm2).then(response => {
312 278
                if (response.success) {
313 279
                  this.getList()
314 280
                  setTimeout(() => {
315
                    this.pop('已成功添加桥梁')
281
                    this.pop('已成功添加站点')
316 282
                  }, 1000)
317 283
                  this.resetForm('ruleForm2')
318
                  this.ruleForm2.img = ''
319 284
                  this.dialogTableVisible = false
320 285
                }
321 286
              }).catch(error => {
@ -327,7 +292,7 @@
327 292
              updateDevice(par).then(response => {
328 293
                if (response.success) {
329 294
                  setTimeout(() => {
330
                    this.pop('已成功更新桥梁')
295
                    this.pop('已成功更新站点')
331 296
                  }, 1000)
332 297
                  this.resetForm('ruleForm2')
333 298
                  this.getList()
@ -335,17 +300,13 @@
335 300
                  this.edit = ''
336 301
                  this.ruleForm2 = {
337 302
                    code: '',
338
                    shortName: '',
303
                    seq: '',
339 304
                    name: '',
340
                    addrCode: '',
341
                    serviceDay: '',
305
                    open: false,
342 306
                    location: '',
343
                    descp: '',
344
                    remark: '',
345
                    img: '',
346
                    org: '',
347
                    phone: '',
348
                    email: ''
307
                    lng: '',
308
                    lat: '',
309
                    remark: ''
349 310
                  }
350 311
                }
351 312
              })
@ -356,13 +317,11 @@
356 317
      resetForm(formName) {
357 318
        this.dialogTableVisible = false
358 319
        this.$refs[formName].resetFields()
359
        this.imageUrl = ''
360 320
        this.edit = ''
361 321
      },
362 322
      closed() {
363 323
        this.$refs['ruleForm2'].resetFields()
364 324
        this.edit = ''
365
        this.imageUrl = ''
366 325
      },
367 326
      getList() {
368 327
        this.listLoading = true
@ -393,16 +352,14 @@
393 352
        this.getList()
394 353
      },
395 354
      handleModifyStatus(row, status) {
396
        this.$confirm('确定要删除:桥梁' + row.code + '吗?', '提示', {
397
          confirmButtonText: '确定',
398
          cancelButtonText: '取消',
355
        this.$confirm('确定要删除:站点' + row.code + '吗?', '提示', {
399 356
          type: 'warning',
400 357
          center: true
401 358
        }).then(() => {
402 359
          deleteDevice({ id: row.id }).then(response => {
403 360
            if (response.success) {
404 361
              this.getList()
405
              this.pop('已成功删除该桥梁')
362
              this.pop('已成功删除该站点')
406 363
            }
407 364
          })
408 365
        }).catch(() => {
@ -411,8 +368,6 @@
411 368
      },
412 369
      pop($par) {
413 370
        this.$confirm($par, '提示', {
414
          confirmButtonText: '确定',
415
          cancelButtonText: '取消',
416 371
          type: 'success',
417 372
          showCancelButton: false,
418 373
          center: true
@ -425,52 +380,40 @@
425 380
      resetTemp(row) {
426 381
        this.ruleForm2 = {
427 382
          code: row.code,
428
          shortName: row.shortName,
383
          seq: row.seq,
384
          open: row.open,
429 385
          name: row.name,
430
          addrCode: row.addrCode,
431
          serviceDay: row.serviceDay,
432 386
          location: row.location,
433
          descp: row.descp,
434
          remark: row.remark,
435
          img: row.img,
436
          org: row.org,
437
          phone: row.phone,
438
          email: row.email
387
          lng: row.lng,
388
          lat: row.lat,
389
          remark: row.remark
390
        }
391
        this.defaultAddr = {
392
          lng: row.lng,
393
          lat: row.lat
394
        }
395
        this.markerPoint = {
396
          lng: row.lng,
397
          lat: row.lat
398
        }
399
        this.infoWindow = {
400
          show: true,
401
          position: {
402
            lng: row.lng,
403
            lat: row.lat
404
          },
405
          contents: row.location
439 406
        }
440 407
        this.edit = row.id
441 408
      },
442 409
      handleCreate() {
443 410
        this.dialogTableVisible = true
444
        this.ruleForm2.img = ''
445 411
      },
446 412
      handleUpdate(row) {
447 413
        setTimeout(() => {
448 414
          this.resetTemp(row)
449
          this.imageUrl = '/data/bridge' + row.img
450 415
        }, 500)
451 416
        this.dialogTableVisible = true
452
      },
453
      handleSelect(item) {
454
        this.ruleForm2.deviceId = item.id
455
      },
456
      handleAvatarSuccess(res, file) {
457
        this.imageUrl = URL.createObjectURL(file.raw)
458
        this.ruleForm2.img = res.data[0].uri
459
      },
460
      beforeAvatarUpload(file) {
461
        const isJPG = file.type === 'image/jpeg'
462
        const isPNG = file.type === 'image/png'
463
        const isLt2M = file.size / 1024 / 1024 < 5
464
        if (!isJPG && !isPNG) {
465
          this.$message.error('图片过大或格式不对请重新上传')
466
        }
467
        if (!isLt2M) {
468
          this.$message.error('图片过大或格式不对请重新上传')
469
        }
470
        return (!isJPG || !isPNG) && isLt2M
471
      },
472
      toshow(value) {
473
        this.ruleForm2.addrCode = value
474 417
      }
475 418
    }
476 419
  }
@ -479,7 +422,8 @@
479 422
<style rel="stylesheet/scss" lang="scss" scoped>
480 423
  .map {
481 424
    width: 100%;
482
    height: 200px;
425
    height: 360px;
426
    margin: 0;
483 427
  }
484 428
485 429
  .el-autocomplete {

+ 1 - 1
src/views/layout/components/TopNavbar.vue

@ -16,7 +16,7 @@
16 16
          <el-dropdown-item command="c">退出</el-dropdown-item>
17 17
        </el-dropdown-menu>
18 18
      </el-dropdown>
19
      <div class="pleaseLogin"v-else @click="login">请登录</div>
19
      <div class="pleaseLogin" v-else @click="login">请登录</div>
20 20
    </div>
21 21
    <updateLoginPwd ref="loginPwd"></updateLoginPwd>
22 22
    <updatePersonInfo ref="modifyUser"></updatePersonInfo>

+ 4 - 3
src/views/login/index.vue

@ -107,9 +107,10 @@ export default {
107 107
            this.loading = false
108 108
            if (response.success) {
109 109
              if (response.data) {
110
                this.$store.dispatch('GetUserInfo').then(res => {
111
                })
112
                if (response.data.type === 1) {
110
                // this.$store.dispatch('GetUserInfo').then(res => {
111
                // })
112
                console.log(sessionStorage.getItem('uType'))
113
                if (sessionStorage.getItem('uType') === '1') {
113 114
                  this.$router.push({ path: '/infoManage' })
114 115
                } else {
115 116
                  this.$router.push({ path: '/loginedHome' })

+ 4 - 3
src/views/peoplesManage/infoManage/editUser.vue

@ -1,5 +1,6 @@
1 1
<template>
2
  <el-dialog title="用户信息" ref="ruleForm" :visible.sync="dialogTableVisible" width="860px" @close='closed'>
2
  <el-dialog title="用户信息" ref="ruleForm" :visible.sync="dialogTableVisible"
3
    :close-on-click-modal="false" width="860px" @close='closed'>
3 4
    <el-form class="form-main" :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position='top' status-icon>
4 5
      <el-row>
5 6
        <el-col :span="12">
@ -13,7 +14,7 @@
13 14
          </el-form-item>
14 15
        </el-col>
15 16
        <el-col :span="12">
16
          <el-form-item label="用户所在机构" prop='comp'>
17
          <el-form-item label="所在机构" prop='comp'>
17 18
            <el-input placeholder="请填写用户所在机构" v-model="ruleForm2.comp" maxlength=200></el-input>
18 19
          </el-form-item>
19 20
        </el-col>
@ -24,7 +25,7 @@
24 25
        </el-col>
25 26
        <el-col :span="12">
26 27
          <el-form-item label="联系电话" prop='phone'>
27
            <el-input placeholder="请填写练习电话" v-model="ruleForm2.phone" maxlength=11></el-input>
28
            <el-input placeholder="请填写联系电话" v-model="ruleForm2.phone" maxlength=11></el-input>
28 29
          </el-form-item>
29 30
        </el-col>
30 31
        <el-col :span="12">

+ 23 - 65
src/views/peoplesManage/infoManage/editUserPermissions.vue

@ -1,5 +1,6 @@
1 1
<template>
2
  <el-dialog title="分配站点" :visible.sync="dialogTableVisible" width="860px" @close='closed'>
2
  <el-dialog title="分配站点" :visible.sync="dialogTableVisible" width="600px"
3
    :close-on-click-modal="false" @close='closed'>
3 4
    <el-form class="form-main" :model="ruleForm2"  ref="ruleForm2">
4 5
      <el-row :gutter="16">
5 6
        <el-col :xs="24" :sm="24" :lg="24">
@ -12,7 +13,7 @@
12 13
                <el-form-item label="用户姓名">{{ruleForm2.name}}</el-form-item>
13 14
              </el-col>
14 15
              <el-col :span="12">
15
                  <el-form-item label="所机构">{{ruleForm2.comp}}</el-form-item>
16
                  <el-form-item label="所机构">{{ruleForm2.comp}}</el-form-item>
16 17
              </el-col>
17 18
              <el-col :span="12">
18 19
                <el-form-item label="职位">{{ruleForm2.job}}</el-form-item>
@ -21,55 +22,17 @@
21 22
            </el-row>
22 23
          </div>
23 24
        </el-col>
24
<!--         <el-col :xs="12" :sm="12" :lg="12">
25
          <div class="list-item">
26
            <el-row>
27
              <el-col :span="24">
28
                <el-form-item label="添加负责桥梁">
29
                  <el-autocomplete
30
                    v-model="state4"
31
                    :fetch-suggestions="querySearchAsync"
32
                    placeholder="请选择一个桥梁"
33
                    @select="handleSelect">
34
                  </el-autocomplete>
35
                </el-form-item>
36
              </el-col>
37
              <el-col :span="24" style="margin-top:30px"> 
38
                 <el-table
39
                  :show-header="shouHead"
40
                  :data="tableData3"
41
                  height="250"
42
                  border
43
                  style="width: 100%">
44
                  <el-table-column
45
                    prop="name"
46
                    label=""
47
                    min-width="180">
48
                  </el-table-column>
49
                  <el-table-column
50
                    prop="address"
51
                    label="">
52
                    <template slot-scope="scope">  
53
                      <el-button size="mini" type="danger" @click="handleModifyStatus(scope.row,'deleted')">删除
54
                      </el-button>
55
                    </template>
56
                  </el-table-column>
57
                </el-table>
58
              </el-col>
59
            </el-row>
60
          </div>
61
        </el-col> -->
62 25
        <el-col :xs="24" :sm="24" :lg="24" :span="24">
63 26
          <el-transfer class="check-transfer"
64 27
            filterable
65
            v-model="valueBridge"
28
            v-model="valueSite"
66 29
            :titles="['未分配站点', '已分配站点']"
67 30
            :button-texts="['删除', '添加']"
68 31
            :props="{
69 32
              key: 'id',
70 33
              label: 'value'
71 34
            }"
72
            :data="bridgeLists">
35
            :data="siteLists">
73 36
          </el-transfer>
74 37
        </el-col>
75 38
        <el-col :span="24" class="el-btn-col">
@ -84,28 +47,26 @@
84 47
</template>
85 48
86 49
<script>
87
import { queryRegister, queryResponsibleBridge, DeviceOfservice, updatePermission } from '@/api/userManagemen'
50
import { queryRegister, queryResponsibleSite, siteAllList, updatePermission } from '@/api/userManagemen'
88 51
export default {
89 52
  props: ['dialog', 'id'],
90 53
  data() {
91 54
    return {
92
      bridgeLists: [],
93
      bridgeListsChecked: [],
94
      valueBridge: [],
55
      siteLists: [],
56
      siteListsChecked: [],
57
      valueSite: [],
95 58
      shouHead: false,
96
      state4: '',
97 59
      ruleForm2: {
98 60
        account: '',
99 61
        name: '',
100 62
        comp: '',
101
        job: '',
102
        type: 0
63
        job: ''
103 64
      },
104 65
      dialogTableVisible: false
105 66
    }
106 67
  },
107 68
  created() {
108
    this.getAllBridges()
69
    this.getAllSites()
109 70
  },
110 71
  watch: {
111 72
    dialog() {
@ -116,16 +77,15 @@ export default {
116 77
            account: $data.account,
117 78
            name: $data.name,
118 79
            comp: $data.comp,
119
            job: $data.job,
120
            type: $data.type
80
            job: $data.job
121 81
          }
122 82
        }
123 83
      })
124
      queryResponsibleBridge({ uid: this.id, active: 1 }).then(response => {
84
      queryResponsibleSite({ uid: this.id, active: 1 }).then(response => {
125 85
        if (response.success) {
126 86
          const $info = response.data
127 87
          for (let j = 0; j < $info.length; j++) {
128
            this.valueBridge.push($info[j].id)
88
            this.valueSite.push($info[j].id)
129 89
          }
130 90
        }
131 91
      })
@ -133,24 +93,22 @@ export default {
133 93
    }
134 94
  },
135 95
  methods: {
136
    getAllBridges() {
137
      DeviceOfservice({ key: this.state4, active: 1 }).then(response => {
96
    getAllSites() {
97
      siteAllList({ open: 0, active: 1 }).then(response => {
138 98
        if (response.success) {
139 99
          const $info = response.data
140 100
          if ($info.length) {
141
            this.bridgeListsChecked.push($info[0].id)
101
            this.siteListsChecked.push($info[0].id)
142 102
            const $data = $info.map(item => {
143
              return { 'value': item.shortName, 'id': item.id }
103
              return { 'value': item.name, 'id': item.id }
144 104
            })
145
            this.bridgeLists = $data
105
            this.siteLists = $data
146 106
          }
147 107
        }
148 108
      })
149 109
    },
150 110
    pop($par) {
151 111
      this.$confirm($par, '提示', {
152
        confirmButtonText: '确定',
153
        cancelButtonText: '取消',
154 112
        type: 'success',
155 113
        showCancelButton: false,
156 114
        center: true
@ -161,17 +119,17 @@ export default {
161 119
      })
162 120
    },
163 121
    closed() {
164
      this.valueBridge = []
122
      this.valueSite = []
165 123
      this.dialogTableVisible = false
166 124
    },
167 125
    submit() {
168
      updatePermission({ id: this.id, bridges: this.valueBridge }).then(response => {
126
      updatePermission({ id: this.id, sites: this.valueSite }).then(response => {
169 127
        if (response.success) {
170
          this.valueBridge = []
128
          this.valueSite = []
171 129
          this.$emit('chilF')
172 130
          const that = this
173 131
          setTimeout(function() {
174
            that.pop('权限修改成功')
132
            that.pop('站点权限配置成功')
175 133
          }, 1000)
176 134
          this.dialogTableVisible = false
177 135
        }

+ 21 - 13
src/views/peoplesManage/infoManage/index.vue

@ -1,9 +1,9 @@
1 1
<template>
2 2
  <div class="app-container">
3 3
    <div class="filter-container" style="margin-bottom:20px">
4
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入账号" v-model="listQuery.account">
4
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入账号" clearable v-model="listQuery.account">
5 5
      </el-input>
6
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入用户名" v-model="listQuery.name">
6
      <el-input style="width: 200px;" class="filter-item" placeholder="请输入用户名" clearable v-model="listQuery.name">
7 7
      </el-input>
8 8
      <el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleFilter" type="primary" icon="el-icon-search">查找</el-button>
9 9
      <el-button v-waves class="filter-item" style="margin-left: 10px;" @click="handleCreate" type="primary" icon="el-icon-edit">添加用户</el-button>
@ -19,7 +19,7 @@
19 19
          <span>{{scope.row.account}}</span>
20 20
        </template>
21 21
      </el-table-column>
22
      <el-table-column width="80px" align="center" label="用户名">
22
      <el-table-column width="80px" align="center" label="用户名">
23 23
        <template slot-scope="scope">
24 24
          <span>{{scope.row.name}}</span>
25 25
        </template>
@ -46,7 +46,7 @@
46 46
      </el-table-column>
47 47
      <el-table-column min-width="200px" align="center" label="负责站点">
48 48
        <template slot-scope="scope">
49
          <span>{{scope.row.bridgeName}}</span>
49
          <span>{{scope.row.siteName}}</span>
50 50
        </template>
51 51
      </el-table-column>
52 52
      <el-table-column align="center" label="操作" width="200px" class-name="small-padding fixed-width">
@ -81,7 +81,7 @@
81 81
</template>
82 82
83 83
<script>
84
  import { deleteUser, queryResponsibleBridge, pageQueryUser } from '@/api/userManagemen'
84
  import { deleteUser, resetPw, queryResponsibleSite, pageQueryUser } from '@/api/userManagemen'
85 85
  import waves from '@/directive/waves'
86 86
  import editUser from './editUser'
87 87
  import editUserPermissions from './editUserPermissions'
@ -137,16 +137,16 @@
137 137
            }
138 138
            const $data = response.data.data
139 139
            for (let i = 0; i < $data.length; i++) {
140
              $data[i].bridgeName = ''
140
              $data[i].siteName = ''
141 141
              $data[i].num = i + 1
142
              queryResponsibleBridge({ uid: $data[i].id, active: 1 }).then(response => {
142
              queryResponsibleSite({ uid: $data[i].id, active: 1 }).then(response => {
143 143
                if (response.success) {
144 144
                  const arr = []
145 145
                  const $info = response.data
146 146
                  for (let j = 0; j < $info.length; j++) {
147
                    arr.push($info[j].shortName)
147
                    arr.push($info[j].name)
148 148
                  }
149
                  $data[i].bridgeName = arr.join(',')
149
                  $data[i].siteName = arr.join(',')
150 150
                }
151 151
              })
152 152
            }
@ -178,15 +178,19 @@
178 178
        this.getList()
179 179
      },
180 180
      resetPassword(row) {
181
        var that = this
181 182
        this.$confirm('确认重置该用户密码?', '提示', {
182 183
          confirmButtonText: '确定',
183 184
          cancelButtonText: '取消',
184 185
          type: 'warning',
185 186
          center: true
186 187
        }).then(() => {
187
          deleteUser({ id: row.id }).then(response => {
188
          resetPw({ id: row.id }).then(response => {
188 189
            if (response.success) {
189
              this.pop('密码重置成功!')
190
              that.$message({
191
                message: '密码重置成功!',
192
                type: 'success'
193
              })
190 194
            }
191 195
          })
192 196
        }).catch(() => {
@ -194,6 +198,7 @@
194 198
        })
195 199
      },
196 200
      handleModifyStatus(row, status) {
201
        var that = this
197 202
        this.$confirm('确定要停用:用户' + row.name + '吗?', '提示', {
198 203
          confirmButtonText: '确定',
199 204
          cancelButtonText: '取消',
@ -202,8 +207,11 @@
202 207
        }).then(() => {
203 208
          deleteUser({ id: row.id }).then(response => {
204 209
            if (response.success) {
205
              this.getList()
206
              this.pop('已成功停用该用户')
210
              that.getList()
211
              that.$message({
212
                message: '已成功停用该用户!',
213
                type: 'success'
214
              })
207 215
            }
208 216
          })
209 217
        }).catch(() => {

BIN
static/logo.png


BIN
static/touchwave.png