Browse Source

Merge remote-tracking branch 'origin/dev-security' into dev-security

liuwenxun 4 years ago
parent
commit
6b710a982f

+ 13 - 3
security-protection-platform/src/api/system/index.js

81
  },
81
  },
82
  // 获取ai任务列表
82
  // 获取ai任务列表
83
  getAiTaskList(params) {
83
  getAiTaskList(params) {
84
    return $default.get('/sp/sysConfigAiTask/queryPageAiTask?', params)
84
    return $default.get('/sp/sysConfigAiTask/queryPageAiTask', params)
85
  },
86
  // 根据ID获取ai任务
87
  getAiTaskById(params) {
88
    return $default.get('/sp/sysConfigAiTask/queryAiTask?', params)
89
  },
90
  deleteAiTaskData(params) {
91
    return $default.post(`sp/sysConfigAiTask/deleteAiTask`, params)
92
  },
93
  createAiTask(params) {
94
    return $default.post(`/sp/sysConfigAiTask/createAiTask`, params)
85
  },
95
  },
86
  // 获取设备列表数据
96
  // 获取设备列表数据
87
  getDeviceData (data) {
97
  getDeviceData (data) {
166
    }
176
    }
167
  },
177
  },
168
  moveTerminalRelIndex(params) {
178
  moveTerminalRelIndex(params) {
169
    params = keysMapping(params, mappingMonitor, false)
170
    return $default.put('/sp/monitorSceneTerminal/moveMonitorSceneTerminalRelIndex', {params})
179
    // params = keysMapping(params, mappingMonitor, false)
180
    return $default.put('/sp/monitorSceneTerminal/moveMonitorSceneTerminalRelIndex', params)
171
  },
181
  },
172
  getOneMonitorScene(monitorSceneId) {
182
  getOneMonitorScene(monitorSceneId) {
173
    return $default.get(`/sp/monitorSceneManagement/queryOneMonitorScene?monitorSceneId=${monitorSceneId}`)
183
    return $default.get(`/sp/monitorSceneManagement/queryOneMonitorScene?monitorSceneId=${monitorSceneId}`)

+ 28 - 2
security-protection-platform/src/api/usermana/index.js

1
import http from '@/http'
1
import http from '@/http'
2
import { keysMapping, keysMappingReverse } from '@/utils/keysMapping'
2
import { keysMapping, keysMappingReverse } from '@/utils/keysMapping'
3
const { $default } = http
3
const { $default } = http
4
const mapping = {
5
  userId: 'code',
6
  departmentName: 'orgName',
7
  post: 'employeePositionZh',
8
  telephone: 'mainWirelessCall'
9
}
4
const api = {
10
const api = {
5
  // 获取公司类型列表
11
  // 获取公司类型列表
6
  getCompanyTypesList () {
12
  getCompanyTypesList () {
14
      return resp
20
      return resp
15
    }).catch((err) => { return err })
21
    }).catch((err) => { return err })
16
  },
22
  },
23
  // 获取部门类型列表
17
  queryCycleChildOrg (id) {
24
  queryCycleChildOrg (id) {
18
    return $default.get(`/sp/employeeManagement/queryCycleChildOrg?orgId=${id}`).then(resp => {
25
    return $default.get(`/sp/employeeManagement/queryCycleChildOrg?orgId=${id}`).then(resp => {
19
      const data = resp.data.data
26
      const data = resp.data.data
20
      console.log(data)
21
      if (!Array.isArray(data)) return resp
27
      if (!Array.isArray(data)) return resp
22
      // 将平铺的数组变为树形数组
28
      // 将平铺的数组变为树形数组
23
      resp.data = nest(data)
29
      resp.data = nest(data)
24
      // console.log(resp.data)
30
      return resp
31
    }).catch((err) => { return err })
32
  },
33
  getStaffTypesList (id) {
34
    return $default.get(`/sp/employeeManagement/queryEmployeeListByOrgId?orgId=${id}`).then(resp => {
35
      return resp
25
    }).catch((err) => { return err })
36
    }).catch((err) => { return err })
37
  },
38
  // 获取用户列表数据
39
  getUserList (data) {
40
    return $default.get(`/sp/employeeManagement/queryEmployeeList`, data).then(resp => {
41
      resp.data = keysMappingReverse(resp.data.data, mapping)
42
      return resp
43
    }).catch((err) => { return err })
44
  },
45
  // 删除用户
46
  deleteUserData (data) {
47
    if (Array.isArray(data.employeeId)) {
48
      return $default.delete(`/sp/employeeManagement/deleteEmployee?employeeId=${data.employeeId.join(',')}`).catch((err) => { return err })
49
    } else {
50
      return $default.delete(`/sp/employeeManagement/deleteEmployee?employeeId=${data.employeeId}`).catch((err) => { return err })
51
    }
26
  }
52
  }
