newAddPlan.vue 40 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010
  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="'sensor'+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" @close='closeDialog'>
  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. <el-form-item label="报警通知方式:" prop="expandType">
  106. <el-checkbox-group v-model="dialogForm.alarmType">
  107. <el-checkbox label="1">电话报警</el-checkbox>
  108. <el-checkbox label="2">短信报警</el-checkbox>
  109. </el-checkbox-group>
  110. </el-form-item>
  111. <div class="autoClose">
  112. <p class="autoClose_l">自动关闭:</p>
  113. <p class="autoClose_l2">传感器监测数值恢复正常</p>
  114. <el-input v-model="dialogForm.riskAutoOff" style="width:120px;" :min="1" :max="600" :controls="false" >
  115. <template slot="append">秒</template>
  116. </el-input>
  117. <p class="autoClose_l5">以后预案自动关闭</p>
  118. </div>
  119. <div style="border-top:1px solid #e0e0e0;">
  120. <p style="line-height:60px;font-size:14px;margin-left:19px;">启动条件:</p>
  121. <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanSensorList" :key="index">
  122. <div style="flex:1;">
  123. <el-form-item label="监测设备:" :prop="'riskPlanSensorList.'+index+'.sensorType'" :rules="rules.sensorType">
  124. <el-select v-model="item.sensorType" placeholder="请选择监测设备" @change="(val)=>sensorChange(val,index)">
  125. <el-option
  126. v-for="item in sensorList"
  127. :key="item.hardwareTypeCode"
  128. :label="item.hardwareTypeName"
  129. :value="item.hardwareTypeCode">
  130. </el-option>
  131. </el-select>
  132. </el-form-item>
  133. </div>
  134. <div style="flex:1;display: flex">
  135. <el-form-item label="监测区间:" :prop="'riskPlanSensorList.'+index+'.minMonitor'" :rules="rules.minMonitor">
  136. <el-input-number v-model="item.minMonitor" style="width:90px;" :disabled="item.suoType"
  137. :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
  138. </el-form-item>
  139. <p style="width:30px;text-align: center;line-height:40px;">-</p>
  140. <el-form-item label="" :prop="'riskPlanSensorList.'+index+'.maxMonitor'" :rules="rules.maxMonitor" label-width="0">
  141. <el-input-number v-model="item.maxMonitor" style="width:90px;" :disabled="item.suoType"
  142. :min="1" :max="99999" :controls="false" placeholder="监测区间"></el-input-number>
  143. </el-form-item>
  144. <p class="el-icon-delete"
  145. @click="delMinData(1,index)"
  146. style="cursor: pointer;line-height:30px;width:30px;text-align:center;margin:5px 0 0 20px;"></p>
  147. </div>
  148. </div>
  149. <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
  150. @click="addMinData(1)" :class="dialogForm.riskPlanSensorList.length>8?'add-plan-max-button-color':''">+ 新增监测规则</p>
  151. </div>
  152. <div style="border-top:1px solid #e0e0e0;">
  153. <p style="line-height:60px;font-size:14px;margin-left:19px;">执行动作:</p>
  154. <div style="display: flex" v-for="(item,index) in dialogForm.riskPlanHardwareList" :key="index">
  155. <div style="flex:1;display: flex">
  156. <el-form-item label="执行设备:" :prop="'riskPlanHardwareList.'+index+'.hardwareType'" :rules="rules.hardwareType">
  157. <el-select v-model="item.hardwareType" placeholder="选择执行设备" style="width:130px;" @change="(val)=>controlTypeList(val,index)">
  158. <el-option
  159. v-for="optionItem in hardwareList"
  160. :key="optionItem.hardwareTypeEnum.code"
  161. :label="optionItem.hardwareTypeEnum.hardwareTypeName"
  162. :value="optionItem.hardwareTypeEnum.code">
  163. </el-option>
  164. </el-select>
  165. </el-form-item>
  166. <el-form-item label="执行办法:" :prop="'riskPlanHardwareList.'+index+'.operate'" :rules="rules.operate">
  167. <el-select v-model="item.operate" placeholder="选择执行办法" style="width:130px;">
  168. <el-option
  169. v-for="optionItem in item.hardwareList"
  170. :key="optionItem.code"
  171. :label="optionItem.describe"
  172. :value="optionItem.code">
  173. </el-option>
  174. </el-select>
  175. </el-form-item>
  176. <el-form-item label="结束操作:" :prop="'riskPlanHardwareList.'+index+'.overAct'" :rules="rules.overAct">
  177. <el-select v-model="item.overAct" placeholder="选择结束操作" style="width:130px;">
  178. <el-option
  179. v-for="optionItem in item.hardwareList"
  180. :key="optionItem.code"
  181. :label="optionItem.describe"
  182. :value="optionItem.code">
  183. </el-option>
  184. </el-select>
  185. </el-form-item>
  186. <p class="el-icon-delete"
  187. @click="delMinData(2,index)"
  188. style="cursor: pointer;line-height:30px;width:30px;text-align:center;margin:5px 0 0 20px;"></p>
  189. </div>
  190. </div>
  191. <p style="cursor: pointer;width:200px;line-height:30px;border-radius:4px;border: 1px dashed #E0E0E0;color:#333333;text-align: center;margin:20px auto;"
  192. @click="addMinData(2)" :class="dialogForm.riskPlanHardwareList.length>8?'add-plan-max-button-color':''">+ 新增执行动作</p>
  193. </div>
  194. </el-form>
  195. </div>
  196. <div slot="footer" class="dialog-footer">
  197. <div style="display: flex">
  198. <p style="flex:1;"></p>
  199. <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>
  200. <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>
  201. <p style="flex:1;"></p>
  202. </div>
  203. </div>
  204. </el-dialog>
  205. </div>
  206. </template>
  207. <script>
  208. import { listClassifiedAll } from "@/api/laboratory/classified";
  209. import { listClasstypeAll } from "@/api/laboratory/classtype";
  210. import { optionHardware } from "@/api/laboratory/hardware";
  211. import { getSensorList } from "@/api/laboratory/sensor";
  212. import { selectRiskPlanLeveListRiskPlanId,putPlan,planLevelAdd,planLevelPut,planLevelDel,getLabRiskPlanJoinSub } from "@/api/evacuation3_2/index";
  213. export default {
  214. name: "newAddPlan",
  215. props:{
  216. addPlanData:{},
  217. },
  218. data() {
  219. const exportconstvalidateContacts = (rule, value, callback) => {
  220. if(!/^[\u0391-\uFFE5_a-zA-Z0-9]+$/.test(value)) {
  221. callback(new Error("只可输入中文/英文与数字"));
  222. } else {
  223. callback()
  224. }
  225. };
  226. return {
  227. form:{
  228. name:"",
  229. labRiskPlanLevels:[],
  230. },
  231. dialogTitle:'',
  232. dialogIndex:null,
  233. dialogOpen:false,
  234. dialogForm:{
  235. },
  236. // 表单校验
  237. rules: {
  238. name: [
  239. { required: true, message: "请输入预案名称", trigger: "change" },
  240. { required: true, message: "请输入预案名称", validator: this.spaceJudgment, trigger: "change" },
  241. { required: true, validator: exportconstvalidateContacts, trigger: "blur" },
  242. ],
  243. riskPlanLevel: [
  244. { required: true, message: "请选择预案等级", trigger: "change" },
  245. ],
  246. ifExit: [
  247. { required: true, message: "请选择是否执行疏散", trigger: "change" },
  248. ],
  249. sensorType: [
  250. { required: true, message: "请选择监测设备", trigger: "change" },
  251. ],
  252. minMonitor: [
  253. { required: true, message: "请选择监测区间", trigger: "blur" },
  254. ],
  255. maxMonitor: [
  256. { required: true, message: "请选择监测区间", trigger: "blur" },
  257. ],
  258. hardwareType: [
  259. { required: true, message: "请选择执行设备", trigger: "change" },
  260. ],
  261. operate: [
  262. { required: true, message: "请选择执行办法", trigger: "change" },
  263. ],
  264. overAct: [
  265. { required: true, message: "请选择结束操作", trigger: "change" },
  266. ],
  267. riskAutoOff:[
  268. { required: true, message: "请选择关闭时间", trigger: "change" },
  269. ]
  270. },
  271. //检测设备列表
  272. options:[{value: '选项1', label: '黄金糕'},{value: '选项1', label: '黄金糕'},],
  273. //选择数据
  274. //传感器
  275. sensorList:[],
  276. sensorListData:[],
  277. //设备
  278. hardwareList:[],
  279. //分类
  280. typeList:[],
  281. //分级
  282. levelList:[],
  283. // 关联实验室本地数据
  284. labSensorHazardRelations:[],
  285. // 新增/编辑时本地数据
  286. labRiskPlanLevels:[],
  287. //名称修改状态锁
  288. inputType:true,
  289. inputName:"",
  290. }
  291. },
  292. created(){
  293. },
  294. mounted(){
  295. this.getOptionData();
  296. },
  297. methods: {
  298. closeDialog(){
  299. this.getOptionData()
  300. },
  301. //传感器选中事件
  302. sensorChange(val,index){
  303. let self = this;
  304. for(let i=0;i<self.sensorList.length;i++){
  305. if(self.sensorList[i].hardwareTypeCode == val){
  306. this.$set(self.dialogForm.riskPlanSensorList[index],'funNum',self.sensorList[i].hardwareTypeName);
  307. if(self.sensorList[i].enumName == "FLAME"){
  308. console.log('self.sensorList[i].enumName',self.sensorList[i].enumName)
  309. self.dialogForm.riskPlanSensorList[index].minMonitor = 1;
  310. self.dialogForm.riskPlanSensorList[index].maxMonitor = 2;
  311. self.$set(self.dialogForm.riskPlanSensorList[index],'minMonitor',1);
  312. self.$set(self.dialogForm.riskPlanSensorList[index],'maxMonitor',2);
  313. self.$set(self.dialogForm.riskPlanSensorList[index],'suoType',true);
  314. console.log('self.dialogForm.riskPlanSensorList.riskPlanSensorList',self.dialogForm.riskPlanSensorList)
  315. }else{
  316. self.$set(self.dialogForm.riskPlanSensorList[index],'suoType',false);
  317. }
  318. }
  319. }
  320. },
  321. //修改预案名称
  322. setNameButton(type){
  323. if(type == 1){
  324. this.$set(this,'inputType',false);
  325. this.$set(this,'inputName',this.form.name);
  326. }else if(type == 2){
  327. this.$set(this,'inputType',true);
  328. this.$set(this.form,'name',this.inputName);
  329. }else if(type == 3){
  330. this.$refs["form"].validate(valid => {
  331. if (valid) {
  332. putPlan({ id:this.addPlanData.id, name:this.form.name }).then((response) => {
  333. this.msgSuccess(response.msg)
  334. this.$set(this,'inputType',true);
  335. });
  336. }
  337. })
  338. }
  339. },
  340. //提交
  341. upDataButton(){
  342. this.$refs["form"].validate(valid => {
  343. if (valid) {
  344. if(!this.form.labRiskPlanLevels[0]){
  345. this.msgError('请添加至少一个预案规则')
  346. return
  347. }
  348. setPlanData(this.form).then(response => {
  349. this.msgSuccess(response.msg);
  350. this.$parent.tableClickButton(5);
  351. });
  352. }
  353. })
  354. },
  355. //查询设备功能
  356. controlTypeList(val,index) {
  357. let self = this;
  358. self.hardwareList.splice(index,1)
  359. for(let i=0;i<self.hardwareList.length;i++){
  360. if(self.hardwareList[i].hardwareTypeEnum.code == val){
  361. this.$set(self.dialogForm.riskPlanHardwareList[index],'hardwareList',self.hardwareList[i].functionStatusList);
  362. return
  363. }
  364. }
  365. },
  366. //查询传感器/设备下啦列表
  367. getOptionData(){
  368. getSensorList({}).then(response => {
  369. this.sensorList = response.data;
  370. this.sensorListData = JSON.parse(JSON.stringify(response.data))
  371. });
  372. optionHardware({}).then(response => {
  373. this.hardwareList = response.data;
  374. });
  375. listClassifiedAll().then(response=>{
  376. if(response.code==200){
  377. this.levelList=response.data
  378. }
  379. })
  380. listClasstypeAll().then(response=>{
  381. if(response.code==200){
  382. this.typeList=response.data;
  383. }
  384. })
  385. this.selectRiskPlanLeveListRiskPlanId(1);
  386. },
  387. selectRiskPlanLeveListRiskPlanId(type){
  388. selectRiskPlanLeveListRiskPlanId(this.addPlanData.id).then((response) => {
  389. if(type == 1){
  390. this.$set(this.form,'name',this.addPlanData.name);
  391. this.$set(this,'inputType',true);
  392. }
  393. this.$set(this.form,'labRiskPlanLevels',response.data);
  394. });
  395. },
  396. //返回
  397. backButton(){
  398. this.$parent.tableClickButton(5)
  399. },
  400. //实验室关联开关
  401. associatedDialogClick(type){
  402. this.$parent.tableClickButton(1,{id:this.addPlanData.id,type:1,})
  403. },
  404. //查询
  405. onSearch(){
  406. },
  407. //重置
  408. resetForm(){
  409. },
  410. addMinData(type){
  411. if(type == 1){
  412. if(this.dialogForm.riskPlanSensorList.length>8){
  413. this.msgError('新增失败,最多只能新增九条监测规则')
  414. return
  415. }
  416. this.dialogForm.riskPlanSensorList.push({
  417. sensorType:null,
  418. })
  419. }else if(type == 2){
  420. if(this.dialogForm.riskPlanHardwareList.length>8){
  421. this.msgError('新增失败,最多只能新增九条处置规则')
  422. return
  423. }
  424. this.dialogForm.riskPlanHardwareList.push({
  425. hardwareType:null,
  426. operate:null,
  427. overAct:null,
  428. })
  429. }
  430. },
  431. delMinData(type,index){
  432. if(type == 1){
  433. this.dialogForm.riskPlanSensorList.splice(index,1);
  434. }else if (type == 2){
  435. this.dialogForm.riskPlanHardwareList.splice(index,1);
  436. }
  437. },
  438. //提交
  439. submitForm(){
  440. let self = this;
  441. this.$refs["dialogForm"].validate(valid => {
  442. if (valid) {
  443. if(!this.dialogForm.riskPlanSensorList[0]){
  444. this.msgError('请添加至少一个启动条件')
  445. return
  446. }
  447. //提交数据检测条件区间是否重复(dialog本身数据查重)
  448. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  449. if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[i].maxMonitor){
  450. self.msgError('监测区间数值异常,请重新输入');
  451. return
  452. }
  453. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  454. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.dialogForm.riskPlanSensorList[x].sensorType && i != x){
  455. if(self.dialogForm.riskPlanSensorList[i].minMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
  456. self.dialogForm.riskPlanSensorList[i].minMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
  457. self.msgError('监测区间不能重复,请重新输入');
  458. return
  459. }
  460. if(self.dialogForm.riskPlanSensorList[i].maxMonitor >= self.dialogForm.riskPlanSensorList[x].minMonitor &&
  461. self.dialogForm.riskPlanSensorList[i].maxMonitor <= self.dialogForm.riskPlanSensorList[x].maxMonitor){
  462. self.msgError('监测区间不能重复,请重新输入');
  463. return
  464. }
  465. }
  466. }
  467. }
  468. //判断 当前为修改还是新增
  469. if(this.dialogIndex != null){
  470. //编辑
  471. //判断是否已有同等级预案
  472. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  473. if(self.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  474. this.msgError('无法添加多个相同等级的预案.')
  475. return
  476. }
  477. }
  478. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  479. if(self.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
  480. let age = 0;
  481. for(let o=0;o<self.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  482. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  483. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  484. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  485. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  486. age++
  487. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  488. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  489. age++
  490. }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  491. self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  492. age++
  493. }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  494. self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  495. age++
  496. }
  497. }
  498. }
  499. }
  500. if(self.dialogForm.riskPlanSensorList.length == age){
  501. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  502. return
  503. }
  504. }
  505. }
  506. }else{
  507. //新增
  508. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  509. if(self.form.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  510. this.msgError('无法添加多个相同等级的预案.')
  511. return
  512. }
  513. }
  514. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  515. if(self.form.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
  516. let age = 0;
  517. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  518. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  519. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  520. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  521. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  522. age++
  523. console.log('1')
  524. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  525. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  526. age++
  527. console.log('2')
  528. }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  529. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  530. age++
  531. console.log('3')
  532. }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  533. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  534. age++
  535. console.log('4')
  536. }
  537. }
  538. }
  539. }
  540. if(self.dialogForm.riskPlanSensorList.length == age){
  541. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  542. return
  543. }
  544. }
  545. }
  546. }
  547. // this.$refs["dialogForm"].validate(valid => {
  548. // if (valid) {
  549. if(this.dialogIndex != null){
  550. //修改预案级别数据
  551. let text = [];
  552. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  553. if(this.dialogIndex != i){
  554. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  555. for(let x=0;x<self.sensorList.length;x++){
  556. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  557. text.push(self.sensorList[x].hardwareTypeName);
  558. }
  559. }
  560. }
  561. }
  562. }
  563. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  564. for(let x=0;x<self.sensorList.length;x++){
  565. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  566. text.push(self.sensorList[x].hardwareTypeName);
  567. }
  568. }
  569. }
  570. text = Array.from(new Set(text));
  571. text = text+''
  572. text = text.replace(",","+")
  573. console.log(text);
  574. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  575. obj.riskAutoOff =Number(obj.riskAutoOff);
  576. obj.alarmType =obj.alarmType.toString();
  577. obj.startCondition = text+'';
  578. planLevelPut(obj).then((response) => {
  579. this.msgSuccess(response.msg)
  580. this.selectRiskPlanLeveListRiskPlanId();
  581. this.$set(this,'dialogOpen',false);
  582. });
  583. }else{
  584. //新增预案级别数据
  585. let text = [];
  586. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  587. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  588. for(let x=0;x<self.sensorList.length;x++){
  589. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  590. text.push(self.sensorList[x].hardwareTypeName);
  591. }
  592. }
  593. }
  594. }
  595. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  596. for(let x=0;x<self.sensorList.length;x++){
  597. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  598. text.push(self.sensorList[x].hardwareTypeName);
  599. }
  600. }
  601. }
  602. text = Array.from(new Set(text));
  603. text = text+''
  604. text = text.replace(",","+")
  605. console.log(text);
  606. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  607. obj.riskAutoOff =Number(obj.riskAutoOff);
  608. obj.alarmType =obj.alarmType.toString();
  609. obj.riskPlanId = this.addPlanData.id;
  610. obj.startCondition = text+'';
  611. planLevelAdd(obj).then((response) => {
  612. this.msgSuccess(response.msg)
  613. this.selectRiskPlanLeveListRiskPlanId();
  614. this.$set(this,'dialogOpen',false);
  615. });
  616. }
  617. // }
  618. // })
  619. }
  620. })
  621. },
  622. //取消
  623. cancel(){
  624. this.$set(this,'dialogOpen',false);
  625. },
  626. //新增/编辑预案
  627. buttonClick(type,item,index){
  628. let self = this;
  629. if(type == 1){
  630. let a = 0;
  631. let b = 0;
  632. let c = 0;
  633. let d = 0;
  634. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  635. if(self.form.labRiskPlanLevels[i].riskPlanLevel == 1){
  636. a++
  637. }else if(self.form.labRiskPlanLevels[i].riskPlanLevel == 2){
  638. b++
  639. }else if(self.form.labRiskPlanLevels[i].riskPlanLevel == 3){
  640. c++
  641. }else if(self.form.labRiskPlanLevels[i].riskPlanLevel == 4){
  642. d++
  643. }
  644. }
  645. this.$set(this,'dialogIndex',null);
  646. this.$set(this,'dialogTitle','新增预案规则');
  647. this.$set(this,'dialogForm',{
  648. riskPlanLevel:a==0?1:(b==0?2:(c==0?3:(d==0?4:''))),
  649. ifExit:null,
  650. alarmType:[],
  651. riskAutoOff:'60',
  652. riskPlanSensorList:[],
  653. riskPlanHardwareList:[],
  654. });
  655. this.$set(this,'dialogOpen',true);
  656. }else if(type == 2){
  657. this.$set(this,'dialogTitle','编辑预案规则');
  658. this.$set(this,'dialogIndex',index);
  659. let obj = JSON.parse(JSON.stringify(item))
  660. for(let i=0;i<obj.riskPlanHardwareList.length;i++){
  661. for(let o=0;o<self.hardwareList.length;o++){
  662. if(obj.riskPlanHardwareList[i].hardwareType == self.hardwareList[o].hardwareTypeEnum.code){
  663. obj.riskPlanHardwareList[i].hardwareList = self.hardwareList[o].functionStatusList
  664. }
  665. }
  666. }
  667. this.$set(this,'dialogForm',{
  668. id:obj.id,
  669. riskPlanId:obj.riskPlanId,
  670. riskPlanLevel:obj.riskPlanLevel,
  671. ifExit:obj.ifExit,
  672. alarmType:obj.alarmType.split(','),
  673. riskAutoOff:obj.riskAutoOff+'',
  674. riskPlanSensorList:obj.riskPlanSensorList,
  675. riskPlanHardwareList:obj.riskPlanHardwareList,
  676. });
  677. let list = [];
  678. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  679. if(i!=index){
  680. list.push(self.form.labRiskPlanLevels[i]);
  681. }
  682. }
  683. this.$set(this,'labRiskPlanLevels',JSON.parse(JSON.stringify(list)));
  684. this.$set(this,'dialogOpen',true);
  685. }else if(type == 3){
  686. this.$confirm('确定要删除该预案规则吗?', "警告", {
  687. confirmButtonText: "确定",
  688. cancelButtonText: "取消",
  689. type: "warning"
  690. }).then(function() {
  691. let text = [];
  692. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  693. if(index != i){
  694. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  695. for(let x=0;x<self.sensorList.length;x++){
  696. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  697. text.push(self.sensorList[x].hardwareTypeName);
  698. }
  699. }
  700. }
  701. }
  702. }
  703. text = Array.from(new Set(text));
  704. text = text+''
  705. text = text.replace(",","+")
  706. let obj = {
  707. id:item.id,
  708. startCondition:text,
  709. riskPlanId:item.riskPlanId
  710. }
  711. planLevelDel(obj).then((response) => {
  712. self.msgSuccess(response.msg)
  713. self.selectRiskPlanLeveListRiskPlanId();
  714. });
  715. }).then(() => {
  716. }).catch(() => {});
  717. }
  718. },
  719. }
  720. }
  721. </script>
  722. <style lang="scss">
  723. .add-plan-max-button-color{
  724. color:#dedede!important;
  725. }
  726. //.el-form-item__content{
  727. // margin-left: 0px!important;
  728. // display: flex;
  729. //}
  730. </style>
  731. <style scoped lang="scss">
  732. .autoClose{
  733. display: flex;
  734. align-items: center;
  735. margin-bottom: 24px;
  736. .autoClose_l{
  737. width: 100px;
  738. color: #333;
  739. font-weight: 500;
  740. font-size: 14px;
  741. line-height: 40px !important;
  742. text-align: right;
  743. padding: 0 12px 0 0;
  744. box-sizing: border-box;
  745. }
  746. .autoClose_l:before{
  747. content: "*";
  748. color: #ff4949;
  749. margin-right: 4px;
  750. }
  751. .autoClose_l2{
  752. color: #333;
  753. font-weight: 500;
  754. font-size: 14px;
  755. line-height: 40px !important;
  756. margin-right: 8px;
  757. }
  758. .el-form-item{
  759. margin: 0px!important;
  760. }
  761. .autoClose_l3{
  762. }
  763. .autoClose_l4{
  764. color: #333;
  765. font-weight: 500;
  766. font-size: 14px;
  767. line-height: 40px;
  768. background: #f5f7fa;
  769. border: 1px solid #DCDFE6;
  770. border-left: none;
  771. width: 40px;
  772. height: 40px;
  773. text-align: center;
  774. }
  775. .autoClose_l5{
  776. color: #333;
  777. font-weight: 500;
  778. font-size: 14px;
  779. margin-left: 8px;
  780. }
  781. }
  782. .newAddPlan {
  783. flex: 1;
  784. display: flex !important;
  785. flex-direction: column;
  786. overflow: hidden;
  787. p {
  788. margin: 0;
  789. font-weight: 500;
  790. }
  791. .newAddPlan-title-box {
  792. height: 80px;
  793. display: flex;
  794. border-bottom: 1px solid #E0E0E0;
  795. p:nth-child(1) {
  796. flex: 1;
  797. margin-left: 20px;
  798. font-size: 16px;
  799. color: #0045AF;
  800. line-height: 80px;
  801. font-weight: 700;
  802. }
  803. p:nth-child(2) {
  804. font-size: 14px;
  805. margin-top: 20px;
  806. margin-right: 20px;
  807. }
  808. p:nth-child(3) {
  809. font-size: 14px;
  810. width: 130px;
  811. margin-top: 20px;
  812. margin-right: 20px;
  813. }
  814. p:nth-child(4) {
  815. font-size: 14px;
  816. width: 150px;
  817. margin: 20px;
  818. }
  819. }
  820. .plan-for-max-box {
  821. flex: 1;
  822. padding:0 20px 20px 20px;
  823. .plan-for-max-box-name-box{
  824. display: flex;
  825. .plan-for-max-box-name-button-one{
  826. width:80px;
  827. text-align: center;
  828. font-size:14px;
  829. line-height:40px;
  830. margin:40px 0 0 40px;
  831. }
  832. .plan-for-max-box-name-button-two{
  833. width:80px;
  834. text-align: center;
  835. font-size:14px;
  836. line-height:40px;
  837. margin:40px 0 0 40px;
  838. }
  839. .plan-for-max-box-name-button-three{
  840. width:80px;
  841. text-align: center;
  842. font-size:14px;
  843. line-height:40px;
  844. margin:40px 0 0 20px;
  845. }
  846. }
  847. .for-plan-box{
  848. position: relative;
  849. border-radius:10px;
  850. overflow: hidden;
  851. box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.302);
  852. margin-bottom:24px;
  853. display: flex;
  854. .position-title-type{
  855. position:absolute;
  856. left:0;
  857. top:0;
  858. border-bottom-right-radius: 10px;
  859. width:84px;
  860. line-height:30px;
  861. font-size:14px;
  862. text-align: center;
  863. }
  864. .type-color-a{
  865. color:#0183FA;
  866. background: #CCE6FE;
  867. }
  868. .type-color-b{
  869. color:#FF9900;
  870. background: rgb(256,232,206);
  871. }
  872. .type-color-c{
  873. color:#FF4800;
  874. background: rgb(251,228,206);
  875. }
  876. .type-color-d{
  877. color:#FF0000;
  878. background: rgba(248,206,205);;
  879. }
  880. .for-plan-img-box{
  881. width:284px;
  882. display: flex;
  883. flex-direction: column;
  884. .for-plan-img-null-p{
  885. flex:1;
  886. }
  887. .for-plan-img-box-big{
  888. display: flex;
  889. .for-plan-img-box-one{
  890. margin-left:81px;
  891. width:168px;
  892. display: flex;
  893. img{
  894. height:50px;
  895. width:50px;
  896. }
  897. p{
  898. margin-left:20px;
  899. line-height:50px;
  900. font-size:14px;
  901. color:#333;
  902. }
  903. }
  904. .for-plan-img-box-two{
  905. display: flex;
  906. img{
  907. height:50px;
  908. width:50px;
  909. }
  910. p{
  911. line-height:50px;
  912. font-size:14px;
  913. color:#333;
  914. }
  915. }
  916. }
  917. }
  918. .min-for-text-box{
  919. width:1030px;
  920. padding-top:21px;
  921. .min-for-text-box-one{
  922. width:460px;
  923. line-height:30px;
  924. margin-bottom:21px;
  925. margin-right:40px;
  926. border-radius:6px;
  927. color:#0183FA;
  928. background:rgb(209,229,253);
  929. display: inline-block;
  930. div{
  931. display: flex;
  932. p:nth-child(1){
  933. margin-right:15px;
  934. margin-left:9px;
  935. }
  936. }
  937. }
  938. .min-for-text-box-two{
  939. width:460px;
  940. line-height:30px;
  941. margin-bottom:21px;
  942. margin-right:40px;
  943. border-radius:6px;
  944. color:#333;
  945. background:rgb(253,242,227);
  946. display: inline-block;
  947. div{
  948. display: flex;
  949. p:nth-child(1){
  950. margin-right:15px;
  951. margin-left:9px;
  952. }
  953. p:nth-child(2){
  954. margin-right:15px;
  955. }
  956. }
  957. }
  958. }
  959. .for-button-max-box{
  960. flex:1;
  961. margin:19px 0;
  962. border-left:1px dashed #D8D8D8;
  963. display: flex;
  964. div{
  965. margin:auto 0 auto 34px;
  966. width:85px;
  967. display: flex;
  968. height:20px;
  969. cursor: pointer;
  970. img{
  971. height:14px;
  972. margin-top:3px;
  973. }
  974. p{
  975. font-size:14px;
  976. margin-left:9px;
  977. }
  978. }
  979. }
  980. }
  981. .plan-for-max-button-box{
  982. margin:30px auto;
  983. display: flex;
  984. .plan-for-max-button-null{
  985. flex:1;
  986. }
  987. .plan-for-max-button{
  988. cursor: pointer;
  989. color:#0183FA;
  990. border:1px dashed #0183FA;
  991. border-radius:4px;
  992. width:300px;
  993. line-height:40px;
  994. text-align: center;
  995. font-size:14px;
  996. }
  997. }
  998. }
  999. }
  1000. </style>