newAddPlan.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873
  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">
  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. //提交数据检测条件区间是否重复(dialog本身数据查重)
  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. //判断 当前为修改还是新增
  420. if(this.dialogIndex != null){
  421. //编辑
  422. //判断是否已有同等级预案
  423. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  424. if(self.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  425. this.msgError('无法添加多个相同等级的预案.')
  426. return
  427. }
  428. }
  429. for(let i=0;i<self.labRiskPlanLevels.length;i++){
  430. if(self.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
  431. let age = 0;
  432. for(let o=0;o<self.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  433. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  434. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  435. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  436. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  437. age++
  438. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  439. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  440. age++
  441. }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  442. self.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  443. age++
  444. }else if(self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  445. self.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  446. age++
  447. }
  448. }
  449. }
  450. }
  451. if(self.dialogForm.riskPlanSensorList.length == age){
  452. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  453. return
  454. }
  455. }
  456. }
  457. }else{
  458. //新增
  459. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  460. if(self.form.labRiskPlanLevels[i].riskPlanLevel == self.dialogForm.riskPlanLevel){
  461. this.msgError('无法添加多个相同等级的预案.')
  462. return
  463. }
  464. }
  465. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  466. if(self.form.labRiskPlanLevels[i].riskPlanSensorList.length == self.dialogForm.riskPlanSensorList.length){
  467. let age = 0;
  468. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  469. for(let x=0;x<self.dialogForm.riskPlanSensorList.length;x++){
  470. if(self.dialogForm.riskPlanSensorList[x].sensorType==self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType){
  471. if(self.dialogForm.riskPlanSensorList[x].minMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  472. self.dialogForm.riskPlanSensorList[x].minMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  473. age++
  474. console.log('1')
  475. }else if(self.dialogForm.riskPlanSensorList[x].maxMonitor>=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor&&
  476. self.dialogForm.riskPlanSensorList[x].maxMonitor<=self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor){
  477. age++
  478. console.log('2')
  479. }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  480. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].minMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  481. age++
  482. console.log('3')
  483. }else if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor>=self.dialogForm.riskPlanSensorList[x].minMonitor&&
  484. self.form.labRiskPlanLevels[i].riskPlanSensorList[o].maxMonitor<=self.dialogForm.riskPlanSensorList[x].maxMonitor){
  485. age++
  486. console.log('4')
  487. }
  488. }
  489. }
  490. }
  491. if(self.dialogForm.riskPlanSensorList.length == age){
  492. self.msgError('监测区间不能与其他级别检测条件完全重复,请重新输入');
  493. return
  494. }
  495. }
  496. }
  497. }
  498. this.$refs["dialogForm"].validate(valid => {
  499. if (valid) {
  500. if(this.dialogIndex != null){
  501. //修改预案级别数据
  502. let text = [];
  503. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  504. if(this.dialogIndex != i){
  505. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  506. for(let x=0;x<self.sensorList.length;x++){
  507. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  508. text.push(self.sensorList[x].hardwareTypeName);
  509. }
  510. }
  511. }
  512. }
  513. }
  514. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  515. for(let x=0;x<self.sensorList.length;x++){
  516. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  517. text.push(self.sensorList[x].hardwareTypeName);
  518. }
  519. }
  520. }
  521. text = Array.from(new Set(text));
  522. text = text+''
  523. text = text.replace(",","+")
  524. console.log(text);
  525. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  526. obj.startCondition = text+'';
  527. planLevelPut(obj).then((response) => {
  528. this.msgSuccess(response.msg)
  529. this.selectRiskPlanLeveListRiskPlanId();
  530. this.$set(this,'dialogOpen',false);
  531. });
  532. }else{
  533. //新增预案级别数据
  534. let text = [];
  535. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  536. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  537. for(let x=0;x<self.sensorList.length;x++){
  538. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  539. text.push(self.sensorList[x].hardwareTypeName);
  540. }
  541. }
  542. }
  543. }
  544. for(let i=0;i<self.dialogForm.riskPlanSensorList.length;i++){
  545. for(let x=0;x<self.sensorList.length;x++){
  546. if(self.dialogForm.riskPlanSensorList[i].sensorType == self.sensorList[x].hardwareTypeCode){
  547. text.push(self.sensorList[x].hardwareTypeName);
  548. }
  549. }
  550. }
  551. text = Array.from(new Set(text));
  552. text = text+''
  553. text = text.replace(",","+")
  554. console.log(text);
  555. let obj = JSON.parse(JSON.stringify(this.dialogForm))
  556. obj.riskPlanId = this.addPlanData.id;
  557. obj.startCondition = text+'';
  558. planLevelAdd(obj).then((response) => {
  559. this.msgSuccess(response.msg)
  560. this.selectRiskPlanLeveListRiskPlanId();
  561. this.$set(this,'dialogOpen',false);
  562. });
  563. }
  564. }
  565. })
  566. },
  567. //取消
  568. cancel(){
  569. this.$set(this,'dialogOpen',false);
  570. },
  571. //新增/编辑预案
  572. buttonClick(type,item,index){
  573. let self = this;
  574. if(type == 1){
  575. this.$set(this,'dialogIndex',null);
  576. this.$set(this,'dialogTitle','新增预案规则');
  577. this.$set(this,'dialogForm',{
  578. riskPlanLevel:null,
  579. ifExit:null,
  580. riskPlanSensorList:[],
  581. riskPlanHardwareList:[],
  582. });
  583. this.$set(this,'dialogOpen',true);
  584. }else if(type == 2){
  585. this.$set(this,'dialogTitle','编辑预案规则');
  586. this.$set(this,'dialogIndex',index);
  587. let obj = JSON.parse(JSON.stringify(item))
  588. for(let i=0;i<obj.riskPlanHardwareList.length;i++){
  589. for(let o=0;o<self.hardwareList.length;o++){
  590. if(obj.riskPlanHardwareList[i].hardwareType == self.hardwareList[o].hardwareTypeEnum.code){
  591. obj.riskPlanHardwareList[i].hardwareList = self.hardwareList[o].functionStatusList
  592. }
  593. }
  594. }
  595. this.$set(this,'dialogForm',{
  596. id:obj.id,
  597. riskPlanId:obj.riskPlanId,
  598. riskPlanLevel:obj.riskPlanLevel,
  599. ifExit:obj.ifExit,
  600. riskPlanSensorList:obj.riskPlanSensorList,
  601. riskPlanHardwareList:obj.riskPlanHardwareList,
  602. });
  603. let list = [];
  604. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  605. if(i!=index){
  606. list.push(self.form.labRiskPlanLevels[i]);
  607. }
  608. }
  609. this.$set(this,'labRiskPlanLevels',JSON.parse(JSON.stringify(list)));
  610. this.$set(this,'dialogOpen',true);
  611. }else if(type == 3){
  612. this.$confirm('确定要删除该预案规则吗?', "警告", {
  613. confirmButtonText: "确定",
  614. cancelButtonText: "取消",
  615. type: "warning"
  616. }).then(function() {
  617. let text = [];
  618. for(let i=0;i<self.form.labRiskPlanLevels.length;i++){
  619. if(index != i){
  620. for(let o=0;o<self.form.labRiskPlanLevels[i].riskPlanSensorList.length;o++){
  621. for(let x=0;x<self.sensorList.length;x++){
  622. if(self.form.labRiskPlanLevels[i].riskPlanSensorList[o].sensorType == self.sensorList[x].hardwareTypeCode){
  623. text.push(self.sensorList[x].hardwareTypeName);
  624. }
  625. }
  626. }
  627. }
  628. }
  629. text = Array.from(new Set(text));
  630. text = text+''
  631. text = text.replace(",","+")
  632. let obj = {
  633. id:item.id,
  634. startCondition:text,
  635. riskPlanId:item.riskPlanId
  636. }
  637. planLevelDel(obj).then((response) => {
  638. self.msgSuccess(response.msg)
  639. self.selectRiskPlanLeveListRiskPlanId();
  640. });
  641. }).then(() => {
  642. }).catch(() => {});
  643. }
  644. },
  645. }
  646. }
  647. </script>
  648. <style scoped lang="scss">
  649. .newAddPlan {
  650. flex: 1;
  651. display: flex !important;
  652. flex-direction: column;
  653. overflow: hidden;
  654. p {
  655. margin: 0;
  656. font-weight: 500;
  657. }
  658. .newAddPlan-title-box {
  659. height: 80px;
  660. display: flex;
  661. border-bottom: 1px solid #E0E0E0;
  662. p:nth-child(1) {
  663. flex: 1;
  664. margin-left: 20px;
  665. font-size: 16px;
  666. color: #0045AF;
  667. line-height: 80px;
  668. font-weight: 700;
  669. }
  670. p:nth-child(2) {
  671. font-size: 14px;
  672. margin-top: 20px;
  673. margin-right: 20px;
  674. }
  675. p:nth-child(3) {
  676. font-size: 14px;
  677. width: 130px;
  678. margin-top: 20px;
  679. }
  680. p:nth-child(4) {
  681. font-size: 14px;
  682. width: 150px;
  683. margin: 20px;
  684. }
  685. }
  686. .plan-for-max-box {
  687. flex: 1;
  688. padding:0 20px 20px 20px;
  689. .plan-for-max-box-name-box{
  690. display: flex;
  691. .plan-for-max-box-name-button-one{
  692. width:80px;
  693. text-align: center;
  694. font-size:14px;
  695. line-height:40px;
  696. margin:40px 0 0 40px;
  697. }
  698. .plan-for-max-box-name-button-two{
  699. width:80px;
  700. text-align: center;
  701. font-size:14px;
  702. line-height:40px;
  703. margin:40px 0 0 40px;
  704. }
  705. .plan-for-max-box-name-button-three{
  706. width:80px;
  707. text-align: center;
  708. font-size:14px;
  709. line-height:40px;
  710. margin:40px 0 0 20px;
  711. }
  712. }
  713. .for-plan-box{
  714. position: relative;
  715. border-radius:10px;
  716. overflow: hidden;
  717. box-shadow: 0px 4px 10px 0px rgba(0,0,0,0.302);
  718. margin-bottom:24px;
  719. display: flex;
  720. .position-title-type{
  721. position:absolute;
  722. left:0;
  723. top:0;
  724. border-bottom-right-radius: 10px;
  725. width:84px;
  726. line-height:30px;
  727. font-size:14px;
  728. text-align: center;
  729. }
  730. .type-color-a{
  731. color:#0183FA;
  732. background: #CCE6FE;
  733. }
  734. .type-color-b{
  735. color:#FF9900;
  736. background: rgb(256,232,206);
  737. }
  738. .type-color-c{
  739. color:#FF4800;
  740. background: rgb(251,228,206);
  741. }
  742. .type-color-d{
  743. color:#FF0000;
  744. background: rgba(248,206,205);;
  745. }
  746. .for-plan-img-box{
  747. width:284px;
  748. display: flex;
  749. flex-direction: column;
  750. .for-plan-img-null-p{
  751. flex:1;
  752. }
  753. .for-plan-img-box-big{
  754. display: flex;
  755. .for-plan-img-box-one{
  756. margin-left:81px;
  757. width:168px;
  758. display: flex;
  759. img{
  760. height:50px;
  761. width:50px;
  762. }
  763. p{
  764. margin-left:20px;
  765. line-height:50px;
  766. font-size:14px;
  767. color:#333;
  768. }
  769. }
  770. .for-plan-img-box-two{
  771. display: flex;
  772. img{
  773. height:50px;
  774. width:50px;
  775. }
  776. p{
  777. line-height:50px;
  778. font-size:14px;
  779. color:#333;
  780. }
  781. }
  782. }
  783. }
  784. .min-for-text-box{
  785. width:1030px;
  786. padding-top:21px;
  787. .min-for-text-box-one{
  788. width:460px;
  789. line-height:30px;
  790. margin-bottom:21px;
  791. margin-right:40px;
  792. border-radius:6px;
  793. color:#0183FA;
  794. background:rgb(209,229,253);
  795. display: inline-block;
  796. div{
  797. display: flex;
  798. p:nth-child(1){
  799. margin-right:15px;
  800. margin-left:9px;
  801. }
  802. }
  803. }
  804. .min-for-text-box-two{
  805. width:460px;
  806. line-height:30px;
  807. margin-bottom:21px;
  808. margin-right:40px;
  809. border-radius:6px;
  810. color:#333;
  811. background:rgb(253,242,227);
  812. display: inline-block;
  813. div{
  814. display: flex;
  815. p:nth-child(1){
  816. margin-right:15px;
  817. margin-left:9px;
  818. }
  819. p:nth-child(2){
  820. margin-right:15px;
  821. }
  822. }
  823. }
  824. }
  825. .for-button-max-box{
  826. flex:1;
  827. margin:19px 0;
  828. border-left:1px dashed #D8D8D8;
  829. display: flex;
  830. div{
  831. margin:auto 0 auto 34px;
  832. width:85px;
  833. display: flex;
  834. height:20px;
  835. cursor: pointer;
  836. img{
  837. height:14px;
  838. margin-top:3px;
  839. }
  840. p{
  841. font-size:14px;
  842. margin-left:9px;
  843. }
  844. }
  845. }
  846. }
  847. .plan-for-max-button-box{
  848. margin:30px auto;
  849. display: flex;
  850. .plan-for-max-button-null{
  851. flex:1;
  852. }
  853. .plan-for-max-button{
  854. cursor: pointer;
  855. color:#0183FA;
  856. border:1px dashed #0183FA;
  857. border-radius:4px;
  858. width:300px;
  859. line-height:40px;
  860. text-align: center;
  861. font-size:14px;
  862. }
  863. }
  864. }
  865. }
  866. </style>