17 changed files with 1073 additions and 136 deletions
			
			
		@ -0,0 +1,336 @@ | 
				
			|||
<template> | 
				
			|||
    <div class="EventDetail"> | 
				
			|||
        <Table :data="tableData" :show-header="false"> | 
				
			|||
            <ElTableColumn prop="deviceType" width="160"> | 
				
			|||
                <template slot-scope="scope"> | 
				
			|||
                    <el-select v-model="scope.row.deviceType" placeholder="请选择设备类型" @change="changeDeviceType"> | 
				
			|||
                        <el-option v-for="item in deviceOptions" :key="item.value" :label="item.label" | 
				
			|||
                            :value="item.value"> | 
				
			|||
                        </el-option> | 
				
			|||
                    </el-select> | 
				
			|||
                </template> | 
				
			|||
            </ElTableColumn> | 
				
			|||
 | 
				
			|||
            <ElTableColumn prop="searchRule" width="230"> | 
				
			|||
                <template slot-scope="scope"> | 
				
			|||
                    <div class="plhx"> | 
				
			|||
                        <el-select v-model="scope.row.searchRule" placeholder="检索规则条件"> | 
				
			|||
                            <el-option v-for="item in zyOptions" :key="item.value" :label="item.label" | 
				
			|||
                                :value="item.value"> | 
				
			|||
                            </el-option> | 
				
			|||
                        </el-select> | 
				
			|||
 | 
				
			|||
                        <el-input-number v-if="scope.row.searchRule == 2 || scope.row.searchRule == 3" | 
				
			|||
                            v-model="scope.row.number" :min="0" :max="9999" style="width: 130px;"></el-input-number> | 
				
			|||
                        <p v-if="scope.row.searchRule == 2 || scope.row.searchRule == 3">个</p> | 
				
			|||
 | 
				
			|||
                        <el-input-number v-if="scope.row.searchRule == 4" v-model="scope.row.number" :min="0" | 
				
			|||
                            :max="9999" style="width: 130px;"></el-input-number> | 
				
			|||
                        <p v-if="scope.row.searchRule == 4" style="width: 56px;">公里</p> | 
				
			|||
                    </div> | 
				
			|||
 | 
				
			|||
                </template> | 
				
			|||
            </ElTableColumn> | 
				
			|||
 | 
				
			|||
            <ElTableColumn prop="deviceList" width="400"> | 
				
			|||
                <template slot-scope="scope"> | 
				
			|||
                    <div class="mjs"> | 
				
			|||
                        <el-select v-if="scope.row.searchRule == 1" v-model="scope.row.deviceList" placeholder="请选择设备" | 
				
			|||
                            multiple collapse-tags> | 
				
			|||
                            <el-option v-for="item in sbOptions" :key="item.id" :label="item.deviceName" | 
				
			|||
                                :value="item.id"> | 
				
			|||
                            </el-option> | 
				
			|||
                        </el-select> | 
				
			|||
                        <el-input @click.native="clickQbb(scope.$index)" v-if="scope.row.deviceType == 2" | 
				
			|||
                            placeholder="请选择" v-model="scope.row.qbb" readonly> | 
				
			|||
                            <i slot="suffix" class="el-input__icon el-icon-search"></i> | 
				
			|||
                        </el-input> | 
				
			|||
 | 
				
			|||
                        <el-select v-if="scope.row.deviceType == 10" v-model="scope.row.gzms" placeholder="工作模式"> | 
				
			|||
                            <el-option v-for="item in gzmsOptions" :key="item.value" :label="item.label" | 
				
			|||
                                :value="item.value"></el-option> | 
				
			|||
                        </el-select> | 
				
			|||
                        <el-input-number v-if="scope.row.deviceType == 10" placeholder="时长(分钟)" | 
				
			|||
                            v-model="scope.row.operationDuration" :min="0" :max="999"></el-input-number> | 
				
			|||
 | 
				
			|||
                        <el-select v-if="scope.row.deviceType == 12" v-model="scope.row.controlModel" | 
				
			|||
                            placeholder="请选择模式"> | 
				
			|||
                            <el-option label="手动模式" value="00"></el-option> | 
				
			|||
                            <el-option label="自动模式" value="01"></el-option> | 
				
			|||
                            <el-option label="万年历" value="02"></el-option> | 
				
			|||
                        </el-select> | 
				
			|||
                        <el-time-picker v-if="scope.row.controlModel == '01' && scope.row.deviceType == 12" | 
				
			|||
                            v-model="scope.row.time" is-range style="" range-separator="-" placeholder="选择时间" | 
				
			|||
                            value-format="HH:mm" format="HH:mm"> | 
				
			|||
                        </el-time-picker> | 
				
			|||
                        <el-select v-if="scope.row.deviceType == 12" v-model="scope.row.state" placeholder="工作状态"> | 
				
			|||
                            <el-option v-for="item in gzztOptions" :key="item.value" :label="item.label" | 
				
			|||
                                :value="item.value"></el-option> | 
				
			|||
                        </el-select> | 
				
			|||
 | 
				
			|||
                        <el-input v-if="scope.row.deviceType == 5" v-model="scope.row.content" | 
				
			|||
                            placeholder="请输入发布内容"></el-input> | 
				
			|||
 | 
				
			|||
                    </div> | 
				
			|||
                </template> | 
				
			|||
            </ElTableColumn> | 
				
			|||
 | 
				
			|||
 | 
				
			|||
            <ElTableColumn label="操作" width="100"> | 
				
			|||
                <template slot-scope="scope"> | 
				
			|||
                    <ElButton class="elButton" icon="el-icon-plus" plain size="mini" | 
				
			|||
                        @click.native="onAdd(scope.row.id)" /> | 
				
			|||
                    <ElButton class="elButton" icon="el-icon-delete" plain size="mini" | 
				
			|||
                        @click.native="onDel(scope.$index)" /> | 
				
			|||
                </template> | 
				
			|||
            </ElTableColumn> | 
				
			|||
        </Table> | 
				
			|||
 | 
				
			|||
        <!-- 情报板弹窗 --> | 
				
			|||
        <QbbDialog :visible="isShowDialog" :info="qbbData" :type="type" @close="onCloseDialog" @dialogSubmit="dialogSubmit" /> | 
				
			|||
    </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import Table from '@screen/components/Table.vue'; | 
				
			|||
