multiple-police-situations/src/views/page/system.vue

1258 lines
38 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div class="cont">
<el-tabs v-model="activeName" class="demo-tabs" @tab-change="tabChange">
<el-tab-pane label="布控对象" name="second">
<a-button type="primary" style="margin-left: 20px" @click="sendBk()">新增对象</a-button>
<a-button type="primary" style="margin-left: 20px" @click="openGroupDialog()">分组管理</a-button>
<div style="padding: 10px; height: calc(100% - 85px); overflow: auto">
<el-table :data="tableData2" border style="width: 100%">
<el-table-column type="index" width="60" label="序号" align="center" :index="indexMethod1" />
<el-table-column label="布控对象属性类型" align="center">
<template #default="scope">
{{ scope.row.targetType == 'face' ? '人脸' : '车牌号' }}
</template>
</el-table-column>
<el-table-column prop="targetName" label="布控对象名称" align="center" />
<el-table-column prop="targetValue" label="布控对象属性值" align="center" show-overflow-tooltip />
<el-table-column prop="groupName" label="布控对象分组" align="center" />
<!-- <el-table-column prop="groupLevel" label="分组等级" align="center" /> -->
<el-table-column prop="targetLevel" label="布控对象等级" align="center" />
<el-table-column prop="imageData" label="布控对象数据" align="center" />
<el-table-column prop="controlstatus" label="布控状态" align="center" />
<el-table-column label="布控对象照片" align="center">
<template #default="scope">
<!-- <a-image :width="100" :height="100" :src="scope.row.imageUrl" /> -->
<el-button @click="handleClick(scope.row.imageUrl)" type="primary" primary size="small">查看</el-button>
</template>
</el-table-column>
<el-table-column align="center">
<template #default="scope">
<a-button type="primary" @click="handleTableChange(scope.row)" size="small">修改</a-button>
</template>
</el-table-column>
<el-table-column align="center">
<template #default="scope">
<el-popconfirm @confirm="handleTableDelete(scope.row.targetId)" title="确定要删除该布控对象么?">
<template #reference>
<a-button type="primary" danger size="small">删除</a-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination style="position: absolute; right: 60px" @current-change="handleCurrentChange2" :page-size="15" layout="total, prev, pager, next" :total="total2"> </el-pagination>
</div>
</el-tab-pane>
<el-tab-pane label="布控任务" name="first">
<a-button type="primary" style="margin-left: 20px" @click="sendbkrw">申请布控任务</a-button>
<div style="padding: 10px; height: calc(100% - 52px); overflow: auto">
<el-table :data="tableData" border style="width: 100%">
<el-table-column type="index" width="60" label="序号" align="center" :index="indexMethod2" />
<el-table-column prop="targetValue" label="布控对象号码" align="center" show-overflow-tooltip />
<el-table-column label="布控对象类型" align="center">
<template #default="scope">
{{ scope.row.targetType == 'face' ? '人脸' : '车牌号' }}
</template>
</el-table-column>
<el-table-column prop="searchCity" label="比对城市" align="center" />
<el-table-column prop="searchDistrict" label="比对区县" align="center" />
<el-table-column prop="level" label="任务等级" align="center" />
<el-table-column prop="alarmType" label="预警类型" align="center" />
<el-table-column prop="state" label="状态" align="center" />
<el-table-column prop="timestamp" label="申请时间" align="center" show-overflow-tooltip />
<el-table-column prop="startTime" label="开始时间" align="center" show-overflow-tooltip />
<el-table-column prop="endTime" label="结束时间" align="center" show-overflow-tooltip />
<el-table-column label="操作" align="center">
<template #default="scope">
<!-- <a-button type="link" @click="chekong(scope.row)">撤控</a-button> -->
<a-button style="margin-right: 10px" type="primary" @click="xkong(scope.row)" size="small">续控</a-button>
<el-popconfirm title="确定撤控吗?" @confirm="chekong(scope.row)">
<template #reference>
<!-- <el-button>撤控</el-button> -->
<a-button type="primary" danger size="small">撤控</a-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</el-table>
<el-pagination style="position: absolute; right: 60px" @current-change="handleCurrentChange1" :page-size="15" layout="total, prev, pager, next" :total="total1"> </el-pagination>
</div>
</el-tab-pane>
</el-tabs>
<el-dialog title="分组管理" v-model="groupVisible" width="50%" :before-close="handleClose">
<a-button type="primary" style="margin-left: 20px; margin-bottom: 10px" @click="addGroup()">新增分组</a-button>
<div style="overflow-y: auto; height: 500px">
<el-table :data="tableGroupData" border style="width: 100%">
<el-table-column class="el_table_column" prop="groupName" label="分组名称" align="center" />
<el-table-column prop="groupLevel" label="分组等级" align="center" />
<el-table-column prop="comment" label="分组说明" align="center" />
<el-table-column align="center">
<template #default="scope">
<a-button type="primary" @click="handleTableGroupChange(scope.row)" size="small">修改分组</a-button>
<el-popconfirm @confirm="handleTableGroupDelete(scope.row.groupId)" title="确定要删除该分组么?">
<template #reference>
<a-button style="margin-left: 10px" type="primary" danger size="small">删除分组</a-button>
</template>
</el-popconfirm>
<!-- <a-button style="margin-left: 10px" type="primary" danger @click="handleTableGroupChange(scope.row)" size="small">删除分组</a-button> -->
</template>
</el-table-column>
</el-table>
</div>
</el-dialog>
<!-- 新增分组弹窗 -->
<el-dialog :title="dialogTitle" v-model="addGroupVisible" width="40%" :before-close="closeAddGroup">
<el-form ref="ruleFormRef_Group" :rules="rulesGroup" :model="formGroup" label-width="120px" style="max-height: 500px; overflow-y: scroll; padding: 10px">
<el-form-item label="分组名称" prop="groupName">
<el-input required v-model="formGroup.groupName"></el-input>
</el-form-item>
<el-form-item label="分组等级" prop="groupLevel">
<el-input required v-model="formGroup.groupLevel"></el-input>
</el-form-item>
<el-form-item label="分组说明">
<el-input v-model="formGroup.comment"></el-input>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="addGroupVisible = false" style="color: #0cd6fe">取 消</el-button>
<el-button type="primary" @click="addGroupFn(ruleFormRef_Group)" style="color: #0cd6fe">确 定</el-button>
</span>
</template>
</el-dialog>
<el-dialog opened="openDialog" :title="dialogTargrtTitle" v-model="dialogVisible" width="40%" :before-close="handleClose">
<!-- 不能加这个ref否则就不是响应式 ref="form" -->
<el-form ref="ruleFormRef" :rules="rules" :model="form" label-width="120px" style="max-height: 500px; overflow-y: scroll; padding: 10px">
<el-form-item label="选择地区">
<el-cascader placeholder="请选择地区" size="default" :options="cascaderOptions" v-model="selectedOptions" @change="handleChange"> </el-cascader>
</el-form-item>
<el-form-item label="布控对象名称" prop="targetName">
<el-input required v-model="form.targetName"></el-input>
</el-form-item>
<el-form-item label="布控对象类型">
<el-select v-model="form.targetType" placeholder="请选择类型" style="width: 100%">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="布控对象分组">
<el-select v-model="form.groupName" placeholder="请选择分组" style="width: 100%" @change="selectChange">
<el-option v-for="item in tableGroupData" :key="item.groupId" :label="item.groupName" :value="item.groupId"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="布控对象属性值">
<el-input v-model="form.targetValue"></el-input>
</el-form-item>
<el-form-item label="布控对象等级">
<el-input v-model="form.targetLevel"></el-input>
</el-form-item>
<el-form-item label="布控对象数据">
<el-input v-model="form.imageData"></el-input>
</el-form-item>
<el-form-item label="人脸">
<el-upload
ref="uploadrefss"
method="put"
:before-upload="beforeAvatarUpload"
:on-error="handleError"
:on-preview="handlePictureCardPreview"
:on-remove="handleRemove"
on-success="handlePictureCardSuccess"
action="#"
list-type="picture-card"
:http-request="handleUpload"
:file-list="fileList"
>
<el-icon>
<plus />
</el-icon>
</el-upload>
<!-- <el-progress :percentage="uploadPercentage" /> -->
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisible = false" style="color: #0cd6fe">取 消</el-button>
<el-button type="primary" @click="RTCSender(ruleFormRef)" style="color: #0cd6fe">确 定</el-button>
</span>
</template>
</el-dialog>
<el-dialog title="申请布控任务" v-model="dialogVisiblea1" width="450" :before-close="handleClose">
<el-form :model="form2" label-width="120px">
<el-form-item label="布控对象">
<!-- {{tableData2}} -->
<el-select v-model="form2.target" :disabled="isxKOng" placeholder="请选择" style="width: 100%" @change="setyd">
<el-option v-for="item in tableData2" :key="item.targetValue + '&' + item.targetId" :label="item.targetName" :value="item.targetValue + '&' + item.targetId"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="布控对象类型">
<el-select v-model="form2.targetType" :disabled="isxKOng" placeholder="请选择" style="width: 100%">
<el-option v-for="item in options" :key="item.value" :label="item.label" :value="item.value"> </el-option>
</el-select>
</el-form-item>
<el-form-item label="布控地区">
<el-cascader placeholder="请选择地区" :disabled="isxKOng" size="default" :options="cascaderOptions1" v-model="selectedOptions1" @change="handleChange1" style="width: 100%"> </el-cascader>
</el-form-item>
<el-form-item label="任务等级">
<el-input v-model="form2.level" :disabled="isxKOng"></el-input>
</el-form-item>
<el-form-item label="预警类型">
<el-input v-model="form2.alarmType" :disabled="isxKOng"></el-input>
</el-form-item>
<el-form-item label="开始时间">
<el-date-picker v-model="form2.startTime" type="datetime" placeholder="选择日期时间" style="width: 100%" value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
<el-form-item label="结束时间">
<el-date-picker v-model="form2.endTime" type="datetime" placeholder="选择日期时间" style="width: 100%" value-format="YYYY-MM-DD HH:mm:ss" />
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="dialogVisiblea1 = false" style="color: #0cd6fe">取 消</el-button>
<el-button v-if="isxKOng" type="primary" @click="sendxk" style="color: #0cd6fe">确 定</el-button>
<el-button v-else type="primary" @click="RTCRtpSender" style="color: #0cd6fe">确 定</el-button>
</span>
</template>
</el-dialog>
<el-dialog title="布控对象照片" v-model="dialogVisiblea" width="30%" :before-close="handleClose1">
<!-- <img style="width: 100%; height: 100%" :src="opkierimg" alt="" /> -->
<div class="dialog-img-container">
<img :src="opkierimg" alt="" />
</div>
</el-dialog>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted, watch } from 'vue'
import api from '@/axios'
import axios from 'axios'
import { ElMessage } from 'element-plus'
import type { UploadProps, FormRules, FormInstance } from 'element-plus'
const ruleFormRef_Group = ref<FormInstance>()
const ruleFormRef = ref<FormInstance>()
const uploadUrl = ref('')
const isUpdate = ref(false)
const isTargetUpdate = ref(false)
const cascaderOptions = ref([])
const cascaderOptions1 = ref([])
const selectedOptions = ref([])
const selectedOptions1 = ref([])
let uploadrefss = ref()
const uploadPercentage = ref(0)
const fileList = ref([])
const dialogVisiblea = ref(false)
const dialogVisiblea1 = ref(false)
const isxKOng = ref(false)
const opkierimg = ref('')
const activeName = ref('second')
const dialogVisible = ref(false)
const groupVisible = ref(false)
const addGroupVisible = ref(false)
const value1 = ref('')
const tableData = ref<any[]>([])
const tableData2 = ref<any[]>([])
const tableGroupData = ref<any[]>([])
const total1 = ref()
const pageNum2 = ref(1)
const value2 = ref('')
const currentPageIndex = ref(0)
const tabChange = (e: any) => {
console.log('🚀 ~ tabChange ~ e:', e)
currentPageIndex.value = 0
}
const total2 = ref()
const pageNum1 = ref(1)
const dialogTitle = ref('新增分组')
const dialogTargrtTitle = ref('新增对象')
interface anyObject {
[key: string]: string
}
interface formGroupFace {
groupName: string
groupId: string
groupLevel: string
parentId: string
comment: string
}
let formGroup = reactive<formGroupFace>({
groupName: '',
groupId: '',
groupLevel: '',
parentId: '',
comment: '',
})
const form2 = reactive<anyObject>({
target: '',
targetType: '',
searchCity: '',
searchDistrict: '',
level: '',
alarmType: '',
startTime: '',
endTime: '',
})
interface formFace {
targetType: string
targetName: string
targetLevel: string
imageUrl: string
imageData: string
targetId: string
targetValue: string
groupId: string
groupName: string
controlStatus: string
district: string
city: string
town: string
imageName: string
path: string
}
let form = reactive<formFace>({
targetType: '', //类型
targetName: '', //对象名字
targetLevel: '', //布控对象等级
imageUrl: '', //人脸图片地址
imageData: '', //布控对象数据
targetId: '',
targetValue: '', //属性值
groupId: '',
groupName: '',
controlStatus: '',
district: '',
city: '',
town: '',
imageName: '',
path: '',
})
const resetData = () => {
const keys = Object.keys(form)
let obj: { [name: string]: string } = {}
keys.forEach((item) => {
obj[item] = ''
})
Object.assign(form, obj)
}
const options = reactive([
{
value: 'face',
label: '人脸',
},
{
value: 'vehicle',
label: '车牌',
},
])
watch(addGroupVisible, (newValue, oldValue) => {
console.log(`addGroupVisible ${oldValue} to ${newValue}`)
if (!newValue) {
isUpdate.value = false
}
})
const validateTargetName = (rule: any, value: any, callback: any) => {
console.log('🚀 ~ validateTargetName ~ value:', value)
if (value.trim().length === 0) {
callback(new Error('请输入布控对象名称'))
} else {
callback()
}
}
const validateGroupName = (rule: any, value: any, callback: any) => {
if (value.trim().length === 0) {
callback(new Error('请输入分组名称'))
} else {
callback()
}
}
const validateGroupLevel = (rule: any, value: any, callback: any) => {
if (value.trim().length === 0) {
callback(new Error('请输入分组等级'))
} else {
callback()
}
}
const validateTown = (rule: any, value: any, callback: any) => {
if (value.trim().length === 0) {
callback(new Error('请输入街道'))
} else {
callback()
}
}
const validateTargetType = (rule: any, value: any, callback: any) => {
if (value.trim().length === 0) {
callback(new Error('请选择布控对象类型'))
} else {
callback()
}
}
const rules = reactive<FormRules<typeof form>>({
targetName: [{ validator: validateTargetName, trigger: 'blur' }],
// town: [{ validator: validateTown, trigger: 'blur' }],
// targetType: [{ validator: validateTargetType, trigger: 'change' }],
})
const rulesGroup = reactive<FormRules<typeof formGroup>>({
groupName: [{ validator: validateGroupName, trigger: 'blur' }],
groupLevel: [{ validator: validateGroupLevel, trigger: 'blur' }],
})
const addGroupFn = (formEl: FormInstance | undefined) => {
if (!formEl) return
formEl.validate((valid) => {
if (valid) {
console.log('submit!')
if (isUpdate.value) {
api.post('/multialarm/ai/target/group/update', { ...formGroup }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '修改成功',
type: 'success',
})
getGroupList()
addGroupVisible.value = false
} else {
ElMessage.error(`${res.msg}`)
}
})
} else {
api.post('/multialarm/ai/target/group/add', { ...formGroup }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '新增成功',
type: 'success',
})
getGroupList()
addGroupVisible.value = false
} else {
ElMessage.error(`${res.msg}`)
}
})
}
} else {
console.log('error submit!')
}
})
}
//取消上传,清空上传文件
function doClear() {
uploadrefss.value.clearFiles()
}
onMounted(() => {
seachA()
seachB()
getGroupList()
gettree()
})
const gettree = () => {
api.post('/common/client/user/org/tree').then((res) => {
console.log('🚀 tree:', res)
if (res.code == 0) {
const rawData = res.data as any[]
interface DataItem {
label: string
title: string
children?: DataItem[]
}
function convertDataToOptions(data: DataItem[]): { label: string; value: string; children: any[] }[] {
return data.map((item) => ({
label: item.title,
value: item.title,
children: item.children ? convertDataToOptions(item.children) : [],
}))
}
function filterCascadeData(data: any, filterFn: any) {
return data.filter((item: any) => {
;(item.label = item.title),
(item.value = item.title),
// 递归过滤子项
(item.children = item.children ? filterCascadeData(item.children, filterFn) : [])
// 如果当前项或子项通过过滤条件,则保留
return filterFn(item) || item.children.length > 0
})
}
const filterFn = (item: any) => item.level == '1' || item.level == '2'
const options = convertDataToOptions(rawData)
const options1 = filterCascadeData(res.data, filterFn)
console.log('options', options, options1)
cascaderOptions.value = options
cascaderOptions1.value = options1
} else {
}
})
}
const setyd = (e: any) => {}
const chekong = (e: any) => {
console.log('e', e.taskId)
// return ;
api.post('multialarm/ai/task/delete', { taskId: e.taskId }).then((res) => {
if (res.code == 0) {
// console.log('新增', res)
ElMessage.success({
message: '撤控成功',
type: 'success',
})
dialogVisiblea1.value = false
api
.post('/multialarm/ai/task/getlist', {
pagesize: 15,
pageindex: 0,
})
.then((res) => {
if (res.code == 0) {
tableData.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
} else {
ElMessage.error('请求失败')
}
})
}
const beforeAvatarUpload: UploadProps['beforeUpload'] = (rawFile) => {
if (form.targetName.trim().length === 0) {
ElMessage.error('上传图片必须输入布控对象名称')
return false
}
console.log(11111)
}
const handleUpload = async ({ file, onProgress, onSuccess, onError }: { file: File; onProgress: Function; onSuccess: Function; onError: Function }) => {
console.log('🚀 ~ handleUpload ~ file:', file)
form.imageName = file.name
try {
if (form.targetName.trim().length === 0) {
ElMessage.error('上传图片必须输入布控对象名称')
return
}
console.log(22222)
// 1. 获取上传地址
const uploadUrlResponse = await api.post('/multialarm/ai/target/image/geturl', { ...form })
const uploadUrl = uploadUrlResponse.data as string
// 2. 创建 FormData 对象并添加文件
const formData = new FormData()
formData.append('file', file)
// 3. 使用 axios 上传文件
const response = await axios.put(uploadUrl, file, {
})
console.log('🚀 ~ handleUpload ~ response:', response)
if (response.status === 200) {
console.log('form.path,form.imageUrl', form.path, form.imageUrl)
if (form.path.length > 0) {
let lastSlashIndex = form.path.lastIndexOf('/')
if (lastSlashIndex !== -1) {
// 获取斜杠之前的所有字符串
let prefix = form.path.substring(0, lastSlashIndex)
console.log('获取斜杠之前的所有字符串', prefix)
let newPath = `${prefix}/${file.name}`
form.path = newPath
} else {
console.log('未检索到/')
}
}
if (form.imageUrl.length > 0) {
let lastSlashIndex = form.imageUrl.lastIndexOf('/')
if (lastSlashIndex !== -1) {
// 获取斜杠之前的所有字符串
let prefix = form.imageUrl.substring(0, lastSlashIndex)
console.log('获取斜杠之前的所有字符串', prefix)
let newPath = `${prefix}/${file.name}`
form.imageUrl = newPath
} else {
console.log('未检索到/')
}
}
ElMessage.success({
message: '上传成功',
type: 'success',
})
// 添加文件到 fileList 以便预览
fileList.value.push({
name: file.name,
url: URL.createObjectURL(file),
})
console.log('最后检查form', form)
// if (onSuccess) {
// onSuccess(response.data) // 上传成功时的回调
// }
} else {
ElMessage.error('上传失败')
}
} catch (error) {
// 上传失败后的回调
// if (onError) {
// onError(error)
// }
}
}
const handleChange = (value: string[]) => {
console.log('🚀 ~ handleChange ~ value:', value)
if (value[0]) {
form.city = value[0]
} else {
form.city = ''
}
if (value[1]) {
form.district = value[1]
} else {
form.district = ''
}
if (value[2]) {
form.town = value[2]
} else {
form.town = ''
}
// console.log('🚀 ~ handleChange ~ form:', form)
}
const selectChange = (value: any) => {
console.log('🚀 ~ selectChange ~ value:', value)
form.groupId = value
}
const RTCSender = (formEl: FormInstance | undefined) => {
if (selectedOptions.value.length === 0) {
ElMessage.error('请选择地区')
return
}
if (form.targetType.length === 0) {
ElMessage.error('请选择布控对象类型')
return
}
if (!formEl) return
formEl.validate((valid) => {
if (valid) {
console.log('submit!')
if (isTargetUpdate.value) {
console.log(form.imageName)
api.post('/multialarm/ai/target/update', { ...form }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '修改成功',
type: 'success',
})
dialogVisible.value = false
seachB() //刷新总条数和列表
Object.keys(form).forEach((key) => (form[key as keyof formFace] = ''))
doClear()
selectedOptions.value = []
} else {
ElMessage.error(res.msg)
}
})
} else {
api.post('/multialarm/ai/target/add', { ...form }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '新增成功',
type: 'success',
})
dialogVisible.value = false
seachB() //刷新总条数和列表
Object.keys(form).forEach((key) => (form[key as keyof formFace] = ''))
doClear()
selectedOptions.value = []
} else {
ElMessage.error(res.msg)
}
})
}
} else {
console.log('error submit!')
}
})
}
const handleTableGroupChange = (row: any) => {
dialogTitle.value = '修改分组'
console.log('🚀 ~ handleTableGroupChange ~ row:', row)
isUpdate.value = true
addGroupVisible.value = true
const clonedData = JSON.parse(JSON.stringify(row))
formGroup = reactive(clonedData)
}
const sendBk = () => {
isTargetUpdate.value = false
selectedOptions.value = []
fileList.value = []
dialogTargrtTitle.value = '新增对象'
// Object.keys(form).forEach((key) => (form[key] = ''))
resetData()
dialogVisible.value = true
}
const handleTableChange = (row: any) => {
fileList.value = []
isTargetUpdate.value = true
console.log('🚀 ~ handleTableChange ~ row:', row)
dialogTargrtTitle.value = '修改布控对象'
dialogVisible.value = true
// selectedOptions.value.push(row.city, row.district, row.town)
if (row.city.length > 0 && row.district.length > 0 && row.town.length > 0) {
selectedOptions.value = [row.city, row.district, row.town]
}
if (row.city.length > 0 && row.district.length > 0 && row.town.length === 0) {
selectedOptions.value = [row.city, row.district]
}
if (row.city.length > 0 && row.district.length === 0 && row.town.length === 0) {
selectedOptions.value = [row.city]
}
const clonedData = JSON.parse(JSON.stringify(row))
form = reactive(clonedData)
fileList.value.push({
url: form.imageUrl,
})
}
const handleTableGroupDelete = (id: string) => {
console.log('🚀 ~ handleTableGroupDelete ~ id:', id)
api.post('/multialarm/ai/target/group/delete', { groupId: id }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '删除成功',
type: 'success',
})
getGroupList()
} else {
ElMessage.error(res.msg)
}
})
}
const handleTableDelete = (id: string) => {
console.log('🚀 ~ handleTableDelete ~ id:', id)
api.post('/multialarm/ai/target/delete', { targetId: id }).then((res) => {
if (res.code == 0) {
ElMessage.success({
message: '删除成功',
type: 'success',
})
seachB()
} else {
ElMessage.error(res.msg)
}
})
}
const openDialog = (e: any) => {
console.log('🚀 ~ openDialog ~ e:', e)
}
//续控
const taskId = ref('')
const xkong = (row: any) => {
if (row.searchCity != '' && row.searchDistrict != '') {
selectedOptions1.value = [row.searchCity, row.searchDistrict]
}
console.log('row', row, tableData2)
taskId.value = row.taskId
dialogVisiblea1.value = true
isxKOng.value = true
form2.target = row.targetValue + '&' + row.targetId
form2.targetType = row.targetType
form2.searchCity = row.searchCity
form2.searchDistrict = row.searchDistrict
form2.level = row.level
form2.alarmType = row.alarmType
form2.startTime = row.startTime
form2.endTime = row.endTime
}
//提交续控
const sendxk = () => {
let data = {
targetId: '',
targetValue: '',
targetType: form2.targetType,
searchCity: form2.searchCity,
searchDistrict: form2.searchDistrict,
level: form2.level,
alarmType: form2.alarmType,
startTime: form2.startTime,
endTime: form2.endTime,
taskId: taskId.value,
}
if (form2.target != '') {
data.targetId = form2.target.split('&')[1]
data.targetValue = form2.target.split('&')[0]
}
api.post('multialarm/ai/task/update', data).then((res) => {
if (res.code == 0) {
// console.log('新增', res)
ElMessage.success({
message: '续控成功',
type: 'success',
})
dialogVisiblea1.value = false
api
.post('/multialarm/ai/task/getlist', {
pagesize: 15,
pageindex: 0,
})
.then((res) => {
if (res.code == 0) {
tableData.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
} else {
ElMessage.error('请求失败')
}
})
}
const handleChange1 = (value: string[]) => {
console.log('🚀 ~ handleChange1 ~ value:', value)
if (value[0]) {
form2.searchCity = value[0]
} else {
form2.searchCity = ''
}
if (value[1]) {
form2.searchDistrict = value[1]
} else {
form2.searchDistrict = ''
}
if (value[2]) {
form2.searchTown = value[2]
} else {
form2.searchTown = ''
}
}
const RTCRtpSender = () => {
console.log('form2', form2)
if (form2.target === '') {
ElMessage.error('请选择布控对象')
return
}
if (form2.targetType === '') {
ElMessage.error('请选择布控对象类型')
return
}
if (form2.searchCity === '') {
ElMessage.error('请选择布控城市')
return
}
if (form2.searchDistrict === '') {
ElMessage.error('请选择布控区县')
return
}
if (form2.startTime === '') {
ElMessage.error('请选择开始时间')
return
}
if (form2.endTime === '') {
ElMessage.error('请选择结束时间')
return
}
let data = {
targetId: '',
targetValue: '',
targetType: form2.targetType,
searchCity: form2.searchCity,
searchDistrict: form2.searchDistrict,
level: form2.level,
alarmType: form2.alarmType,
startTime: form2.startTime,
endTime: form2.endTime,
}
if (form2.target != '') {
data.targetId = form2.target.split('&')[1]
data.targetValue = form2.target.split('&')[0]
}
api.post('/multialarm/ai/task/add', data).then((res) => {
if (res.code == 0) {
// console.log('新增', res)
ElMessage.success({
message: '新增成功',
type: 'success',
})
dialogVisiblea1.value = false
api
.post('/multialarm/ai/task/getlist', {
pagesize: 15,
pageindex: 0,
})
.then((res) => {
if (res.code == 0) {
tableData.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
} else {
ElMessage.error('请求失败')
}
})
}
const sendbkrw = () => {
selectedOptions1.value = []
isxKOng.value = false
form2.target = ''
form2.targetType = ''
form2.searchCity = ''
form2.searchDistrict = ''
form2.level = ''
form2.alarmType = ''
form2.startTime = ''
form2.endTime = ''
dialogVisiblea1.value = true
}
const handleClick = (data: any) => {
opkierimg.value = data
dialogVisiblea.value = true
}
const handleClose1 = () => {
dialogVisiblea.value = false
}
const handlePictureCardPreview = (file: any) => {
console.log('🚀 ~ handlePictureCardPreview ~ file:', file)
}
const handleError = (response: any) => {
console.log('🚀 ~ handleError ~ response:', response)
return ElMessage({
message: '文件上传失败',
type: 'error',
offset: 60,
})
}
const handleRemove = () => {
console.log('🚀 ~ handleRemove ~ handleRemove:')
}
const handleClose = () => {
dialogVisible.value = false
dialogVisiblea1.value = false
groupVisible.value = false
}
//布控任务
const seachA = () => {
api.post('/multialarm/ai/task/count', {}).then((res) => {
if (res.code == 0) {
total1.value = res.data as { count: number }
}
})
api
.post('/multialarm/ai/task/getlist', {
pagesize: 15,
pageindex: 0,
})
.then((res) => {
if (res.code == 0) {
tableData.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
}
const handleCurrentChange1 = (data: any) => {
console.log('🚀 ~ handleCurrentChange1 ~ data:', data)
pageNum2.value = data
api
.post('/multialarm/ai/task/getlist', {
pagesize: 15,
pageindex: data - 1,
})
.then((res) => {
if (res.code == 0) {
tableData2.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
}
const indexMethod2 = (index: number) => {
return (pageNum2.value - 1) * 15 + index + 1
}
//布控对象
//刷新总条数和列表
const getGroupList = () => {
api.post('/multialarm/ai/target/group/getlist', {}).then((res) => {
console.log('🚀 ~ api.post ~ res:', res)
if (res.code == 0) {
tableGroupData.value = res.data as any[]
} else {
ElMessage.error(res.msg)
}
})
}
const seachB = () => {
api.post('/multialarm/ai/target/count', {}).then((res) => {
console.log('🚀 ~ seachB ~ res:', res)
if (res.code == 0) {
total2.value = res.data as { count: number }
}
})
api
.post('/multialarm/ai/target/getlist', {
pagesize: 15,
pageindex: currentPageIndex.value,
})
.then((res) => {
if (res.code == 0) {
tableData2.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
}
// 布控对象的分页
const handleCurrentChange2 = (data: number) => {
console.log('🚀 ~ handleCurrentChange2 ~ data:', data)
currentPageIndex.value = data - 1
pageNum1.value = data
api
.post('/multialarm/ai/target/getlist', {
pagesize: 15,
// pageindex: data - 1,
pageindex: currentPageIndex.value,
})
.then((res) => {
if (res.code == 0) {
tableData2.value = res.data as any[]
} else {
ElMessage.error('请求失败')
}
})
}
const indexMethod1 = (index: number) => {
return (pageNum1.value - 1) * 15 + index + 1
}
const openGroupDialog = () => {
groupVisible.value = true
}
const addGroup = () => {
dialogTitle.value = '新增分组'
Object.keys(formGroup).forEach((key) => (formGroup[key as keyof formGroupFace] = ''))
addGroupVisible.value = true
}
const closeAddGroup = () => {
addGroupVisible.value = false
}
</script>
<style scoped lang="scss">
.dialog-img-container {
overflow: visible; //让图片放大到外面内容不能被裁减并且可能渲染到边距盒padding的外部
}
.dialog-img-container img {
transition: transform 0.3s ease;
width: 100%;
height: 100%;
}
.dialog-img-container img:hover {
transform: scale(2.3);
}
.cont {
width: 100%;
height: 100%;
background-color: #fff;
// background:rgba(9, 45, 84, 1)
}
.demo-tabs > .el-tabs__content {
padding: 32px;
color: #6b778c;
font-size: 32px;
font-weight: 600;
}
:deep(.el-upload--picture-card) {
background-color: transparent;
}
:deep(.el-select__wrapper) {
background-color: transparent;
box-shadow: 0 0 0 1px #1f9bd9;
}
:deep(.el-input.is-disabled .el-input__wrapper) {
background-color: transparent;
box-shadow: 0 0 0 1px #1f9bd9;
}
:deep(.el-textarea) {
--el-input-bg-color: #071d4d;
// --el-input-border-color: #071D4D;
}
:deep(.el-dialog__body) {
position: relative;
padding: 10px;
color: #fff;
}
:deep(.el-dialog) {
--el-dialog-bg-color: #071d4d;
border: 3px solid #387dbf;
}
:deep(.el-dialog__header) {
padding: 13px;
border-bottom: 1px solid #3374b4 !important;
margin-right: 0px;
}
:deep(.el-dialog__title) {
color: #067bc1 !important;
font-weight: 500;
}
:deep(.el-dialog__headerbtn .el-dialog__close) {
color: #fff;
font-weight: 500;
font-size: 18px;
}
:deep(.el-tabs__nav-wrap::after) {
background-color: #d9d9d95e;
height: 4px;
}
:deep(.el-tabs__item) {
color: #00000070;
font-weight: 700;
}
:deep(.el-tabs) {
--el-tabs-header-height: 50px;
}
:deep(.el-tabs__item.is-active) {
color: #000;
}
:deep(.el-tabs__active-bar) {
height: 4px;
background-color: #000;
}
:deep(.el-tabs__nav-wrap) {
padding-left: 23px;
}
:deep(.el-input__wrapper) {
background-color: transparent;
box-shadow: 0 0 0 1px #1f9bd9;
}
:deep(.el-select__wrapper) {
background-color: transparent;
box-shadow: 0 0 0 1px #1f9bd9;
}
:deep(.el-input__inner) {
color: #fff;
}
:deep(.el-input__prefix) {
color: #fff;
}
.el_button_ {
}
:deep(.el-button) {
background-color: transparent;
border-color: #0cd6fe;
color: #000;
}
:deep(.el-table) {
--el-table-border-color: #1677ff40;
}
:deep(.el-select__placeholder) {
color: #fff;
}
:deep(.el-table th.el-table__cell) {
// background-color: #5C9AD5;
}
:deep(.el-table thead) {
// color: #fff;
}
:deep(.el-table tr) {
// background-color: #E9F0F8;
}
:deep(.el-table__body tr.current-row > td) {
// background: #2cabff !important;
}
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td) {
// background-color: #13306A !important;
}
:deep(.el-table th.el-table__cell) {
// background-color:#13306A;
}
:deep(.el-date-editor .el-range-input) {
color: #fff;
}
:deep(.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell) {
// background: #D1DEEE !important;
}
:deep(.el-table--enable-row-hover .el-table__body tr:hover > td.el-table__cell) {
// background-color: transparent;
}
:deep(.el-tabs) {
height: 100%;
}
:deep(.el-table th.el-table__cell) {
background-color: #f5f7fa;
}
:deep(.el-tabs__content) {
height: calc(100% - 53px);
}
:deep(.el-tab-pane) {
height: 100%;
}
::-webkit-scrollbar {
background-color: #071d4d;
}
</style>