import store from '@/store' import request, { tenantRequest } from '@/utils/request' import { add, update, del, confirm, messageSend, send, confirmAndSend, addTenant, addTenantOrOrg, addUser } from './base' import { AssetType, SupportedAlarmStrategies } from '@/constant' export function getRatiosWithUser () { return tenantRequest({ url: '/device/resolutionRatio', method: 'GET', params: addTenantOrOrg({}) }).then(({ data }) => { return { data: Object.keys(data).map(key => { return { value: key, label: `${key} ${data[key].slice(0, 3).map(device => device.name).join(', ')}` } }) } }) } export function getRatios () { return tenantRequest({ url: '/device/resolutionRatio', method: 'GET', params: addTenant({}) }).then(({ data }) => { return { data: Object.keys(data).map(key => { return { value: key, label: key } }) } }) } export function getTimeline (deviceId, options) { return request({ url: `/content/deviceCalender/${deviceId}`, method: 'GET', ...options }).then(({ data }) => JSON.parse(data.eventDetail) || []) } export function getTimelineByRange (deviceId, startTime, endTime, options) { return request({ url: `/content/deviceCalender/${deviceId}`, method: 'GET', params: { startTime, endTime }, ...options }).then(({ data }) => JSON.parse(data.eventDetail) || []) } export function addDevice (data) { return add({ url: '/device', method: 'POST', data }) } export function updateDevice (data) { return update({ url: '/device', method: 'PUT', data }) } function deleteDeviceById (id) { return messageSend({ url: `/device/${id}`, method: 'DELETE' }, '删除') } export function deleteDevice ({ id, name, masterId }) { if (__SUB_DEVICE__) { if (masterId) { return confirm(`删除备份设备【${name}】?`).then(() => deleteDeviceById(id)) } return send({ url: `/device/${id}/standbyDevice`, method: 'GET', params: { pageNum: 1, pageSize: 1 } }).then(({ data }) => confirm( data.length ? `删除主设备【${name}】后备份设备也将删除` : `删除设备【${name}】?` )).then(() => deleteDeviceById(id)) } return confirm(`删除设备【${name}】?`).then(() => deleteDeviceById(id)) } export function getDevices (query, options) { return getDevicesByQuery(addTenantOrOrg(query), options) } export function getDevicesByQuery (query, options) { const { tenant, org, ...params } = query if (tenant || org && org === store.getters.tenant) { return getDevicesByTenant(tenant || org, params, options) } return getDevicesByOrg(org, params, options) } export function getDevicesByTenant (tenant, query, options) { const { pageNum: pageIndex, pageSize, ...params } = query return tenantRequest({ url: '/device/tenant/page', method: 'GET', params: { tenant, pageIndex, pageSize, ...params }, ...options }) } export function getDevicesByOrg (org, query, options) { const { pageNum: pageIndex, pageSize, ...params } = query return tenantRequest({ url: '/device/relation/page', method: 'GET', params: { org, pageIndex, pageSize, ...params }, ...options }) } export function activateDevice ({ id, name }) { return confirmAndSend('激活', name, { url: '/device/batch/activate', method: 'PUT', data: [id] }) } export function deactivateDevice ({ id, name }) { return confirmAndSend('停用', name, { url: '/device/batch/deactivate', method: 'PUT', data: [id] }) } export function getDevice (id) { return request({ url: `/device/${id}`, method: 'GET' }) } export function getSubDevices (query) { const { id, pageNum: pageIndex, pageSize, ...params } = query return request({ url: `/device/${id}/standbyDevice`, method: 'GET', params: { pageIndex, pageSize, ...params } }) } export function addSubDevice ({ id }, data) { return add({ url: `/device/${id}/addStandby`, method: 'POST', data }) } export function addProductType (data) { return add({ url: '/productType', method: 'POST', data }) } export function updateProductType (data) { return update({ url: '/productType', method: 'put', data }) } export function deleteProductType ({ id, name }) { return del({ url: `/productType/${id}`, method: 'DELETE' }, name) } export function getProductTypes (query) { const { pageNum: pageIndex, pageSize, ...params } = query return tenantRequest({ url: '/productType/list', method: 'GET', params: addTenant({ pageIndex, pageSize, ...params }) }) } export function addProduct (data) { return add({ url: '/product', method: 'POST', data }) } export function updateProduct (data) { return update({ url: '/product', method: 'put', data }) } export function deleteProduct ({ id, name }) { return del({ url: `/product/${id}`, method: 'DELETE' }, name) } export function getProducts (query) { const { pageNum: pageIndex, pageSize, ...params } = query return tenantRequest({ url: '/product/list', method: 'GET', params: addTenant({ pageIndex, pageSize, ...params }) }) } export function addDeviceGroup (data) { return add({ url: '/deviceGroup', method: 'POST', data }) } export function updateDeviceGroup (data) { return update({ url: '/deviceGroup', method: 'PUT', data }) } export function deleteDeviceGroup ({ id, name }) { return del({ url: `/deviceGroup/${id}`, method: 'DELETE' }, name) } export function getDeviceGroups (query) { const { pageNum: pageIndex, pageSize, ...params } = query return tenantRequest({ url: '/deviceGroup/list', method: 'GET', params: addUser({ pageIndex, pageSize, ...params }) }) } export function getDevicesByGroup (id) { return tenantRequest({ url: `/deviceGroup/${id}/device`, method: 'GET', params: addTenantOrOrg({}) }) } export function getDeviceTree () { return tenantRequest({ url: '/deviceGroup/deviceTree', method: 'GET', params: addUser(addTenantOrOrg({})) }) } export function addDevicesToGroup (id, deviceIds) { return add({ url: `/deviceGroup/${id}/device`, method: 'POST', data: deviceIds }) } export function deleteDeviceFromGroup (id, { id: deviceId, name }) { return confirmAndSend('移除', name, { url: `/deviceGroup/${id}/device`, method: 'DELETE', params: { deviceId } }) } export function getDeviceStatistics () { return getDeviceStatisticsByPath(store.getters.org) } export function getDeviceStatisticsByPath (path) { return tenantRequest({ url: '/device/listDeviceTotal', method: 'GET', params: path === store.getters.tenant ? { tenant: path } : { org: path } }) } export function getDeviceAlarms (query) { const { pageNum: pageIndex, pageSize, ...params } = query return request({ url: '/deviceException/list', method: 'GET', params: { pageIndex, pageSize, ...params } }).then(({ data, totalCount }) => { return { data: data.map(({ id, deviceName, level, pic, picUrl, type, handle, status, happenTime, bugMessage, ...item }) => { const alarm = { id, deviceName, level, happenTime, file: pic && picUrl ? { type: AssetType.IMAGE, url: picUrl, thumb: picUrl, origin: true } : null, type: bugMessage || `预警码【${type}】`, handle: ['应用重启', '设备重启', '恢复出厂', '未干预'][handle] || '-', status: handle <= 2 && status <= 2 ? { type: ['primary', 'success', 'danger'][status], label: ['处理中', '成功', '失败'][status] } : { label: '-' } } SupportedAlarmStrategies.forEach(({ key }) => { alarm[key] = getTag(item[key]) }) return alarm }), totalCount } }) } function getTag (value) { switch (value) { case 0: return { type: 'danger', label: '否' } case 1: return { type: 'success', label: '是' } default: return { label: '-' } } } export function getTasks (query) { const { pageNum: pageIndex, pageSize, ...params } = query return request({ url: '/device/functionTask', method: 'GET', params: { pageIndex, pageSize, ...params } }) } export function addTask (task) { return add({ url: '/device/functionTask', method: 'POST', data: task }) } export function updateTask (task) { return update({ url: '/device/functionTask', method: 'PUT', data: task }) } export function deleteTask ({ taskId }) { return del({ url: `/device/functionTask/${taskId}`, method: 'DELETE' }) } export function activateTask ({ taskId }) { return confirmAndSend('启用', null, { url: '/device/functionTask/resume', method: 'PUT', data: [taskId] }) } export function deactivateTask ({ taskId }) { return confirmAndSend('停用', null, { url: '/device/functionTask/pause', method: 'PUT', data: [taskId] }) } export function getShadow (deviceId) { return request({ url: `/device/shadow/${deviceId}`, method: 'GET' }) } export function getRecordConfig (deviceId, config) { return request({ url: '/deviceStream/config', method: 'GET', params: { deviceId }, ...config }) } export function addRecordConfig (data, config) { return request({ url: '/deviceStream/config', method: 'POST', data, ...config }) } export function updateRecordConfig (data, config) { return request({ url: '/deviceStream/config', method: 'PUT', data, ...config }) } export function authCode (stream) { return request({ url: `/deviceStream/${stream}/authCode`, method: 'GET' }) }