newAddPlan.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870
  1. <template>
  2. <div class="newAddPlan">
  3. <div class="newAddPlan-title-box">
  4. <p>定制预案</p>
  5. <p class="add-button-two-90" @click="backButton">返回</p>
  6. <!--<p class="inquire-button-one" @click="upDataButton(1)">不关联仅保存</p>-->
  7. <p class="inquire-button-one" @click="associatedDialogClick">关联实验室</p>
  8. </div>
  9. <div class="plan-for-max-box scrollbar-box">
  10. <el-form :model="form" ref="form" :rules="rules" :inline="true" label-width="90px" class="form-box">
  11. <div class="plan-for-max-box-name-box">
  12. <el-form-item label="预案名称:" prop="name" style="margin:40px 0;">
  13. <el-input
  14. v-model="form.name"
  15. placeholder="请输入预案名称"
  16. size="small"
  17. maxLength="15"
  18. :disabled="inputType"
  19. />
  20. </el-form-item>
  21. <p v-if="inputType" class="plan-for-max-box-name-button-one add-button-two-90" @click="setNameButton(1)">编辑</p>
  22. <p v-if="!inputType" class="plan-for-max-box-name-button-two reset-button-one" @click="setNameButton(2)">取消</p>
  23. <p v-if="!inputType" class="plan-for-max-box-name-button-three add-button-two-90" @click="setNameButton(3)">保存</p>
  24. </div>
  25. <div class="for-plan-box" v-for="(item,index) in form.labRiskPlanLevels" :key="index">
  26. <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':'')))">
  27. {{item.riskPlanLevel==1?'低风险':(item.riskPlanLevel==2?'中风险':(item.riskPlanLevel==3?'较高风险':(item.riskPlanLevel==4?'高风险':'')))}}
  28. </p>
  29. <div class="for-plan-img-box">
  30. <p class="for-plan-img-null-p"></p>
  31. <div class="for-plan-img-box-big">
  32. <div class="for-plan-img-box-one" v-if="item.ifExit == 1">
  33. <img src="@/assets/ZDimages/evacuation3_2/img_dzya_ldss.png">
  34. <p>联动疏散</p>
  35. </div>
  36. <!--<div class="for-plan-img-box-two">-->
  37. <!--<img src="@/assets/ZDimages/evacuation3_2/img_dzya_hzyj.png">-->
  38. <!--<p>火灾预案</p>-->
  39. <!--</div>-->
  40. </div>
  41. <p class="for-plan-img-null-p"></p>
  42. </div>
  43. <div class="min-for-text-box">
  44. <div>
  45. <div class="min-for-text-box-one" v-for="(minItemOne,minIndexOne) in item.riskPlanSensorList" :key="minItemOne.sensorType">
  46. <div>
  47. <p>启动条件:<span v-for="(sensorItem,sensorIndex) in sensorList" :key="sensorIndex" v-if="sensorItem.hardwareTypeCode == minItemOne.sensorType">{{sensorItem.hardwareTypeName}}</span></p>
  48. <p>监测区间:{{minItemOne.minMonitor}}-{{minItemOne.maxMonitor}}</p>
  49. </div>
  50. </div>
  51. </div>
  52. <div>
  53. <div class="min-for-text-box-two" v-for="(minItemTwo,minIndexTwo) in item.riskPlanHardwareList" :key="minIndexTwo">
  54. <div v-for="(hardwareItem,hardwareIndex) in hardwareList" :key="hardwareIndex" v-if="hardwareItem.hardwareTypeEnum.code == minItemTwo.hardwareType">
  55. <p>执行动作:{{hardwareItem.hardwareTypeEnum.hardwareTypeName}}</p>
  56. <p>执行办法:<span v-for="(functionItem,functionIndex) in hardwareItem.functionStatusList" :key="functionIndex" v-if="functionItem.code == minItemTwo.operate">{{functionItem.code == 0?'关闭':'开启'}}</span></p>
  57. <p>结束操作:<span v-for="(functionItem,functionIndex) in hardwareItem.functionStatusList" :key="functionIndex" v-if="functionItem.code == minItemTwo.overAct">{{functionItem.code == 0?'关闭':'开启'}}</span></p>
  58. </div>
  59. </div>
  60. </div>
  61. </div>
  62. <div class="for-button-max-box">
  63. <div @click="buttonClick(2,item,index)">
  64. <img src="@/assets/ZDimages/evacuation3_2/icon_znwl_bj.png">
  65. <p>编辑</p>
  66. </div>
  67. <div @click="buttonClick(3,item,index)">
  68. <img src="@/assets/ZDimages/evacuation3_2/icon_znwl_sc.png">
  69. <p>删除</p>
  70. </div>
  71. </div>
  72. </div>
  73. </el-form>
  74. <div class="plan-for-max-button-box">
  75. <p class="plan-for-max-button-null"></p>
  76. <p class="plan-for-max-button" v-if="!form.labRiskPlanLevels[3]" @click="buttonClick(1)">+ 新增预案规则</p>
  77. <p class="plan-for-max-button-null"></p>
  78. </div>
  79. </div>
  80. <el-dialog :title='dialogTitle' v-if="dialogOpen" :visible.sync="dialogOpen" width="800px">
  81. <div class="scrollbar-box" style="height:600px;">
  82. <el-form :model="dialogForm" ref="dialogForm" :rules="rules" label-width="100px">
  83. <el-form-item label="预案等级:" prop="riskPlanLevel">
  84. <el-radio-group v-model="dialogForm.riskPlanLevel" style="width:500px;">
  85. <el-radio :label="1">低风险</el-radio>
  86. <el-radio :label="2">中风险</el-radio>
  87. <el-radio :label="3">较高风险</el-radio>
  88. <el-radio :label="4">高风险</el-radio>
  89. </el-radio-group>
  90. </el-form-item>
  91. <div style="display: flex">
  92. <el-form-item label="执行疏散:" prop="ifExit">
  93. <el-radio-group v-model="dialogForm.ifExit" style="width:500px;">
  94. <el-radio :label="0">否</el-radio>
  95. <el-radio :label="1">是</el-radio>
  96. </el-radio-group>
  97. </el-form-item>
  98. <!--<el-form-item label="火灾预案:" prop="name" style="margin-left:220px;">-->
  99. <!--<el-radio-group v-model="dialogForm.type3">-->
  100. <!--<el-radio :label="1">否</el-radio>-->
  101. <!--<el-radio :label="2">是</el-radio>-->
  102. <!--</el-radio-group>-->
  103. <!--</el-form-item>-->
  104. </div>
  105. <div style="border-top:1px solid #e0e0e0;">
  106. <p style="line-height:60px;font-size:14px;margin-left:19px;">启动条件:</p>
  107. <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanSensorList" :key="index">
  108. <div style="flex:1;">
  109. <el-form-item label="监测设备:" :prop="'riskPlanSensorList.'+index+'.sensorType'" :rules="rules.sensorType">
  110. <el-select v-model="item.sensorType" placeholder="请选择监测设备" @change="(val)=>sensorChange(val,index)">
  111. <el-option
  112. v-for="item in sensorList"
  113. :key="item.hardwareTypeCode"
  114. :label="item.hardwareTypeName"
  115. :value="item.hardwareTypeCode">
  116. </el-option>
  117. </el-select>
  118. </el-form-item>
  119. </div>
  120. <div style="flex:1;display: flex">
  121. <el-form-item label="监测区间:" :prop="'riskPlanSensorList.'+index+'.minMonitor'" :rules="rules.minMonitor">
  122. <el-input-number v-model="item.minMonitor" style="width:90px;" :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
  123. </el-form-item>
  124. <p style="width:30px;text-align: center;line-height:40px;">-</p>
  125. <el-form-item label="" :prop="'riskPlanSensorList.'+index+'.maxMonitor'" :rules="rules.maxMonitor" label-width="0">
  126. <el-input-number v-model="item.maxMonitor" style="width:90px;" :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
  127. </el-form-item>
  128. <p class="el-icon-delete"
  129. @click="delMinData(1,index)"
  130. style="cursor: pointer;line-height:30px;width:30px;text-align:center;margin:5px 0 0 20px;"></p>
  131. </div>
  132. </div>
  133. <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
  134. @click="addMinData(1)">+ 新增监测规则</p>
  135. </div>
  136. <div style="border-top:1px solid #e0e0e0;">
  137. <p style="line-height:60px;font-size:14px;margin-left:19px;">执行动作:</p>
  138. <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanHardwareList" :key="index">
  139. <div style="flex:1;display: flex">
  140. <el-form-item label="执行设备:" :prop="'riskPlanHardwareList.'+index+'.hardwareType'" :rules="rules.hardwareType">
  141. <el-select v-model="item.hardwareType" placeholder="选择执行设备" style="width:130px;" @change="(val)=>controlTypeList(val,index)">
  142. <el-option
  143. v-for="optionItem in hardwareList"
  144. :key="optionItem.hardwareTypeEnum.code"
  145. :label="optionItem.hardwareTypeEnum.hardwareTypeName"
  146. :value="optionItem.hardwareTypeEnum.code">
  147. </el-option>
  148. </el-select>
  149. </el-form-item>
  150. <el-form-item label="执行办法:" :prop="'riskPlanHardwareList.'+index+'.operate'" :rules="rules.operate">
  151. <el-select v-model="item.operate" placeholder="选择执行办法" style="width:130px;">
  152. <el-option
  153. v-for="optionItem in item.hardwareList"
  154. :key="optionItem.code"
  155. :label="optionItem.describe"
  156. :value="optionItem.code">
  157. </el-option>
  158. </el-select>
  159. </el-form-item>
  160. <el-form-item label="结束操作:" :prop="'riskPlanHardwareList.'+index+'.overAct'" :rules="rules.overAct">
  161. <el-select v-model="item.overAct" placeholder="选择结束操作" style="width:130px;">
  162. <el-option
  163. v-for="optionItem in item.hardwareList"
  164. :key="optionItem.code"
  165. :label="optionItem.describe"
  166. :value="optionItem.code">
  167. </el-option>
  168. </el-select>
  169. </el-form-item>
  170. <p class="el-icon-delete"
  171. @click="delMinData(2,index)"
  172. style="cursor: pointer;line-height:30px;width:30px;text-align:center;margin:5px 0 0 20px;"></p>
  173. </div>
  174. </div>
  175. <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
  176. @click="addMinData(2)">+ 新增执行动作</p>
  177. </div>
  178. </el-form>
  179. </div>
  180. <div slot="footer" class="dialog-footer">
  181. <div style="display: flex">
  182. <p style="flex:1;"></p>
  183. <p style="cursor: pointer;border-radius:6px;width:70px;line-height:30px;font-size:12px;text-align:center;margin-right:17px;color:#999999;background:#E0E0E0;" @click="cancel">取消</p>
  184. <p style="cursor: pointer;border-radius:6px;width:70px;line-height:30px;font-size:12px;text-align:center;color:#fff;background:#0045AF;" @click="submitForm">确定</p>
  185. <p style="flex:1;"></p>
  186. </div>
  187. </div>
  188. </el-dialog>
  189. </div>
  190. </template>
  191. <script>
  192. import { listClassifiedAll } from "@/api/laboratory/classified";
  193. import { listClasstypeAll } from "@/api/laboratory/classtype";
  194. import { optionHardware } from "@/api/laboratory/hardware";
  195. import { getSensorList } from "@/api/laboratory/sensor";
  196. import { selectRiskPlanLeveListRiskPlanId,putPlan,planLevelAdd,planLevelPut,planLevelDel,getLabRiskPlanJoinSub } from "@/api/evacuation3_2/index";
  197. export default {
  198. name: "newAddPlan",
  199. props:{
  200. addPlanData:{},
  201. },
  202. data() {
  203. return {
  204. form:{
  205. name:"",
  206. labRiskPlanLevels:[],
  207. },
  208. dialogTitle:'',
  209. dialogIndex:null,
  210. dialogOpen:false,
  211. dialogForm:{},
  212. // 表单校验
  213. rules: {
  214. name: [
  215. { required: true, message: "请输入预案名称", trigger: "change" },
  216. { required: true, message: "请输入预案名称", validator: this.spaceJudgment, trigger: "change" }
  217. ],
  218. riskPlanLevel: [
  219. { required: true, message: "请选择预案等级", trigger: "change" },
  220. ],
  221. ifExit: [
  222. { required: true, message: "请选择是否执行疏散", trigger: "change" },
  223. ],
  224. sensorType: [
  225. { required: true, message: "请选择监测设备", trigger: "change" },
  226. ],
  227. minMonitor: [
  228. { required: true, message: "请选择监测区间", trigger: "blur" },
  229. ],
  230. maxMonitor: [
  231. { required: true, message: "请选择监测区间", trigger: "blur" },
  232. ],
  233. hardwareType: [
  234. { required: true, message: "请选择执行设备", trigger: "change" },
  235. ],
  236. operate: [
  237. { required: true, message: "请选择执行办法", trigger: "change" },
  238. ],
  239. overAct: [
  240. { required: true, message: "请选择结束操作", trigger: "change" },
  241. ],
  242. },
  243. //检测设备列表
  244. options:[{value: '选项1', label: '黄金糕'},{value: '选项1', label: '黄金糕'},],
  245. //选择数据
  246. //传感器
  247. sensorList:[],
  248. sensorListData:[],
  249. //设备
  250. hardwareList:[],
  251. //分类
  252. typeList:[],
  253. //分级
  254. levelList:[],
  255. // 关联实验室本地数据
  256. labSensorHazardRelations:[],
  257. // 新增/编辑时本地数据
  258. labRiskPlanLevels:[],
  259. //名称修改状态锁
  260. inputType:true,
  261. inputName:"",
  262. }
  263. },
  264. created(){
  265. },
  266. mounted(){
  267. this.getOptionData();
  268. },
  269. methods: {
  270. //传感器选中事件
  271. sensorChange(val,index){
  272. let self = this;
  273. for(let i=0;i<self.sensorList.length;i++){
  274. if(self.sensorList[i].hardwareTypeCode == val){
  275. this.$set(self.dialogForm.riskPlanSensorList[index],'funNum',self.sensorList[i].hardwareTypeName);
  276. }
  277. }
  278. },
  279. //修改预案名称
  280. setNameButton(type){
  281. if(type == 1){
  282. this.$set(this,'inputType',false);
  283. this.$set(this,'inputName',this.form.name);
  284. }else if(type == 2){
  285. this.$set(this,'inputType',true);
  286. this.$set(this.form,'name',this.inputName);
  287. }else if(type == 3){
  288. putPlan({ id:this.addPlanData.id, name:this.form.name }).then((response) => {
  289. this.msgSuccess(response.msg)
  290. this.$set(this,'inputType',true);
  291. });
  292. }
  293. },
  294. //提交
  295. upDataButton(){
  296. this.$refs["form"].validate(valid => {
  297. if (valid) {
  298. if(!this.form.labRiskPlanLevels[0]){
  299. this.msgError('请添加至少一个预案规则')
  300. return
  301. }
  302. setPlanData(this.form).then(response => {
  303. this.msgSuccess(response.msg);
  304. this.$parent.tableClickButton(5);
  305. });
  306. }
  307. })
  308. },
  309. //查询设备功能
  310. controlTypeList(val,index) {
  311. let self = this;
  312. for(let i=0;i<self.hardwareList.length;i++){
  313. if(self.hardwareList[i].hardwareTypeEnum.code == val){
  314. this.$set(self.dialogForm.riskPlanHardwareList[index],'hardwareList',self.hardwareList[i].functionStatusList);
  315. return
  316. }
  317. }
  318. },
  319. //查询传感器/设备下啦列表
  320. getOptionData(){
  321. getSensorList({}).then(response => {
  322. this.sensorList = response.data;
  323. this.sensorListData = JSON.parse(JSON.stringify(response.data))
  324. });
  325. optionHardware({}).then(response => {
  326. this.hardwareList = response.data;
  327. });
  328. listClassifiedAll().then(response=>{
  329. if(response.code==200){
  330. this.levelList=response.data
  331. }
  332. })
  333. listClasstypeAll().then(response=>{
  334. if(response.code==200){
  335. this.typeList=response.data;
  336. }
  337. })
  338. this.selectRiskPlanLeveListRiskPlanId(1);
  339. },
  340. selectRiskPlanLeveListRiskPlanId(type){
  341. selectRiskPlanLeveListRiskPlanId(this.addPlanData.id).then((response) => {
  342. if(type == 1){
  343. this.$set(this.form,'name',this.addPlanData.name);
  344. this.$set(this,'inputType',true);
  345. }
  346. this.$set(this.form,'labRiskPlanLevels',response.data);
  347. });
  348. },
  349. //返回
  350. backButton(){
  351. this.$parent.tableClickButton(5)
  352. },
  353. //实验室关联开关
  354. associatedDialogClick(type){
  355. this.$parent.tableClickButton(1,{id:this.addPlanData.id,type:1,})
  356. },
  357. //查询
  358. onSearch(){
  359. },
  360. //重置
  361. resetForm(){
  362. },
  363. addMinData(type){
  364. if(type == 1){
  365. if(this.dialogForm.riskPlanSensorList.length>8){
  366. this.msgError('新增失败,最多只能新增九条监测规则')
  367. return
  368. }
  369. this.dialogForm.riskPlanSensorList.push({
  370. sensorType:null,
  371. })
  372. }else if(type == 2){
  373. if(this.dialogForm.riskPlanHardwareList.length>8){
  374. this.msgError('新增失败,最多只能新增九条处置规则')
  375. return
  376. }
  377. this.dialogForm.riskPlanHardwareList.push({
  378. hardwareType:null,
  379. operate:null,
  380. overAct:null,
  381. })
  382. }
  383. },
  384. delMinData(type,index){
  385. if(type == 1){
  386. this.dialogForm.riskPlanSensorList.splice(index,1);
  387. }else if (type == 2){
  388. this.dialogForm.riskPlanHardwareList.splice(index,1);
  389. }
  390. },
  391. //提交
  392. submitForm(){
  393. let self = this;
  394. if(!this.dialogForm.riskPlanSensorList[0]){
  395. this.msgError('请添加至少一个启动条件')
  396. return
  397. }
  398. //提交数据检测条件区间是否重复
  399. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  400. if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[i].maxMonitor){
  401. self.msgError('监测区间数值异常,请重新输入');
  402. return
  403. }
  404. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  405. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.dialogForm.riskPlanSensorList[x].sensorType && i != x){
  406. if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
  407. self.dialogForm.riskPlanSensorList[i].minMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
  408. self.msgError('监测区间不能重复,请重新输入');
  409. return
  410. }
  411. if(self.dialogForm.riskPlanSensorList[i].maxMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
  412. self.dialogForm.riskPlanSensorList[i].maxMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
  413. self.msgError('监测区间不能重复,请重新输入');
  414. return
  415. }
  416. }
  417. }
  418. }
  419. let num = 0;
  420. let age = 0;
  421. if(this.dialogIndex != null){
  422. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  423. if(self.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  424. this.msgError('无法添加多个相同等级的预案.')
  425. return
  426. }
  427. }
  428. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  429. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  430. for(let o=0;o<self.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  431. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  432. num ++
  433. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  434. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  435. age++
  436. console.log('age++');
  437. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  438. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  439. age++
  440. console.log('age++');
  441. }
  442. }
  443. }
  444. }
  445. }
  446. }else{
  447. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  448. if(self.form.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  449. this.msgError('无法添加多个相同等级的预案.')
  450. return
  451. }
  452. }
  453. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  454. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  455. if(self.dialogForm.riskPlanSensorList.length == self.form.labRiskPlanLevels[i].riskPlanSensorList.length){
  456. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  457. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  458. num ++
  459. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  460. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  461. age++
  462. console.log('age++');
  463. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  464. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  465. age++
  466. console.log('age++');
  467. }
  468. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  469. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  470. age++
  471. console.log('age++');
  472. }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  473. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  474. age++
  475. console.log('age++');
  476. }
  477. }
  478. }
  479. if(self.dialogForm.riskPlanSensorList.length == num && self.dialogForm.riskPlanSensorList.length == age){
  480. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  481. return
  482. }
  483. }
  484. }
  485. }
  486. }
  487. console.log('self.dialogForm.riskPlanSensorList.length',self.dialogForm.riskPlanSensorList.length);
  488. console.log('num',num);
  489. console.log('age',age);
  490. //提交数据对比已存在数据 是否区间重复
  491. if(self.dialogForm.riskPlanSensorList.length == num && self.dialogForm.riskPlanSensorList.length == age){
  492. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  493. return
  494. }
  495. this.$refs["dialogForm"].validate(valid => {
  496. if (valid) {
  497. if(this.dialogIndex != null){
  498. //修改预案级别数据
  499. let text = [];
  500. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  501. if(this.dialogIndex != i){
  502. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  503. for(let x=0;x<self.sensorList.length;x++){
  504. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  505. text.push(self.sensorList[x].hardwareTypeName);
  506. }
  507. }
  508. }
  509. }
  510. }
  511. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  512. for(let x=0;x<self.sensorList.length;x++){
  513. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  514. text.push(self.sensorList[x].hardwareTypeName);
  515. }
  516. }
  517. }
  518. text = Array.from(new Set(text));
  519. text = text+''
  520. text = text.replace(",","+")
  521. console.log(text);
  522. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  523. obj.startCondition = text+'';
  524. planLevelPut(obj).then((response) => {
  525. this.msgSuccess(response.msg)
  526. this.selectRiskPlanLeveListRiskPlanId();
  527. this.$set(this,'dialogOpen',false);
  528. });
  529. }else{
  530. //新增预案级别数据
  531. let text = [];
  532. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  533. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  534. for(let x=0;x<self.sensorList.length;x++){
  535. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  536. text.push(self.sensorList[x].hardwareTypeName);
  537. }
  538. }
  539. }
  540. }
  541. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  542. for(let x=0;x<self.sensorList.length;x++){
  543. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  544. text.push(self.sensorList[x].hardwareTypeName);
  545. }
  546. }
  547. }
  548. text = Array.from(new Set(text));
  549. text = text+''
  550. text = text.replace(",","+")
  551. console.log(text);
  552. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  553. obj.riskPlanId = this.addPlanData.id;
  554. obj.startCondition = text+'';
  555. planLevelAdd(obj).then((response) => {
  556. this.msgSuccess(response.msg)
  557. this.selectRiskPlanLeveListRiskPlanId();
  558. this.$set(this,'dialogOpen',false);
  559. });
  560. }
  561. }
  562. })
  563. },
  564. //取消
  565. cancel(){
  566. this.$set(this,'dialogOpen',false);
  567. },
  568. //新增/编辑预案
  569. buttonClick(type,item,index){
  570. let self = this;
  571. if(type == 1){
  572. this.$set(this,'dialogIndex',null);
  573. this.$set(this,'dialogTitle','新增预案规则');
  574. this.$set(this,'dialogForm',{
  575. riskPlanLevel:null,
  576. ifExit:null,
  577. riskPlanSensorList:[],
  578. riskPlanHardwareList:[],
  579. });
  580. this.$set(this,'dialogOpen',true);
  581. }else if(type == 2){
  582. this.$set(this,'dialogTitle','编辑预案规则');
  583. this.$set(this,'dialogIndex',index);
  584. let obj = JSON.parse(JSON.stringify(item))
  585. for(let i=0;i<obj.riskPlanHardwareList.length;i++){
  586. for(let o=0;o<self.hardwareList.length;o++){
  587. if(obj.riskPlanHardwareList[i].hardwareType == self.hardwareList[o].hardwareTypeEnum.code){
  588. obj.riskPlanHardwareList[i].hardwareList = self.hardwareList[o].functionStatusList
  589. }
  590. }
  591. }
  592. this.$set(this,'dialogForm',{
  593. id:obj.id,
  594. riskPlanId:obj.riskPlanId,
  595. riskPlanLevel:obj.riskPlanLevel,
  596. ifExit:obj.ifExit,
  597. riskPlanSensorList:obj.riskPlanSensorList,
  598. riskPlanHardwareList:obj.riskPlanHardwareList,
  599. });
  600. let list = [];
  601. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  602. if(i!=index){
  603. list.push(self.form.labRiskPlanLevels[i]);
  604. }
  605. }
  606. this.$set(this,'labRiskPlanLevels',JSON.parse(JSON.stringify(list)));
  607. this.$set(this,'dialogOpen',true);
  608. }else if(type == 3){
  609. this.$confirm('确定要删除该预案规则吗?', "警告", {
  610. confirmButtonText: "确定",
  611. cancelButtonText: "取消",
  612. type: "warning"
  613. }).then(function() {
  614. let text = [];
  615. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  616. if(index != i){
  617. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  618. for(let x=0;x<self.sensorList.length;x++){
  619. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  620. text.push(self.sensorList[x].hardwareTypeName);
  621. }
  622. }
  623. }
  624. }
  625. }
  626. text = Array.from(new Set(text));
  627. text = text+''
  628. text = text.replace(",","+")
  629. let obj = {
  630. id:item.id,
  631. startCondition:text,
  632. riskPlanId:item.riskPlanId
  633. }
  634. planLevelDel(obj).then((response) => {
  635. self.msgSuccess(response.msg)
  636. self.selectRiskPlanLeveListRiskPlanId();
  637. });
  638. }).then(() => {
  639. }).catch(() => {});
  640. }
  641. },
  642. }
  643. }
  644. </script>
  645. <style scoped lang="scss">
  646. .newAddPlan {
  647. flex: 1;
  648. display: flex !important;
  649. flex-direction: column;
  650. overflow: hidden;
  651. p {
  652. margin: 0;
  653. font-weight: 500;
  654. }
  655. .newAddPlan-title-box {
  656. height: 80px;
  657. display: flex;
  658. border-bottom: 1px solid #E0E0E0;
  659. p:nth-child(1) {
  660. flex: 1;
  661. margin-left: 20px;
  662. font-size: 16px;
  663. color: #0045AF;
  664. line-height: 80px;
  665. font-weight: 700;
  666. }
  667. p:nth-child(2) {
  668. font-size: 14px;
  669. margin-top: 20px;
  670. margin-right: 20px;
  671. }
  672. p:nth-child(3) {
  673. font-size: 14px;
  674. width: 130px;
  675. margin-top: 20px;
  676. }
  677. p:nth-child(4) {
  678. font-size: 14px;
  679. width: 150px;
  680. margin: 20px;
  681. }
  682. }
  683. .plan-for-max-box {
  684. flex: 1;
  685. padding:0 20px 20px 20px;
  686. .plan-for-max-box-name-box{
  687. display: flex;
  688. .plan-for-max-box-name-button-one{
  689. width:80px;
  690. text-align: center;
  691. font-size:14px;
  692. line-height:40px;
  693. margin:40px 0 0 40px;
  694. }
  695. .plan-for-max-box-name-button-two{
  696. width:80px;
  697. text-align: center;
  698. font-size:14px;
  699. line-height:40px;
  700. margin:40px 0 0 40px;
  701. }
  702. .plan-for-max-box-name-button-three{
  703. width:80px;
  704. text-align: center;
  705. font-size:14px;
  706. line-height:40px;
  707. margin:40px 0 0 20px;
  708. }
  709. }
  710. .for-plan-box{
  711. position: relative;
  712. border-radius:10px;
  713. overflow: hidden;
  714. box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.302);
  715. margin-bottom:24px;
  716. display: flex;
  717. .position-title-type{
  718. position:absolute;
  719. left:0;
  720. top:0;
  721. border-bottom-right-radius: 10px;
  722. width:84px;
  723. line-height:30px;
  724. font-size:14px;
  725. text-align: center;
  726. }
  727. .type-color-a{
  728. color:#0183FA;
  729. background: #CCE6FE;
  730. }
  731. .type-color-b{
  732. color:#FF9900;
  733. background: rgb(256,232,206);
  734. }
  735. .type-color-c{
  736. color:#FF4800;
  737. background: rgb(251,228,206);
  738. }
  739. .type-color-d{
  740. color:#FF0000;
  741. background: rgba(248,206,205);;
  742. }
  743. .for-plan-img-box{
  744. width:284px;
  745. display: flex;
  746. flex-direction: column;
  747. .for-plan-img-null-p{
  748. flex:1;
  749. }
  750. .for-plan-img-box-big{
  751. display: flex;
  752. .for-plan-img-box-one{
  753. margin-left:81px;
  754. width:168px;
  755. display: flex;
  756. img{
  757. height:50px;
  758. width:50px;
  759. }
  760. p{
  761. margin-left:20px;
  762. line-height:50px;
  763. font-size:14px;
  764. color:#333;
  765. }
  766. }
  767. .for-plan-img-box-two{
  768. display: flex;
  769. img{
  770. height:50px;
  771. width:50px;
  772. }
  773. p{
  774. line-height:50px;
  775. font-size:14px;
  776. color:#333;
  777. }
  778. }
  779. }
  780. }
  781. .min-for-text-box{
  782. width:1030px;
  783. padding-top:21px;
  784. .min-for-text-box-one{
  785. width:460px;
  786. line-height:30px;
  787. margin-bottom:21px;
  788. margin-right:40px;
  789. border-radius:6px;
  790. color:#0183FA;
  791. background:rgb(209,229,253);
  792. display: inline-block;
  793. div{
  794. display: flex;
  795. p:nth-child(1){
  796. margin-right:15px;
  797. margin-left:9px;
  798. }
  799. }
  800. }
  801. .min-for-text-box-two{
  802. width:460px;
  803. line-height:30px;
  804. margin-bottom:21px;
  805. margin-right:40px;
  806. border-radius:6px;
  807. color:#333;
  808. background:rgb(253,242,227);
  809. display: inline-block;
  810. div{
  811. display: flex;
  812. p:nth-child(1){
  813. margin-right:15px;
  814. margin-left:9px;
  815. }
  816. p:nth-child(2){
  817. margin-right:15px;
  818. }
  819. }
  820. }
  821. }
  822. .for-button-max-box{
  823. flex:1;
  824. margin:19px 0;
  825. border-left:1px dashed #D8D8D8;
  826. display: flex;
  827. div{
  828. margin:auto 0 auto 34px;
  829. width:85px;
  830. display: flex;
  831. height:20px;
  832. cursor: pointer;
  833. img{
  834. height:14px;
  835. margin-top:3px;
  836. }
  837. p{
  838. font-size:14px;
  839. margin-left:9px;
  840. }
  841. }
  842. }
  843. }
  844. .plan-for-max-button-box{
  845. margin:30px auto;
  846. display: flex;
  847. .plan-for-max-button-null{
  848. flex:1;
  849. }
  850. .plan-for-max-button{
  851. cursor: pointer;
  852. color:#0183FA;
  853. border:1px dashed #0183FA;
  854. border-radius:4px;
  855. width:300px;
  856. line-height:40px;
  857. text-align: center;
  858. font-size:14px;
  859. }
  860. }
  861. }
  862. }
  863. </style>