This commit is contained in:
shijing 2022-08-18 17:28:15 +08:00
commit 413cad098a
10 changed files with 467 additions and 186 deletions

View File

@ -138,7 +138,7 @@ const routes = [
"name": "algo", "name": "algo",
"path": "/ecm/algo", "path": "/ecm/algo",
"meta": { "meta": {
"title": "算法配置", "title": "算法布设",
"icon": "el-icon-set-up", "icon": "el-icon-set-up",
"perms": ["algo"] "perms": ["algo"]
}, },

View File

@ -94,20 +94,17 @@
label="算法名称" label="算法名称"
prop="algo_.name" prop="algo_.name"
width="150" width="150"
></el-table-column>
<el-table-column
label="视频编号"
prop="vchannel_.code"
width="150"
></el-table-column> ></el-table-column>
<el-table-column <el-table-column
label="视频名称" label="视频名称"
prop="vchannel_.name" prop="vchannel_.name"
width="150" width="150"
></el-table-column> ></el-table-column>
<el-table-column label="始终开启" prop="always_on" width="150">
<template #default="scope">
<el-switch
v-model="scope.row.always_on"
:disabled="true"
></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="right"> <el-table-column label="操作" fixed="right" align="right">
<template #default="scope"> <template #default="scope">
<el-popconfirm <el-popconfirm
@ -125,13 +122,13 @@
</el-container> </el-container>
</el-container> </el-container>
<save-dialog <save-dialog
v-if="dialog.save" v-model="dialog.save"
ref="saveDialog" ref="saveDialog"
@success="handleSaveSuccess" @success="handleSaveSuccess"
@closed="dialog.save = false" @closed="dialog.save = false"
></save-dialog> ></save-dialog>
<algo-dialog <algo-dialog
v-if="dialog.algos" v-model="dialog.algos"
ref="algoDialog" ref="algoDialog"
@success="handleSaveSuccessss" @success="handleSaveSuccessss"
@closed="dialog.algos = false" @closed="dialog.algos = false"

226
src/views/ecm/algo2.vue Normal file
View File

@ -0,0 +1,226 @@
<template>
<el-container>
<el-aside width="50%">
<el-container>
<el-header>
<div class="left-panel">
<!-- <el-button type="danger" plain icon="el-icon-delete" :disabled="selection.length==0" @click="batch_del"></el-button> -->
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="table"
:apiObj="vchannelObj"
:params="vchannelParams"
row-key="id"
stripe
highlightCurrentRow
@row-click="rowClick"
>
<el-table-column
label="#"
type="index"
></el-table-column>
<el-table-column
label="名称"
prop="name"
></el-table-column>
<el-table-column
label="标识"
prop="code"
></el-table-column>
<el-table-column label="操作" fixed="right">
<template #default="scope">
<el-button
type="primary"
link
size="small"
v-auth="'notify_setting.update'"
@click="adds_edit(scope.row)"
>配置</el-button
>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-aside>
<el-container>
<el-header>
<div class="left-panel">
<el-button
type="primary"
plain
icon="el-icon-plus"
v-auth="'notify_setting.update'"
@click="add"
></el-button>
</div>
</el-header>
<el-main class="nopadding">
<scTable
ref="tablevchannel"
:data="vchannelList"
row-key="id"
stripe
:hidePagination="true"
>
<el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column
label="算法名称"
prop="algo_.name"
width="150"
></el-table-column>
<el-table-column
label="视频名称"
prop="vchannel_.name"
width="150"
></el-table-column>
<el-table-column label="始终开启" prop="always_on" width="150">
<template #default="scope">
<el-switch
v-model="scope.row.always_on"
:disabled="true"
></el-switch>
</template>
</el-table-column>
<el-table-column label="操作" fixed="right" align="right">
<template #default="scope">
<el-popconfirm
title="确定删除吗?"
@confirm="table_del(scope.row, scope.$index)"
>
<template #reference>
<el-button text type="danger" size="small" v-auth="'notify_setting.delete'">删除</el-button>
</template>
</el-popconfirm>
</template>
</el-table-column>
</scTable>
</el-main>
</el-container>
</el-container>
<save-dialog
v-if="dialog.save"
ref="saveDialog"
@success="handleSaveSuccess"
@closed="dialog.save = false"
></save-dialog>
<algo-dialog
v-if="dialog.algos"
ref="algoDialog"
@success="handleSaveSuccessss"
@closed="dialog.algos = false"
></algo-dialog>
</template>
<script>
import saveDialog from "./algo_form.vue";
import algoDialog from "./algos_form.vue";
import { CircleCheckFilled, CircleCloseFilled } from "@element-plus/icons-vue";
export default {
name: "algo",
components: {
saveDialog,
algoDialog,
CircleCheckFilled,
CircleCloseFilled,
},
data() {
return {
dialog: {
save: false,
algos: false,
},
filter_area_: {
10: "办公生活区以上",
20: "生产一般区以上",
30: "生产重点区以上",
},
selection: [],
chosen_cate: "",
eventcateList: [],
vchannelObj: this.$API.third.tdevice.list,
vchannelParams: {'type': 60}
};
},
mounted() {
// this.getEventCate();
// this.getVchannel();
},
methods: {
//
getEventCate() {
this.$API.ecm.event_cate.list
.req({ self_algo: true, page: 0 })
.then((res) => {
this.eventcateList = res;
});
},
//
rowClick(row) {
this.$API.ecm.vchannel.list.req({ algo: row.id, page: 0 }).then((res) => {
this.vchannelList = res;
});
this.chosen_cate = row.id;
},
//
getVchannel() {
this.$API.ecm.vchannel.list.req({ page: 0 }).then((res) => {
this.vchannelList = res;
});
},
//
adds_edit() {
this.dialog.algos = true;
this.$nextTick(() => {
this.$refs.algoDialog.open();
});
},
//
add() {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open();
});
},
//
table_edit(row) {
this.dialog.save = true;
this.$nextTick(() => {
this.$refs.saveDialog.open("edit").setData(row);
});
},
table_del(row) {
this.$API.ecm.vchannel.delete
.req(row.id)
.then((res) => {
this.$message.success("删除成功");
this.getVchannel();
return res;
})
.catch((err) => {
return err;
});
},
//
handleSaveSuccess() {
this.$refs.tablevchannel.refresh();
},
//
handleSaveSuccessss() {
this.$refs.tablevchannel.refresh();
},
},
};
</script>
<style>
</style>