27
}
53
}
28
function nest (items, code = '-1', link = 'parentCode') {
54
function nest (items, code = '-1', link = 'parentCode') {

+ 6 - 4
security-protection-platform/src/modules/system/monitor/VideoMonitor/index.vue

340
    datadragEnd(evt) {
340
    datadragEnd(evt) {
341
      if (evt.oldIndex !== evt.newIndex) {
341
      if (evt.oldIndex !== evt.newIndex) {
342
        let params = {
342
        let params = {
343
          monitorSceneTerminalRelId: this.areaMonitorList[evt.oldIndex].monitorSceneTerminalRelId, // 场景与终端关联ID
344
          monitorSceneId: this.currenScene.monitorSceneId, // 场景ID
345
          resourceToolId: this.areaMonitorList[evt.oldIndex].resourceToolId, // 终端ID
346
          resourceToolIndex: this.areaMonitorList[evt.newIndex].resourceToolIndex // 移动位置序号
343
          params:{
344
            monitorSceneTerminalRelId: this.areaMonitorList[evt.oldIndex].monitorSceneTerminalRelId, // 场景与终端关联ID
345
            monitorSceneId: this.currenScene.monitorSceneId, // 场景ID
346
            resourceToolId: this.areaMonitorList[evt.oldIndex].resourceToolId, // 终端ID
347
            resourceToolIndex: this.areaMonitorList[evt.newIndex].resourceToolIndex // 移动位置序号
348
          }
347
        }
349
        }
348
        sysapi.moveTerminalRelIndex(params).then((resp) => {})
350
        sysapi.moveTerminalRelIndex(params).then((resp) => {})
349
          .catch((error) => {
351
          .catch((error) => {

+ 115 - 0
security-protection-platform/src/modules/usermana/components/modal/addUser.vue

1
<template>
2
  <div>
3
    <t-modal :visibled="visible">
4
      <t-form :model="addUserModal" :rules="addUserModalRules" label-position="right">
5
        <t-form-item label="姓名:" prop="name">
6
          <t-input v-model="addUserModal.name" placeholder="请输入姓名"></t-input>
7
        </t-form-item>
8
        <t-form-item label="员工编号:" prop="code">
9
          <t-input v-model="addUserModal.code" placeholder="请输入员工编号"></t-input>
10
        </t-form-item>
11
        <t-form-item label="公司:" prop="field4">
12
          <t-select v-model="addUserModal.field4" placeholder="请选择公司" clearable>
13
            <t-option v-for="(item,index) in dataList" :value="item.field4" :key="index">{{ item.name }}</t-option>
14
          </t-select>
15
        </t-form-item>
16
        <t-form-item label="部门:" prop="organizeCode">
17
          <t-select v-model="addUserModal.organizeCode" placeholder="请选择部门" clearable>
18
            <t-option v-for="(item,index) in dataList" :value="item.value" :key="index">{{ item.name }}</t-option>
19
          </t-select>
20
        </t-form-item>
21
        <t-form-item label="职务:" prop="mainJobPosition">
22
          <t-select v-model="addUserModal.mainJobPosition" placeholder="请选择职务" clearable>
23
            <t-option v-for="(item,index) in dataList" :value="item.value" :key="index">{{ item.name }}</t-option>
24
          </t-select>
25
        </t-form-item>
26
        <t-form-item label="年龄:" prop="birthday">
27
          <t-date-picker v-model="addUserModal.birthday" placeholder="请输入年龄" @date-change="startPickerDateChange"></t-date-picker>
28
        </t-form-item>
29
        <t-form-item label="手机:" prop="mainWirelessCall">
30
          <t-input v-model="addUserModal.mainWirelessCall" placeholder="请输入11位手机号"></t-input>
31
        </t-form-item>
32
        <t-form-item label="人脸图片:" prop="facePicture">
33
          <t-input v-model="addUserModal.facePicture" placeholder="请输入手机号"></t-input>
34
        </t-form-item>
35
      </t-form>
36
    </t-modal>
37
  </div>
38
</template>
39
40
<script>
41
export default {
42
  props: {
43
    visible: {
44
      type: Boolean,
45
      default: false
46
    },
47
    value: {
48
      type: Object,
49
      dafault: () => []
50
    }
51
  },
52
  data() {
53
    return {
54
      dataList: [
55
        {
56
          name: '数据一',
57
          value: 1
58
        },
59
        {
60
          name: '数据二',
61
          value: 2
62
        },
63
        {
64
          name: '数据三',
65
          value: 3
66
        }
67
      ],
68
      // 新增用户表单
69
      addUserModal: {
70
        name: '',
71
        code: '',
72
        organizeCode: '',
73
        apartments: '',
74
        mainJobPosition: '',
75
        birthday: '',
76
        mainWirelessCall: '',
77
        facePicture: ''
78
      },
79
      // 新增用户表单规则
80
      addUserModalRules: {
81
        name: [
82
          { required: true, message: '姓名不能为空', trigger: 'blur' }
83
        ],
84
        code: [
85
          { required: true, message: '员工编号不能为空', trigger: 'blur' }
86
        ],
87
        field4: [
88
          { required: true, message: '公司不能为空' }
89
        ],
90
        organizeCode: [
91
          { required: true, message: '部门不能为空', trigger: 'change' }
92
        ],
93
        mainJobPosition: [
94
          { required: true, message: '职务不能为空', trigger: 'change' }
95
        ],
96
        birthday: [
97
          { required: true, message: '年龄不能为空', trigger: 'blur' }
98
        ],
99
        mainWirelessCall: [
100
          { required: true, message: '手机不能为空', trigger: 'blur' }
101
        ],
102
        facePicture: [
103
          { required: true, message: '图片不能为空', trigger: 'blur' }
104
        ]
105
      }
106
    }
107
  },
108
  methods: {
109
  }
110
}
111
</script>
112
113
<style>
114
115
</style>

+ 63 - 38
security-protection-platform/src/modules/usermana/index.vue

29
        <t-button color="primary" @click="showAddDeviceModal">
29
        <t-button color="primary" @click="showAddDeviceModal">
30
          <t-icon icon="plus-circle-outline" size="16"></t-icon>新增
30
          <t-icon icon="plus-circle-outline" size="16"></t-icon>新增
31
        </t-button>
31
        </t-button>
32
        <t-button @click="multDeleteDeviceData">
32
        <t-button @click="multDeleteUserData">
33
          <t-icon icon="trash" size="16"></t-icon>删除
33
          <t-icon icon="trash" size="16"></t-icon>删除
34
        </t-button>
34
        </t-button>
35
      </div>
35
      </div>
42
          <t-table-column prop="departmentName" label="部门" width="150"></t-table-column>
42
          <t-table-column prop="departmentName" label="部门" width="150"></t-table-column>
43
          <t-table-column prop="post" label="职务" width="100"></t-table-column>
43
          <t-table-column prop="post" label="职务" width="100"></t-table-column>
44
          <t-table-column prop="age" label="年龄" width="80"></t-table-column>
44
          <t-table-column prop="age" label="年龄" width="80"></t-table-column>
45
          <t-table-column prop="telephone" label="手机" width="120"></t-table-column>
45
          <t-table-column prop="telephone" label="手机" width="150"></t-table-column>
46
          <t-table-column prop="status" label="人脸状态" width="120">
46
          <t-table-column prop="status" label="人脸状态" width="120">
47
            <template v-slot="{row}">
47
            <template v-slot="{row}">
48
              <t-tag v-if="row.status=== 'xxx'" state="primary">待审核</t-tag>
49
              <t-tag v-else state="success">已生效</t-tag>
48
              <t-tag v-if="row.field2==='5'" state="success">{{ row.status }}</t-tag>
49
              <t-tag v-else-if="row.field2==='3'" state="danger">{{ row.status }}</t-tag>
50
              <t-tag v-else state="info">{{ row.status }}</t-tag>
50
            </template>
51
            </template>
51
          </t-table-column>
52
          </t-table-column>
52
          <t-table-column label="操作">
53
          <t-table-column label="操作">
53
            <template v-slot="{row}">
54
            <template v-slot="{row}">
54
              <a href="javascript:;" style="color:#0089D4;" @click="editDeviceData(row.resourceToolId)">编辑</a>
55
              <a href="javascript:;" style="color:#0089D4;" @click="editDeviceData(row.resourceToolId)">编辑</a>
55
              <a href="javascript:;" style="color:#0089D4;" @click="deleteDeviceData(row)">删除</a>
56
              <a href="javascript:;" style="color:#0089D4;" @click="deleteUserData(row)">删除</a>
56
              <a href="javascript:;" style="color:#0089D4;" @click="deleteDeviceData(row)">人脸审核</a>
57
              <a href="javascript:;" style="color:#0089D4;" @click="deleteDeviceData(row)">人脸审核</a>
57
            </template>
58
            </template>
58
          </t-table-column>
59
          </t-table-column>
63
        </t-pager>
64
        </t-pager>
64
      </div>
65
      </div>
65
    </t-card>
66
    </t-card>
67
    <add-user-modal :visible="addDeviceModal"></add-user-modal>
66
  </div>
68
  </div>
67
</template>
69
</template>
68
70
69
<script>
71
<script>
70
import sysapi from '@/api/usermana'
72
import sysapi from '@/api/usermana'
73
import addUserModal from './components/modal/addUser'
71
export default {
74
export default {
72
75
  components: {
76
    addUserModal
77
  },
73
  data () {
78
  data () {
74
    return {
79
    return {
75
      // 公司类型id
80
      // 公司类型id
91
      // 当前页的数据个数
96
      // 当前页的数据个数
92
      limit: 10,
97
      limit: 10,
93
      // 数据总数
98
      // 数据总数
94
      total: 100,
95
      // 批量删除的设备id
96
      deleteResourceToolId: [],
99
      total: 0,
100
      // 批量删除的用户id
101
      deleteUserId: [],
97
      // 当前设备数据
102
      // 当前设备数据
98
      currentDeviceData: {},
103
      currentDeviceData: {},
99
      // 显示/隐藏新增设备对话框
104
      // 显示/隐藏新增设备对话框
103
  },
108
  },
104
  watch: {
109
  watch: {
105
    companyTypeId (val) {
110
    companyTypeId (val) {
106
      // this.getDepartmentTypesList(val)
111
      // 重置部门回显
112
      this.departmentTypeId = ''
113
      // 查询部门列表
107
      this.queryCycleChildOrg(val)
114
      this.queryCycleChildOrg(val)
108
    },
115
    },
109
    departmentTypeId (val) {
116
    departmentTypeId (val) {
110
      this.getStaffTypesList(val)
117
      // 重置人员回显
118
      this.staffTypeId = ''
119
      // 重置人员列表
120
      this.staffTypesList = []
121
      // 减少查询请求
122
      if (val !== '') {
123
        this.getStaffTypesList(val)
124
      }
111
    }
125
    }
112
  },
126
  },
113
  created () {
127
  created () {
115
    this.getCompanyTypesList()
129
    this.getCompanyTypesList()
116
  },
130
  },
117
  methods: {
131
  methods: {
118
    // 获取设备列表数据
119
    async getDeviceData () {
120
132
    // 获取用户列表数据
133
    async getUserList () {
134
      const res = await sysapi.getUserList({ params: { pageNumber: this.page, pageSize: this.limit, id: this.staffTypeId, orgId: this.departmentTypeId || this.companyTypeId } })
135
      if (res.status === 200) {
136
        // 获取当前公司id的公司名称
137
        const companyName = this.companyTypesList.filter(item => item.id === this.companyTypeId)[0].name
138
        // eslint-disable-next-line no-return-assign
139
        res.data.data.forEach(item => item.companyName = companyName)
140
        this.userDataList = res.data.data
141
        this.total = res.data.total
142
      } else {
143
        this.$Message.danger('用户列表数据获取失败!')
144
      }
121
    },
145
    },
122
    // 向服务器发送请求获取公司类型列表数据
146
    // 向服务器发送请求获取公司类型列表数据
123
    async getCompanyTypesList () {
147
    async getCompanyTypesList () {
129
      }
153
      }
130
    },
154
    },
131
    // 向服务器发送请求获取部门类型列表数据
155
    // 向服务器发送请求获取部门类型列表数据
132
    async getDepartmentTypesList (id) {
133
      const res = await sysapi.getDepartmentTypesList(id)
134
      if (res.status === 200) {
135
        this.departmentTypesList = res.data.data
136
      } else {
137
        this.$Message.danger('部门类型列表数据获取失败!')
138
      }
139
    },
156
    // async getDepartmentTypesList (id) {
157
    //   const res = await sysapi.getDepartmentTypesList(id)
158
    //   if (res.status === 200) {
159
    //     this.departmentTypesList = res.data.data
160
    //   } else {
161
    //     this.$Message.danger('部门类型列表数据获取失败!')
162
    //   }
163
    // },
140
    // 如果部门还有下级 递归
164
    // 如果部门还有下级 递归
141
    nextDepartment (data, arr) {
165
    nextDepartment (data, arr) {
142
      if (data.length > 0) {
166
      if (data.length > 0) {
151
        })
175
        })
152
      }
176
      }
153
    },
177
    },
178
    // 获取部门列表
154
    async queryCycleChildOrg (id) {
179
    async queryCycleChildOrg (id) {
155
      const res = await sysapi.queryCycleChildOrg(id)
180
      const res = await sysapi.queryCycleChildOrg(id)
156
      if (res.status === 200) {
181
      if (res.status === 200) {
174
            }
199
            }
175
          })
200
          })
176
        })
201
        })
177
        console.log(data)
178
        this.departmentTypesList = data
202
        // eslint-disable-next-line no-return-assign
203
        this.departmentTypesList = data.filter(item => item.data = item.id)
179
      } else {
204
      } else {
180
        this.$Message.danger('部门类型列表数据获取失败!')
205
        this.$Message.danger('部门类型列表数据获取失败!')
181
      }
206
      }
182
    },
207
    },