import Button from '@screen/components/Buttons/Button.vue'; | 
				
			|||
import request from "@/utils/request"; | 
				
			|||
import QbbDialog from "../qbbDialog/index.vue"; | 
				
			|||
import { Message } from 'element-ui' | 
				
			|||
import { planDeviceOptions } from "@screen/utils/enum.js"; | 
				
			|||
 | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
    name: 'formTable', | 
				
			|||
    components: { | 
				
			|||
        Button, | 
				
			|||
        Table, | 
				
			|||
        QbbDialog | 
				
			|||
    }, | 
				
			|||
    model: { | 
				
			|||
        prop: 'visible', | 
				
			|||
        event: 'update:value' | 
				
			|||
    }, | 
				
			|||
    inject: ['loadData'], | 
				
			|||
    props: { | 
				
			|||
        visible: Boolean, | 
				
			|||
        eventType: Number, | 
				
			|||
        type: Number, | 
				
			|||
        tableData: { | 
				
			|||
            type: Array, | 
				
			|||
            default: () => [{ | 
				
			|||
                deviceType: 1, | 
				
			|||
                searchRule: 1, | 
				
			|||
                qbb: '' | 
				
			|||
            }] | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
    data() { | 
				
			|||
        return { | 
				
			|||
            // tableData: [ | 
				
			|||
            //     { | 
				
			|||
            //         deviceType: 1, | 
				
			|||
            //         searchRule: 1, | 
				
			|||
            //         qbb: '安全行驶' | 
				
			|||
            //     } | 
				
			|||
            // ], | 
				
			|||
            isShowDialog: false, | 
				
			|||
            deviceOptions: planDeviceOptions, | 
				
			|||
            zyOptions: [ | 
				
			|||
                { | 
				
			|||
                    value: 1, | 
				
			|||
                    label: '指定设备资源' | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: 2, | 
				
			|||
                    label: '事发上游最近' | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: 3, | 
				
			|||
                    label: '事发下游最近' | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: 4, | 
				
			|||
                    label: '最近公里数' | 
				
			|||
                }, | 
				
			|||
            ], | 
				
			|||
            gzztOptions: [ | 
				
			|||
                { | 
				
			|||
                    value: "01", | 
				
			|||
                    label: "常亮" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "02", | 
				
			|||
                    label: "流水" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "03", | 
				
			|||
                    label: "闪烁" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "04", | 
				
			|||
                    label: "关闭", | 
				
			|||
                } | 
				
			|||
            ], | 
				
			|||
            gzmsOptions: [ | 
				
			|||
                { | 
				
			|||
                    value: "SETMD0", | 
				
			|||
                    label: "激光关闭" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD1", | 
				
			|||
                    label: "常亮模式" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD2", | 
				
			|||
                    label: "间隔100ms闪烁模式" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD3", | 
				
			|||
                    label: "间隔200ms闪烁模式", | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD4", | 
				
			|||
                    label: "间隔500ms闪烁模式", | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD5", | 
				
			|||
                    label: "2次闪烁模式" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD6", | 
				
			|||
                    label: "SOS模式" | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD7", | 
				
			|||
                    label: "自定义模式1", | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD8", | 
				
			|||
                    label: "自定义模式2", | 
				
			|||
                }, | 
				
			|||
                { | 
				
			|||
                    value: "SETMD9", | 
				
			|||
                    label: "自定义模式3", | 
				
			|||
                } | 
				
			|||
            ], | 
				
			|||
            qbbData: {}, | 
				
			|||
            sbOptions: [], | 
				
			|||
            deviceType: 1, | 
				
			|||
            index: 1 | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
    async created() { | 
				
			|||
        let loadData = await this.loadData(1); | 
				
			|||
        // console.log('aa',loadData) | 
				
			|||
        this.sbOptions = loadData; | 
				
			|||
    }, | 
				
			|||
    methods: { | 
				
			|||
        initData() { | 
				
			|||
            // request({ | 
				
			|||
            //     url: `business/device/query?deviceType=2`, | 
				
			|||
            //     method: "get", | 
				
			|||
            // }).then((result) => { | 
				
			|||
            //     if (result.code != 200) return Message.error(result?.msg); | 
				
			|||
            //     this.sbOptions = result.data; | 
				
			|||
 | 
				
			|||
            // }).catch(() => { | 
				
			|||
            //     Message.error("查询可变信息标识失败"); | 
				
			|||
            // }) | 
				
			|||
 | 
				
			|||
        }, | 
				
			|||
        async changeDeviceType(value) { | 
				
			|||
            this.deviceType = value; | 
				
			|||
            console.log('value', value) | 
				
			|||
            this.sbOptions = await this.loadData(value); | 
				
			|||
        }, | 
				
			|||
        onAdd(id) { | 
				
			|||
            this.tableData.push({ | 
				
			|||
                deviceType: 1, | 
				
			|||
                searchRule: 1, | 
				
			|||
                qbb: '' | 
				
			|||
            }) | 
				
			|||
        }, | 
				
			|||
        onDel(index) { | 
				
			|||
            if (this.tableData.length <= 1) { | 
				
			|||
                return Message.warning('最后一项不可删除!'); | 
				
			|||
            } | 
				
			|||
            this.tableData.splice(index, 1) | 
				
			|||
        }, | 
				
			|||
        clickQbb(index) { | 
				
			|||
            this.index = index; | 
				
			|||
            this.qbbData = this.tableData[index].dcInfoBoardTemplate; | 
				
			|||
            if (this.type == 1) { | 
				
			|||
                this.isShowDialog = true; | 
				
			|||
            } | 
				
			|||
        }, | 
				
			|||
        onCloseDialog() { | 
				
			|||
            this.isShowDialog = false; | 
				
			|||
        }, | 
				
			|||
        dialogSubmit(data) { | 
				
			|||
            this.tableData[this.index].qbb = data.content; | 
				
			|||
            this.tableData[this.index].otherConfig = JSON.stringify(data); | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
.EventDetail { | 
				
			|||
    display: flex; | 
				
			|||
    gap: 9px; | 
				
			|||
    width: 100%; | 
				
			|||
    // height: 768px; | 
				
			|||
    min-height: 50px; | 
				
			|||
    margin-top: 5px; | 
				
			|||
    flex-direction: column; | 
				
			|||
 | 
				
			|||
    ::v-deep { | 
				
			|||
        .el-table .el-table__cell { | 
				
			|||
            padding: 0 5px; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .mjs { | 
				
			|||
        display: flex; | 
				
			|||
 | 
				
			|||
        >div { | 
				
			|||
            margin-right: 10px; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .ms { | 
				
			|||
        width: 160px; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .plhx { | 
				
			|||
        display: flex; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    ::v-deep { | 
				
			|||
        .el-tag.el-tag--info { | 
				
			|||
            max-width: 100px; | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        .el-range-editor--medium .el-range__icon, | 
				
			|||
        .el-range-editor--medium .el-range__close-icon { | 
				
			|||
            display: none; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.elButton { | 
				
			|||
    background: #2ba8c3; | 
				
			|||
    border-radius: 2px 2px 2px 2px; | 
				
			|||
    color: #FFFFFF; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.elButton:hover, | 
				
			|||
.elButton:focus { | 
				
			|||
    background: #2ba8c3; | 
				
			|||
    border-radius: 2px 2px 2px 2px; | 
				
			|||
    border-color: #FFFFFF; | 
				
			|||
    color: #FFFFFF; | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
@ -0,0 +1,308 @@ | 
				
			|||
<template> | 
				
			|||
    <Dialog v-model="modelVisible" title="情报板确认"> | 
				
			|||
        <div class="EventAddPlanDialog"> | 
				
			|||
            <h4>预案内容</h4> | 
				
			|||
            <dev class="listBox disPid"> | 
				
			|||
                <div class="tplItem"> | 
				
			|||
                    <!-- 模板内容 --> | 
				
			|||
                    <BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="{}"></BoardTplPreview> | 
				
			|||
                    <!-- 操作按钮 --> | 
				
			|||
                    <div class="infoBtnBox infoBtnBoxSm"> | 
				
			|||
                        <p class="btn"> | 
				
			|||
                            <!-- <el-radio v-model="radio1" :label="1" @input="changeRadio(1)" /> --> | 
				
			|||
                        </p> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </dev> | 
				
			|||
            <h4>自动生成</h4> | 
				
			|||
            <dev class="listBox disPid"> | 
				
			|||
                <div class="tplItem"> | 
				
			|||
                    <!-- 模板内容 --> | 
				
			|||
                    <BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="{}"></BoardTplPreview> | 
				
			|||
                    <!-- 操作按钮 --> | 
				
			|||
                    <div class="infoBtnBox infoBtnBoxSm"> | 
				
			|||
                        <p class="btn"> | 
				
			|||
                            <!-- <el-radio v-model="radio1" :label="2" @input="changeRadio(2)" /> --> | 
				
			|||
                        </p> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </dev> | 
				
			|||
            <h4>情报板模版</h4> | 
				
			|||
            <vuescroll :ops="scrollOptions" class="listBox"> | 
				
			|||
                <div v-for="(item) in templateAvailable" :key="item.dictValue"> | 
				
			|||
                    <!-- 原来是<el-collapse v-model="activeNames"> --> | 
				
			|||
                    <h5>{{ item.dictLabel }}</h5> | 
				
			|||
                    <div v-for="(itm, indx) in item.list" :key="indx" class="tplItem"> | 
				
			|||
                        <!-- 模板内容 --> | 
				
			|||
                        <BoardTplPreview class="boardPreview" boardWH="1400*200" :tpl="itm"></BoardTplPreview> | 
				
			|||
                        <!-- 操作按钮 --> | 
				
			|||
                        <div class="infoBtnBox infoBtnBoxSm"> | 
				
			|||
                            <p class="btn"> | 
				
			|||
                                <el-radio v-model="radio1" :label="itm.id" @input="changeRadio(itm)" /> | 
				
			|||
                            </p> | 
				
			|||
                        </div> | 
				
			|||
                    </div> | 
				
			|||
                </div> | 
				
			|||
            </vuescroll> | 
				
			|||
        </div> | 
				
			|||
        <template #footer> | 
				
			|||
            <Button style="background: #C9C9C9;padding:0 24px;" | 
				
			|||
                @click.native="modelVisible = false, submitting = false">取消</Button> | 
				
			|||
            <Button style="padding:0 24px;" @click.native="handleSubmit" :loading="submitting">确认</Button> | 
				
			|||
        </template> | 
				
			|||
    </Dialog> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import vuescroll from "vuescroll"; | 
				
			|||
import scrollOptions from "@/common/scrollbar.js"; | 
				
			|||
import BoardTplPreview from "@screen/components/infoBoard/BoardTplPreview.vue"; | 
				
			|||
import Dialog from "@screen/components/Dialog/index"; | 
				
			|||
import Button from '@screen/components/Buttons/Button.vue'; | 
				
			|||
import { getTemplateList } from "@/api/board/template"; | 
				
			|||
import DeviceControlDialog from '../../../../../Home/components/Dialogs/DrivingGuidance/components/DeviceControlDialog.vue'; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
    name: 'qbbDialog', | 
				
			|||
    components: { | 
				
			|||
        Dialog, | 
				
			|||
        Button, | 
				
			|||
        vuescroll, | 
				
			|||
        BoardTplPreview, | 
				
			|||
        DeviceControlDialog | 
				
			|||
    }, | 
				
			|||
    model: { | 
				
			|||
        prop: 'visible', | 
				
			|||
        event: 'close' | 
				
			|||
    }, | 
				
			|||
    props: { | 
				
			|||
        visible: Boolean, | 
				
			|||
        type: Number, | 
				
			|||
        info: { | 
				
			|||
            type: Object, | 
				
			|||
            default: () => { } | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
    data() { | 
				
			|||
        return { | 
				
			|||
            submitting: false, | 
				
			|||
            selectedSize: "", | 
				
			|||
            scrollOptions, | 
				
			|||
            templateAvailable: null, | 
				
			|||
            tplCategory: [], | 
				
			|||
            templateAll: [], | 
				
			|||
            radio1: '', | 
				
			|||
            itmData: {} | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
    mounted() { | 
				
			|||
        if (this.type == 1) { | 
				
			|||
            this.initData(); | 
				
			|||
        } | 
				
			|||
    }, | 
				
			|||
    computed: { | 
				
			|||
        modelVisible: { | 
				
			|||
            get() { | 
				
			|||
                if (this.visible) { | 
				
			|||
                    if (this.info && this.info.id) { | 
				
			|||
                        this.radio1 = Number(this.info.id); | 
				
			|||
                    } | 
				
			|||
                } | 
				
			|||
                return this.visible; | 
				
			|||
            }, | 
				
			|||
            set(val) { | 
				
			|||
                this.$emit('close', val) | 
				
			|||
            } | 
				
			|||
        }, | 
				
			|||
    }, | 
				
			|||
    methods: { | 
				
			|||
        initData() { | 
				
			|||
            if (this.tplCategory.length && this.templateAll.length) { | 
				
			|||
                this.____setAvailableTemplate(); | 
				
			|||
            } else { | 
				
			|||
                Promise.all([ | 
				
			|||
                    this.____getTemplateCategory(), | 
				
			|||
                    this.____getAllTemplate(), | 
				
			|||
                ]).then((res) => { | 
				
			|||
                    this.____setAvailableTemplate(); | 
				
			|||
                }); | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
        }, | 
				
			|||
        // 获取信息模板分类 | 
				
			|||
        ____getTemplateCategory() { | 
				
			|||
            return this.getDicts("iot_template_category").then((res) => { | 
				
			|||
                this.tplCategory = res.data; | 
				
			|||
            }); | 
				
			|||
        }, | 
				
			|||
        //获取全部模版 | 
				
			|||
        ____getAllTemplate() { | 
				
			|||
            return getTemplateList().then((res) => { | 
				
			|||
                this.templateAll = res.data; | 
				
			|||
            }); | 
				
			|||
        }, | 
				
			|||
        // 设置当前设备可用的模板 | 
				
			|||
        ____setAvailableTemplate() { | 
				
			|||
            this.templateAvailable = []; | 
				
			|||
            this.tplCategory.forEach((item, index) => { | 
				
			|||
                let arr = this.templateAll["" + index]; | 
				
			|||
                if (arr.length > 0) { | 
				
			|||
                    let temp = []; | 
				
			|||
                    arr.forEach((tpl) => { | 
				
			|||
                        if (tpl.screenSize) { | 
				
			|||
                            temp.push(tpl); | 
				
			|||
                        } | 
				
			|||
                    }); | 
				
			|||
                    if (temp.length > 0) { | 
				
			|||
                        this.templateAvailable.push({ | 
				
			|||
                            ...item, | 
				
			|||
                            list: temp, | 
				
			|||
                        }); | 
				
			|||
                    } | 
				
			|||
                } | 
				
			|||
            }); | 
				
			|||
        }, | 
				
			|||
        changeRadio(data) { | 
				
			|||
            this.itmData = data; | 
				
			|||
        }, | 
				
			|||
        handleSubmit() { | 
				
			|||
            this.modelVisible = false; | 
				
			|||
            this.$emit('dialogSubmit', this.itmData); | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
 | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
.listBox { | 
				
			|||
    padding: 20px; | 
				
			|||
 | 
				
			|||
    .tplItem { | 
				
			|||
        margin-right: 14px; | 
				
			|||
        display: flex; | 
				
			|||
        align-items: stretch; | 
				
			|||
        padding-bottom: 10px; | 
				
			|||
 | 
				
			|||
        .boardPreview { | 
				
			|||
            border: 1px solid rgba(61, 232, 255, 0.5); | 
				
			|||
            // width: 560px; | 
				
			|||
            // height:80px; | 
				
			|||
            flex: 1; | 
				
			|||
        } | 
				
			|||
 | 
				
			|||
        .infoBtnBox { | 
				
			|||
            &.infoBtnBoxSm { | 
				
			|||
                width: 60px; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            width: 110px; | 
				
			|||
            height: 80px; | 
				
			|||
            display: flex; | 
				
			|||
            margin-left: 10px; | 
				
			|||
            /* // border: solid 1px #05afe3; */ | 
				
			|||
            border: 1px solid rgba(61, 232, 255, 0.5); | 
				
			|||
            display: flex; | 
				
			|||
            justify-content: space-around; | 
				
			|||
            align-items: center; | 
				
			|||
 | 
				
			|||
            .btn { | 
				
			|||
                background-repeat: no-repeat; | 
				
			|||
                background-size: 100% 100%; | 
				
			|||
                width: 15px; | 
				
			|||
                height: 30px; | 
				
			|||
 | 
				
			|||
                &.btnApply { | 
				
			|||
                    background-image: url(~@/assets/jihe/images/button/toLeft.svg); | 
				
			|||
                } | 
				
			|||
 | 
				
			|||
                &.btnEdit { | 
				
			|||
                    background-image: url(~@/assets/jihe/images/button/edit.svg); | 
				
			|||
                } | 
				
			|||
 | 
				
			|||
                &.btnDelete { | 
				
			|||
                    background-image: url(~@/assets/jihe/images/button/delete.svg); | 
				
			|||
                } | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            i { | 
				
			|||
                font-size: 24px; | 
				
			|||
                color: #666; | 
				
			|||
                padding-left: 4px; | 
				
			|||
                cursor: pointer; | 
				
			|||
                caret-color: rgba(0, 0, 0, 0); | 
				
			|||
                user-select: none; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            i:hover { | 
				
			|||
                color: #05afe3; | 
				
			|||
            } | 
				
			|||
 | 
				
			|||
            .disabledClass { | 
				
			|||
                pointer-events: none; | 
				
			|||
                cursor: auto !important; | 
				
			|||
                color: #ccc; | 
				
			|||
            } | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .controlBox { | 
				
			|||
        margin-top: 10px; | 
				
			|||
        margin-bottom: 10px; | 
				
			|||
        display: flex; | 
				
			|||
        justify-content: center; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .el-collapse { | 
				
			|||
        max-height: 100% !important; | 
				
			|||
        overflow: auto; | 
				
			|||
        border-bottom: none; | 
				
			|||
        border-top: none; | 
				
			|||
        padding: 0 0.5vw; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.disPid { | 
				
			|||
    padding: 0 20px !important; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.fade-enter-active, | 
				
			|||
.fade-leave-active { | 
				
			|||
    transition: opacity .24s; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.fade-enter, | 
				
			|||
.fade-leave-to { | 
				
			|||
    opacity: 0; | 
				
			|||
} | 
				
			|||
 | 
				
			|||
.EventAddPlanDialog { | 
				
			|||
    gap: 9px; | 
				
			|||
    width: 650px; | 
				
			|||
    height: 700px; | 
				
			|||
    display: flex; | 
				
			|||
    flex-direction: column; | 
				
			|||
 | 
				
			|||
    h4 { | 
				
			|||
        margin: 0 0 5px 0; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    ::v-deep { | 
				
			|||
        .el-radio__label { | 
				
			|||
            display: none; | 
				
			|||
        } | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .form { | 
				
			|||
        flex: 1; | 
				
			|||
        overflow-y: auto; | 
				
			|||
    } | 
				
			|||
 | 
				
			|||
    .footer { | 
				
			|||
        display: flex; | 
				
			|||
        justify-content: end; | 
				
			|||
        gap: 15px; | 
				
			|||
    } | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
| 
		 After Width: | Height: | Size: 3.1 KiB  | 
| 
		 Before Width: | Height: | Size: 369 KiB  | 
@ -1,42 +1,152 @@ | 
				
			|||
<template> | 
				
			|||
  <div class='comp_box'> | 
				
			|||
    <img src="./img.png" /> | 
				
			|||
  <div class="RoadNetworkMonitoring"> | 
				
			|||
    <!-- 搜索栏 --> | 
				
			|||
    <div class="filter"> | 
				
			|||
      <ButtonGradient @click="onRefresh" class="refresh-btn"> | 
				
			|||
        <template #prefix> | 
				
			|||
          <img src="./images/refresh.svg" /> | 
				
			|||
        </template> | 
				
			|||
        刷新 | 
				
			|||
      </ButtonGradient> | 
				
			|||
 | 
				
			|||
      <InputSearch | 
				
			|||
        style="width: 402px" | 
				
			|||
        :formList="searchFormList" | 
				
			|||
        :formConfigOptions="{ dFormData: { eventState: '0' } }" | 
				
			|||
        @handleSearch="handleSearch" | 
				
			|||
      /> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <!-- 内容 --> | 
				
			|||
    <div class="body"> | 
				
			|||
      <RoadStateCard | 
				
			|||
        v-for="(item, index) in data" | 
				
			|||
        :key="index" | 
				
			|||
        :cardData="item" | 
				
			|||
        @firstBtnClick="firstBtnClick" | 
				
			|||
        @lastBtnClick="lastBtnClick" | 
				
			|||
      /> | 
				
			|||
    </div> | 
				
			|||
 | 
				
			|||
    <!-- 分页 --> | 
				
			|||
    <div class="footer"> | 
				
			|||
      <Pagination | 
				
			|||
        @current-change="initData" | 
				
			|||
        @size-change="onSizeChange" | 
				
			|||
        width="'100%'" | 
				
			|||
        :page-sizes="[12, 16, 20, 30, 50]" | 
				
			|||
        :page-size="searchData.pageSize" | 
				
			|||
        :current-page.sync="searchData.pageNum" | 
				
			|||
        layout="total, sizes, prev, pager, next" | 
				
			|||
        :total="total" | 
				
			|||
      > | 
				
			|||
      </Pagination> | 
				
			|||
    </div> | 
				
			|||
  </div> | 
				
			|||
</template> | 
				
			|||
 | 
				
			|||
<script> | 
				
			|||
import ButtonGradient from "@screen/components/Buttons/ButtonGradient.vue"; | 
				
			|||
import Pagination from "@screen/components/Pagination.vue"; | 
				
			|||
import InputSearch from "@screen/components/InputSearch/index.vue"; | 
				
			|||
import RoadStateCard from "@screen/components/RoadStateCard/index.vue"; | 
				
			|||
// import EventDetailDialog from "./EventDetailDialog/index"; | 
				
			|||
// import EventDispatchDialog from "./EventDispatchDialog/index"; | 
				
			|||
// import { searchFormList } from "./data"; | 
				
			|||
import request from "@/utils/request"; | 
				
			|||
 | 
				
			|||
const directionMapping = { | 
				
			|||
  1: "菏泽方向", | 
				
			|||
  2: "双向", | 
				
			|||
  3: "济南方向", | 
				
			|||
}; | 
				
			|||
 | 
				
			|||
export default { | 
				
			|||
  name: 'InDevelopment', | 
				
			|||
  name: "RoadNetworkMonitoring", | 
				
			|||
  components: { | 
				
			|||
    Pagination, | 
				
			|||
    RoadStateCard, | 
				
			|||
    InputSearch, | 
				
			|||
    Pagination, | 
				
			|||
    ButtonGradient, | 
				
			|||
  }, | 
				
			|||
  props: { | 
				
			|||
    text: { | 
				
			|||
      type: String, | 
				
			|||
      default: "暂无数据" | 
				
			|||
    } | 
				
			|||
  data() { | 
				
			|||
    return { | 
				
			|||
      searchFormList: {}, | 
				
			|||
      detailDialogFormData: {}, | 
				
			|||
      total: 0, | 
				
			|||
      data: [], | 
				
			|||
      eventId: "0", | 
				
			|||
      searchData: { | 
				
			|||
        pageSize: 16, | 
				
			|||
        pageNum: 1, | 
				
			|||
        eventState: "0", | 
				
			|||
      }, | 
				
			|||
    }; | 
				
			|||
  }, | 
				
			|||
  mounted() { | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
  created() { | 
				
			|||
    this.initData(); | 
				
			|||
  }, | 
				
			|||
  methods: { | 
				
			|||
    initData() { | 
				
			|||
      request({ | 
				
			|||
        // url: `/dc/system/event/dispatchEventList`, | 
				
			|||
        url: "/dc/system/event/list", | 
				
			|||
        method: "get", | 
				
			|||
        params: this.searchData, | 
				
			|||
      }).then((result) => { | 
				
			|||
        if (result.code != 200) return Message.error(result?.msg); | 
				
			|||
        this.total = result.total; | 
				
			|||
        result.rows.forEach((it) => { | 
				
			|||
          it.stringDirection = directionMapping[it.direction] || it.direction; | 
				
			|||
        }); | 
				
			|||
        this.data = result.rows; | 
				
			|||
      }); | 
				
			|||
    }, | 
				
			|||
    onSizeChange(pageSize) {}, | 
				
			|||
    getStateCardBind(item) {}, | 
				
			|||
    onRefresh() {}, | 
				
			|||
    firstBtnClick(id) {}, | 
				
			|||
    handleSearch(data) {}, | 
				
			|||
  }, | 
				
			|||
}; | 
				
			|||
</script> | 
				
			|||
 | 
				
			|||
<style lang='scss' scoped> | 
				
			|||
.comp_box { | 
				
			|||
  // padding-top:160px; | 
				
			|||
  width: 100%; | 
				
			|||
<style lang="scss" scoped> | 
				
			|||
.RoadNetworkMonitoring { | 
				
			|||
  padding: 21px; | 
				
			|||
 | 
				
			|||
  height: 100%; | 
				
			|||
  color: #8A9EAA; | 
				
			|||
  display: flex; | 
				
			|||
  justify-content: center; | 
				
			|||
  align-items: center; | 
				
			|||
  position: relative; | 
				
			|||
  img { | 
				
			|||
    position: absolute; | 
				
			|||
    left: 0; | 
				
			|||
    top: 0; | 
				
			|||
    bottom: 0; | 
				
			|||
    right: 0; | 
				
			|||
  flex-direction: column; | 
				
			|||
  z-index: 6; | 
				
			|||
 | 
				
			|||
  .filter { | 
				
			|||
    height: 38px; | 
				
			|||
    display: flex; | 
				
			|||
    // justify-content: flex-end; | 
				
			|||
    justify-content: space-between; | 
				
			|||
    .refresh-btn { | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .body { | 
				
			|||
    flex: 1; | 
				
			|||
    overflow: auto; | 
				
			|||
    display: grid; | 
				
			|||
    grid-template-columns: repeat(4, 1fr); | 
				
			|||
    grid-gap: 20px; | 
				
			|||
    // grid-row-gap: 9px; | 
				
			|||
    // grid-column-gap: 9px; | 
				
			|||
    grid-auto-rows: min-content; | 
				
			|||
  } | 
				
			|||
 | 
				
			|||
  .footer { | 
				
			|||
    margin-top: 15px; | 
				
			|||
    height: 36px; | 
				
			|||
    display: flex; | 
				
			|||
    align-items: center; | 
				
			|||
    justify-content: center; | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
</style> | 
				
			|||
 | 
				
			|||
@ -0,0 +1,97 @@ | 
				
			|||
export default { | 
				
			|||
  "msg": "操作成功", | 
				
			|||
    "code": 200, | 
				
			|||
      "data": { | 
				
			|||
    "站前悬臂式可变信息标志": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "2", | 
				
			|||
            "sum": "10", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "高清网络枪型固定摄像机": { | 
				
			|||
      "sucessRate": "72.73%", | 
				
			|||
        "failRate": "27.27%", | 
				
			|||
          "sumUseState": "33", | 
				
			|||
            "sum": "315", | 
				
			|||
              "lostRate": "27.27%" | 
				
			|||
    }, | 
				
			|||
    "智能设备箱": { | 
				
			|||
      "sucessRate": "91.67%", | 
				
			|||
        "failRate": "8.33%", | 
				
			|||
          "sumUseState": "12", | 
				
			|||
            "sum": "219", | 
				
			|||
              "lostRate": "8.33%" | 
				
			|||
    }, | 
				
			|||
    "智能行车诱导系统": { | 
				
			|||
      "sucessRate": "25.00%", | 
				
			|||
        "failRate": "75.00%", | 
				
			|||
          "sumUseState": "4", | 
				
			|||
            "sum": "21", | 
				
			|||
              "lostRate": "75.00%" | 
				
			|||
    }, | 
				
			|||
    "门架式可变信息标志": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "5", | 
				
			|||
            "sum": "31", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "护栏碰撞预警系统": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "1", | 
				
			|||
            "sum": "18", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "180°全景摄像机": { | 
				
			|||
      "sucessRate": "50.00%", | 
				
			|||
        "failRate": "50.00%", | 
				
			|||
          "sumUseState": "2", | 
				
			|||
            "sum": "10", | 
				
			|||
              "lostRate": "50.00%" | 
				
			|||
    }, | 
				
			|||
    "360°全景摄像机": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "2", | 
				
			|||
            "sum": "15", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "一类交通量调查站": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "1", | 
				
			|||
            "sum": "8", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "全部设备": { | 
				
			|||
      "sucessRate": "73.83%", | 
				
			|||
        "failRate": "26.17%", | 
				
			|||
          "sumUseState": "107", | 
				
			|||
            "sum": "1190", | 
				
			|||
              "lostRate": "26.17%" | 
				
			|||
    }, | 
				
			|||
    "路段语音广播系统": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "1", | 
				
			|||
            "sum": "27", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "激光疲劳唤醒": { | 
				
			|||
      "sucessRate": "100.00%", | 
				
			|||
        "failRate": "0.00%", | 
				
			|||
          "sumUseState": "1", | 
				
			|||
            "sum": "6", | 
				
			|||
              "lostRate": "0.00%" | 
				
			|||
    }, | 
				
			|||
    "高清网络球形摄像机": { | 
				
			|||
      "sucessRate": "67.44%", | 
				
			|||
        "failRate": "32.56%", | 
				
			|||
          "sumUseState": "43", | 
				
			|||
            "sum": "161", | 
				
			|||
              "lostRate": "32.56%" | 
				
			|||
    } | 
				
			|||
  } | 
				
			|||
} | 
				
			|||
					Loading…
					
					
				
		Reference in new issue