jhprjv2/ruoyi-ui/src/views/video/aiBoxProjectConfig/index.vue

508 lines
18 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="app-container">
<el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="项目名称" prop="projectName">
<el-input
v-model="queryParams.projectName"
placeholder="请输入项目名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="单位名称" prop="deptName">
<el-input
v-model="queryParams.deptName"
placeholder="请输入单位名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input
v-model="queryParams.deviceName"
placeholder="请输入设备名称/序列号"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="厂商名称" prop="manufacturer">
<el-input
v-model="queryParams.manufacturer"
placeholder="请输入厂商名称"
clearable
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="设备状态" prop="isDel" v-if="false">
<el-select
v-model="queryParams.isDel"
placeholder="请选择设备状态"
clearable
>
<el-option
v-for="dict in dict.type.sys_normal_disable"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</el-form-item>
<el-form-item>
<el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
<el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button
type="primary"
plain
icon="el-icon-plus"
size="mini"
@click="handleAdd"
v-hasPermi="['video:aiBoxProjectConfig:add']"
>新增</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="success"
plain
icon="el-icon-edit"
size="mini"
:disabled="single"
@click="handleUpdate"
v-hasPermi="['video:aiBoxProjectConfig:edit']"
>修改</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="danger"
plain
icon="el-icon-delete"
size="mini"
:disabled="multiple"
@click="handleDelete"
v-hasPermi="['video:aiBoxProjectConfig:remove']"
>删除</el-button>
</el-col>
<el-col :span="1.5">
<el-button
type="warning"
plain
icon="el-icon-download"
size="mini"
@click="handleExport"
v-hasPermi="['video:aiBoxProjectConfig:export']"
>导出</el-button>
</el-col>
<right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="aiBoxProjectConfigList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="项目名称" align="center" prop="projectName" />
<el-table-column label="单位名称" align="center" prop="deptName" />
<el-table-column label="设备名称" align="center" prop="deviceName" />
<el-table-column label="设备序列号" align="center" prop="serialNumber" />
<el-table-column label="厂商名称" align="center" prop="manufacturer" />
<el-table-column label="数据状态" align="center" prop="isDel">
<template slot-scope="scope">
<dict-tag :options="dict.type.sys_normal_disable" :value="scope.row.isDel"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<template slot-scope="scope">
<el-button
size="mini"
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['video:aiBoxProjectConfig:edit']"
>修改</el-button>
<el-button
size="mini"
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['video:aiBoxProjectConfig:remove']"
>删除</el-button>
</template>
</el-table-column>
</el-table>
<pagination
v-show="total>0"
:total="total"
:page.sync="queryParams.pageNum"
:limit.sync="queryParams.pageSize"
@pagination="getList"
/>
<!-- 添加或修改AI视频配置对话框 -->
<el-dialog :title="title" :visible.sync="open" width="720px" append-to-body :close-on-click-modal="false" :close-on-press-escape="false">
<el-form ref="form" :model="form" :rules="rules" label-width="100px">
<el-form-item label="项目名称" prop="projectId">
<el-select
v-model="form.projectId"
filterable
clearable
placeholder="请选择所属项目"
style="width: 100%"
@change="projectChange"
>
<el-option
v-for="item in projectOptions"
:key="item.id"
:label="item.projectName"
:value="item.id"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="单位名称" prop="deptId">
<el-select
v-model="form.deptId"
clearable
placeholder="请选择所属项目"
style="width: 100%"
@change="deptChange"
>
<el-option
v-for="item in deptOptions"
:key="item.deptId"
:label="item.deptName"
:value="item.deptId"
>
</el-option>
</el-select>
</el-form-item>
<el-form-item label="设备名称" prop="deviceName">
<el-input v-model="form.deviceName" placeholder="请输入设备名称" />
</el-form-item>
<el-form-item label="设备序列号" prop="serialNumber">
<el-input v-model="form.serialNumber" placeholder="请输入设备序列号" />
</el-form-item>
<el-form-item label="厂商名称" prop="manufacturer">
<el-input v-model="form.manufacturer" placeholder="请输入厂商名称" />
</el-form-item>
<el-form-item label="设备状态" prop="isDel">
<el-switch v-model="form.isDel" active-value="0" inactive-value="1"></el-switch>
</el-form-item>
<el-divider content-position="center">AI视频通道信息</el-divider>
<!-- <el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<el-button type="primary" icon="el-icon-plus" size="mini" @click="handleAddDevAiProjectConfigPassage">添加</el-button>
</el-col>
<el-col :span="1.5">
<el-button type="danger" icon="el-icon-delete" size="mini" @click="handleDeleteDevAiProjectConfigPassage">删除</el-button>
</el-col>
</el-row> -->
<el-table :data="devAiProjectConfigPassageList" :row-class-name="rowDevAiProjectConfigPassageIndex" @selection-change="handleDevAiProjectConfigPassageSelectionChange" ref="devAiProjectConfigPassage">
<el-table-column label="序号" align="center" prop="index" width="60"/>
<el-table-column label="视频通道" align="center" prop="passageValue" width="100">
<template slot-scope="scope">
<el-input v-model="scope.row.passageValue" placeholder="请输入视频通道" :disabled="true"/>
</template>
</el-table-column>
<el-table-column label="AI通道号" prop="channelId" width="120" align="center" >
<template slot-scope="scope">
<el-input v-model="scope.row.channelId" placeholder="请输入AI通道号" maxlength="10" type="number"/>
</template>
</el-table-column>
<el-table-column label="AI通道名称" prop="channelName" width="150" align="center" >
<template slot-scope="scope">
<el-input v-model="scope.row.channelName" placeholder="请输入AI通道名称" maxlength="50"/>
</template>
</el-table-column>
<el-table-column label="预警类型" align="center" prop="passageTypes" width="150">
<template slot-scope="scope">
<el-select
v-model="scope.row.passageTypes"
placeholder="选择预警类型"
multiple
>
<el-option
v-for="dict in dict.type.aibox_alarm_type"
:key="dict.value"
:label="dict.label"
:value="dict.value"
/>
</el-select>
</template>
</el-table-column>
<el-table-column label="是否重要" prop="isImportance" width="100" align="center" >
<template slot-scope="scope">
<el-switch v-model="scope.row.isImportance" active-value="Y" inactive-value="N"></el-switch>
</template>
</el-table-column>
</el-table>
</el-form>
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="submitForm">确 定</el-button>
<el-button @click="cancel"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { listAiBoxProjectConfig, getAiBoxProjectConfig, delAiBoxProjectConfig, addAiBoxProjectConfig, updateAiBoxProjectConfig } from "@/api/video/aiBoxProjectConfig";
import { listVideoConfig,getVideoConfig } from "@/api/video/videoConfig";
export default {
name: "AiBoxProjectConfig",
dicts: ["sys_normal_disable","aibox_alarm_type"],
data() {
return {
// 遮罩层
loading: true,
// 选中数组
ids: [],
// 子表选中数据
checkedDevAiProjectConfigPassage: [],
// 非单个禁用
single: true,
// 非多个禁用
multiple: true,
// 显示搜索条件
showSearch: true,
// 总条数
total: 0,
// 设备配置表格数据
aiBoxProjectConfigList: [],
// 设备配置通道表格数据
devAiProjectConfigPassageList: [],
// 弹出层标题
title: "",
// 是否显示弹出层
open: false,
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
projectId: null,
deptId: null,
ipcName: null,
deviceName: null,
serialNumber: null,
manufacturer: null,
isDel: null,
projectName:null,
deptName:null,
},
// 表单参数
form: {},
// 表单校验
rules: {
projectId: [{ required: true, message: "请选择所属项目", trigger: "blur" }],
deptId: [{ required: true, message: "请选择所属单位", trigger: "blur" }],
deviceName: [
{ required: true, message: "请输入设备名称", trigger: "blur" },
{ max: 50, message: "设备名称最多50字符", trigger: "blur" },
],
serialNumber: [
{ required: true, message: "请输入设备序列号", trigger: "blur" },
{ max: 100, message: "设备序列号最多100字符", trigger: "blur" },
],
manufacturer: [{ required: true, message: "请输入厂商名称", trigger: "blur" },
{ max: 50, message: "厂商名称最多50字符", trigger: "blur" },
],
isDel: [{ required: true, message: "请选择设备状态", trigger: "blur" }],
},
deptVideo:false,
deptVideoId:null,
projectOptions:[],
deptOptions:[]
};
},
created() {
this.getList();
//获取项目列表的接口
this.$api.publics.getProjectList({}).then((response) => {
this.projectOptions = response.rows;
});
},
methods: {
projectChange(val){
// 根据项目查询总包单位
this.form.deptId=null;
this.initDept(val)
},
initDept(val){
this.$api.publics
.queryUnitList({
projectId: val,
unitType: 2
})
.then((d) => {
this.deptOptions = d.rows;
if (d.rows.length > 0) {
// 有总包单位
} else {
this.$message.error("当前项目未分配总包单位不能配置AI视频");
}
});
},
deptChange(val){
// 查询当前总包单位是否配置视频
let param = {
projectId:this.form.projectId,
deptId:val
}
listVideoConfig(param).then(response => {
if(response.total>0){
this.deptVideo=true;
this.deptVideoId=response.rows[0].id;
// 查询视频通道
getVideoConfig(this.deptVideoId).then(response => {
this.devAiProjectConfigPassageList=[];
response.data.surProjectVideoPassageList.forEach((item,idx) => {
this.devAiProjectConfigPassageList.push({videoPassageId:item.id,passageValue:item.passageValue});
})
});
}else{
this.deptVideo=false;
this.deptVideoId=null;
this.$message.error("当前单位未配置视频监控信息,请先配置实时视频!");
}
});
},
/** 查询设备配置列表 */
getList() {
this.loading = true;
listAiBoxProjectConfig(this.queryParams).then(response => {
this.aiBoxProjectConfigList = response.rows;
this.total = response.total;
this.loading = false;
});
},
// 取消按钮
cancel() {
this.open = false;
this.reset();
},
// 表单重置
reset() {
this.form = {
id: null,
projectId: null,
deptId: null,
ipcName: null,
deviceName: null,
serialNumber: null,
manufacturer: null,
isDel: null,
createBy: null,
createTime: null,
updateBy: null,
updateTime: null,
remark: null
};
this.devAiProjectConfigPassageList = [];
this.resetForm("form");
},
/** 搜索按钮操作 */
handleQuery() {
this.queryParams.pageNum = 1;
this.getList();
},
/** 重置按钮操作 */
resetQuery() {
this.resetForm("queryForm");
this.handleQuery();
},
// 多选框选中数据
handleSelectionChange(selection) {
this.ids = selection.map(item => item.id)
this.single = selection.length!==1
this.multiple = !selection.length
},
/** 新增按钮操作 */
handleAdd() {
this.reset();
this.form.isDel="0";
this.open = true;
this.title = "添加AI视频配置";
},
/** 修改按钮操作 */
handleUpdate(row) {
this.reset();
const id = row.id || this.ids
getAiBoxProjectConfig(id).then(response => {
this.form = response.data;
this.initDept(response.data.projectId);
this.devAiProjectConfigPassageList = response.data.devAiProjectConfigPassageList;
this.open = true;
this.title = "修改AI视频配置";
});
},
/** 提交按钮 */
submitForm() {
this.$refs["form"].validate(valid => {
if (valid) {
this.form.devAiProjectConfigPassageList = this.devAiProjectConfigPassageList;
if (this.form.id) {
updateAiBoxProjectConfig(this.form).then(response => {
this.$modal.msgSuccess("修改成功");
this.open = false;
this.getList();
});
} else {
addAiBoxProjectConfig(this.form).then(response => {
this.$modal.msgSuccess("新增成功");
this.open = false;
this.getList();
});
}
}
});
},
/** 删除按钮操作 */
handleDelete(row) {
const ids = row.id || this.ids;
this.$modal.confirm('是否确认删除AI视频配置编号为"' + ids + '"的数据项?').then(function() {
return delAiBoxProjectConfig(ids);
}).then(() => {
this.getList();
this.$modal.msgSuccess("删除成功");
}).catch(() => {});
},
/** AI视频配置通道序号 */
rowDevAiProjectConfigPassageIndex({ row, rowIndex }) {
row.index = rowIndex + 1;
},
/** AI视频配置通道添加按钮操作 */
handleAddDevAiProjectConfigPassage() {
let obj = {};
obj.channelId = "";
obj.channelName = "";
obj.isImportance = "";
obj.isDel = "0";
this.devAiProjectConfigPassageList.push(obj);
},
/** AI视频配置通道删除按钮操作 */
handleDeleteDevAiProjectConfigPassage() {
if (this.checkedDevAiProjectConfigPassage.length == 0) {
this.$modal.msgError("请先选择要删除的AI视频配置通道数据");
} else {
const devAiProjectConfigPassageList = this.devAiProjectConfigPassageList;
const checkedDevAiProjectConfigPassage = this.checkedDevAiProjectConfigPassage;
this.devAiProjectConfigPassageList = devAiProjectConfigPassageList.filter(function(item) {
return checkedDevAiProjectConfigPassage.indexOf(item.index) == -1
});
}
},
/** 复选框选中数据 */
handleDevAiProjectConfigPassageSelectionChange(selection) {
this.checkedDevAiProjectConfigPassage = selection.map(item => item.index)
},
/** 导出按钮操作 */
handleExport() {
this.download('video/aiBoxProjectConfig/export', {
...this.queryParams
}, `aiBoxProjectConfig_${new Date().getTime()}.xlsx`)
}
}
};
</script>