dedsudiyu 1 year ago
parent
commit
9a358f3f7e

+ 175 - 0
src/api/emergencyManagement/index.js

@@ -0,0 +1,175 @@
+import request from '@/utils/request'
+/************ 预案音乐 ************/
+//预案音乐-列表
+export function laboratoryMusicList(data) {
+  return request({
+    url: '/laboratory/music/list',
+    method: 'post',
+    data: data
+  })
+}
+//预案音乐-新增
+export function laboratoryMusicAdd(data) {
+  return request({
+    url: '/laboratory/music/add',
+    method: 'post',
+    data: data
+  })
+}
+//预案音乐-编辑
+export function laboratoryMusicUpdate(data) {
+  return request({
+    url: '/laboratory/music/update',
+    method: 'post',
+    data: data
+  })
+}
+//预案音乐-删除
+export function laboratoryMusicDelete(data) {
+  return request({
+    url: '/laboratory/music/delete',
+    method: 'post',
+    data: data
+  })
+}
+/*
+预案音乐-下拉列表
+musicType:1预案音乐,2疏散音乐
+*/
+export function laboratoryMusicFindByType(query) {
+  return request({
+    url: '/laboratory/music/findByType',
+    method: 'get',
+    params: query
+  })
+}
+//预案音乐-详情
+export function laboratoryMusicDetail(query) {
+  return request({
+    url: '/laboratory/music/detail',
+    method: 'get',
+    params: query
+  })
+}
+/************ 设备功能 ************/
+//设备功能-下拉列表
+export function laboratoryRiskDeviceTypeGetList(query) {
+  return request({
+    url: '/laboratory/riskDeviceType/getList',
+    method: 'get',
+    params: query
+  })
+}
+//设备功能-列表
+export function laboratoryRiskDeviceTypeList(data) {
+  return request({
+    url: '/laboratory/riskDeviceType/list',
+    method: 'post',
+    data: data
+  })
+}
+//设备功能-新增
+export function laboratoryRiskDeviceTypeAdd(data) {
+  return request({
+    url: '/laboratory/riskDeviceType/add',
+    method: 'post',
+    data: data
+  })
+}
+//设备功能-编辑
+export function laboratoryRiskDeviceTypeUpdate(data) {
+  return request({
+    url: '/laboratory/riskDeviceType/update',
+    method: 'post',
+    data: data
+  })
+}
+//设备功能-删除
+export function laboratoryRiskDeviceTypeDelete(data) {
+  return request({
+    url: '/laboratory/riskDeviceType/delete',
+    method: 'post',
+    data: data
+  })
+}
+//设备功能-详情
+export function laboratoryRiskDeviceTypeDetail(query) {
+  return request({
+    url: '/laboratory/riskDeviceType/detail',
+    method: 'get',
+    params: query
+  })
+}
+/************ 预案管理 ************/
+//预案管理-列表
+export function laboratoryPlanList(data) {
+  return request({
+    url: '/laboratory/plan/list',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-新增
+export function laboratoryPlanAdd(data) {
+  return request({
+    url: '/laboratory/plan/add',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-编辑
+export function laboratoryPlanUpdate(data) {
+  return request({
+    url: '/laboratory/plan/update',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-删除
+export function laboratoryPlanDelete(data) {
+  return request({
+    url: '/laboratory/plan/delete',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-详情
+export function laboratoryPlanDetail(query) {
+  return request({
+    url: '/laboratory/plan/detail',
+    method: 'get',
+    params: query
+  })
+}
+//预案管理-预案规则-列表
+export function laboratoryRiskPlanLevelGetRiskPlanLeveList(query) {
+  return request({
+    url: '/laboratory/riskPlanLevel/getRiskPlanLeveList',
+    method: 'get',
+    params: query
+  })
+}
+//预案管理-预案规则-新增
+export function laboratoryRiskPlanLevelAdd(data) {
+  return request({
+    url: '/laboratory/riskPlanLevel/add',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-预案规则-编辑
+export function laboratoryRiskPlanLevelUpdate(data) {
+  return request({
+    url: '/laboratory/riskPlanLevel/update',
+    method: 'post',
+    data: data
+  })
+}
+//预案管理-预案规则-删除
+export function laboratoryRiskPlanLevelDelete(data) {
+  return request({
+    url: '/laboratory/riskPlanLevel/delete',
+    method: 'post',
+    data: data
+  })
+}

+ 343 - 0
src/views/emergencyManagement/functionManage/deviceFunction/index.vue

@@ -0,0 +1,343 @@
+<!-- 设备功能 -->
+<template>
+  <div class="app-container deviceFunction">
+    <div class="page-container deviceFunctionPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="请输入关键词"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="typeSource">
+            <el-select v-model="queryParams.typeSource" placeholder="请选择设备分类" @change="queryChange" style="width: 200px">
+              <el-option label="硬件设备" :value="1"/>
+              <el-option label="物联设备" :value="2"/>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="" prop="typeKey">
+            <el-select v-model="queryParams.typeKey" placeholder="请选择设备类型" style="width: 200px">
+              <el-option
+                v-for="dict in queryOptionList"
+                :key="dict.code"
+                :label="dict.name"
+                :value="dict.code"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-add-common-style-button"
+             style="float: right;"
+             @click="dialogOpen"
+             v-hasPermiRouter="['demo:demo:add']"
+          >新增</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="名称" prop="riskDeviceTypeName"  show-overflow-tooltip/>
+          <el-table-column label="分类" prop="typeSource" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.typeSource == 1 ? '硬件设备' : (scope.row.typeSource == 2 ? '物联设备' : '')}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="类型" prop="typeKey" width="100" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span v-if="scope.row.typeSource == 1">
+                <span v-for="item in iotHardware" v-show="item.code == scope.row.typeKey">{{item.name}}</span>
+              </span>
+              <span v-if="scope.row.typeSource == 2">
+                <span v-for="item in iotTypeList" v-show="item.code == scope.row.typeKey">{{item.name}}</span>
+              </span>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" width="200" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(1,scope.row)"
+                   v-hasPermiRouter="['demo:demo:edit']"
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+                   v-hasPermiRouter="['demo:demo:del']"
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--新增弹窗-->
+    <el-dialog class="planMusicPage-dialog" :title='dialogTitle' width="540px" append-to-body
+               :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <div class="planMusicPage-dialog-box">
+        <el-form :model="dialogForm" class="dialogForm" ref="dialogForm"
+                 :rules="rules" style="width:100%;" label-width="90px">
+          <el-form-item label="名称:" prop="riskDeviceTypeName">
+            <el-input
+              maxLength="30"
+              v-model="dialogForm.riskDeviceTypeName"
+              placeholder="请输入名称"
+              clearable
+              style="width: 360px"
+            />
+          </el-form-item>
+          <el-form-item label="分类:" prop="typeSource">
+            <el-radio-group v-model="dialogForm.typeSource" @change="dialogChange">
+              <el-radio :label="1">硬件设备</el-radio>
+              <el-radio :label="2">物联设备</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="类型:" prop="typeKey">
+            <el-select v-model="dialogForm.typeKey"
+                       placeholder="请选择设备类型" style="width: 360px">
+              <el-option
+                v-for="dict in dialogOptionList"
+                :key="dict.code"
+                :label="dict.name"
+                :value="dict.code"
+              ></el-option>
+            </el-select>
+          </el-form-item>
+          <el-form-item label="说明:" prop="remark">
+            <el-input
+              v-model="dialogForm.remark"
+              maxLength="200"
+              placeholder="请输入说明"
+              :show-word-limit="true"
+              style="width:360px;"
+              type="textarea"
+              resize="none"
+              :rows="2"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
+        <p class="dialog-footer-button-primary" @click="dialogSubmit">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+  import { laboratoryRiskDeviceTypeList,laboratoryRiskDeviceTypeAdd,laboratoryRiskDeviceTypeUpdate,
+    laboratoryRiskDeviceTypeDelete,laboratoryRiskDeviceTypeDetail } from "@/api/emergencyManagement/index";
+  import { iotTypeGetTypeKey,iotHardwareTypeGetTypeKey } from "@/api/iotDevice/index";
+  export default {
+    name: 'index',
+    //components: {
+    //  addPage
+    //},
+    data () {
+      return {
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        iotTypeList:[],
+        iotHardware:[],
+        //下拉列表数据
+        queryOptionList:[],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          typeSource :null,
+          typeKey:null,
+        },
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //弹窗相关
+        dialogTitle:null,
+        dialogType:false,
+        dialogForm:{},
+        dialogOptionList:[],
+        rules:{
+          riskDeviceTypeName:[
+            { required: true, message: '请输入名称', trigger: 'blur' },
+            { required: true, message: "请输入名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          typeSource:[
+            { required: true, message: '请选择分类', trigger: 'blur' },
+            { required: true, message: "请选择分类", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          typeKey:[
+            { required: true, message: '请选择类型', trigger: 'blur' },
+            { required: true, message: "请选择类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      this.iotTypeGetTypeKey();
+      this.iotHardwareTypeGetTypeKey();
+      this.getList();
+    },
+    methods: {
+      //弹层选中
+      dialogChange(val){
+        this.$set(this.dialogForm,'typeKey',null);
+        if(val == 1){
+          this.$set(this,'dialogOptionList',this.iotHardware);
+        }else if(val == 2){
+          this.$set(this,'dialogOptionList',this.iotTypeList);
+        }
+      },
+      //弹层关闭
+      dialogOff(){
+        this.$set(this,'dialogType',false);
+      },
+      //弹层开启
+      dialogOpen(){
+        this.dialogFormReset();
+        this.$set(this,'dialogTitle','新增');
+        this.$set(this,'dialogType',true);
+      },
+      //弹层确定
+      dialogSubmit(){
+        // let obj = JSON.parse(JSON.stringify(this.dialogForm))
+        let obj = {
+          riskDeviceTypeName:this.dialogForm.riskDeviceTypeName,
+          typeSource:this.dialogForm.typeSource,
+          typeKey:this.dialogForm.typeKey,
+          remark:this.dialogForm.remark,
+        }
+        if(this.dialogForm.id){
+          obj.id = this.dialogForm.id;
+          laboratoryRiskDeviceTypeUpdate(obj).then(response => {
+            this.msgSuccess(response.message);
+            this.getList();
+          });
+        }else{
+          laboratoryRiskDeviceTypeAdd(obj).then(response => {
+            this.msgSuccess(response.message);
+            this.getList();
+          });
+        }
+        this.$set(this,'dialogType',false);
+      },
+      dialogFormReset(){
+        this.$set(this,'dialogForm',{
+          riskDeviceTypeName:'',
+          typeSource:'',
+          typeKey:'',
+          remark:'',
+        });
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          typeSource:null,
+          typeKey:null,
+        });
+        this.$set(this,'queryOptionList',[])
+        this.getList();
+      },
+      //搜索栏选中分类
+      queryChange(val){
+        this.$set(this.queryParams,'typeKey',null);
+        if(val == 1){
+          this.$set(this,'queryOptionList',this.iotHardware);
+        }else if(val == 2){
+          this.$set(this,'queryOptionList',this.iotTypeList);
+        }
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        laboratoryRiskDeviceTypeList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //编辑
+          this.$set(this,'dialogTitle','编辑');
+          this.$set(this,'dialogForm',JSON.parse(JSON.stringify(row)));
+          if(row.typeSource == 1){
+            this.$set(this,'dialogOptionList',this.iotHardware);
+          }else if(row.typeSource == 2){
+            this.$set(this,'dialogOptionList',this.iotTypeList);
+          }
+          this.$set(this,'dialogType',true);
+        }else if(type == 2){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            laboratoryRiskDeviceTypeDelete({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }
+      },
+      //获取物联分类下拉列表
+      iotTypeGetTypeKey(){
+        iotTypeGetTypeKey({}).then(response => {
+          this.$set(this,'iotTypeList',response.data);
+        });
+      },
+      //获取硬件分类下拉列表
+      iotHardwareTypeGetTypeKey(){
+        iotHardwareTypeGetTypeKey({}).then(response => {
+          this.$set(this,'iotHardware',response.data);
+        });
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .deviceFunction{
+    .deviceFunctionPage{
+
+    }
+  }
+</style>

+ 329 - 0
src/views/emergencyManagement/functionManage/planMusic/index.vue

@@ -0,0 +1,329 @@
+<!-- 预案音乐 -->
+<template>
+  <div class="app-container planMusic">
+    <div class="page-container planMusicPage" v-if="pageType === 1">
+      <div class="page-form-title-box">
+        <el-form :model="queryParams" class="form-box" ref="queryForm"
+                 :inline="true" style="width:100%;">
+          <el-form-item label="" prop="searchValue">
+            <el-input
+              maxLength="30"
+              v-model="queryParams.searchValue"
+              placeholder="请输入关键词"
+              style="width: 200px"
+            />
+          </el-form-item>
+          <el-form-item label="" prop="musicType">
+            <el-select v-model="queryParams.musicType" placeholder="请选择类型" style="width: 200px">
+              <el-option label="预案音乐" :value="1"/>
+              <el-option label="疏散音乐" :value="2"/>
+            </el-select>
+          </el-form-item>
+          <p class="page-inquire-common-style-button" @click="handleQuery">查询</p>
+          <p class="page-reset-common-style-button" @click="resetQuery">重置</p>
+          <p class="page-add-common-style-button"
+             style="float: right;"
+             @click="dialogOpen"
+             v-hasPermiRouter="['demo:demo:add']"
+          >新增</p>
+        </el-form>
+      </div>
+      <div class="page-content-box">
+        <el-table class="table-box" v-loading="loading" border :data="dataList">
+          <el-table-column label="名称" prop="musicName"  show-overflow-tooltip/>
+          <el-table-column label="类型" prop="musicType" width="140" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{scope.row.musicType == 1 ? '预案音乐' : (scope.row.musicType == 2 ? '疏散音乐' : '')}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="地址" prop="fileUrl" width="500" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span class="clickCopy" @click="clickCopy(scope.row.fileUrl)">{{scope.row.fileUrl}}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="创建时间" prop="createTime" width="200" show-overflow-tooltip>
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="备注" prop="remark" width="300" show-overflow-tooltip/>
+          <el-table-column label="操作" width="120" show-overflow-tooltip v-if="tableButtonType">
+            <template slot-scope="scope">
+              <div class="table-button-box">
+                <p class="table-button-null"></p>
+                <p class="table-button-p"
+                   @click="tableButton(1,scope.row)"
+                   v-hasPermiRouter="['demo:demo:edit']"
+                >编辑</p>
+                <p class="table-button-p"
+                   @click="tableButton(2,scope.row)"
+                   v-hasPermiRouter="['demo:demo:del']"
+                >删除</p>
+                <p class="table-button-null"></p>
+              </div>
+            </template>
+          </el-table-column>
+        </el-table>
+        <pagination :page-sizes="[20, 30, 40, 50]"
+                    v-show="total>0"
+                    :total="total"
+                    :page.sync="queryParams.page"
+                    :limit.sync="queryParams.pageSize"
+                    @pagination="getList"
+        />
+      </div>
+    </div>
+    <!--新增弹窗-->
+    <el-dialog class="planMusicPage-dialog" :title='dialogTitle' width="540px" append-to-body
+               :visible.sync="dialogType" v-if="dialogType" @close="dialogOff()"
+               :close-on-click-modal="false" :close-on-press-escape="false">
+      <div class="planMusicPage-dialog-box">
+        <el-form :model="dialogForm" class="dialogForm" ref="dialogForm"
+                 :rules="rules" style="width:100%;" label-width="90px">
+          <el-form-item label="名称:" prop="musicName">
+            <el-input
+              maxLength="30"
+              v-model="dialogForm.musicName"
+              placeholder="请输入名称"
+              clearable
+              style="width: 360px"
+            />
+          </el-form-item>
+          <el-form-item label="类型:" prop="musicType">
+            <el-radio-group v-model="dialogForm.musicType">
+              <el-radio :label="1">预案音乐</el-radio>
+              <el-radio :label="2">疏散音乐</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="文件:" prop="fileUrl">
+            <div>
+              <el-upload
+                class="certificate-avatar-uploader"
+                :action="uploadImgUrl"
+                :show-file-list="false"
+                :on-success="handleAvatarSuccess"
+                :headers="headers"
+                :before-upload="beforeAvatarUpload">
+                <p class="dialog-up-button-p">{{dialogForm.fileUrl?dialogForm.fileUrl:'上传'}}</p>
+              </el-upload>
+            </div>
+          </el-form-item>
+          <el-form-item label="说明:" prop="remark">
+            <el-input
+              v-model="dialogForm.remark"
+              maxLength="200"
+              placeholder="请输入说明"
+              :show-word-limit="true"
+              style="width:360px;"
+              type="textarea"
+              resize="none"
+              :rows="2"
+            />
+          </el-form-item>
+        </el-form>
+      </div>
+      <div slot="footer" class="dialog-footer dialog-footer-box">
+        <p class="dialog-footer-button-null"></p>
+        <p class="dialog-footer-button-info" @click="dialogOff()">取消</p>
+        <p class="dialog-footer-button-primary" @click="dialogSubmit">确定</p>
+        <p class="dialog-footer-button-null"></p>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+<script>
+  import { getToken } from "@/utils/auth";
+  import { laboratoryMusicList,laboratoryMusicAdd,laboratoryMusicUpdate,laboratoryMusicDelete,laboratoryMusicDetail } from "@/api/emergencyManagement/index";
+  export default {
+    name: 'index',
+    data () {
+      return {
+        uploadImgUrl: this.uploadUrl(), // 上传的图片服务器地址
+        headers: {
+          Authorization:getToken(),
+        },
+        tableButtonType:this.hasPermiDom(['demo:demo:detail','demo:demo:edit','demo:demo:del',]),
+        //页面状态
+        pageType:1,
+        //页面遮罩
+        loading:false,
+        //下拉列表数据
+        optionList:[{value:true,label:'启用'},{value:false,label:'停用'}],
+        //查询条件
+        queryParams:{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          musicType  :null,
+        },
+        //列表数据
+        dataList:[],
+        //数据数量
+        total:0,
+        //弹窗相关
+        dialogTitle:null,
+        dialogType:false,
+        dialogForm:{},
+        rules:{
+          musicName:[
+            { required: true, message: '请输入音乐名称', trigger: 'blur' },
+            { required: true, message: "请输入音乐名称", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          musicType:[
+            { required: true, message: '请选择音乐类型', trigger: 'blur' },
+            { required: true, message: "请选择音乐类型", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+          fileUrl:[
+            { required: true, message: '请选择音乐文件', trigger: 'blur' },
+            { required: true, message: "请选择音乐文件", validator: this.spaceJudgment, trigger: "blur" }
+          ],
+        },
+      }
+    },
+    created () {
+
+    },
+    mounted () {
+      this.getList();
+    },
+    methods: {
+      //弹层关闭
+      dialogOff(){
+        this.$set(this,'dialogType',false);
+      },
+      //弹层开启
+      dialogOpen(){
+        this.dialogFormReset();
+        this.$set(this,'dialogTitle','新增');
+        this.$set(this,'dialogType',true);
+      },
+      //弹层确定
+      dialogSubmit(){
+        // let obj = JSON.parse(JSON.stringify(this.dialogForm))
+        let obj = {
+          musicName:this.dialogForm.musicName,
+          musicType:this.dialogForm.musicType,
+          fileId:this.dialogForm.fileId,
+          fileName:this.dialogForm.fileName,
+          fileUrl:this.dialogForm.fileUrl,
+          remark:this.dialogForm.remark,
+        }
+        if(this.dialogForm.id){
+          obj.id = this.dialogForm.id;
+          laboratoryMusicUpdate(obj).then(response => {
+            this.msgSuccess(response.message);
+            this.getList();
+          });
+        }else{
+          laboratoryMusicAdd(obj).then(response => {
+            this.msgSuccess(response.message);
+            this.getList();
+          });
+        }
+        this.$set(this,'dialogType',false);
+      },
+      dialogFormReset(){
+        this.$set(this,'dialogForm',{
+          musicName:'',
+          musicType:'',
+          fileId:'',
+          fileName:'',
+          fileUrl:'',
+          remark:'',
+        });
+      },
+      //查询按钮
+      handleQuery(){
+        this.$set(this.queryParams,'page',1);
+        this.getList();
+      },
+      //重置按钮
+      resetQuery(){
+        this.$set(this,'queryParams',{
+          page:1,
+          pageSize:20,
+          searchValue:"",
+          musicType:null,
+        });
+        this.getList();
+      },
+      //获取数据列表
+      getList(){
+        this.$set(this,'loading',true);
+        let obj = JSON.parse(JSON.stringify(this.queryParams))
+        laboratoryMusicList(obj).then(response => {
+          this.$set(this,'loading',false);
+          this.$set(this,'dataList',response.data.records);
+          this.$set(this,'total',response.data.total);
+        });
+      },
+      //操作按钮
+      tableButton(type,row){
+        let self = this;
+        if(type == 1){
+          //编辑
+          this.$set(this,'dialogTitle','编辑');
+          this.$set(this,'dialogForm',JSON.parse(JSON.stringify(row)));
+          this.$set(this,'dialogType',true);
+        }else if(type == 2){
+          //删除
+          this.$confirm('是否确认删除?', "警告", {
+            confirmButtonText: "确定",
+            cancelButtonText: "取消",
+            type: "warning"
+          }).then(function() {
+          }).then(() => {
+            laboratoryMusicDelete({id:row.id}).then(response => {
+              self.msgSuccess(response.message)
+              self.getList();
+            });
+          }).catch(() => {});
+        }
+      },
+      //上传
+      handleAvatarSuccess(res) {
+        this.$set(this.dialogForm,'fileId',res.data.id);
+        this.$set(this.dialogForm,'fileName',res.data.name);
+        this.$set(this.dialogForm,'fileUrl',res.data.url);
+        this.$forceUpdate()
+      },
+      beforeAvatarUpload(file) {
+        let fileNameList = file.name.split(".");
+        let type = false;
+        if (fileNameList[fileNameList.length-1] == 'mp3') {
+          type = true;
+        }else{
+          this.$message.error('只能上传mp3格式');
+          type = false;
+        }
+        return type;
+      },
+    },
+  }
+</script>
+<style scoped lang="scss">
+  .planMusic{
+    .planMusicPage{
+
+    }
+  }
+</style>
+<style lang="scss">
+  .planMusicPage-dialog{
+    .dialog-up-button-p{
+      padding:0 20px;
+      width:360px;
+      border:1px solid #dedede;
+      text-align: center;
+      line-height:40px;
+      height:40px;
+      border-radius:4px;
+      color:#999;
+      /*单行省略号*/
+      display:block;
+      overflow:hidden;
+      text-overflow:ellipsis;
+      white-space:nowrap;
+    }
+  }
+</style>

+ 64 - 57
src/views/emergencyManagement/plan/index.vue

@@ -36,15 +36,23 @@
         <el-table class="table-box" v-loading="loading" border :data="tableData">
           <el-table-column label="预案名称" align="center" prop="name" :show-overflow-tooltip="true"/>
           <el-table-column label="启动条件" align="center" prop="startCondition" :show-overflow-tooltip="true" width="340"/>
-          <el-table-column label="创建人" align="center" prop="createBy" width="180"/>
-          <el-table-column label="创建时间" align="center" prop="createTime" width="200"/>
-          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="200" v-if="tableButtonType">
+          <el-table-column label="创建人" align="center" prop="createName" width="180"/>
+          <el-table-column label="创建时间" align="center" prop="createTime" width="200">
+            <template slot-scope="scope">
+              <span>{{ parseTime(scope.row.createTime,"{y}-{m}-{d} {h}:{i}") }}</span>
+            </template>
+          </el-table-column>
+          <el-table-column label="操作" align="center" class-name="small-padding fixed-width" width="220" v-if="tableButtonType">
             <template slot-scope="scope">
               <div class="table-button-box">
                 <p class="table-button-null"></p>
                 <p class="table-button-p" v-hasPermi="['laboratory:planjoin:edit']" @click="tableClickButton(1,scope.row)">关联实验室</p>
-                <p class="table-button-p" v-show="userId==scope.row.userId" v-hasPermiAnd="['laboratory:plan:query','laboratory:plan:edit']" @click="tableClickButton(2,scope.row)">编辑</p>
-                <p class="table-button-p" v-show="userId==scope.row.userId" v-hasPermi="['laboratory:plan:remove']" @click="tableClickButton(3,scope.row)">删除</p>
+                <p class="table-button-p" v-show="userId==scope.row.createBy"
+                   v-hasPermiAnd="['laboratory:plan:query','laboratory:plan:edit']"
+                   @click="tableClickButton(2,scope.row)">编辑</p>
+                <p class="table-button-p" v-show="userId==scope.row.createBy"
+                   v-hasPermi="['laboratory:plan:remove']"
+                   @click="tableClickButton(3,scope.row)">删除</p>
                 <p class="table-button-null"></p>
               </div>
             </template>
@@ -56,7 +64,7 @@
                     layout="total, prev, pager, next, sizes, jumper"
                     :page.sync="param.pageNum"
                     :limit.sync="param.pageSize"
-                    @pagination="getListPlan"
+                    @pagination="getList"
         />
       </div>
     </div>
@@ -74,9 +82,19 @@
     </el-dialog>
     <!--新增预案-->
     <el-dialog title="定制预案" v-if="addFormOpen" :close-on-click-modal="false" :visible.sync="addFormOpen" width="500px" append-to-body>
-      <el-form ref="addForm" :model="addForm" :rules="rules" label-width="80px">
+      <el-form ref="addForm" :model="addForm" :rules="rules" label-width="100px">
         <el-form-item label="预案名称" prop="name">
-          <el-input v-model="addForm.name" placeholder="请输入预案名称" maxLength="15"/>
+          <el-input v-model="addForm.name" placeholder="请输入预案名称" maxLength="15" style="width:320px;"/>
+        </el-form-item>
+        <el-form-item label="预案音乐" prop="musicId">
+          <el-select v-model="addForm.musicId" placeholder="请选择疏散音乐" style="width:320px;">
+            <el-option
+              v-for="dict in musicOptions"
+              :key="dict.id"
+              :label="dict.musicName"
+              :value="dict.id"
+            ></el-option>
+          </el-select>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer dialog-footer-box">
@@ -110,6 +128,10 @@ import {listClasstypeAll} from "@/apiDemo/laboratory/classtype";
 import {authListSubject} from "@/apiDemo/laboratory/subject";
 import { selectRiskPlanLeveList, addPlan, delPlanData } from "@/apiDemo/evacuation3_2/index";
 import { riskOptionSensor } from "@/apiDemo/laboratory/sensor";
+//                        V3
+import { laboratoryMusicFindByType,laboratoryPlanList,laboratoryPlanAdd,
+  laboratoryPlanDelete } from "@/api/emergencyManagement/index";
+import { iotAttributeGetByTypeId } from "@/api/iotDevice/index";
 
 export default {
   components: {
@@ -136,6 +158,8 @@ export default {
       dateRange: [],
       //启动条件
       deptOptions:[],
+      //疏散音乐
+      musicOptions:[],
       // 查询参数
       param: {
         pageNum: 1,
@@ -151,8 +175,6 @@ export default {
       dialogVisible:false,
       //关联记录
       dialogVisible2:false,
-      typeList:[],
-      levelList:[],
       dialogTable:[],
       checkedLabList:[],//需要选中的实验室
       joinSubOper:[],
@@ -167,12 +189,22 @@ export default {
           { required: true, message: "请输入预案名称", validator: this.spaceJudgment, trigger: "change" },
           { required: true, validator: exportconstvalidateContacts, trigger: "blur" },
         ],
+        musicId: [
+          { required: true, message: "请选择疏散音乐", trigger: "change" },
+          { required: true, message: "请选择疏散音乐", validator: this.spaceJudgment, trigger: "change" },
+        ],
       },
       //关联页面传参数据
       associationData:{},
       addPlanData:{},
     };
   },
+  mounted(){
+    this.iotAttributeGetByTypeId();
+
+    this.getList();
+    this.laboratoryMusicFindByType();
+  },
   methods: {
     // 操作按钮 1.关联 2.编辑 3.删除 4.新增
     tableClickButton(type,item){
@@ -181,7 +213,7 @@ export default {
         this.$set(this,'associationData',JSON.parse(JSON.stringify(item)));
         this.$set(this,'pageType',4);
       }else if(type == 2){
-        this.$set(this,'addPlanData',JSON.parse(JSON.stringify({id:item.id,name:item.name})));
+        this.$set(this,'addPlanData',JSON.parse(JSON.stringify({id:item.id,name:item.name,musicId:item.musicId})));
         this.$set(this,'pageType',1);
       }else if(type == 3){
         this.$confirm('是否确认删除该预案?', "警告", {
@@ -189,9 +221,9 @@ export default {
           cancelButtonText: "取消",
           type: "warning"
         }).then(function() {
-          delPlanData(item.id).then(response => {
-            self.msgSuccess(response.msg)
-            self.getListPlan();
+          laboratoryPlanDelete({id:item.id}).then(response => {
+            self.msgSuccess(response.message)
+            self.getList();
           });
         }).then(() => {
         }).catch(() => {});
@@ -200,7 +232,7 @@ export default {
         this.$set(this,'addForm',{});
       }else if(type == 5){
         this.$set(this,'pageType',0);
-        this.getListPlan();
+        this.getList();
       }else if(type == 6){
         this.$set(this,'pageType',1);
       }
@@ -216,27 +248,22 @@ export default {
       this.$refs["addForm"].validate(valid => {
         if (valid) {
           let obj = {
-            name:this.addForm.name
+            name:this.addForm.name,
+            musicId:this.addForm.musicId
           }
-          addPlan(obj).then((response) => {
-            this.msgSuccess(response.msg)
+          laboratoryPlanAdd(obj).then((response) => {
+            this.msgSuccess(response.message)
             this.$set(this,'addFormOpen',false);
             setTimeout(function(){
               self.tableClickButton(2,{id:response.data,name:self.addForm.name,});
             },500);
-            // this.tableClickButton(2,{id:response.data,name:this.addForm.name,});
-            // this.$set(this,'addPlanData',{
-            //
-            // });
-            // self.$set(this,'addForm',{});
-            // self.$set(this,'pageType',1);
           });
         }
       })
     },
     //查询
     onSearch() {
-      this.getListPlan();
+      this.getList();
     },
     //重置
     resetForm() {
@@ -249,46 +276,26 @@ export default {
       this.pageType=0
     },
     /** 查询启动条件 */
-    getDeptListTow() {
-      riskOptionSensor({}).then(response => {
+    iotAttributeGetByTypeId() {
+      iotAttributeGetByTypeId({typeId:1}).then(response => {
         this.$set(this, 'deptOptions', response.data)
       });
     },
-    /**获取分级*/
-    getListClassifiedAll(){
-      listClassifiedAll().then(response=>{
-        if(response.code==200){
-          this.levelList = response.data
-        }
-      })
-    },
-    /**获取分类*/
-    getListClasstypeAll(){
-      listClasstypeAll().then(response=>{
-        if(response.code==200){
-          this.typeList = response.data;
-        }
+
+    //预案管理-列表
+    getList(){
+      laboratoryPlanList(this.param).then(response => {
+        this.$set(this,'tableData',response.data.records)
+        this.$set(this,'total',response.data.total)
+        this.loading = false;
       });
     },
-    /** 查询风险预案列表 */
-    getListPlan() {
-      let _this=this;
-      this.loading = true;
-      selectRiskPlanLeveList(this.param).then(response => {
-        this.$set(this,'tableData',response.rows)
-        // this.tableData = response.rows;
-        this.total = response.total;
-        this.loading = false;
-         // this.getList();
+    laboratoryMusicFindByType(){
+      laboratoryMusicFindByType({musicType:1}).then(response => {
+        this.$set(this,'musicOptions',response.data)
       });
     },
   },
-  mounted(){
-    this.getDeptListTow();
-    this.getListClassifiedAll();
-    this.getListClasstypeAll();
-    this.getListPlan();
-  },
 }
 </script>
 <style scoped lang="scss">

+ 231 - 201
src/views/emergencyManagement/plan/newAddPlan.vue

@@ -1,26 +1,40 @@
 <template>
-  <div class="newAddPlan">
-    <div class="newAddPlan-title-box">
-      <p>定制预案1</p>
-      <p class="add-button-two-90" @click="backButton">返回</p>
-      <!--<p class="inquire-button-one" @click="upDataButton(1)">不关联仅保存</p>-->
-      <p class="inquire-button-one" @click="associatedDialogClick">关联实验室</p>
+  <div class="page-container newAddPlan">
+    <div class="page-top-title-box">
+      <p class="page-top-title-name-p">定制预案</p>
+      <p class="page-top-title-out-p" @click="backButton">返回</p>
+      <p class="page-top-title-submit-p" style="width:120px;" @click="associatedDialogClick">关联实验室</p>
     </div>
     <div class="plan-for-max-box scrollbar-box">
         <el-form :model="form" ref="form" :rules="rules" :inline="true" label-width="90px" class="form-box">
           <div class="plan-for-max-box-name-box">
             <el-form-item label="预案名称:" prop="name" style="margin:40px 0;">
               <el-input
+                style="width:200px;"
                 v-model="form.name"
                 placeholder="请输入预案名称"
-                size="small"
                 maxLength="15"
                 :disabled="inputType"
               />
             </el-form-item>
-            <p v-if="inputType" class="plan-for-max-box-name-button-one add-button-two-90" @click="setNameButton(1)">编辑</p>
-            <p v-if="!inputType" class="plan-for-max-box-name-button-two reset-button-one" @click="setNameButton(2)">取消</p>
-            <p v-if="!inputType" class="plan-for-max-box-name-button-three add-button-two-90" @click="setNameButton(3)">保存</p>
+            <el-form-item label="疏散音乐:" prop="musicId" style="margin:40px 0;">
+              <el-select v-model="form.musicId"
+                         :disabled="inputType"
+                         placeholder="请选择疏散音乐" style="width:200px;">
+                <el-option
+                  v-for="dict in musicOptions"
+                  :key="dict.id"
+                  :label="dict.musicName"
+                  :value="dict.id"
+                ></el-option>
+              </el-select>
+            </el-form-item>
+            <p class="plan-for-max-box-name-button-one add-button-two-90"
+               v-if="inputType"  @click="setNameButton(1)">编辑</p>
+            <p class="plan-for-max-box-name-button-two reset-button-one"
+               v-if="!inputType"  @click="setNameButton(2)">取消</p>
+            <p class="plan-for-max-box-name-button-three add-button-two-90"
+               v-if="!inputType"  @click="setNameButton(3)">保存</p>
           </div>
           <div class="for-plan-box" v-for="(item,index) in form.labRiskPlanLevels" :key="index">
             <p class="position-title-type" :class="item.riskPlanLevel==1?'type-color-a':(item.riskPlanLevel==2?'type-color-b':(item.riskPlanLevel==3?'type-color-c':(item.riskPlanLevel==4?'type-color-d':'')))">
@@ -34,30 +48,25 @@
                   <img v-if="item.riskPlanLevel==2" src="@/assets/ZDimages/emergencyManagement/icon_dzya_zfx.png">
                   <img v-if="item.riskPlanLevel==3" src="@/assets/ZDimages/emergencyManagement/icon_dzya_jgfx.png">
                   <img v-if="item.riskPlanLevel==4" src="@/assets/ZDimages/emergencyManagement/icon_dzya_gfx.png">
-<!--                  <p>联动疏散</p>-->
                 </div>
-                <!--<div class="for-plan-img-box-two">-->
-                <!--<img src="@/assets/ZDimages/evacuation3_2/img_dzya_hzyj.png">-->
-                <!--<p>火灾预案</p>-->
-                <!--</div>-->
               </div>
               <p class="for-plan-img-null-p"></p>
             </div>
             <div class="min-for-text-box">
               <div>
-                <div class="min-for-text-box-one" v-for="(minItemOne,minIndexOne) in item.riskPlanSensorList" :key="minItemOne.sensorType">
+                <div class="min-for-text-box-one" v-for="(minItemOne,minIndexOne) in item.bindingSensor" :key="minItemOne.code">
                   <div>
-                    <p>启动条件:<span v-for="(sensorItem,sensorIndex) in sensorList" :key="'sensor'+sensorIndex" v-if="sensorItem.hardwareTypeCode == minItemOne.sensorType">{{sensorItem.hardwareTypeName}}</span></p>
-                    <p>监测区间:{{minItemOne.minMonitor}}-{{minItemOne.maxMonitor}}</p>
+                    <p>启动条件:<span v-for="(sensorItem,sensorIndex) in sensorList" :key="'sensor'+sensorIndex" v-if="sensorItem.code == minItemOne.code">{{sensorItem.name}}</span></p>
+                    <p>监测区间:{{minItemOne.min}}-{{minItemOne.max}}</p>
                   </div>
                 </div>
               </div>
               <div>
-                <div class="min-for-text-box-two" v-for="(minItemTwo,minIndexTwo) in item.riskPlanHardwareList" :key="minIndexTwo">
-                  <div v-for="(hardwareItem,hardwareIndex) in hardwareList" :key="hardwareIndex" v-if="hardwareItem.hardwareTypeEnum.code == minItemTwo.hardwareType">
-                    <p>执行动作:{{hardwareItem.hardwareTypeEnum.hardwareTypeName}}</p>
-                    <p>执行办法:<span v-for="(functionItem,functionIndex) in hardwareItem.functionStatusList" :key="functionIndex" v-if="functionItem.code == minItemTwo.operate">{{functionItem.code == 0?'关闭':'开启'}}</span></p>
-                    <p>结束操作:<span v-for="(functionItem,functionIndex) in hardwareItem.functionStatusList" :key="functionIndex" v-if="functionItem.code == minItemTwo.overAct">{{functionItem.code == 0?'关闭':'开启'}}</span></p>
+                <div class="min-for-text-box-two" v-for="(minItemTwo,minIndexTwo) in item.bindingDevice" :key="minIndexTwo">
+                  <div v-for="(hardwareItem,hardwareIndex) in hardwareList" :key="hardwareIndex" v-if="hardwareItem.typeKey == minItemTwo.typeKey">
+                    <p>执行动作:{{hardwareItem.riskDeviceTypeName}}</p>
+                    <p>执行办法:<span>{{minItemTwo.startOperate == 0?'关闭':'开启'}}</span></p>
+                    <p>结束操作:<span>{{minItemTwo.endOperate == 0?'关闭':'开启'}}</span></p>
                   </div>
                 </div>
               </div>
@@ -80,8 +89,8 @@
         <p class="plan-for-max-button-null"></p>
       </div>
     </div>
-    <el-dialog :title='dialogTitle' v-if="dialogOpen" :visible.sync="dialogOpen" width="800px" @close='closeDialog'
-               :close-on-click-modal="false">
+    <el-dialog :title='dialogTitle' v-if="dialogOpen" :visible.sync="dialogOpen" append-to-body
+               width="800px" :close-on-click-modal="false">
       <div class="scrollbar-box" style="height:600px;">
         <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="100px">
           <el-form-item label="预案等级:" prop="riskPlanLevel">
@@ -95,8 +104,8 @@
           <div style="display: flex">
             <el-form-item label="执行疏散:" prop="ifExit">
               <el-radio-group  v-model="dialogForm.ifExit" style="width:500px;">
-                <el-radio :label="0">否</el-radio>
-                <el-radio :label="1">是</el-radio>
+                <el-radio :label="true">否</el-radio>
+                <el-radio :label="false">是</el-radio>
               </el-radio-group>
             </el-form-item>
             <!--<el-form-item label="火灾预案:" prop="name" style="margin-left:220px;">-->
@@ -122,27 +131,27 @@
           </div>
           <div style="border-top:1px solid #e0e0e0;">
             <p style="line-height:60px;font-size:14px;margin-left:19px;">启动条件:</p>
-            <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanSensorList" :key="index">
+            <div style="display: flex" v-for="(item,index) in dialogForm.bindingSensor" :key="index">
               <div style="flex:1;">
-                <el-form-item label="监测设备:" :prop="'riskPlanSensorList.'+index+'.sensorType'" :rules="rules.sensorType">
-                  <el-select  v-model="item.sensorType" placeholder="请选择监测设备" @change="(val)=>sensorChange(val,index)">
+                <el-form-item label="监测设备:" :prop="'bindingSensor.'+index+'.code'" :rules="rules.code">
+                  <el-select  v-model="item.code" placeholder="请选择监测设备" @change="(val)=>sensorChange(val,index)">
                     <el-option
                       v-for="item in sensorList"
-                      :key="item.hardwareTypeCode"
-                      :label="item.hardwareTypeName"
-                      :value="item.hardwareTypeCode">
+                      :key="item.code"
+                      :label="item.name"
+                      :value="item.code">
                     </el-option>
                   </el-select>
                 </el-form-item>
               </div>
               <div style="flex:1;display: flex">
-                <el-form-item label="监测区间:" :prop="'riskPlanSensorList.'+index+'.minMonitor'" :rules="rules.minMonitor">
-                  <el-input-number  v-model="item.minMonitor" style="width:90px;" :disabled="item.suoType"
+                <el-form-item label="监测区间:" :prop="'bindingSensor.'+index+'.min'" :rules="rules.min">
+                  <el-input-number  v-model="item.min" style="width:90px;" :disabled="item.suoType"
                                     :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
                 </el-form-item>
                 <p style="width:30px;text-align: center;line-height:40px;">-</p>
-                <el-form-item label="" :prop="'riskPlanSensorList.'+index+'.maxMonitor'" :rules="rules.maxMonitor" label-width="0">
-                  <el-input-number  v-model="item.maxMonitor" style="width:90px;" :disabled="item.suoType"
+                <el-form-item label="" :prop="'bindingSensor.'+index+'.max'" :rules="rules.max" label-width="0">
+                  <el-input-number  v-model="item.max" style="width:90px;" :disabled="item.suoType"
                                     :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
                 </el-form-item>
                 <p class="el-icon-delete"
@@ -151,38 +160,38 @@
               </div>
             </div>
             <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
-               @click="addMinData(1)" :class="dialogForm.riskPlanSensorList.length>8?'add-plan-max-button-color':''">+ 新增监测规则</p>
+               @click="addMinData(1)" :class="dialogForm.bindingSensor.length>8?'add-plan-max-button-color':''">+ 新增监测规则</p>
           </div>
           <div style="border-top:1px solid #e0e0e0;">
             <p style="line-height:60px;font-size:14px;margin-left:19px;">执行动作:</p>
-            <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanHardwareList" :key="index">
+            <div style="display: flex" v-for="(item,index) in dialogForm.bindingDevice" :key="index">
               <div style="flex:1;display: flex">
-                <el-form-item label="执行设备:" :prop="'riskPlanHardwareList.'+index+'.hardwareType'" :rules="rules.hardwareType">
-                  <el-select v-model="item.hardwareType" placeholder="选择执行设备" style="width:130px;" @change="(val)=>controlTypeList(val,index)">
+                <el-form-item label="执行设备:" :prop="'bindingDevice.'+index+'.typeKey'" :rules="rules.typeKey">
+                  <el-select v-model="item.typeKey" placeholder="选择执行设备" style="width:130px;" @change="(val)=>controlTypeList(val,index)">
                     <el-option
                       v-show="!optionItem.checkType"
                       v-for="optionItem in hardwareList"
-                      :key="optionItem.hardwareTypeEnum.code"
-                      :label="optionItem.hardwareTypeEnum.hardwareTypeName"
-                      :value="optionItem.hardwareTypeEnum.code">
+                      :key="optionItem.typeKey"
+                      :label="optionItem.riskDeviceTypeName"
+                      :value="optionItem.typeKey">
                     </el-option>
                     <p v-show="hardwareShowType" style="text-align: center;color:#999;font-size:12px;line-height:30px;">暂无更多</p>
                   </el-select>
                 </el-form-item>
-                <el-form-item label="执行办法:" :prop="'riskPlanHardwareList.'+index+'.operate'" :rules="rules.operate">
-                  <el-select  v-model="item.operate" placeholder="选择执行办法" style="width:130px;">
+                <el-form-item label="执行办法:" :prop="'bindingDevice.'+index+'.startOperate'" :rules="rules.startOperate">
+                  <el-select  v-model="item.startOperate" placeholder="选择执行办法" style="width:130px;">
                     <el-option
-                      v-for="optionItem in item.hardwareList"
+                      v-for="optionItem in hardwareOption"
                       :key="optionItem.code"
                       :label="optionItem.describe"
                       :value="optionItem.code">
                     </el-option>
                   </el-select>
                 </el-form-item>
-                <el-form-item label="结束操作:" :prop="'riskPlanHardwareList.'+index+'.overAct'" :rules="rules.overAct">
-                  <el-select  v-model="item.overAct" placeholder="选择结束操作" style="width:130px;">
+                <el-form-item label="结束操作:" :prop="'bindingDevice.'+index+'.endOperate'" :rules="rules.endOperate">
+                  <el-select  v-model="item.endOperate" placeholder="选择结束操作" style="width:130px;">
                     <el-option
-                      v-for="optionItem in item.hardwareList"
+                      v-for="optionItem in hardwareOption"
                       :key="optionItem.code"
                       :label="optionItem.describe"
                       :value="optionItem.code">
@@ -195,7 +204,7 @@
               </div>
             </div>
             <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
-               @click="addMinData(2)" :class="dialogForm.riskPlanHardwareList.length>8?'add-plan-max-button-color':''">+ 新增执行动作</p>
+               @click="addMinData(2)" :class="dialogForm.bindingDevice.length>8?'add-plan-max-button-color':''">+ 新增执行动作</p>
           </div>
         </el-form>
       </div>
@@ -215,6 +224,11 @@
   import { optionHardware } from "@/apiDemo/laboratory/hardware";
   import { getSensorList } from "@/apiDemo/laboratory/sensor";
   import { selectRiskPlanLeveListRiskPlanId,putPlan,planLevelAdd,planLevelPut,planLevelDel,getLabRiskPlanJoinSub } from "@/apiDemo/evacuation3_2/index";
+
+  //                        V3
+  import { laboratoryMusicFindByType,laboratoryRiskDeviceTypeGetList,laboratoryRiskPlanLevelGetRiskPlanLeveList,
+    laboratoryPlanUpdate,laboratoryRiskPlanLevelAdd,laboratoryRiskPlanLevelUpdate,laboratoryRiskPlanLevelDelete } from "@/api/emergencyManagement/index";
+  import { iotAttributeGetByTypeId } from "@/api/iotDevice/index";
   export default {
     name: "newAddPlan",
     props:{
@@ -229,6 +243,7 @@
         }
       };
       return {
+        musicOptions:[],
         form:{
           name:"",
           labRiskPlanLevels:[],
@@ -245,28 +260,32 @@
             { required: true, message: "请输入预案名称", validator: this.spaceJudgment, trigger: "change" },
             { required: true, validator: exportconstvalidateContacts, trigger: "blur" },
           ],
+          musicId: [
+            { required: true, message: "请选择疏散音乐", trigger: "change" },
+            { required: true, message: "请选择疏散音乐", validator: this.spaceJudgment, trigger: "change" },
+          ],
           riskPlanLevel: [
             { required: true, message: "请选择预案等级", trigger: "change" },
           ],
           ifExit: [
             { required: true, message: "请选择是否执行疏散", trigger: "change" },
           ],
-          sensorType: [
+          code: [
             { required: true, message: "请选择监测设备", trigger: "change" },
           ],
-          minMonitor: [
+          min: [
             { required: true, message: "请选择监测区间", trigger: "blur" },
           ],
-          maxMonitor: [
+          max: [
             { required: true, message: "请选择监测区间", trigger: "blur" },
           ],
-          hardwareType: [
+          typeKey: [
             { required: true, message: "请选择执行设备", trigger: "change" },
           ],
-          operate: [
+          startOperate: [
             { required: true, message: "请选择执行办法", trigger: "change" },
           ],
-          overAct: [
+          endOperate: [
             { required: true, message: "请选择结束操作", trigger: "change" },
           ],
           riskAutoOff:[
@@ -282,6 +301,8 @@
         //设备
         hardwareList:[],
         hardwareShowType:false,
+        //设备动作
+        hardwareOption:[{code:1,describe:'打开'},{code:0,describe:'关闭'},],
         //分类
         typeList:[],
         //分级
@@ -293,32 +314,37 @@
         //名称修改状态锁
         inputType:true,
         inputName:"",
+        inputMusicId:"",
       }
     },
     created(){
 
     },
     mounted(){
-      this.getOptionData();
+      this.initialization();
     },
     methods: {
-      closeDialog(){
-         this.getOptionData()
+      //初始化
+      initialization(){
+        this.laboratoryMusicFindByType();
+        this.iotAttributeGetByTypeId();
+        this.laboratoryRiskDeviceTypeGetList();
+        this.laboratoryRiskPlanLevelGetRiskPlanLeveList(1);
       },
       //传感器选中事件
       sensorChange(val,index){
         let self = this;
         for(let i=0;i<self.sensorList.length;i++){
-          if(self.sensorList[i].hardwareTypeCode == val){
-            this.$set(self.dialogForm.riskPlanSensorList[index],'funNum',self.sensorList[i].hardwareTypeName);
+          if(self.sensorList[i].code == val){
+            this.$set(self.dialogForm.bindingSensor[index],'funNum',self.sensorList[i].name);
             if(self.sensorList[i].enumName == "FLAME"){
-              self.dialogForm.riskPlanSensorList[index].minMonitor = 1;
-              self.dialogForm.riskPlanSensorList[index].maxMonitor = 2;
-              self.$set(self.dialogForm.riskPlanSensorList[index],'minMonitor',1);
-              self.$set(self.dialogForm.riskPlanSensorList[index],'maxMonitor',2);
-              self.$set(self.dialogForm.riskPlanSensorList[index],'suoType',true);
+              self.dialogForm.bindingSensor[index].min = 1;
+              self.dialogForm.bindingSensor[index].max = 2;
+              self.$set(self.dialogForm.bindingSensor[index],'min',1);
+              self.$set(self.dialogForm.bindingSensor[index],'max',2);
+              self.$set(self.dialogForm.bindingSensor[index],'suoType',true);
             }else{
-              self.$set(self.dialogForm.riskPlanSensorList[index],'suoType',false);
+              self.$set(self.dialogForm.bindingSensor[index],'suoType',false);
             }
           }
         }
@@ -328,14 +354,16 @@
         if(type == 1){
           this.$set(this,'inputType',false);
           this.$set(this,'inputName',this.form.name);
+          this.$set(this,'inputMusicId',this.form.musicId);
         }else if(type == 2){
           this.$set(this,'inputType',true);
           this.$set(this.form,'name',this.inputName);
+          this.$set(this.form,'musicId',this.inputMusicId);
         }else if(type == 3){
           this.$refs["form"].validate(valid => {
               if (valid) {
-                putPlan({ id:this.addPlanData.id, name:this.form.name }).then((response) => {
-                  this.msgSuccess(response.msg)
+                laboratoryPlanUpdate({ id:this.addPlanData.id, name:this.form.name,musicId:this.form.musicId }).then((response) => {
+                  this.msgSuccess(response.message)
                   this.$set(this,'inputType',true);
                 });
               }
@@ -351,7 +379,7 @@
               return
             }
             setPlanData(this.form).then(response => {
-              this.msgSuccess(response.msg);
+              this.msgSuccess(response.message);
               this.$parent.tableClickButton(5);
             });
           }
@@ -361,8 +389,8 @@
       addFiltration(){
         let self = this;
         let num = 0;
-        for(let i=0;i<self.dialogForm.riskPlanHardwareList.length;i++){
-          if(self.dialogForm.riskPlanHardwareList[i].hardwareType){
+        for(let i=0;i<self.dialogForm.bindingDevice.length;i++){
+          if(self.dialogForm.bindingDevice[i].typeKey){
             num++
           }
         }
@@ -379,8 +407,8 @@
         let age = 0;
         for(let o=0;o<self.hardwareList.length;o++){
           let num =0;
-          for(let i=0;i<self.dialogForm.riskPlanHardwareList.length;i++){
-            if(self.dialogForm.riskPlanHardwareList[i].hardwareType  == self.hardwareList[o].hardwareTypeEnum.code){
+          for(let i=0;i<self.dialogForm.bindingDevice.length;i++){
+            if(self.dialogForm.bindingDevice[i].typeKey  == self.hardwareList[o].hardwareTypeEnum.code){
               num++
               age++
             }
@@ -391,9 +419,9 @@
         if(age < self.hardwareList.length){
           this.$set(this,'hardwareShowType',false);
         }else{
-          for(let i=0;i<self.dialogForm.riskPlanHardwareList.length;i++){
-            if(!self.dialogForm.riskPlanHardwareList[i].hardwareType){
-              self.dialogForm.riskPlanHardwareList.splice(i,1);
+          for(let i=0;i<self.dialogForm.bindingDevice.length;i++){
+            if(!self.dialogForm.bindingDevice[i].typeKey){
+              self.dialogForm.bindingDevice.splice(i,1);
             }
           }
           this.$set(this,'hardwareShowType',true);
@@ -404,39 +432,24 @@
         let self = this;
           for(let i=0;i<self.hardwareList.length;i++){
             if(self.hardwareList[i].hardwareTypeEnum.code == val){
-              this.$set(self.dialogForm.riskPlanHardwareList[index],'hardwareList',self.hardwareList[i].functionStatusList);
+              this.$set(self.dialogForm.bindingDevice[index],'hardwareList',self.hardwareList[i].functionStatusList);
               this.actionFiltration()
               return
             }
           }
       },
-      //查询传感器/设备下啦列表
-      getOptionData(){
-        getSensorList({}).then(response => {
-          this.sensorList = response.data;
-          this.sensorListData = JSON.parse(JSON.stringify(response.data))
-        });
-        optionHardware({}).then(response => {
-          this.$set(this,'hardwareList',response.data)
-        });
-        listClassifiedAll().then(response=>{
-          if(response.code==200){
-            this.levelList=response.data
-          }
-        })
-        listClasstypeAll().then(response=>{
-          if(response.code==200){
-            this.typeList=response.data;
-          }
-        })
-        this.selectRiskPlanLeveListRiskPlanId(1);
-      },
-      selectRiskPlanLeveListRiskPlanId(type){
-        selectRiskPlanLeveListRiskPlanId(this.addPlanData.id).then((response) => {
+      //查询预案规则
+      laboratoryRiskPlanLevelGetRiskPlanLeveList(type){
+        laboratoryRiskPlanLevelGetRiskPlanLeveList({riskPlanId:this.addPlanData.id}).then((response) => {
           if(type == 1){
             this.$set(this.form,'name',this.addPlanData.name);
+            this.$set(this.form,'musicId',this.addPlanData.musicId);
             this.$set(this,'inputType',true);
           }
+          for(let i=0;i<response.data.length;i++){
+            response.data[i].bindingSensor = response.data[i].bindingSensor?JSON.parse(response.data[i].bindingSensor):[]
+            response.data[i].bindingDevice = response.data[i].bindingDevice?JSON.parse(response.data[i].bindingDevice):[]
+          }
           this.$set(this.form,'labRiskPlanLevels',response.data);
         });
       },
@@ -448,71 +461,64 @@
       associatedDialogClick(type){
         this.$parent.tableClickButton(1,{id:this.addPlanData.id,type:1,})
       },
-      //查询
-      onSearch(){
-
-      },
-      //重置
-      resetForm(){
-
-      },
+      //新增按钮
       addMinData(type){
         if(this.addFiltration()){
           if(type == 1){
-            if(this.dialogForm.riskPlanSensorList.length>8){
+            if(this.dialogForm.bindingSensor.length>8){
               this.msgError('新增失败,最多只能新增九条监测规则')
               return
             }
-            this.dialogForm.riskPlanSensorList.push({
-              sensorType:null,
+            this.dialogForm.bindingSensor.push({
+              code:null,
             })
           }else if(type == 2){
-            if(this.dialogForm.riskPlanHardwareList.length>8){
+            if(this.dialogForm.bindingDevice.length>8){
               this.msgError('新增失败,最多只能新增九条处置规则')
               return
             }
-            this.dialogForm.riskPlanHardwareList.push({
-              hardwareType:null,
-              operate:null,
-              overAct:null,
+            this.dialogForm.bindingDevice.push({
+              typeKey:null,
+              startOperate:null,
+              endOperate:null,
             })
           }
           this.actionFiltration();
         }
       },
+      //删除按钮
       delMinData(type,index){
         if(type == 1){
-          this.dialogForm.riskPlanSensorList.splice(index,1);
+          this.dialogForm.bindingSensor.splice(index,1);
         }else if (type == 2){
-          this.dialogForm.riskPlanHardwareList.splice(index,1);
+          this.dialogForm.bindingDevice.splice(index,1);
         }
         this.actionFiltration();
       },
       //提交
       submitForm(){
         let self = this;
-
         this.$refs["dialogForm"].validate(valid => {
           if (valid) {
-        if(!this.dialogForm.riskPlanSensorList[0]){
+        if(!this.dialogForm.bindingSensor[0]){
           this.msgError('请添加至少一个启动条件')
           return
         }
         //提交数据检测条件区间是否重复(dialog本身数据查重)
-        for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
-          if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[i].maxMonitor){
+        for(let i=0;i<self.dialogForm.bindingSensor.length;i++){
+          if(self.dialogForm.bindingSensor[i].min >= self.dialogForm.bindingSensor[i].max){
             self.msgError('监测区间数值异常,请重新输入');
             return
           }
-          for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
-            if(self.dialogForm.riskPlanSensorList[i].sensorType == self.dialogForm.riskPlanSensorList[x].sensorType && i != x){
-              if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
-                 self.dialogForm.riskPlanSensorList[i].minMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
+          for(let x=0;x<self.dialogForm.bindingSensor.length;x++){
+            if(self.dialogForm.bindingSensor[i].code == self.dialogForm.bindingSensor[x].code && i != x){
+              if(self.dialogForm.bindingSensor[i].min >= self.dialogForm.bindingSensor[x].min &&
+                 self.dialogForm.bindingSensor[i].min <= self.dialogForm.bindingSensor[x].max){
                 self.msgError('监测区间不能重复,请重新输入');
                 return
               }
-              if(self.dialogForm.riskPlanSensorList[i].maxMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
-                self.dialogForm.riskPlanSensorList[i].maxMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
+              if(self.dialogForm.bindingSensor[i].max >= self.dialogForm.bindingSensor[x].min &&
+                self.dialogForm.bindingSensor[i].max <= self.dialogForm.bindingSensor[x].max){
                 self.msgError('监测区间不能重复,请重新输入');
                 return
               }
@@ -530,28 +536,28 @@
             }
           }
           for(let i=0;i<self.labRiskPlanLevels.length;i++){
-            if(self.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
+            if(self.labRiskPlanLevels[i].bindingSensor.length == self.dialogForm.bindingSensor.length){
               let age = 0;
-              for(let o=0;o<self.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
-                for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
-                  if(self.dialogForm.riskPlanSensorList[x].sensorType==self.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
-                    if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
-                      self.dialogForm.riskPlanSensorList[x].minMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
+              for(let o=0;o<self.labRiskPlanLevels[i].bindingSensor.length;o++){
+                for(let x=0;x<self.dialogForm.bindingSensor.length;x++){
+                  if(self.dialogForm.bindingSensor[x].code==self.labRiskPlanLevels[i].bindingSensor[o].code){
+                    if(self.dialogForm.bindingSensor[x].min>=self.labRiskPlanLevels[i].bindingSensor[o].min&&
+                      self.dialogForm.bindingSensor[x].min<=self.labRiskPlanLevels[i].bindingSensor[o].max){
                       age++
-                    }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
-                      self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
+                    }else if(self.dialogForm.bindingSensor[x].max>=self.labRiskPlanLevels[i].bindingSensor[o].min&&
+                      self.dialogForm.bindingSensor[x].max<=self.labRiskPlanLevels[i].bindingSensor[o].max){
                       age++
-                    }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
-                      self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
+                    }else if(self.labRiskPlanLevels[i].bindingSensor[o].min>=self.dialogForm.bindingSensor[x].min&&
+                      self.labRiskPlanLevels[i].bindingSensor[o].min<=self.dialogForm.bindingSensor[x].max){
                       age++
-                    }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
-                      self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
+                    }else if(self.labRiskPlanLevels[i].bindingSensor[o].max>=self.dialogForm.bindingSensor[x].min&&
+                      self.labRiskPlanLevels[i].bindingSensor[o].max<=self.dialogForm.bindingSensor[x].max){
                       age++
                     }
                   }
                 }
               }
-              if(self.dialogForm.riskPlanSensorList.length == age){
+              if(self.dialogForm.bindingSensor.length == age){
                 self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
                 return
               }
@@ -566,28 +572,28 @@
             }
           }
           for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
-            if(self.form.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
+            if(self.form.labRiskPlanLevels[i].bindingSensor.length == self.dialogForm.bindingSensor.length){
               let age = 0;
-              for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
-                for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
-                  if(self.dialogForm.riskPlanSensorList[x].sensorType==self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
-                    if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
-                      self.dialogForm.riskPlanSensorList[x].minMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
+              for(let o=0;o<self.form.labRiskPlanLevels[i].bindingSensor.length;o++){
+                for(let x=0;x<self.dialogForm.bindingSensor.length;x++){
+                  if(self.dialogForm.bindingSensor[x].code==self.form.labRiskPlanLevels[i].bindingSensor[o].code){
+                    if(self.dialogForm.bindingSensor[x].min>=self.form.labRiskPlanLevels[i].bindingSensor[o].min&&
+                      self.dialogForm.bindingSensor[x].min<=self.form.labRiskPlanLevels[i].bindingSensor[o].max){
                       age++
-                    }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
-                      self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
+                    }else if(self.dialogForm.bindingSensor[x].max>=self.form.labRiskPlanLevels[i].bindingSensor[o].min&&
+                      self.dialogForm.bindingSensor[x].max<=self.form.labRiskPlanLevels[i].bindingSensor[o].max){
                       age++
-                    }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
-                      self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
+                    }else if(self.form.labRiskPlanLevels[i].bindingSensor[o].min>=self.dialogForm.bindingSensor[x].min&&
+                      self.form.labRiskPlanLevels[i].bindingSensor[o].min<=self.dialogForm.bindingSensor[x].max){
                       age++
-                    }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
-                      self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
+                    }else if(self.form.labRiskPlanLevels[i].bindingSensor[o].max>=self.dialogForm.bindingSensor[x].min&&
+                      self.form.labRiskPlanLevels[i].bindingSensor[o].max<=self.dialogForm.bindingSensor[x].max){
                       age++
                     }
                   }
                 }
               }
-              if(self.dialogForm.riskPlanSensorList.length == age){
+              if(self.dialogForm.bindingSensor.length == age){
                 self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
                 return
               }
@@ -601,19 +607,19 @@
               let text = [];
               for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
                 if(this.dialogIndex != i){
-                  for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
+                  for(let o=0;o<self.form.labRiskPlanLevels[i].bindingSensor.length;o++){
                     for(let x=0;x<self.sensorList.length;x++){
-                      if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
-                        text.push(self.sensorList[x].hardwareTypeName);
+                      if(self.form.labRiskPlanLevels[i].bindingSensor[o].code == self.sensorList[x].code){
+                        text.push(self.sensorList[x].name);
                       }
                     }
                   }
                 }
               }
-              for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
+              for(let i=0;i<self.dialogForm.bindingSensor.length;i++){
                 for(let x=0;x<self.sensorList.length;x++){
-                  if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
-                    text.push(self.sensorList[x].hardwareTypeName);
+                  if(self.dialogForm.bindingSensor[i].code == self.sensorList[x].code){
+                    text.push(self.sensorList[x].name);
                   }
                 }
               }
@@ -624,27 +630,29 @@
               obj.riskAutoOff =Number(obj.riskAutoOff);
               obj.alarmType =obj.alarmType.toString();
               obj.startCondition = text+'';
-              planLevelPut(obj).then((response) => {
-                this.msgSuccess(response.msg)
-                this.selectRiskPlanLeveListRiskPlanId();
+              obj.bindingSensor = obj.bindingSensor[0]?JSON.stringify(obj.bindingSensor):'';
+              obj.bindingDevice = obj.bindingDevice[0]?JSON.stringify(obj.bindingDevice):'';
+              laboratoryRiskPlanLevelUpdate(obj).then((response) => {
+                this.msgSuccess(response.message)
+                this.laboratoryRiskPlanLevelGetRiskPlanLeveList();
                 this.$set(this,'dialogOpen',false);
               });
             }else{
               //新增预案级别数据
               let text = [];
               for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
-                for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
+                for(let o=0;o<self.form.labRiskPlanLevels[i].bindingSensor.length;o++){
                   for(let x=0;x<self.sensorList.length;x++){
-                    if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
-                      text.push(self.sensorList[x].hardwareTypeName);
+                    if(self.form.labRiskPlanLevels[i].bindingSensor[o].code == self.sensorList[x].code){
+                      text.push(self.sensorList[x].name);
                     }
                   }
                 }
               }
-              for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
+              for(let i=0;i<self.dialogForm.bindingSensor.length;i++){
                 for(let x=0;x<self.sensorList.length;x++){
-                  if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
-                    text.push(self.sensorList[x].hardwareTypeName);
+                  if(self.dialogForm.bindingSensor[i].code == self.sensorList[x].code){
+                    text.push(self.sensorList[x].name);
                   }
                 }
               }
@@ -656,9 +664,11 @@
               obj.alarmType =obj.alarmType.toString();
               obj.riskPlanId = this.addPlanData.id;
               obj.startCondition = text+'';
-              planLevelAdd(obj).then((response) => {
-                this.msgSuccess(response.msg)
-                this.selectRiskPlanLeveListRiskPlanId();
+              obj.bindingSensor = obj.bindingSensor[0]?JSON.stringify(obj.bindingSensor):'';
+              obj.bindingDevice = obj.bindingDevice[0]?JSON.stringify(obj.bindingDevice):'';
+              laboratoryRiskPlanLevelAdd(obj).then((response) => {
+                this.msgSuccess(response.message)
+                this.laboratoryRiskPlanLevelGetRiskPlanLeveList();
                 this.$set(this,'dialogOpen',false);
               });
             }
@@ -671,7 +681,7 @@
       cancel(){
         this.$set(this,'dialogOpen',false);
       },
-      //新增/编辑预案
+      //新增/编辑预案按钮
       buttonClick(type,item,index){
         let self = this;
         if(type == 1){
@@ -694,24 +704,17 @@
           this.$set(this,'dialogTitle','新增预案规则');
           this.$set(this,'dialogForm',{
             riskPlanLevel:a==0?1:(b==0?2:(c==0?3:(d==0?4:''))),
-            ifExit:0,
+            ifExit:true,
             alarmType:['1','2'],
             riskAutoOff:'60',
-            riskPlanSensorList:[],
-            riskPlanHardwareList:[],
+            bindingSensor:[],
+            bindingDevice:[],
           });
           this.$set(this,'dialogOpen',true);
         }else if(type == 2){
           this.$set(this,'dialogTitle','编辑预案规则');
           this.$set(this,'dialogIndex',index);
           let obj = JSON.parse(JSON.stringify(item))
-          for(let i=0;i<obj.riskPlanHardwareList.length;i++){
-            for(let o=0;o<self.hardwareList.length;o++){
-              if(obj.riskPlanHardwareList[i].hardwareType == self.hardwareList[o].hardwareTypeEnum.code){
-                obj.riskPlanHardwareList[i].hardwareList = self.hardwareList[o].functionStatusList
-              }
-            }
-          }
           this.$set(this,'dialogForm',{
             id:obj.id,
             riskPlanId:obj.riskPlanId,
@@ -719,8 +722,8 @@
             ifExit:obj.ifExit,
             alarmType:obj.alarmType.split(','),
             riskAutoOff:obj.riskAutoOff+'',
-            riskPlanSensorList:obj.riskPlanSensorList,
-            riskPlanHardwareList:obj.riskPlanHardwareList,
+            bindingSensor:obj.bindingSensor,
+            bindingDevice:obj.bindingDevice,
           });
           let list = [];
           for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
@@ -739,10 +742,10 @@
             let text = [];
             for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
               if(index != i){
-                for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
+                for(let o=0;o<self.form.labRiskPlanLevels[i].bindingSensor.length;o++){
                   for(let x=0;x<self.sensorList.length;x++){
-                    if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
-                      text.push(self.sensorList[x].hardwareTypeName);
+                    if(self.form.labRiskPlanLevels[i].bindingSensor[o].code == self.sensorList[x].code){
+                      text.push(self.sensorList[x].name);
                     }
                   }
                 }
@@ -756,14 +759,33 @@
               startCondition:text,
               riskPlanId:item.riskPlanId
             }
-            planLevelDel(obj).then((response) => {
-              self.msgSuccess(response.msg)
-              self.selectRiskPlanLeveListRiskPlanId();
+            laboratoryRiskPlanLevelDelete(obj).then((response) => {
+              self.msgSuccess(response.message)
+              self.laboratoryRiskPlanLevelGetRiskPlanLeveList();
             });
           }).then(() => {
           }).catch(() => {});
         }
       },
+      //音乐列表
+      laboratoryMusicFindByType(){
+        laboratoryMusicFindByType({musicType:1}).then(response => {
+          this.$set(this,'musicOptions',response.data)
+        });
+      },
+      //传感器
+      iotAttributeGetByTypeId(){
+        iotAttributeGetByTypeId({typeId:1}).then(response => {
+          this.$set(this,'sensorList',response.data)
+          this.$set(this,'sensorListData',response.data)
+        });
+      },
+      //设备列表
+      laboratoryRiskDeviceTypeGetList(){
+        laboratoryRiskDeviceTypeGetList({}).then(response => {
+          this.$set(this,'hardwareList',response.data)
+        });
+      },
     }
   }
 </script>
@@ -831,14 +853,6 @@
     }
   }
   .newAddPlan {
-    flex: 1;
-    display: flex !important;
-    flex-direction: column;
-    overflow: hidden;
-    p {
-      margin: 0;
-      font-weight: 500;
-    }
     .newAddPlan-title-box {
       height: 80px;
       display: flex;
@@ -879,6 +893,11 @@
           font-size:14px;
           line-height:40px;
           margin:40px 0 0 40px;
+          height:40px;
+          border:1px solid #0183FA;
+          border-radius:4px;
+          cursor: pointer;
+          color:#0183FA;
         }
         .plan-for-max-box-name-button-two{
           width:80px;
@@ -886,6 +905,11 @@
           font-size:14px;
           line-height:40px;
           margin:40px 0 0 40px;
+          height:40px;
+          border:1px solid #999;
+          border-radius:4px;
+          cursor: pointer;
+          color:#999;
         }
         .plan-for-max-box-name-button-three{
           width:80px;
@@ -893,6 +917,12 @@
           font-size:14px;
           line-height:40px;
           margin:40px 0 0 20px;
+          height:40px;
+          border:1px solid #0183FA;
+          background-color: #0183FA;
+          border-radius:4px;
+          cursor: pointer;
+          color:#fff;
         }
       }
       .for-plan-box{