Explorar el Código

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

liuwenxun %!s(int64=4) %!d(string=hace) años
padre
commit
6b710a982f

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

@ -81,7 +81,17 @@ const api = {
81 81
  },
82 82
  // 获取ai任务列表
83 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 97
  getDeviceData (data) {
@ -166,8 +176,8 @@ const api = {
166 176
    }
167 177
  },
168 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 182
  getOneMonitorScene(monitorSceneId) {
173 183
    return $default.get(`/sp/monitorSceneManagement/queryOneMonitorScene?monitorSceneId=${monitorSceneId}`)

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

@ -1,6 +1,12 @@
1 1
import http from '@/http'
2 2
import { keysMapping, keysMappingReverse } from '@/utils/keysMapping'
3 3
const { $default } = http
4
const mapping = {
5
  userId: 'code',
6
  departmentName: 'orgName',
7
  post: 'employeePositionZh',
8
  telephone: 'mainWirelessCall'
9
}
4 10
const api = {
5 11
  // 获取公司类型列表
6 12
  getCompanyTypesList () {
@ -14,15 +20,35 @@ const api = {
14 20
      return resp
15 21
    }).catch((err) => { return err })
16 22
  },
23
  // 获取部门类型列表
17 24
  queryCycleChildOrg (id) {
18 25
    return $default.get(`/sp/employeeManagement/queryCycleChildOrg?orgId=${id}`).then(resp => {
19 26
      const data = resp.data.data
20
      console.log(data)
21 27
      if (!Array.isArray(data)) return resp
22 28
      // 将平铺的数组变为树形数组
23 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 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 54
function nest (items, code = '-1', link = 'parentCode') {

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

@ -340,10 +340,12 @@ export default {
340 340
    datadragEnd(evt) {
341 341
      if (evt.oldIndex !== evt.newIndex) {
342 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 350
        sysapi.moveTerminalRelIndex(params).then((resp) => {})
349 351
          .catch((error) => {

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

@ -0,0 +1,115 @@
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,7 +29,7 @@
29 29
        <t-button color="primary" @click="showAddDeviceModal">
30 30
          <t-icon icon="plus-circle-outline" size="16"></t-icon>新增
31 31
        </t-button>
32
        <t-button @click="multDeleteDeviceData">
32
        <t-button @click="multDeleteUserData">
33 33
          <t-icon icon="trash" size="16"></t-icon>删除
34 34
        </t-button>
35 35
      </div>
@ -42,17 +42,18 @@
42 42
          <t-table-column prop="departmentName" label="部门" width="150"></t-table-column>
43 43
          <t-table-column prop="post" label="职务" width="100"></t-table-column>
44 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 46
          <t-table-column prop="status" label="人脸状态" width="120">
47 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 51
            </template>
51 52
          </t-table-column>
52 53
          <t-table-column label="操作">
53 54
            <template v-slot="{row}">
54 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 57
              <a href="javascript:;" style="color:#0089D4;" @click="deleteDeviceData(row)">人脸审核</a>
57 58
            </template>
58 59
          </t-table-column>
@ -63,13 +64,17 @@
63 64
        </t-pager>
64 65
      </div>
65 66
    </t-card>
67
    <add-user-modal :visible="addDeviceModal"></add-user-modal>
66 68
  </div>
67 69
</template>
68 70
69 71
<script>
70 72
import sysapi from '@/api/usermana'
73
import addUserModal from './components/modal/addUser'
71 74
export default {
72
75
  components: {
76
    addUserModal
77
  },
73 78
  data () {
74 79
    return {
75 80
      // 公司类型id
@ -91,9 +96,9 @@ export default {
91 96
      // 当前页的数据个数
92 97
      limit: 10,
93 98
      // 数据总数
94
      total: 100,
95
      // 批量删除的设备id
96
      deleteResourceToolId: [],
99
      total: 0,
100
      // 批量删除的用户id
101
      deleteUserId: [],
97 102
      // 当前设备数据
98 103
      currentDeviceData: {},
99 104
      // 显示/隐藏新增设备对话框
@ -103,11 +108,20 @@ export default {
103 108
  },
104 109
  watch: {
105 110
    companyTypeId (val) {
106
      // this.getDepartmentTypesList(val)
111
      // 重置部门回显
112
      this.departmentTypeId = ''
113
      // 查询部门列表
107 114
      this.queryCycleChildOrg(val)
108 115
    },
109 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 127
  created () {
@ -115,9 +129,19 @@ export default {
115 129
    this.getCompanyTypesList()
116 130
  },
117 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 147
    async getCompanyTypesList () {
@ -129,14 +153,14 @@ export default {
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 165
    nextDepartment (data, arr) {
142 166
      if (data.length > 0) {
@ -151,6 +175,7 @@ export default {
151 175
        })
152 176
      }
153 177
    },
178
    // 获取部门列表
154 179
    async queryCycleChildOrg (id) {
155 180
      const res = await sysapi.queryCycleChildOrg(id)
156 181
      if (res.status === 200) {
@ -174,15 +199,15 @@ export default {
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 204
      } else {
180 205
        this.$Message.danger('部门类型列表数据获取失败!')
181 206
      }
182 207
    },
183 208
    // 向服务器发送请求获取用户类型列表数据
184 209
    async getStaffTypesList (id) {
185
      const res = await sysapi.getDepartmentTypesList(id)
210
      const res = await sysapi.getStaffTypesList(id)
186 211
      if (res.status === 200) {
187 212
        this.staffTypesList = res.data.data
188 213
      } else {
@ -192,7 +217,7 @@ export default {
192 217
    // 查询数据
193 218
    selectHandle () {
194 219
      this.page = 1
195
      this.getDeviceData()
220
      this.getUserList()
196 221
    },
197 222
    // 重置查询数据
198 223
    resetData () {
@ -200,27 +225,27 @@ export default {
200 225
      this.companyTypeId = ''
201 226
      this.staffTypeId = ''
202 227
      this.departmentTypeId = ''
203
      this.getDeviceData()
228
      this.userDataList = []
204 229
    },
205 230
    // 当前页改变 触发事件
206 231
    onChange (page) {
207 232
      this.page = page
208
      this.getDeviceData()
233
      this.getUserList()
209 234
    },
210 235
    // 当前页数据总数改变 触发事件
211 236
    onSizeChange (pageSize) {
212 237
      this.limit = pageSize
213
      this.getDeviceData()
238
      this.getUserList()
214 239
    },
215 240
    // 删除数据
216
    deleteDeviceData (row) {
241
    deleteUserData (row) {
217 242
      this.$Confirm.confirm({
218 243
        title: '正在准备删除...',
219 244
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
220 245
        ok: async () => {
221
          const res = await sysapi.deleteDeviceData({ resourceToolId: row.resourceToolId })
246
          const res = await sysapi.deleteUserData({ employeeId: row.id })
222 247
          if (res.status === 200) {
223
            this.getDeviceData()
248
            this.getUserList()
224 249
            this.$Message.success('删除成功!')
225 250
          } else {
226 251
            this.$Message.danger('删除失败!')
@ -234,21 +259,21 @@ export default {
234 259
    // 当复选框发生改变时 触发事件
235 260
    selectChange (data) {
236 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 268
        return this.$Message.warning('请选择要删除的数据!')
244 269
      }
245 270
      this.$Confirm.confirm({
246 271
        title: '正在准备删除...',
247 272
        content: '<p>确定要删除?</p><p>删除后将无法还原!</p>',
248 273
        ok: async () => {
249
          const res = await sysapi.deleteDeviceData({ resourceToolId: this.deleteResourceToolId })
274
          const res = await sysapi.deleteUserData({ employeeId: this.deleteUserId })
250 275
          if (res.status === 200) {
251
            this.getDeviceData()
276
            this.getUserList()
252 277
            this.$Message.success('删除成功!')
253 278
          } else {
254 279
            this.$Message.danger('删除失败!')

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

@ -12,8 +12,8 @@
12 12
      </t-select>
13 13
    </div>
14 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 17
      </div>
18 18
    </div>
19 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>