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

1258 lines
38 KiB
Vue
Raw Normal View History

2024-07-22 11:11:43 +08:00
<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>