View File

@ -3,7 +3,6 @@
:title="titleMap[mode]" :title="titleMap[mode]"
v-model="visible" v-model="visible"
:width="500" :width="500"
destroy-on-close
@closed="$emit('closed')" @closed="$emit('closed')"
:draggable="true" :draggable="true"
> >
@ -35,12 +34,12 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="始终开启" prop="always_on"> <!-- <el-form-item label="始终开启" prop="always_on">
<el-switch v-model="form.always_on"></el-switch> <el-switch v-model="form.always_on"></el-switch>
</el-form-item> </el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="visible = false"> </el-button> <!-- <el-button @click="visible = false"> </el-button> -->
<el-button <el-button
v-if="mode != 'show'" v-if="mode != 'show'"
type="primary" type="primary"
@ -69,7 +68,7 @@ export default {
form: { form: {
algo: "", algo: "",
vchannel: "", vchannel: "",
always_on: false, always_on: true,
}, },
// //
rules: { rules: {

View File

@ -3,7 +3,6 @@
:title="titleMap[mode]" :title="titleMap[mode]"
v-model="visible" v-model="visible"
:width="500" :width="500"
destroy-on-close
@closed="$emit('closed')" @closed="$emit('closed')"
:draggable="true" :draggable="true"
> >
@ -35,12 +34,12 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="始终开启" prop="always_on"> <!-- <el-form-item label="始终开启" prop="always_on">
<el-switch v-model="form.always_on"></el-switch> <el-switch v-model="form.always_on"></el-switch>
</el-form-item> </el-form-item> -->
</el-form> </el-form>
<template #footer> <template #footer>
<el-button @click="visible = false"> </el-button> <!-- <el-button @click="visible = false"> </el-button> -->
<el-button <el-button
v-if="mode != 'show'" v-if="mode != 'show'"
type="primary" type="primary"

View File

@ -56,6 +56,18 @@
></el-input-number> ></el-input-number>
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :md="12" :sm="24">
<el-form-item label="作业许可" prop="opl_cates">
<el-select v-model="form.opl_cates" multiple>
<el-option
v-for="item in oplCateOptions"
:key="item.id"
:label="item.name"
:value="item.id"
/>
</el-select>
</el-form-item>
</el-col>
</el-row> </el-row>
<sc-title title="音响配置"></sc-title> <sc-title title="音响配置"></sc-title>
@ -72,7 +84,7 @@
</el-col> </el-col>
<el-col :md="12" :sm="24"> <el-col :md="12" :sm="24">
<el-form-item label="喇叭" prop="speakers"> <el-form-item label="固定喇叭" prop="speakers">
<el-select v-model="form.speakers" multiple="true"> <el-select v-model="form.speakers" multiple="true">
<el-option <el-option
v-for="item in speakersptions" v-for="item in speakersptions"
@ -209,6 +221,7 @@ export default {
}, },
], ],
speakersptions: [], speakersptions: [],
oplCateOptions: [],
// //
groups: [], groups: [],
groupsProps: { groupsProps: {
@ -220,6 +233,7 @@ export default {
}, },
mounted() { mounted() {
this.getSpeakers(); this.getSpeakers();
this.getOplCates();
}, },
methods: { methods: {
// //
@ -234,6 +248,12 @@ export default {
this.speakersptions = res; this.speakersptions = res;
}); });
}, },
//
getOplCates() {
this.$API.opm.oplcate.list.req({ page: 0 }).then((res) => {
this.oplCateOptions = res;
});
},
// //
async submit() { async submit() {

View File

@ -4,120 +4,151 @@
<el-main> <el-main>
<el-card> <el-card>
<el-descriptions title="事件信息" :border="true"> <el-descriptions title="事件信息" :border="true">
<el-descriptions-item label="事件种类"><el-tag <el-descriptions-item label="事件种类"
v-for="item in form.cates_" ><el-tag
:key="item.id" v-for="item in form.cates_"
type="warning" :key="item.id"
>{{ item.name }}</el-tag type="warning"
></el-descriptions-item> >{{ item.name }}</el-tag
<el-descriptions-item label="事件标记">{{mark_options2[form.mark]}} ></el-descriptions-item
</el-descriptions-item> >
<el-descriptions-item label="发生时间">{{form.create_time}}</el-descriptions-item> <el-descriptions-item label="事件标记"
<el-descriptions-item label="发生区域" v-if="form.area_">{{form.area_.name}}</el-descriptions-item> >{{ mark_options2[form.mark] }}
<el-descriptions-item label="人员类型"> </el-descriptions-item>
<span v-if="form.employee">{{type_options2[form.employee_.type]}}</span> <el-descriptions-item label="发生时间">{{
<span v-else>未知人员</span> form.create_time
</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="当事人"> <el-descriptions-item label="发生区域" v-if="form.area_">{{
<span v-if="form.employee">{{form.employee_.name}}</span> form.area_.name
</el-descriptions-item> }}</el-descriptions-item>
<el-descriptions-item label="图片" column=3> <el-descriptions-item label="人员类型">
<div style="display:flex;"> <span v-if="form.employee">{{
<sc-upload v-model="form.global_img" title="全景照" :disabled="true" style="margin-right:8px;width:auto"></sc-upload> type_options2[form.employee_.type]
<sc-upload v-model="form.face_img" title="人脸照" :disabled="true" style="width:auto"></sc-upload> }}</span>
</div> <span v-else>未知人员</span>
</el-descriptions-item> </el-descriptions-item>
</el-descriptions> <el-descriptions-item label="当事人">
<span v-if="form.employee">{{ form.employee_.name }}</span>
</el-descriptions-item>
<el-descriptions-item label="抓拍设备" v-if="form.vchannel">
{{ form.vchannel_.code }}-{{ form.vchannel_.name }}
</el-descriptions-item>
<el-descriptions-item label="图片" span=2>
<div style="display: flex">
<sc-upload
v-model="form.global_img"
title="全景照"
:disabled="true"
style="margin-right: 8px; width: auto"
></sc-upload>
<sc-upload
v-model="form.face_img"
title="人脸照"
:disabled="true"
style="width: auto"
></sc-upload>
</div>
</el-descriptions-item>
</el-descriptions>
</el-card> </el-card>
<el-card v-if="form.handle_user" style="margin-top:8px"> <el-card v-if="form.handle_user" style="margin-top: 8px">
<el-descriptions title="事件处理" :border="true"> <el-descriptions title="事件处理" :border="true">
<el-descriptions-item label="事件标记">{{mark_options2[form.mark]}} <el-descriptions-item label="事件标记"
</el-descriptions-item> >{{ mark_options2[form.mark] }}
<el-descriptions-item label="处理人"> </el-descriptions-item>
<span v-if="form.handle_user"></span>{{form.handle_user_name}} <el-descriptions-item label="处理人">
</el-descriptions-item> <span v-if="form.handle_user"></span>{{ form.handle_user_name }}
<el-descriptions-item label="处理时间"> </el-descriptions-item>
{{form.handle_time}} <el-descriptions-item label="处理时间">
</el-descriptions-item> {{ form.handle_time }}
<el-descriptions-item label="处理描述" column=3> </el-descriptions-item>
{{form.handle_desc}} <el-descriptions-item label="处理描述" column="3">
</el-descriptions-item> {{ form.handle_desc }}
</el-descriptions> </el-descriptions-item>
</el-descriptions>
</el-card> </el-card>
<el-card header="事件处理" v-else style="margin-top:8px"> <el-card header="事件处理" v-else style="margin-top: 8px">
<el-form :inline="true"> <el-form :inline="true">
<el-form-item label="事件标记"> <el-form-item label="事件标记">
<el-select v-model="form.mark" style="width: 100%"> <el-select v-model="form.mark" style="width: 100%">
<el-option <el-option
v-for="item in mark_options" v-for="item in mark_options"
:key="item.id" :key="item.id"
:label="item.name" :label="item.name"
:value="item.id" :value="item.id"
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="处理描述"> <el-form-item label="处理描述">
<el-input v-model="form.handle_desc" clearable type="textarea"></el-input> <el-input
</el-form-item> v-model="form.handle_desc"
<el-form-item> clearable
<el-button type="primary" @click="onSubmit">保存</el-button> type="textarea"
</el-form-item> ></el-input>
</el-form-item>
<el-form-item>
</el-form> <el-button type="primary" @click="onSubmit">保存</el-button>
</el-card> </el-form-item>
<el-card header="事件推送情况" style="margin-top:8px"> </el-form>
</el-card>
<el-card header="事件推送情况" style="margin-top: 8px">
<scTable <scTable
ref="table" ref="table"
:data="remindData" :data="remindData"
row-key="id" row-key="id"
fit fit
stripe stripe
hidePagination hidePagination
hideRefresh hideRefresh
> >
<el-table-column label="#" type="index" width="50"></el-table-column> <el-table-column label="#" type="index" width="50"></el-table-column>
<el-table-column label="事件种类" width="200"> <el-table-column label="事件种类" width="200">
<template #default="scope"> <template #default="scope">
<el-tag v-for="item in scope.row.event_.cates_" <el-tag
:key="item.id" type="warning">{{item.name}}</el-tag> v-for="item in scope.row.event_.cates_"
</template> :key="item.id"
</el-table-column> type="warning"
<el-table-column label="事件处理状态" prop="can_handle"> >{{ item.name }}</el-tag
<template #default="scope"> >
<el-span v-if="scope.row.handle_user==null">未处理</el-span> </template>
<el-span v-else>已处理</el-span> </el-table-column>
</template> <el-table-column label="事件处理状态" prop="can_handle">
</el-table-column> <template #default="scope">
<el-span v-if="scope.row.handle_user == null">未处理</el-span>
<el-table-column <el-span v-else>已处理</el-span>
label="警报信息" </template>
prop="event_.voice_msg" </el-table-column>
width="200"
></el-table-column>
<el-table-column
label="接收人"
prop="recipient_.name"
></el-table-column>
<el-table-column label="是否可处理" prop="can_handle">
<template #default="scope">
<el-span v-if="scope.row.can_handle"></el-span>
<el-span v-else></el-span>
</template>
</el-table-column>
<el-table-column label="是否已读" prop="is_read">
<template #default="scope">
<el-span v-if="scope.row.is_read" color="green">已读</el-span>
<el-span v-else>未读</el-span>
</template>
</el-table-column>
<el-table-column label="发送时间" prop="create_time"></el-table-column> <el-table-column
</scTable> label="警报信息"
</el-card> prop="event_.voice_msg"
width="200"
></el-table-column>
<el-table-column
label="接收人"
prop="recipient_.name"
></el-table-column>
<el-table-column label="是否可处理" prop="can_handle">
<template #default="scope">
<el-span v-if="scope.row.can_handle"></el-span>
<el-span v-else></el-span>
</template>
</el-table-column>
<el-table-column label="是否已读" prop="is_read">
<template #default="scope">
<el-span v-if="scope.row.is_read" color="green">已读</el-span>
<el-span v-else>未读</el-span>
</template>
</el-table-column>
<el-table-column
label="发送时间"
prop="create_time"
></el-table-column>
</scTable>
</el-card>
</el-main> </el-main>
</el-container> </el-container>
</template> </template>
@ -141,13 +172,13 @@ export default {
{ id: "visitor", name: "访客" }, { id: "visitor", name: "访客" },
], ],
type_options2: { type_options2: {
"employee": "企业员工", employee: "企业员工",
"remployee": "相关方", remployee: "相关方",
"visitor": "访客" visitor: "访客",
}, },
mark_options2: { mark_options2: {
10: "正常", 10: "正常",
20: "误报" 20: "误报",
}, },
mark_options: [ mark_options: [
{ id: 10, name: "正常" }, { id: 10, name: "正常" },
@ -165,54 +196,54 @@ export default {
}, },
methods: { methods: {
getEvent() { getEvent() {
this.loading = true this.loading = true;
this.$API.ecm.event.item.req(this.eventID).then((res) => { this.$API.ecm.event.item
this.loading = false .req(this.eventID)
this.form = res; .then((res) => {
}).catch(e=>{this.loading=false}); this.loading = false;
this.form = res;
})
.catch((e) => {
this.loading = false;
});
}, },
getRemind() { getRemind() {
this.$API.ecm.remind.list this.$API.ecm.remind.list
.req({ event: this.eventID, page: 0 }) .req({ event: this.eventID, page: 0 })
.then((res) => { .then((res) => {
this.remindData = res; this.remindData = res;
}); });
}, },
onSubmit(){ onSubmit() {
this.$API.ecm.event.handle.req(this.form.id, this.form).then((res) => {
this.$router.go(-1);
this.$API.ecm.event.handle.req(this.form.id, this.form) this.$message.success("操作成功");
.then((res) => { return res;
this.$router.go(-1) });
this.$message.success("操作成功"); },
return res;
})
}
}, },
}; };
</script> </script>
<style scoped> <style scoped>
.text { .text {
font-size: 14px; font-size: 14px;
} }
.item { .item {
margin-bottom: 18px; margin-bottom: 18px;
} }
.clearfix:before, .clearfix:before,
.clearfix:after { .clearfix:after {
display: table; display: table;
content: ""; content: "";
} }
.clearfix:after { .clearfix:after {
clear: both clear: both;
} }
.box-card { .box-card {
width: 100%; width: 100%;
} }
</style> </style>

View File

@ -112,7 +112,7 @@
hideDo hideDo
> >
<el-table-column label="#" type="index" fixed="left" width="50"></el-table-column> <el-table-column label="#" type="index" fixed="left" width="50"></el-table-column>
<el-table-column label="事件名称" prop="event_cate_name" fixed="left" width="100"> <el-table-column label="事件种类" prop="event_cate_name" fixed="left" width="100">
</el-table-column> </el-table-column>
<el-table-column label="提醒对象" prop="obj_cate" fixed="left" width="100"> <el-table-column label="提醒对象" prop="obj_cate" fixed="left" width="100">

View File

@ -22,7 +22,7 @@
<div> <div>
<el-badge :value="rpjnumber" class="item"> <el-badge :value="rpjnumber" class="item">
<el-button <el-button
class="projecting" class="projecting"
icon="el-icon-document-copy" icon="el-icon-document-copy"
type="warning" type="warning"
size="small" size="small"
@ -33,7 +33,7 @@
<div> <div>
<el-badge :value="visitnumber" class="item"> <el-badge :value="visitnumber" class="item">
<el-button <el-button
class="projecting" class="projecting"
icon="el-icon-document-copy" icon="el-icon-document-copy"
type="success" type="success"
size="small" size="small"
@ -68,16 +68,6 @@
</div> </div>
</div> </div>
</div> </div>
<div class="count-list-item">
<div class="item-img item-img2"></div>
<div class="item-info">
<div title="外来人员" class="normal">访客</div>
<div class="bottom">
<span class="large">{{ userCount.count_visitor }}</span
>&nbsp;<span class="normal"></span>
</div>
</div>
</div>
<div class="count-list-item"> <div class="count-list-item">
<div class="item-img item-img3"></div> <div class="item-img item-img3"></div>
<div class="item-info"> <div class="item-info">
@ -88,6 +78,16 @@
</div> </div>
</div> </div>
</div> </div>
<div class="count-list-item">
<div class="item-img item-img2"></div>
<div class="item-info">
<div title="外来人员" class="normal">访客</div>
<div class="bottom">
<span class="large">{{ userCount.count_visitor }}</span
>&nbsp;<span class="normal"></span>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -180,10 +180,10 @@ export default {
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">
.projecting{ .projecting {
width: 45px; width: 45px;
height: 45px; height: 45px;
font-size: 25px; font-size: 25px;
} }
.welcome .logo { .welcome .logo {
text-align: center; text-align: center;

View File

@ -31,11 +31,20 @@
stripe stripe
@resetQuery="resetQuery" @resetQuery="resetQuery"
> >
<el-table-column <!-- <el-table-column
label="#" label="#"
type="index" type="index"
width="50" width="50"
></el-table-column> ></el-table-column> -->
<el-table-column
label="许可证"
prop="opls"
width="160"
>
<template #default="scope">
<el-tag v-for="item in scope.row.cates_" :key="item.id" style="margin-right:2px">{{item.name}}</el-tag>
</template>
</el-table-column>
<el-table-column <el-table-column
label="作业简介" label="作业简介"
prop="name" prop="name"