183
    // 向服务器发送请求获取用户类型列表数据
208
    // 向服务器发送请求获取用户类型列表数据
184
    async getStaffTypesList (id) {
209
    async getStaffTypesList (id) {
185
      const res = await sysapi.getDepartmentTypesList(id)
210
      const res = await sysapi.getStaffTypesList(id)
186
      if (res.status === 200) {
211
      if (res.status === 200) {
187
        this.staffTypesList = res.data.data
212
        this.staffTypesList = res.data.data
188
      } else {
213
      } else {
192
    // 查询数据
217
    // 查询数据
193
    selectHandle () {
218
    selectHandle () {
194
      this.page = 1
219
      this.page = 1
195
      this.getDeviceData()
220
      this.getUserList()
196
    },
221
    },
197
    // 重置查询数据
222
    // 重置查询数据
198
    resetData () {
223
    resetData () {
200
      this.companyTypeId = ''
225
      this.companyTypeId = ''
201
      this.staffTypeId = ''
226
      this.staffTypeId = ''
202
      this.departmentTypeId = ''
227
      this.departmentTypeId = ''
203
      this.getDeviceData()
228
      this.userDataList = []
204
    },
229
    },
205
    // 当前页改变 触发事件
230
    // 当前页改变 触发事件
206
    onChange (page) {
231
    onChange (page) {
207
      this.page = page
232
      this.page = page
208
      this.getDeviceData()
233
      this.getUserList()
209
    },
234
    },
210
    // 当前页数据总数改变 触发事件
235
    // 当前页数据总数改变 触发事件
211
    onSizeChange (pageSize) {
236
    onSizeChange (pageSize) {
212
      this.limit = pageSize
237
      this.limit = pageSize
213
      this.getDeviceData()
238
      this.getUserList()
214
    },
239
    },
215
    // 删除数据
240
    // 删除数据
216
    deleteDeviceData (row) {
241
    deleteUserData (row) {
217
      this.$Confirm.confirm({
242
      this.$Confirm.confirm({
218
        title: '正在准备删除...',
243
        title: '正在准备删除...',
219
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
244
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
220
        ok: async () => {
245
        ok: async () => {
221
          const res = await sysapi.deleteDeviceData({ resourceToolId: row.resourceToolId })
246
          const res = await sysapi.deleteUserData({ employeeId: row.id })
222
          if (res.status === 200) {
247
          if (res.status === 200) {
223
            this.getDeviceData()
248
            this.getUserList()
224
            this.$Message.success('删除成功!')
249
            this.$Message.success('删除成功!')
225
          } else {
250
          } else {
226
            this.$Message.danger('删除失败!')
251
            this.$Message.danger('删除失败!')
234
    // 当复选框发生改变时 触发事件
259
    // 当复选框发生改变时 触发事件
235
    selectChange (data) {
260
    selectChange (data) {
236
      const arr = []
261
      const arr = []
237
      data.forEach(item => arr.push(item.resourceToolId))
238
      this.deleteResourceToolId = arr
262
      data.forEach(item => arr.push(item.id))
263
      this.deleteUserId = arr
239
    },
264
    },
240
    // 批量删除数据
265
    // 批量删除数据
241
    multDeleteDeviceData () {
242
      if (this.deleteResourceToolId.length === 0) {
266
    multDeleteUserData () {
267
      if (this.deleteUserId.length === 0) {
243
        return this.$Message.warning('请选择要删除的数据!')
268
        return this.$Message.warning('请选择要删除的数据!')
244
      }
269
      }
245
      this.$Confirm.confirm({
270
      this.$Confirm.confirm({
246
        title: '正在准备删除...',
271
        title: '正在准备删除...',
247
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
272
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
248
        ok: async () => {
273
        ok: async () => {
249
          const res = await sysapi.deleteDeviceData({ resourceToolId: this.deleteResourceToolId })
274
          const res = await sysapi.deleteUserData({ employeeId: this.deleteUserId })
250
          if (res.status === 200) {
275
          if (res.status === 200) {
251
            this.getDeviceData()
276
            this.getUserList()
252
            this.$Message.success('删除成功!')
277
            this.$Message.success('删除成功!')
253
          } else {
278
          } else {
254
            this.$Message.danger('删除失败!')
279
            this.$Message.danger('删除失败!')

+ 2 - 2
security-protection-platform/src/modules/videoSurveillance/index.vue

12
      </t-select>
12
      </t-select>
13
    </div>
13
    </div>
14
    <div class="page-bottom">
14
    <div class="page-bottom">
15
      <div v-for="(item,index) in videoList" :key="index" :value="item.id" style="width:400px;margin:24px 0px 0 24px;">
16
        <rtmp-video :list="getVideoPlayList(item)" @goDistinguishRecord="goDistinguishRecord" @videoReplay="handleReview"></rtmp-video>
15
      <div v-for="(item,index) in videoList" :key="index" :value="item.resourceToolId" style="width:400px;margin:24px 0px 0 24px;">
16
        <rtmp-video :list="getVideoPlayList(item)" @goDistinguishRecord="goDistinguishRecord(item.resourceToolId)" @videoReplay="handleReview"></rtmp-video>
17
      </div>
17
      </div>
18
    </div>
18
    </div>
19
    <t-pager :page-size="videoPageSize" :current="videoCurrent" :total="videoTotal" :sizer-range="[ 5, 10, 20, 30 ]" class="pager" show-elevator @on-change="onChangeGate"></t-pager>
19
    <t-pager :page-size="videoPageSize" :current="videoCurrent" :total="videoTotal" :sizer-range="[ 5, 10, 20, 30 ]" class="pager" show-elevator @on-change="onChangeGate"></t-pager>