Fengmen.vue 38 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231
  1. <template>
  2. <!-- 风机风门-->
  3. <div class="l_Dialog bou tablebk">
  4. <div class="common-layout" style="margin: 0">
  5. <el-aside
  6. width="2.125rem"
  7. class="L_aside L_aside1 asideg asidegbg leftbgimg1"
  8. >
  9. <div class="demo-collapse">
  10. <el-collapse v-model="coolactiveName1">
  11. <el-collapse-item name="1" class="imgneon">
  12. <template #title>
  13. <el-icon class="iconimg Frame3" fit="contain"></el-icon>
  14. 风机<el-icon class="header-icon"> </el-icon>
  15. </template>
  16. <div class="asides_content">
  17. <div class="jc_content tablecolor">
  18. <div class="jc_padding font12">
  19. <div class="xian btncolor tablefocus bmar">
  20. <el-table
  21. :data="fjtableData"
  22. style="width: 100%"
  23. :max-height="tableHeight"
  24. :highlight-current-row="currentrow"
  25. :row-class-name="tableRowClassName"
  26. @row-click="handlerow($event)"
  27. :header-cell-style="{ background: 'rgba(13, 22, 57, 0) ' }"
  28. >
  29. <template v-slot:empty>
  30. <p>暂无数据</p>
  31. </template>
  32. <el-table-column prop="fanname" label="风机名称" />
  33. <el-table-column prop="pname" label="选择巷道" />
  34. <el-table-column prop="site" label="相对位置" />
  35. <el-table-column prop="pa" >
  36. <template v-slot:header>
  37. <span >增压</span><br>
  38. <span >(kpa)</span>
  39. </template>
  40. </el-table-column>
  41. <el-table-column prop="onoff" label="开启状态">
  42. <template #default="scope">
  43. {{
  44. scope.row.onoff == "0"
  45. ? "否"
  46. : scope.row.onoff == "1"
  47. ? "是"
  48. : "是"
  49. }}
  50. </template>
  51. </el-table-column>
  52. </el-table>
  53. <div class="asdis_btn">
  54. <div class="flex_a" >
  55. <div
  56. class="btns"
  57. @click="fjloadclick();sdialog.fjloaddialog = true;"
  58. >
  59. <span class="spantext">加载</span>
  60. </div>
  61. </div>
  62. <div class="flex_a" >
  63. <div
  64. class="btns"
  65. @click="fjclick();sdialog.fjdialog = true;"
  66. >
  67. <span class="spantext">添加</span>
  68. </div>
  69. </div>
  70. <div class="flex_a" >
  71. <div class="btns" @click="xiugaiclick()">
  72. <span class="spantext">修改</span>
  73. </div>
  74. </div>
  75. <div class="flex_a">
  76. <div class="btns" @click="delonclock('风机')" >
  77. <span class="spantext">删除</span>
  78. </div>
  79. </div>
  80. </div>
  81. </div>
  82. </div>
  83. </div>
  84. </div>
  85. </el-collapse-item>
  86. </el-collapse>
  87. <el-collapse v-model="coolactiveName1" style="margin-top: 10px;">
  88. <el-collapse-item name="2" class="imgneon">
  89. <template #title>
  90. <el-icon class="iconimg Frame3" fit="contain"></el-icon>
  91. 风门<el-icon class="header-icon"> </el-icon>
  92. </template>
  93. <div class="asides_content">
  94. <div class="jc_content tablecolor">
  95. <div class="jc_padding font12">
  96. <div class="xian btncolor tablefocus bmar">
  97. <el-table
  98. :data="fmtableData"
  99. style="width: 100%"
  100. :max-height="tableHeight"
  101. :highlight-current-row="currentrow"
  102. :row-class-name="tableRowClassName"
  103. @row-click="handlerow2($event)"
  104. :header-cell-style="{ background: 'rgba(13, 22, 57, 0) ' }"
  105. >
  106. <template v-slot:empty>
  107. <p>暂无数据</p>
  108. </template>
  109. <el-table-column prop="doorname" label="风门名称" />
  110. <el-table-column prop="pname" label="选择巷道" />
  111. <el-table-column prop="site" label="相对位置" />
  112. <el-table-column prop="dragcoe" label="阻力系数" />
  113. <el-table-column prop="onoff" label="开启状态">
  114. <template #default="scope">
  115. {{
  116. scope.row.onoff == 0
  117. ? "否"
  118. : scope.row.onoff == 1
  119. ? "是"
  120. : "是"
  121. }}
  122. </template>
  123. </el-table-column>
  124. </el-table>
  125. <div class="asdis_btn">
  126. <div class="flex_a" >
  127. <div
  128. class="btns" @click="fmload();sdialog.fmloaddialog=true"
  129. >
  130. <span class="spantext">加载</span>
  131. </div>
  132. </div>
  133. <div class="flex_a" >
  134. <div
  135. class="btns" @click="fmadd();sdialog.fmdialog=true"
  136. >
  137. <span class="spantext">添加</span>
  138. </div>
  139. </div>
  140. <div class="flex_a" >
  141. <div class="btns" @click="fmxiugai()">
  142. <span class="spantext">修改</span>
  143. </div>
  144. </div>
  145. <div class="flex_a">
  146. <div class="btns" @click="fmdel('风门')" >
  147. <span class="spantext">删除</span>
  148. </div>
  149. </div>
  150. </div>
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. </el-collapse-item>
  156. </el-collapse>
  157. </div>
  158. </el-aside>
  159. </div>
  160. <!-- 风机的加载 -->
  161. <el-dialog
  162. v-model="sdialog.fjloaddialog"
  163. width="400"
  164. align-center
  165. :modal="false"
  166. :append-to-body="true"
  167. :z-index='1000'
  168. :close-on-click-modal="false"
  169. :fullscreen="false"
  170. :modal-append-to-body="false"
  171. modal-class="summary-dlg"
  172. class="dialog_class bgcolor tianjia"
  173. draggable
  174. >
  175. <template #header="{ titleId, titleClass }">
  176. <div class="my-header">
  177. <el-image :src="icon" fit="contain"></el-image>
  178. <h4 :id="titleId" :class="titleClass">加载</h4>
  179. </div>
  180. </template>
  181. <div class="demo-input-suffix firsttitle leftbgimg2">
  182. <el-table
  183. :row-class-name="tableRowClassName"
  184. :max-height="tableHeight"
  185. ref="tabledatafjjzref"
  186. type="selection"
  187. :data="tableDatafjjz"
  188. style="width: 100%"
  189. :header-cell-style="{ background: 'rgba(13, 22, 57, 0) ' }"
  190. >
  191. <template v-slot:empty>
  192. <p>暂无数据</p>
  193. </template>
  194. <el-table-column type="selection" width="55" />
  195. <!-- <el-table-column property="snId" label="开始节点" />
  196. <el-table-column property="enId" label="结束节点" /> -->
  197. <el-table-column type="index" label="编号" width="70" />
  198. <el-table-column property="fanname" label="风机名称" />
  199. <el-table-column property="pname" label="巷道名称" />
  200. <el-table-column property="site" label="相对位置" />
  201. <el-table-column prop="pa" >
  202. <template v-slot:header>
  203. <span >增压</span><br>
  204. <span >(kpa)</span>
  205. </template>
  206. </el-table-column>
  207. <el-table-column prop="onoff" label="开启状态">
  208. <template #default="scope">
  209. {{
  210. scope.row.onoff == "0"
  211. ? "否"
  212. : scope.row.onoff == "1"
  213. ? "是"
  214. : "是"
  215. }}
  216. </template>
  217. </el-table-column>
  218. </el-table>
  219. <div class="dialog-footer footer_div l_btn">
  220. <div class="footerbtn flex1">
  221. <div class="borderimg">
  222. <el-button @click="sdialog.fjloaddialog = false">取消</el-button>
  223. </div>
  224. </div>
  225. <div class="footerbtn flex1">
  226. <div class="borderimg">
  227. <el-button
  228. @click="
  229. fjloadsave();
  230. sdialog.fjloaddialog = false;
  231. "
  232. >
  233. 确定
  234. </el-button>
  235. </div>
  236. </div>
  237. </div>
  238. </div>
  239. </el-dialog>
  240. <!-- 风机的添加 -->
  241. <el-dialog
  242. v-model="sdialog.fjdialog"
  243. width="400"
  244. align-center
  245. :modal="false"
  246. :append-to-body="true"
  247. :z-index='1000'
  248. :close-on-click-modal="false"
  249. :fullscreen="false"
  250. :modal-append-to-body="false"
  251. modal-class="summary-dlg"
  252. class="dialog_class bgcolor tianjia"
  253. draggable
  254. @close='closeDialog'
  255. >
  256. <template #header="{ titleId, titleClass }">
  257. <div class="my-header">
  258. <el-image :src="icon" fit="contain"></el-image>
  259. <h4 :id="titleId" :class="titleClass">{{ zhtext }}</h4>
  260. </div>
  261. </template>
  262. <el-form >
  263. <el-form-item label="编码" :label-width="formLabelWidth6">
  264. <el-input v-model="fjobj.fancode" maxlength="18" @input="fjobj.fancode = fjobj.fancode.replace(/[\u4e00-\u9fa5\s]/g, '')" class="w-50 m-2" placeholder="请输入" />
  265. </el-form-item>
  266. <el-form-item label="风机名称" :label-width="formLabelWidth6">
  267. <el-input v-model="fjobj.fanname" maxlength="18" oninput ="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2" placeholder="请输入" />
  268. </el-form-item>
  269. <div class="demo-input-suffix firsttitle magintop">
  270. <el-form-item label="巷道名称" :label-width="formLabelWidth6">
  271. <el-input
  272. v-model="source.selectstr"
  273. disabled
  274. class="w-50 m-2"
  275. placeholder="巷道名称"
  276. />
  277. </el-form-item>
  278. <div class="btn2">
  279. <el-button
  280. type="primary"
  281. @click="
  282. fireclick('fj');
  283. sdialog.dialogVisiblenode = true;
  284. "
  285. >选择巷道</el-button
  286. >
  287. </div>
  288. <div class="btn2" style="padding-left: 10px">
  289. <el-button type="primary" @click="Dclick('fj')">3D巷道选择</el-button>
  290. </div>
  291. </div>
  292. <div class="input">
  293. <el-form-item label="相对位置" :label-width="formLabelWidth6">
  294. <el-input-number
  295. v-model="source.site"
  296. :min="0"
  297. :max="1"
  298. :precision="2"
  299. :step="0.1"
  300. controls-position="right"
  301. class="w-50 m-2"
  302. placeholder="相对位置"
  303. @change="inputnuberChange"
  304. />
  305. </el-form-item>
  306. </div>
  307. <div style="display: flex;" >
  308. <span class="switchppm">开启状态</span>
  309. <el-switch
  310. v-model="fjobj.onoff"
  311. inline-prompt
  312. active-text="是"
  313. inactive-text="否"
  314. :active-value="1"
  315. :inactive-value="0"
  316. @change="handleSwitchChange"
  317. />
  318. </div>
  319. <el-form-item label="增压(kpa)" :label-width="formLabelWidth6">
  320. <el-input v-model="fjobj.pa" maxlength="10" oninput ="value=value.replace(/[^0-9.]/g,'')" class="w-50 m-2" placeholder="请输入" />
  321. </el-form-item>
  322. </el-form>
  323. <div class="dialog-footer footer_div l_btn">
  324. <div class="footerbtn flex1">
  325. <div class="borderimg">
  326. <el-button @click="closeDialog(); sdialog.fjdialog=false">取消</el-button>
  327. </div>
  328. </div>
  329. <div class="footerbtn flex1">
  330. <div class="borderimg">
  331. <el-button
  332. :disabled="isSubmitting"
  333. @click="addrequest(); "
  334. >
  335. 确定
  336. </el-button>
  337. </div>
  338. </div>
  339. </div>
  340. </el-dialog>
  341. <!-- 风门的加载 -->
  342. <el-dialog
  343. v-model="sdialog.fmloaddialog"
  344. width="400"
  345. align-center
  346. :modal="false"
  347. :append-to-body="true"
  348. :z-index='1000'
  349. :close-on-click-modal="false"
  350. :fullscreen="false"
  351. :modal-append-to-body="false"
  352. modal-class="summary-dlg"
  353. class="dialog_class bgcolor tianjia"
  354. draggable
  355. >
  356. <template #header="{ titleId, titleClass }">
  357. <div class="my-header">
  358. <el-image :src="icon" fit="contain"></el-image>
  359. <h4 :id="titleId" :class="titleClass">加载</h4>
  360. </div>
  361. </template>
  362. <div class="demo-input-suffix firsttitle leftbgimg2">
  363. <el-table
  364. :row-class-name="tableRowClassName"
  365. :max-height="tableHeight"
  366. ref="tabledatafmjzref"
  367. type="selection"
  368. :data="tableDatafmjz"
  369. style="width: 100%"
  370. :header-cell-style="{ background: 'rgba(13, 22, 57, 0) ' }"
  371. >
  372. <template v-slot:empty>
  373. <p>暂无数据</p>
  374. </template>
  375. <el-table-column type="selection" width="55" />
  376. <!-- <el-table-column property="snId" label="开始节点" />
  377. <el-table-column property="enId" label="结束节点" /> -->
  378. <el-table-column type="index" label="编号" width="70" />
  379. <el-table-column property="doorname" label="风门名称" />
  380. <el-table-column property="pname" label="巷道名称" />
  381. <el-table-column property="site" label="相对位置" />
  382. <el-table-column prop="dragcoe" label="阻力系数" />
  383. <el-table-column prop="onoff" label="开启状态">
  384. <template #default="scope">
  385. {{
  386. scope.row.onoff == "0"
  387. ? "否"
  388. : scope.row.onoff == "1"
  389. ? "是"
  390. : "是"
  391. }}
  392. </template>
  393. </el-table-column>
  394. </el-table>
  395. <div class="dialog-footer footer_div l_btn">
  396. <div class="footerbtn flex1">
  397. <div class="borderimg">
  398. <el-button @click="sdialog.fmloaddialog = false">取消</el-button>
  399. </div>
  400. </div>
  401. <div class="footerbtn flex1">
  402. <div class="borderimg">
  403. <el-button
  404. @click="
  405. fmloadsave();
  406. sdialog.fmloaddialog = false;
  407. "
  408. >
  409. 确定
  410. </el-button>
  411. </div>
  412. </div>
  413. </div>
  414. </div>
  415. </el-dialog>
  416. <!-- 风门的添加 -->
  417. <el-dialog
  418. v-model="sdialog.fmdialog"
  419. width="400"
  420. align-center
  421. :modal="false"
  422. :append-to-body="true"
  423. :z-index='1000'
  424. :close-on-click-modal="false"
  425. :fullscreen="false"
  426. :modal-append-to-body="false"
  427. modal-class="summary-dlg"
  428. class="dialog_class bgcolor tianjia"
  429. draggable
  430. @close='closeDialog'
  431. >
  432. <template #header="{ titleId, titleClass }">
  433. <div class="my-header">
  434. <el-image :src="icon" fit="contain"></el-image>
  435. <h4 :id="titleId" :class="titleClass">{{ zhtext }}</h4>
  436. </div>
  437. </template>
  438. <el-form >
  439. <!-- 只能输入引文oninput ="value=value.replace(/[^a-zA-Z]/g, '');" -->
  440. <el-form-item label="编码" :label-width="formLabelWidth6">
  441. <el-input v-model="fmobj.doorcode" maxlength="18" @input="fmobj.doorcode = fmobj.doorcode.replace(/[\u4e00-\u9fa5\s]/g, '')" class="w-50 m-2" placeholder="请输入" />
  442. </el-form-item>
  443. <el-form-item label="风门名称" :label-width="formLabelWidth6">
  444. <el-input v-model="fmobj.doorname" maxlength="18" oninput ="value=value.replace(/[^\a-\z\A-\Z0-9\u4E00-\u9FA5]/g,'')" class="w-50 m-2" placeholder="请输入" />
  445. </el-form-item>
  446. <div class="demo-input-suffix firsttitle magintop">
  447. <el-form-item label="巷道名称" :label-width="formLabelWidth6">
  448. <el-input
  449. v-model="source.selectstr"
  450. disabled
  451. class="w-50 m-2"
  452. placeholder="巷道名称"
  453. />
  454. </el-form-item>
  455. <div class="btn2">
  456. <el-button
  457. type="primary"
  458. @click="
  459. fireclick('fm');
  460. sdialog.dialogVisiblenode = true;
  461. "
  462. >选择巷道</el-button
  463. >
  464. </div>
  465. <div class="btn2" style="padding-left: 10px">
  466. <el-button type="primary" @click="Dclick('fm')">3D巷道选择</el-button>
  467. </div>
  468. </div>
  469. <div class="input">
  470. <el-form-item label="相对位置" :label-width="formLabelWidth6">
  471. <el-input-number
  472. v-model="source.site"
  473. :min="0"
  474. :max="1"
  475. :precision="2"
  476. :step="0.1"
  477. controls-position="right"
  478. class="w-50 m-2"
  479. placeholder="相对位置"
  480. @change="inputnuberChange1"
  481. />
  482. </el-form-item>
  483. </div>
  484. <div style="display: flex;" >
  485. <span class="switchppm">开启状态</span>
  486. <el-switch
  487. v-model="fmobj.onoff"
  488. inline-prompt
  489. active-text="是"
  490. inactive-text="否"
  491. :active-value="1"
  492. :inactive-value="0"
  493. @change="handleSwitchChange"
  494. />
  495. </div>
  496. <el-form-item label="阻力系数" :label-width="formLabelWidth6">
  497. <el-input v-model="fmobj.dragcoe" maxlength="10" oninput ="value=value.replace(/[^0-9.]/g,'')" class="w-50 m-2" placeholder="请输入" />
  498. </el-form-item>
  499. </el-form>
  500. <div class="dialog-footer footer_div l_btn">
  501. <div class="footerbtn flex1">
  502. <div class="borderimg">
  503. <el-button @click="closeDialog(); sdialog.fmdialog=false">取消</el-button>
  504. </div>
  505. </div>
  506. <div class="footerbtn flex1">
  507. <div class="borderimg">
  508. <el-button
  509. :disabled="isSubmitting"
  510. @click="addxiufm(); "
  511. >
  512. 确定
  513. </el-button>
  514. </div>
  515. </div>
  516. </div>
  517. </el-dialog>
  518. <!-- 选择巷道 -->
  519. <pipelines ref="pipeline" :selectstr="source.selectstr" @pipelineapi="pipelineapi" />
  520. <!-- 删除 -->
  521. <el-dialog
  522. v-model="sdialog.dialogsgdelect"
  523. width="400"
  524. class="dialog_class bgcolor tianjia"
  525. >
  526. <template #header="{ titleId, titleClass }">
  527. <div class="my-header">
  528. <el-image :src="icon" fit="contain"></el-image>
  529. <h4 :id="titleId" :class="titleClass">删除框</h4>
  530. </div>
  531. </template>
  532. <h4 class="delecttitle">
  533. 是否确认删除 <span class="spanclad">{{ zqname }}</span>
  534. </h4>
  535. <div class="dialog-footer footer_div l_btn">
  536. <div class="footerbtn flex1">
  537. <div class="borderimg">
  538. <el-button @click="sdialog.dialogsgdelect=false">取消</el-button>
  539. </div>
  540. </div>
  541. <div class="footerbtn flex1">
  542. <div class="borderimg">
  543. <el-button
  544. @click="deletefun(); "
  545. >
  546. 确定
  547. </el-button>
  548. </div>
  549. </div>
  550. </div>
  551. <!-- <div class="dialog-footer footer_div l_btn">
  552. <div class="footerbtn flex1">
  553. <div class="borderimg">
  554. <el-button @click="sdialog.dialogsgdelect=false">取消</el-button>
  555. <el-button @click="deletefun()">确定</el-button>
  556. </div>
  557. </div>
  558. </div> -->
  559. </el-dialog>
  560. <selfdialogs ref="dialogtrue" :site="dsite" @Dtext="Dtext"></selfdialogs>
  561. </div>
  562. </template>
  563. <script setup>
  564. import { computed, ref, onMounted, reactive } from "vue";
  565. import { request, uploadFile } from "@/utils/request";
  566. import icon from "@/assets/img/icon.png";
  567. import closeimg from "@/assets/img/colse.png";
  568. import { ElMessage, ElButton, ElDialog,ElConfigProvider } from "element-plus";
  569. import { message } from '@/utils/message';
  570. import zhCn from 'element-plus/es/locale/lang/zh-cn'
  571. import { Calendar, Search } from "@element-plus/icons-vue";
  572. // import selfdialogs from "./SetNode.vue";
  573. import selfdialogs from "./SetPipe.vue";
  574. import pipelines from "./PipeIine.vue"
  575. import { vtkmodel } from "@/control/vtkModel.js";
  576. let zqname=ref();
  577. let tableHeight=ref(200);
  578. let dsite=ref();
  579. let currentrow=ref();
  580. let pipeline = ref();
  581. let dialogtrue = ref();
  582. let isSubmitting = false;
  583. let sdialog=ref({
  584. dialogsgdelect:false,
  585. dialogVisiblenode:false,
  586. fjdialog:false,
  587. fjloaddialog:false,
  588. fmdialog:false,
  589. fmloaddialog:false
  590. })
  591. let delte=ref();
  592. let state=ref();
  593. let formLabelWidth6=ref(120)
  594. let source = ref({
  595. selectstr: '',
  596. site:null
  597. })
  598. // let selectstr=ref();
  599. // let firepid=ref();
  600. let aid=ref()//事故id
  601. let pid=ref();// 巷道id
  602. let site=ref();
  603. let fjobj=ref({
  604. fanid:null,
  605. fanname:"",
  606. fancode:'',
  607. pa:null,
  608. onoff:0
  609. })
  610. let handobj=ref({});
  611. let fmobj=ref({
  612. doorid:null,
  613. doorname:"",
  614. dragcoe:null,
  615. doorcode:'',
  616. onoff:0
  617. })
  618. let handobjfm=ref({});
  619. const props = defineProps({
  620. aid: {
  621. type: String,
  622. },
  623. });
  624. let zhtext=ref('');
  625. let tishi=ref('');
  626. let fjtableData=ref([]);
  627. let tableDatafjjz=ref([]);
  628. let tabledatafjjzref = ref();
  629. let fmtableData=ref([]);
  630. let tableDatafmjz=ref([]);
  631. let tabledatafmjzref = ref();
  632. let opendialogname = '';//用于区分风机风门打开的弹窗
  633. const handlerow = (val) => {
  634. vtkmodel.delfan();
  635. currentrow.value=true;
  636. handobj.value=val;
  637. console.log(val);
  638. vtkmodel.delAll();
  639. vtkmodel.addfan(val.pid,val.site);
  640. };
  641. const handlerow2 = (val) => {
  642. vtkmodel.deldoor();
  643. currentrow.value=true;
  644. handobjfm.value=val;
  645. vtkmodel.delAll();
  646. vtkmodel.adddoor(val.pid,val.site);
  647. };
  648. let coolactiveName1 = ref(["1", "2"]);
  649. let coolactiveName2 = ref( "2");
  650. // 表格变色
  651. const tableRowClassName = ({ row, rowIndex }) => {
  652. if (rowIndex % 2 != 0) {
  653. return "evenRow";
  654. }
  655. return "oddRow";
  656. };
  657. //
  658. const initisshow=()=>{
  659. sdialog.value.dialogsgdelect=false;
  660. sdialog.value.dialogVisiblenode=false;
  661. sdialog.value.fjdialog=false;
  662. sdialog.value.fjloaddialog=false;
  663. sdialog.value.fmdialog=false;
  664. dialogtrue.value.dialoglog = false;
  665. pipeline.value.dialogVisiblenode = false;
  666. closeDialog();
  667. }
  668. // 3D弹屏
  669. const Dclick = (val) => {
  670. opendialogname = val;
  671. dialogtrue.value.dialoglog = true;
  672. vtkmodel.clearJgAddMode();
  673. vtkmodel.clearpipfan();
  674. vtkmodel.clearpipdoor();
  675. vtkmodel.selectPipes();
  676. dialogtrue.value.jgSelect();
  677. console.log(dialogtrue.value.dialoglog);
  678. };
  679. // 选择巷道
  680. const fireclick = (val) => {
  681. opendialogname = val;
  682. pipeline.value.searchtaggd='';
  683. pipeline.value.dialogVisiblenode = true;
  684. pipeline.value.pipelinedata('');
  685. }
  686. const closeDialog=()=>{
  687. state.value=sessionStorage.getItem("state");
  688. if(state.value=='1'){
  689. vtkmodel.clearModeAddJg();
  690. }
  691. //节点图形
  692. vtkmodel.clearpipfan();//清除选择巷道的位置
  693. vtkmodel.clearpipdoor();
  694. vtkmodel.selectNoting();
  695. dialogtrue.value.timintclaer();
  696. sdialog.value.fjdialog=false
  697. }
  698. //点击确定
  699. const pipelineapi = (row) => {
  700. console.log(row);
  701. pid.value = row.id;
  702. source.value.selectstr = row.name;
  703. vtkmodel.selectByPipeId(row.id);
  704. if(opendialogname === "fj"){
  705. vtkmodel.addpipfan(row.id, source.value.site|| 0.0);
  706. }else {
  707. vtkmodel.addpipdoor(row.id, source.value.site|| 0.0);
  708. }
  709. }
  710. //风机加载
  711. const fjloadclick = () => {
  712. console.log("目标:",fjtableData.value)
  713. tableDatafjjz.value = [];
  714. let temptable = [];
  715. fjtableData.value.forEach(row => {
  716. if (row.fanbaseid !== 0) {
  717. temptable.push(row);
  718. }
  719. });
  720. const params = {
  721. transCode: "D50007",
  722. // aid: aid.value,
  723. };
  724. request(params)
  725. .then((res) => {
  726. // 使用 concat() 将新数据添加到现有数据后面
  727. res.rows.forEach(newRow => {
  728. const exists = temptable.some(existingRow => existingRow.fanbaseid === newRow.fanbaseid);
  729. if (!exists) {
  730. temptable.push(newRow); // 只有在不存在时才追加
  731. }
  732. });
  733. tableDatafjjz.value = temptable;
  734. nextTick(() => {
  735. fjtableData.value.forEach(row => {
  736. if (row.fanbaseid !== 0) { // 确保只选中符合条件的行
  737. // 在 tableData3 中查找与 tableDatpump 中对应的行
  738. const rowIndex = tableDatafjjz.value.findIndex(item => item.fanbaseid === row.fanbaseid);
  739. if (rowIndex !== -1) {
  740. // 找到对应的行后,选中该行
  741. tabledatafjjzref.value.toggleRowSelection(tableDatafjjz.value[rowIndex], true); // 选中该行
  742. console.log("选中的行:", tableDatafjjz.value[rowIndex]);
  743. }
  744. }
  745. });
  746. });
  747. })
  748. .catch((err) => {
  749. message.error(err.returnMsg);
  750. });
  751. }
  752. //风机加载保存
  753. const fjloadsave = () => {
  754. let values = [];
  755. const selectedRows = tabledatafjjzref.value.getSelectionRows();
  756. console.log( '选中行:',selectedRows);
  757. if (selectedRows.length === 0) {
  758. return;
  759. }
  760. selectedRows.forEach(row => {
  761. // 获取每一行的 fanbaseid
  762. if (row.fanbaseid) {
  763. values.push(row.fanbaseid);
  764. }
  765. });
  766. const params = {
  767. transCode: "D50014",
  768. aid: aid.value,
  769. fanbaseids:values.join(',')
  770. };
  771. request(params)
  772. .then((res) => {
  773. message.success({
  774. message: "加载成功"
  775. });
  776. getrequest();
  777. })
  778. .catch((err) => {
  779. message.error(err.returnMsg);
  780. });
  781. }
  782. //风机的添加
  783. const fjclick=()=>{
  784. zhtext.value='添加';
  785. currentrow.value=false;
  786. tishi.value= zhtext.value;
  787. handobj.value={};
  788. fjobj.value.fanid='';
  789. fjobj.value.fancode='';
  790. fjobj.value.fanname='';
  791. fjobj.value.onoff='';
  792. fjobj.value.pa='';
  793. source.value.site='';
  794. source.value.selectstr='';
  795. pid.value='';
  796. source.value.site=='';
  797. vtkmodel.clearJgAddMode();
  798. vtkmodel.delAll();
  799. }
  800. // 风机的修改
  801. const xiugaiclick=()=>{
  802. zhtext.value='修改';
  803. if (JSON.stringify(handobj.value) == "{}"|| currentrow.value==false) {
  804. message.error("你还没有选中修改的项目");
  805. } else {
  806. sdialog.value.fjdialog = true;
  807. aid.value=handobj.value.aid;
  808. fjobj.value.fanid=handobj.value.fanid;
  809. fjobj.value.fancode=handobj.value.fancode;
  810. fjobj.value.fanname=handobj.value.fanname;
  811. fjobj.value.onoff=handobj.value.onoff;
  812. fjobj.value.pa=handobj.value.pa;
  813. source.value.selectstr=handobj.value.pname;
  814. source.value.site=handobj.value.site;
  815. pid.value=handobj.value.pid;
  816. source.value.site==handobj.value.site;
  817. vtkmodel.clearJgAddMode();
  818. vtkmodel.delAll();
  819. vtkmodel.selectByPipeId(pid.value);
  820. vtkmodel.addpipfan(pid.value, source.value.site|| 0.0);
  821. }
  822. }
  823. //风机删除
  824. const delonclock=(val)=>{
  825. if (JSON.stringify(handobj.value) == "{}"|| currentrow.value==false) {
  826. message.error("你还没有选中删除的项目");
  827. } else {
  828. delte.value=val;
  829. sdialog.value.dialogsgdelect=true;
  830. zqname.value=handobj.value.pname;
  831. }
  832. }
  833. const deletefun=()=>{
  834. console.log(delte.value);
  835. if(delte.value=="风机"){
  836. const params = {
  837. transCode: "D20009",
  838. fanid: handobj.value.fanid,
  839. };
  840. request(params)
  841. .then((res) => {
  842. message.success({
  843. message:"删除风机成功",
  844. });
  845. sdialog.value.dialogsgdelect = false;
  846. getrequest();
  847. })
  848. .catch((err) => {
  849. message.error(err.returnMsg);
  850. });
  851. }else if(delte.value=="风门"){
  852. const params = {
  853. transCode: "D20012",
  854. doorid:handobjfm.value.doorid,
  855. };
  856. request(params)
  857. .then((res) => {
  858. message.success({
  859. message:"删除风门成功",
  860. });
  861. sdialog.value.dialogsgdelect = false;
  862. fmrequest();
  863. })
  864. .catch((err) => {
  865. message.error(err.returnMsg);
  866. });
  867. }else{
  868. }
  869. }
  870. const inputnuberChange = (number) => {
  871. source.value.site=number;
  872. dsite.value=number;
  873. dialogtrue.value.jgSelenum();
  874. vtkmodel.addpipfan(pid.value,number)
  875. }
  876. const inputnuberChange1 = (number) => {
  877. source.value.site=number;
  878. dsite.value=number;
  879. dialogtrue.value.jgSelenum();
  880. vtkmodel.addpipdoor(pid.value,number)
  881. }
  882. const handleSwitchChange=(value)=> {
  883. fjobj.value.onoff=value;
  884. }
  885. //初始化
  886. const getquery=(id)=>{
  887. aid.value=id;
  888. getrequest();
  889. fmrequest();
  890. }
  891. // 风机查询
  892. const getrequest=()=>{
  893. const params = {
  894. transCode: "D20007",
  895. aid: aid.value,
  896. };
  897. request(params)
  898. .then((res) => {
  899. console.log(res)
  900. vtkmodel.delfan();
  901. fjtableData.value=res.rows;
  902. currentrow.value=false;
  903. console.log( currentrow.value);
  904. })
  905. .catch((err) => {
  906. message.error(err.returnMsg);
  907. });
  908. }
  909. // 确定添加
  910. const addrequest=()=>{
  911. if (isSubmitting) return;
  912. if(fjobj.value.fancode==null||fjobj.value.fancode==''){
  913. message.error("风机编码不能为空")
  914. return
  915. }
  916. if(fjobj.value.fanname==null||fjobj.value.fanname==''){
  917. message.error("风机名称不能为空")
  918. return
  919. }
  920. if(pid.value==null||pid.value==""){
  921. message.error("巷道不能为空")
  922. }else{
  923. isSubmitting = true; // 开始提交
  924. const params = {
  925. transCode: "D20008",
  926. fanid:fjobj.value.fanid,
  927. fancode:fjobj.value.fancode,
  928. pid:pid.value,
  929. fanname:fjobj.value.fanname,
  930. site:source.value.site,
  931. pa:parseFloat(fjobj.value.pa),
  932. onoff:fjobj.value.onoff,
  933. aid:aid.value,
  934. };
  935. request(params)
  936. .then((res) => {
  937. message.success({
  938. message: zhtext.value+"风机成功",
  939. });
  940. sdialog.value.fjdialog = false;
  941. getrequest();
  942. // getrequest();
  943. fun3D();
  944. })
  945. .catch((err) => {
  946. const regex = /字段\d*/g;
  947. let Msg=err.returnMsg.replace(regex, '');
  948. message.error(Msg)
  949. })
  950. .finally(() => {
  951. isSubmitting = false; // 提交结束
  952. });
  953. }
  954. }
  955. //风门查询
  956. const fmrequest=()=>{
  957. console.log(aid.value)
  958. const params = {
  959. transCode: "D20010",
  960. aid: aid.value,
  961. };
  962. request(params)
  963. .then((res) => {
  964. vtkmodel.deldoor();
  965. fmtableData.value=res.rows;
  966. currentrow.value=false;
  967. })
  968. .catch((err) => {
  969. message.error(err.returnMsg);
  970. });
  971. }
  972. //风门加载
  973. const fmload = () => {
  974. console.log("目标:",fmtableData.value)
  975. tableDatafmjz.value = [];
  976. let temptable = [];
  977. fmtableData.value.forEach(row => {
  978. if (row.doorbaseid !== 0) {
  979. temptable.push(row);
  980. }
  981. });
  982. const params = {
  983. transCode: "D50010",
  984. // aid: aid.value,
  985. };
  986. request(params)
  987. .then((res) => {
  988. // 使用 concat() 将新数据添加到现有数据后面
  989. res.rows.forEach(newRow => {
  990. const exists = temptable.some(existingRow => existingRow.doorbaseid === newRow.doorbaseid);
  991. if (!exists) {
  992. temptable.push(newRow); // 只有在不存在时才追加
  993. }
  994. });
  995. tableDatafmjz.value = temptable;
  996. nextTick(() => {
  997. fmtableData.value.forEach(row => {
  998. if (row.doorbaseid !== 0) { // 确保只选中符合条件的行
  999. // 在 tableData3 中查找与 tableDatpump 中对应的行
  1000. const rowIndex = tableDatafmjz.value.findIndex(item => item.doorbaseid === row.doorbaseid);
  1001. if (rowIndex !== -1) {
  1002. // 找到对应的行后,选中该行
  1003. tabledatafmjzref.value.toggleRowSelection(tableDatafmjz.value[rowIndex], true); // 选中该行
  1004. console.log("选中的行:", tableDatafmjz.value[rowIndex]);
  1005. }
  1006. }
  1007. });
  1008. });
  1009. })
  1010. .catch((err) => {
  1011. message.error(err.returnMsg);
  1012. });
  1013. }
  1014. const fmloadsave = () => {
  1015. let values = [];
  1016. const selectedRows = tabledatafmjzref.value.getSelectionRows();
  1017. console.log( '选中行:',selectedRows);
  1018. if (selectedRows.length === 0) {
  1019. return;
  1020. }
  1021. selectedRows.forEach(row => {
  1022. // 获取每一行的 doorbaseid
  1023. if (row.doorbaseid) {
  1024. values.push(row.doorbaseid);
  1025. }
  1026. });
  1027. const params = {
  1028. transCode: "D50015",
  1029. aid: aid.value,
  1030. doorbaseids:values.join(',')
  1031. };
  1032. request(params)
  1033. .then((res) => {
  1034. message.success({
  1035. message: "加载成功"
  1036. });
  1037. fmrequest();
  1038. })
  1039. .catch((err) => {
  1040. message.error(err.returnMsg);
  1041. });
  1042. }
  1043. //风门的添加
  1044. const fmadd=()=>{
  1045. zhtext.value='添加';
  1046. currentrow.value=false;
  1047. tishi.value= zhtext.value;
  1048. handobj.value={};
  1049. fmobj.value.doorid=null;
  1050. fmobj.value.doorcode='';
  1051. fmobj.value.doorname='';
  1052. fmobj.value.onoff=0;
  1053. fmobj.value.dragcoe=null;
  1054. source.value.site=null;
  1055. source.value.selectstr='';
  1056. pid.value=null;
  1057. vtkmodel.clearJgAddMode();
  1058. vtkmodel.delAll();
  1059. }
  1060. //风门的修改
  1061. const fmxiugai=()=>{
  1062. zhtext.value='修改';
  1063. if (JSON.stringify(handobjfm.value) == "{}"|| currentrow.value==false) {
  1064. message.error("你还没有选中修改的项目");
  1065. } else {
  1066. sdialog.value.fmdialog = true;
  1067. aid.value=handobjfm.value.aid;
  1068. fmobj.value.doorid=handobjfm.value.doorid;
  1069. fmobj.value.doorcode=handobjfm.value.doorcode;
  1070. fmobj.value.doorname=handobjfm.value.doorname;
  1071. fmobj.value.onoff=handobjfm.value.onoff;
  1072. fmobj.value.dragcoe=handobjfm.value.dragcoe;
  1073. source.value.selectstr=handobjfm.value.pname;
  1074. source.value.site=handobjfm.value.site;
  1075. pid.value=handobjfm.value.pid;
  1076. source.value.site==handobjfm.value.site;
  1077. vtkmodel.clearJgAddMode();
  1078. vtkmodel.delAll();
  1079. vtkmodel.selectByPipeId(pid.value);
  1080. vtkmodel.addpipdoor(pid.value, source.value.site|| 0.0);
  1081. }
  1082. }
  1083. // 删除
  1084. const fmdel=(val)=>{
  1085. if (JSON.stringify(handobjfm.value) == "{}"|| currentrow.value==false) {
  1086. message.error("你还没有选中删除的项目");
  1087. } else {
  1088. delte.value=val;
  1089. sdialog.value.dialogsgdelect=true;
  1090. zqname.value=handobjfm.value.pname;
  1091. }
  1092. }
  1093. //添加接口
  1094. const addxiufm = () => {
  1095. if (isSubmitting) return; // 如果正在提交,则不再继续
  1096. if (fmobj.value.doorcode == null || fmobj.value.doorcode == "") {
  1097. message.error("风门编码不能为空");
  1098. return;
  1099. }
  1100. if (fmobj.value.doorname == null || fmobj.value.doorname == "") {
  1101. message.error("风门名称不能为空");
  1102. return;
  1103. }
  1104. if (pid.value == null || pid.value == "") {
  1105. message.error("巷道不能为空");
  1106. return;
  1107. }
  1108. isSubmitting = true; // 开始提交
  1109. const params = {
  1110. transCode: "D20011",
  1111. doorid: fmobj.value.doorid,
  1112. doorcode: fmobj.value.doorcode,
  1113. pid: pid.value,
  1114. doorname: fmobj.value.doorname,
  1115. site: source.value.site,
  1116. dragcoe: parseFloat(fmobj.value.dragcoe),
  1117. onoff: fmobj.value.onoff,
  1118. aid: aid.value,
  1119. };
  1120. request(params)
  1121. .then((res) => {
  1122. message.success({
  1123. message: zhtext.value + "风门成功"
  1124. });
  1125. sdialog.value.fmdialog = false;
  1126. fmrequest();
  1127. fun3D();
  1128. })
  1129. .catch((err) => {
  1130. const regex = /字段\d*/g;
  1131. let Msg = err.returnMsg.replace(regex, "");
  1132. message.error(Msg);
  1133. })
  1134. .finally(() => {
  1135. isSubmitting = false; // 提交结束
  1136. });
  1137. };
  1138. // 3D关闭弹窗
  1139. const fun3D = () => {
  1140. state.value=sessionStorage.getItem("state");
  1141. //console.log(state.value);
  1142. if(state.value=='1'){
  1143. vtkmodel.clearModeAddJg();
  1144. }else{
  1145. vtkmodel.selectNoting();
  1146. }
  1147. dialogtrue.value.timintclaer();
  1148. vtkmodel.clearpipdoor();//清除选择巷道的位置
  1149. vtkmodel.clearpipfan();
  1150. }
  1151. const Dtext=(val)=>{
  1152. console.log('dayin',val);
  1153. console.log('opendialogname',opendialogname);
  1154. source.value.selectstr=val.name;
  1155. pid.value=val.id;
  1156. if(opendialogname === "fj"){
  1157. vtkmodel.addpipfan(pid.value, source.value.site|| 0.0);
  1158. }else {
  1159. vtkmodel.addpipdoor(pid.value, source.value.site|| 0.0);
  1160. }
  1161. }
  1162. defineExpose({getquery,initisshow});
  1163. </script>