index.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" size="small" :inline="true" v-show="showSearch" label-width="100px">
  4. <el-form-item label="装置" prop="plantId">
  5. <el-select v-model="queryParams.plantId" @change="handleQuery,getAllRegion(queryParams.plantId)"
  6. placeholder="请选择装置" clearable size="small">
  7. <el-option
  8. v-for="plant in plantOperation"
  9. :key="plant.id"
  10. :label="plant.plantName"
  11. :value="plant.id"
  12. />
  13. </el-select>
  14. </el-form-item>
  15. <el-form-item label="区域" prop="regionId">
  16. <el-select v-model="queryParams.regionId" @change="handleQuery,getAllDeviceByRegionId(queryParams.regionId)"
  17. placeholder="请选择区域" clearable size="small">
  18. <el-option
  19. v-for="dict in regionOperation"
  20. :key="dict.id"
  21. :label="dict.regionName"
  22. :value="dict.id"
  23. />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item label="设备" prop="devId">
  27. <el-select v-model="queryParams.devId" @change="handleQuery" placeholder="请选择设备" clearable size="small">
  28. <el-option
  29. v-for="dict in deviceOperation"
  30. :key="dict.id"
  31. :label="dict.describe"
  32. :value="dict.id"
  33. />
  34. </el-select>
  35. </el-form-item>
  36. <el-form-item label="群组编码" prop="groupCode">
  37. <el-input
  38. v-model="queryParams.groupCode"
  39. placeholder="请输入群组编码"
  40. clearable
  41. @keyup.enter.native="handleQuery"
  42. />
  43. </el-form-item>
  44. <el-form-item label="介质" prop="medium">
  45. <el-input
  46. v-model="queryParams.medium"
  47. placeholder="请输入介质"
  48. clearable
  49. @keyup.enter.native="handleQuery"
  50. />
  51. </el-form-item>
  52. <el-form-item label="泄漏程度" prop="leakageDegree">
  53. <el-select v-model="queryParams.leakageDegree" @change="handleQuery" placeholder="请选择泄漏程度" clearable
  54. size="small">
  55. <el-option
  56. v-for="dict in leakageDegreeOperation"
  57. :key="dict.dictValue"
  58. :label="dict.dictLabel"
  59. :value="dict.dictValue"
  60. />
  61. </el-select>
  62. </el-form-item>
  63. <el-form-item label="是/否不可达点" prop="unarrive">
  64. <el-select v-model="queryParams.unarrive" @change="handleQuery" placeholder="请选择是/否" clearable
  65. size="small">
  66. <el-option
  67. v-for="dict in yesOrNoOperation"
  68. :key="dict.dictValue"
  69. :label="dict.dictLabel"
  70. :value="dict.dictValue"
  71. />
  72. </el-select>
  73. </el-form-item>
  74. <el-form-item label="密封点类型" prop="pointType">
  75. <el-select v-model="queryParams.pointType" @change="handleQuery" placeholder="请选择密封点类型" clearable
  76. size="small">
  77. <el-option
  78. v-for="dict in pointOptions"
  79. :key="dict.dictValue"
  80. :label="dict.dictLabel"
  81. :value="dict.dictValue"
  82. />
  83. </el-select>
  84. </el-form-item>
  85. <el-form-item label="审核状态" prop="approveStatus">
  86. <el-select v-model="queryParams.approveStatus" @change="handleQuery" placeholder="请选择审核状态" clearable
  87. size="small">
  88. <el-option
  89. v-for="dict in approveStatusOperation"
  90. :key="dict.dictValue"
  91. :label="dict.dictLabel"
  92. :value="dict.dictValue"
  93. />
  94. </el-select>
  95. </el-form-item>
  96. <el-form-item>
  97. <el-button type="primary" icon="el-icon-search" size="mini" @click="handleQuery">搜索</el-button>
  98. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">重置</el-button>
  99. </el-form-item>
  100. </el-form>
  101. <el-row :gutter="10" class="mb8">
  102. <el-col :span="1.5">
  103. <el-button
  104. type="primary"
  105. plain
  106. icon="el-icon-plus"
  107. size="mini"
  108. @click="handleAdd"
  109. v-hasPermi="['base:point:add']"
  110. >新增
  111. </el-button>
  112. </el-col>
  113. <el-col :span="1.5">
  114. <el-button
  115. type="success"
  116. plain
  117. icon="el-icon-edit"
  118. size="mini"
  119. :disabled="single"
  120. @click="handleUpdate"
  121. v-hasPermi="['base:point:edit']"
  122. >修改
  123. </el-button>
  124. </el-col>
  125. <el-col :span="1.5">
  126. <el-button
  127. type="danger"
  128. plain
  129. icon="el-icon-delete"
  130. size="mini"
  131. :disabled="multiple"
  132. @click="handleDelete"
  133. v-hasPermi="['base:point:remove']"
  134. >删除
  135. </el-button>
  136. </el-col>
  137. <el-col :span="1.5">
  138. <el-button
  139. type="warning"
  140. plain
  141. icon="el-icon-upload2"
  142. size="mini"
  143. @click="handleImport"
  144. v-hasPermi="['base:device:add']"
  145. >导入
  146. </el-button>
  147. </el-col>
  148. <el-col :span="1.5">
  149. <el-button
  150. type="warning"
  151. plain
  152. icon="el-icon-download"
  153. size="mini"
  154. @click="handleExport"
  155. v-hasPermi="['base:point:export']"
  156. >导出
  157. </el-button>
  158. </el-col>
  159. <el-col :span="1.5">
  160. <el-button
  161. type="info"
  162. plain
  163. icon="el-icon-position"
  164. size="mini"
  165. @click="handleToApprove"
  166. >送审
  167. </el-button>
  168. </el-col>
  169. <el-col :span="1.5">
  170. <el-button
  171. type="info"
  172. plain
  173. icon="el-icon-s-check"
  174. size="mini"
  175. @click="handleApprove"
  176. >审核
  177. </el-button>
  178. </el-col>
  179. <el-col :span="1.5">
  180. <el-button
  181. type="success"
  182. plain
  183. icon="el-icon-upload"
  184. size="mini"
  185. @click="handleToApprove"
  186. >上传PID图
  187. </el-button>
  188. </el-col>
  189. <el-col :span="1.5">
  190. <el-button
  191. type="success"
  192. plain
  193. icon="el-icon-upload"
  194. size="mini"
  195. @click="handleApprove"
  196. >上传组件照片
  197. </el-button>
  198. </el-col>
  199. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  200. </el-row>
  201. <el-table v-loading="loading" :data="pointList" :cell-style="tableCellStyle"
  202. @selection-change="handleSelectionChange" :height="clientHeight" border>
  203. <el-table-column type="selection" width="55" align="center"/>
  204. <el-table-column label="检测净值(ppm)" align="center" prop="ppm" width="110" :show-overflow-tooltip="true"/>
  205. <el-table-column label="泄漏程度" align="center" prop="leakageDegree" :formatter="leakageFormat"
  206. :show-overflow-tooltip="true"/>
  207. <el-table-column label="装置名称" align="center" prop="plantName" :show-overflow-tooltip="true"/>
  208. <el-table-column label="装置编码" align="center" prop="plantCode" :show-overflow-tooltip="true"/>
  209. <el-table-column label="装置类别" align="center" prop="plantType" :formatter="plantTypeFormat"/>
  210. <el-table-column label="区域名称" align="center" prop="regionName" :show-overflow-tooltip="true"/>
  211. <el-table-column label="区域编码" align="center" prop="regionCode" :show-overflow-tooltip="true"/>
  212. <el-table-column label="设备/管线名称" align="center" prop="devName" width="150" :show-overflow-tooltip="true"/>
  213. <el-table-column label="设备/管线编码" align="center" prop="devCode" width="150" :show-overflow-tooltip="true"/>
  214. <el-table-column label="介质" align="center" prop="medium" :show-overflow-tooltip="true"/>
  215. <el-table-column label="介质状态" align="center" prop="mediumType" :formatter="mediumTypeFormat"
  216. :show-overflow-tooltip="true"/>
  217. <el-table-column label="密封点类型" align="center" prop="pointType" width="100" :formatter="pointFormat"
  218. :show-overflow-tooltip="true"/>
  219. <el-table-column label="平台(层)" align="center" prop="layer" :show-overflow-tooltip="true"/>
  220. <el-table-column label="群组位置" align="center" prop="groupPosition" :show-overflow-tooltip="true"/>
  221. <el-table-column label="密封点位置" align="center" prop="pointPosition" width="110"
  222. :show-overflow-tooltip="true"/>
  223. <el-table-column label="群组编码" align="center" prop="groupCode" :show-overflow-tooltip="true"/>
  224. <el-table-column label="扩展编码" align="center" prop="extendCode" :show-overflow-tooltip="true"/>
  225. <el-table-column label="密封点子类型" align="center" prop="subPointType" width="110"
  226. :show-overflow-tooltip="true"/>
  227. <el-table-column label="公称直径(mm)" align="center" prop="dia" width="110" :show-overflow-tooltip="true"/>
  228. <el-table-column label="是否不可达点" align="center" prop="unarrive" width="110" :formatter="unarriveFormat"
  229. :show-overflow-tooltip="true"/>
  230. <el-table-column label="不可达原因" align="center" prop="unarriveReason" width="110"
  231. :show-overflow-tooltip="true"/>
  232. <el-table-column label="是否保温/保冷" align="center" prop="keepWarm" width="110" :formatter="keepWarmFormat"
  233. :show-overflow-tooltip="true"/>
  234. <el-table-column label="工艺温度(℃)" align="center" prop="temperature" width="110" :show-overflow-tooltip="true"/>
  235. <el-table-column label="工艺压力(Mpa)" align="center" prop="pressure" width="110" :show-overflow-tooltip="true"/>
  236. <el-table-column label="运行时间" align="center" prop="runTime" width="180">
  237. <template slot-scope="scope">
  238. <span>{{ parseTime(scope.row.runTime, '{y}-{m}-{d}') }}</span>
  239. </template>
  240. </el-table-column>
  241. <el-table-column label="PID图号" align="center" prop="pidNo" :show-overflow-tooltip="true"/>
  242. <el-table-column label="群组照片号" align="center" prop="picNo" width="110" :show-overflow-tooltip="true"/>
  243. <el-table-column label="TOC质量分数" align="center" prop="tocMark" width="110" :show-overflow-tooltip="true"/>
  244. <el-table-column label="甲烷质量分数" align="center" prop="methaneMark" width="110"
  245. :show-overflow-tooltip="true"/>
  246. <el-table-column label="VOCs质量分数" align="center" prop="vocsMark" width="110" :show-overflow-tooltip="true"/>
  247. <el-table-column label="审核状态" align="center" fixed="left" prop="approveStatus"
  248. :formatter="approveStatusFormat" :show-overflow-tooltip="true"/>
  249. <el-table-column label="最后维护人" align="center" prop="updater" width="110" :show-overflow-tooltip="true"/>
  250. <el-table-column label="最后维护时间" align="center" prop="updatedate" width="180" :show-overflow-tooltip="true">
  251. <template slot-scope="scope">
  252. <span>{{ parseTime(scope.row.updatedate, '{y}-{m}-{d}') }}</span>
  253. </template>
  254. </el-table-column>
  255. <el-table-column label="描述" align="center" prop="remarks" width="180" :show-overflow-tooltip="true"/>
  256. <el-table-column label="操作" align="center" width="140px" fixed="right" class-name="small-padding fixed-width">
  257. <template slot-scope="scope">
  258. <el-button
  259. size="mini"
  260. type="text"
  261. icon="el-icon-edit"
  262. @click="handleUpdate(scope.row)"
  263. v-hasPermi="['base:point:edit']"
  264. >修改
  265. </el-button>
  266. <el-button
  267. size="mini"
  268. type="text"
  269. icon="el-icon-delete"
  270. @click="handleDelete(scope.row)"
  271. v-hasPermi="['base:point:remove']"
  272. >删除
  273. </el-button>
  274. </template>
  275. </el-table-column>
  276. </el-table>
  277. <pagination
  278. v-show="total>0"
  279. :total="total"
  280. :page.sync="queryParams.pageNum"
  281. :limit.sync="queryParams.pageSize"
  282. @pagination="getList"
  283. />
  284. <!-- 添加或修改密封点对话框 -->
  285. <el-dialog :title="title" :visible.sync="open" width="800px" append-to-body :before-close="cleanRegion">
  286. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  287. <el-row>
  288. <el-col :span="12">
  289. <el-form-item label="装置" prop="plantId">
  290. <el-select v-model="form.plantId" placeholder="请选择装置" clearable size="small" style="width: 100%"
  291. @change="getAllRegion(form.plantId)">
  292. <el-option
  293. v-for="dict in plantOperation"
  294. :key="dict.id"
  295. :label="dict.plantName"
  296. :value="dict.id"
  297. />
  298. </el-select>
  299. </el-form-item>
  300. </el-col>
  301. <el-col :span="12">
  302. <el-form-item label="区域" prop="regionId">
  303. <el-select v-model="form.regionId" placeholder="请选择区域" clearable size="small" style="width: 100%"
  304. @change="getAllDeviceByRegionId(form.regionId)">
  305. <el-option
  306. v-for="dict in regionOperation"
  307. :key="dict.id"
  308. :label="dict.regionName"
  309. :value="dict.id"
  310. />
  311. </el-select>
  312. </el-form-item>
  313. </el-col>
  314. </el-row>
  315. <el-row>
  316. <el-col :span="12">
  317. <el-form-item label="设备" prop="devId">
  318. <el-select v-model="form.devId" placeholder="请选择设备" clearable size="small" style="width: 100%">
  319. <el-option
  320. v-for="dict in deviceOperation"
  321. :key="dict.id"
  322. :label="dict.describe"
  323. :value="dict.id"
  324. />
  325. </el-select>
  326. </el-form-item>
  327. </el-col>
  328. <el-col :span="12">
  329. <el-form-item label="介质状态" prop="mediumType">
  330. <el-select v-model="form.mediumType" placeholder="请选择介质状态" clearable size="small"
  331. style="width: 100%">
  332. <el-option
  333. v-for="dict in mediumTypeOptions"
  334. :key="dict.dictValue"
  335. :label="dict.dictLabel"
  336. :value="dict.dictValue"
  337. />
  338. </el-select>
  339. </el-form-item>
  340. </el-col>
  341. </el-row>
  342. <el-row>
  343. <el-col :span="12">
  344. <el-form-item label="密封点类型" prop="pointType">
  345. <el-select v-model="form.pointType" placeholder="请选择密封点类型" clearable size="small"
  346. style="width: 100%">
  347. <el-option
  348. v-for="dict in pointOptions"
  349. :key="dict.dictValue"
  350. :label="dict.dictLabel"
  351. :value="dict.dictValue"
  352. />
  353. </el-select>
  354. </el-form-item>
  355. </el-col>
  356. <el-col :span="12">
  357. <el-form-item label="介质" prop="medium">
  358. <el-input v-model="form.medium" placeholder="请输入介质"/>
  359. </el-form-item>
  360. </el-col>
  361. </el-row>
  362. <el-row>
  363. <el-col :span="12">
  364. <el-form-item label="公称直径(mm)" prop="dia">
  365. <el-input v-model="form.dia" placeholder="请输入公称直径(mm)"/>
  366. </el-form-item>
  367. </el-col>
  368. <el-col :span="12">
  369. <el-form-item label="密封点子类型" prop="subPointType">
  370. <el-input v-model="form.subPointType" placeholder="请输入密封点子类型"/>
  371. </el-form-item>
  372. </el-col>
  373. </el-row>
  374. <el-row>
  375. <el-col :span="12">
  376. <el-form-item label="平台(层)" prop="layer">
  377. <el-input v-model="form.layer" placeholder="请输入平台"/>
  378. </el-form-item>
  379. </el-col>
  380. <el-col :span="12">
  381. <el-form-item label="群组位置" prop="groupPosition">
  382. <el-input v-model="form.groupPosition" placeholder="请输入群组位置"/>
  383. </el-form-item>
  384. </el-col>
  385. </el-row>
  386. <el-row>
  387. <el-col :span="12">
  388. <el-form-item label="群组编码" prop="groupCode">
  389. <el-input v-model="form.groupCode" placeholder="请输入群组编码"/>
  390. </el-form-item>
  391. </el-col>
  392. <el-col :span="12">
  393. <el-form-item label="扩展编码" prop="extendCode">
  394. <el-input v-model="form.extendCode" placeholder="请输入扩展编码"/>
  395. </el-form-item>
  396. </el-col>
  397. </el-row>
  398. <el-row>
  399. <el-col :span="12">
  400. <el-form-item label="密封点位置" prop="pointPosition">
  401. <el-input v-model="form.pointPosition" placeholder="请输入密封点位置"/>
  402. </el-form-item>
  403. </el-col>
  404. <el-col :span="12">
  405. <el-form-item label="VOCs质量分数" prop="vocsMark">
  406. <el-input v-model="form.vocsMark" placeholder="请输入VOCs质量分数"/>
  407. </el-form-item>
  408. </el-col>
  409. </el-row>
  410. <el-row>
  411. <el-col :span="12">
  412. <el-form-item label="是/否不可达点" prop="unarrive">
  413. <el-select v-model="form.unarrive" placeholder="请选择是/否" clearable size="small" style="width: 100%">
  414. <el-option
  415. v-for="dict in yesOrNoOperation"
  416. :key="dict.dictValue"
  417. :label="dict.dictLabel"
  418. :value="dict.dictValue"
  419. />
  420. </el-select>
  421. </el-form-item>
  422. </el-col>
  423. <el-col :span="12">
  424. <el-form-item label="不可达原因" prop="unarriveReason">
  425. <el-input v-model="form.unarriveReason" placeholder="请输入不可达原因"/>
  426. </el-form-item>
  427. </el-col>
  428. </el-row>
  429. <el-row>
  430. <el-col :span="12">
  431. <el-form-item label="是否保温/保冷" prop="keepWarm">
  432. <el-select v-model="form.keepWarm" placeholder="请选择是/否" clearable size="small" style="width: 100%">
  433. <el-option
  434. v-for="dict in yesOrNoOperation"
  435. :key="dict.dictValue"
  436. :label="dict.dictLabel"
  437. :value="dict.dictValue"
  438. />
  439. </el-select>
  440. </el-form-item>
  441. </el-col>
  442. <el-col :span="12">
  443. <el-form-item label="工艺温度" prop="temperature">
  444. <el-input v-model="form.temperature" placeholder="请输入工艺温度"/>
  445. </el-form-item>
  446. </el-col>
  447. </el-row>
  448. <el-row>
  449. <el-col :span="12">
  450. <el-form-item label="工艺压力" prop="pressure">
  451. <el-input v-model="form.pressure" placeholder="请输入工艺压力"/>
  452. </el-form-item>
  453. </el-col>
  454. <el-col :span="12">
  455. <el-form-item label="运行时间" prop="runTime">
  456. <el-date-picker clearable
  457. v-model="form.runTime"
  458. type="date"
  459. value-format="yyyy-MM-dd"
  460. placeholder="请选择运行时间"
  461. style="width: 100%">
  462. </el-date-picker>
  463. </el-form-item>
  464. </el-col>
  465. </el-row>
  466. <el-row>
  467. <el-col :span="12">
  468. <el-form-item label="PID图号" prop="pidNo">
  469. <el-input v-model="form.pidNo" placeholder="请输入PID图号"/>
  470. </el-form-item>
  471. </el-col>
  472. <el-col :span="12">
  473. <el-form-item label="群组照片号" prop="picNo">
  474. <el-input v-model="form.picNo" placeholder="请输入群组照片号"/>
  475. </el-form-item>
  476. </el-col>
  477. </el-row>
  478. <el-row>
  479. <el-col :span="12">
  480. <el-form-item label="TOC质量分数" prop="tocMark">
  481. <el-input v-model="form.tocMark" placeholder="请输入TOC质量分数"/>
  482. </el-form-item>
  483. </el-col>
  484. <el-col :span="12">
  485. <el-form-item label="甲烷质量分数" prop="methaneMark">
  486. <el-input v-model="form.methaneMark" placeholder="请输入甲烷质量分数"/>
  487. </el-form-item>
  488. </el-col>
  489. </el-row>
  490. <el-row>
  491. <el-col :span="24">
  492. <el-form-item label="描述" prop="remarks">
  493. <el-input v-model="form.remarks" placeholder="请输入描述"/>
  494. </el-form-item>
  495. </el-col>
  496. </el-row>
  497. </el-form>
  498. <div slot="footer" class="dialog-footer">
  499. <el-button type="primary" @click="submitForm">确 定</el-button>
  500. <el-button @click="cancel">取 消</el-button>
  501. </div>
  502. </el-dialog>
  503. <!-- 用户导入对话框 -->
  504. <el-dialog v-dialogDrag :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  505. <el-upload
  506. ref="upload"
  507. :limit="1"
  508. accept=".xlsx, .xls"
  509. :headers="upload.headers"
  510. :action="upload.url"
  511. :disabled="upload.isUploading"
  512. :on-progress="handleFileUploadProgress"
  513. :on-success="handleFileSuccess"
  514. :auto-upload="false"
  515. drag
  516. >
  517. <i class="el-icon-upload"></i>
  518. <div class="el-upload__text">
  519. {{ $t('将文件拖到此处,或') }}
  520. <em>{{ $t('点击上传') }}</em>
  521. </div>
  522. <div class="el-upload__tip" slot="tip">
  523. <!--<el-checkbox v-model="upload.updateSupport" />是否更新已经存在的用户数据-->
  524. <el-link type="info" style="font-size:12px" @click="importTemplate">{{ $t('下载模板') }}</el-link>
  525. </div>
  526. <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
  527. <input name="type" :value="upload.type" hidden/>
  528. </form>
  529. <div class="el-upload__tip" style="color:red" slot="tip">{{ $t('提示:仅允许导入“xls”或“xlsx”格式文件!') }}</div>
  530. </el-upload>
  531. <div slot="footer" class="dialog-footer">
  532. <el-button type="primary" @click="submitFileForm" v-loading.fullscreen.lock="fullscreenLoading">{{
  533. $t('确 定')
  534. }}
  535. </el-button>
  536. <el-button @click="upload.open = false">{{ $t('取 消') }}</el-button>
  537. </div>
  538. </el-dialog>
  539. </div>
  540. </template>
  541. <script>
  542. import {listPoint, getPoint, delPoint, addPoint, updatePoint} from "@/api/base/point";
  543. import {getAllPlantName} from "@/api/base/plant";
  544. import {getAllRegion} from "@/api/base/region";
  545. import {getAllDeviceByRegionId} from "@/api/base/device";
  546. import {MessageBox} from "element-ui";
  547. import {getToken} from "@/utils/auth";
  548. export default {
  549. name: "Point",
  550. data() {
  551. return {
  552. fullscreenLoading: false,
  553. // 用户导入参数
  554. upload: {
  555. downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
  556. //下载模板类型
  557. type: "basePoint",
  558. // 是否显示弹出层(用户导入)
  559. open: false,
  560. // 弹出层标题(用户导入)
  561. title: "",
  562. // 是否禁用上传
  563. isUploading: false,
  564. // 是否更新已经存在的用户数据
  565. updateSupport: 0,
  566. // 设置上传的请求头部
  567. headers: {Authorization: "Bearer " + getToken()},
  568. // 上传的地址
  569. url: process.env.VUE_APP_BASE_API + "/base/point/importData"
  570. },
  571. plantOperation: [],
  572. regionOperation: [],
  573. deviceOperation: [],
  574. plantTypeOptions: [],
  575. leakageDegreeOperation: [],
  576. // 遮罩层
  577. loading: true,
  578. // 选中数组
  579. ids: [],
  580. status: [],
  581. // 非单个禁用
  582. single: true,
  583. // 非多个禁用
  584. multiple: true,
  585. clientHeight: 300,
  586. // 显示搜索条件
  587. showSearch: false,
  588. yesOrNoOperation: [],
  589. pointOptions: [],
  590. mediumTypeOptions: [],
  591. approveStatusOperation: [],
  592. // 总条数
  593. total: 0,
  594. // 密封点表格数据
  595. pointList: [],
  596. // 弹出层标题
  597. title: "",
  598. // 是否显示弹出层
  599. open: false,
  600. // 查询参数
  601. queryParams: {
  602. pageNum: 1,
  603. pageSize: 10,
  604. ppm: null,
  605. leakageDegree: null,
  606. plantId: null,
  607. regionId: null,
  608. devId: null,
  609. medium: null,
  610. mediumType: null,
  611. pointType: null,
  612. layer: null,
  613. groupPosition: null,
  614. pointPosition: null,
  615. groupCode: null,
  616. extendCode: null,
  617. subPointType: null,
  618. dia: null,
  619. unarrive: null,
  620. unarriveReason: null,
  621. keepWarm: null,
  622. temperature: null,
  623. pressure: null,
  624. runTime: null,
  625. pidNo: null,
  626. pidUrl: null,
  627. picNo: null,
  628. picUrl: null,
  629. tocMark: null,
  630. methaneMark: null,
  631. vocsMark: null,
  632. remarks: null,
  633. approveStatus: null,
  634. approveTime: null,
  635. deptId: null,
  636. createrCode: null,
  637. createdate: null,
  638. updaterCode: null,
  639. updatedate: null
  640. },
  641. // 表单参数
  642. form: {},
  643. // 表单校验
  644. rules: {
  645. plantId: [
  646. {required: true, message: this.$t('请选择') + this.$t('装置'), trigger: "blur"}
  647. ],
  648. regionId: [
  649. {required: true, message: this.$t('请选择') + this.$t('区域'), trigger: "blur"}
  650. ],
  651. devId: [
  652. {required: true, message: this.$t('请选择') + this.$t('设备'), trigger: "blur"}
  653. ],
  654. groupCode: [
  655. {required: true, message: this.$t('群组编码') + this.$t('不能为空'), trigger: "blur"}
  656. ],
  657. extendCode: [
  658. {required: true, message: this.$t('密封点扩展号编码') + this.$t('不能为空'), trigger: "blur"}
  659. ],
  660. pointType: [
  661. {required: true, message: this.$t('请选择') + this.$t('密封点类型'), trigger: "blur"}
  662. ],
  663. unarrive: [
  664. {required: true, message: this.$t('请选择') + this.$t('是否不可达点'), trigger: "blur"}
  665. ],
  666. mediumType: [
  667. {required: true, message: this.$t('请选择') + this.$t('介质状态'), trigger: "blur"}
  668. ],
  669. }
  670. };
  671. },
  672. created() {
  673. this.getDicts("plant_type").then(response => {
  674. this.plantTypeOptions = response.data;
  675. });
  676. //设置表格高度对应屏幕高度
  677. this.$nextTick(() => {
  678. this.clientHeight = (document.body.clientHeight - 80) * 0.8
  679. });
  680. this.getDicts("yes_no").then(response => {
  681. this.yesOrNoOperation = response.data;
  682. });
  683. this.getDicts("base_approve_status").then(response => {
  684. this.approveStatusOperation = response.data;
  685. });
  686. this.getDicts("leakage_degree").then(response => {
  687. this.leakageDegreeOperation = response.data;
  688. });
  689. this.getDicts("point_type").then(response => {
  690. this.pointOptions = response.data;
  691. });
  692. this.getDicts("medium_type").then(response => {
  693. this.mediumTypeOptions = response.data;
  694. });
  695. this.getList();
  696. getAllPlantName().then(response => {
  697. this.plantOperation = response.data;
  698. })
  699. },
  700. methods: {
  701. // 提交上传文件
  702. submitFileForm() {
  703. this.$refs.upload.submit();
  704. this.fullscreenLoading = true;
  705. },
  706. /** 导入按钮操作 */
  707. handleImport() {
  708. this.upload.title = this.$t('用户导入');
  709. this.upload.open = true;
  710. },
  711. /** 下载模板操作 */
  712. importTemplate() {
  713. this.$refs['downloadFileForm'].submit()
  714. },
  715. // 文件上传中处理
  716. handleFileUploadProgress(event, file, fileList) {
  717. this.upload.isUploading = true;
  718. },
  719. // 文件上传成功处理
  720. handleFileSuccess(response, file, fileList) {
  721. this.upload.open = false;
  722. this.upload.isUploading = false;
  723. this.$refs.upload.clearFiles();
  724. this.fullscreenLoading = false;
  725. console.log(response)
  726. if (response.data === 0) {
  727. this.$alert(this.$t('导入失败!') + response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  728. } else if (response.data[0] != null) {
  729. this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据') + "," + this.$t('第') + response.data + this.$t('行数据出现错误导入失败') + "。", this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  730. } else {
  731. this.$alert(this.$t('成功导入') + response.msg + this.$t('条数据'), this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  732. }
  733. this.getList();
  734. },
  735. getAllRegion(val) {
  736. this.form.regionId = '';
  737. this.queryParams.regionId = '';
  738. this.form.devId = '';
  739. this.queryParams.devId = '';
  740. if (val != null && val != '') {
  741. getAllRegion(val).then(response => {
  742. this.regionOperation = response.data;
  743. }
  744. )
  745. } else {
  746. this.regionOperation = [];
  747. this.deviceOperation = [];
  748. }
  749. },
  750. getAllDeviceByRegionId(val) {
  751. this.form.devId = '';
  752. this.queryParams.devId = '';
  753. if (val != null && val != '') {
  754. getAllDeviceByRegionId(val).then(response => {
  755. this.deviceOperation = response.data;
  756. }
  757. )
  758. } else {
  759. this.deviceOperation = [];
  760. }
  761. },
  762. tableCellStyle({row, column, rowIndex, columnIndex}) {
  763. if (columnIndex === 1 && row.approveStatus == 2) {
  764. return "color:#00ff00;";
  765. }
  766. if (columnIndex === 1 && row.approveStatus == 1) {
  767. return "color:#0000FF;";
  768. }
  769. if (columnIndex === 1 && row.approveStatus == 0) {
  770. return "color:#ff0000;";
  771. }
  772. if (columnIndex === 3 && row.leakageDegree == 1) {
  773. return "color:#00ff00;font-size:200%";
  774. }
  775. if (columnIndex === 3 && row.leakageDegree == 2) {
  776. return "color:#FFDF00;font-size:200%";
  777. }
  778. if (columnIndex === 3 && row.leakageDegree == 3) {
  779. return "color:#ff0000;font-size:200%";
  780. }
  781. },
  782. leakageFormat(row, column) {
  783. return row.leakageDegree ? "●" : null;
  784. },
  785. pointFormat(row, column) {
  786. return this.selectDictLabel(this.pointOptions, row.pointType);
  787. },
  788. mediumTypeFormat(row, column) {
  789. return this.selectDictLabel(this.mediumTypeOptions, row.mediumType);
  790. },
  791. unarriveFormat(row, column) {
  792. return this.selectDictLabel(this.yesOrNoOperation, row.unarrive);
  793. },
  794. keepWarmFormat(row, column) {
  795. return this.selectDictLabel(this.yesOrNoOperation, row.keepWarm);
  796. },
  797. approveStatusFormat(row, column) {
  798. return this.selectDictLabel(this.approveStatusOperation, row.approveStatus);
  799. },
  800. plantTypeFormat(row, column) {
  801. return this.selectDictLabel(this.plantTypeOptions, row.plantType);
  802. },
  803. /** 查询密封点列表 */
  804. getList() {
  805. this.loading = true;
  806. listPoint(this.queryParams).then(response => {
  807. this.pointList = response.rows;
  808. this.total = response.total;
  809. this.loading = false;
  810. });
  811. },
  812. // 取消按钮
  813. cancel() {
  814. this.open = false;
  815. this.reset();
  816. },
  817. cleanRegion(done) {
  818. this.reset();
  819. done(true);
  820. },
  821. // 表单重置
  822. reset() {
  823. this.form = {
  824. id: null,
  825. ppm: null,
  826. leakageDegree: null,
  827. plantId: null,
  828. regionId: null,
  829. devId: null,
  830. medium: null,
  831. mediumType: null,
  832. pointType: null,
  833. layer: null,
  834. groupPosition: null,
  835. pointPosition: null,
  836. groupCode: null,
  837. extendCode: null,
  838. subPointType: null,
  839. dia: null,
  840. unarrive: null,
  841. unarriveReason: null,
  842. keepWarm: null,
  843. temperature: null,
  844. pressure: null,
  845. runTime: null,
  846. pidNo: null,
  847. pidUrl: null,
  848. picNo: null,
  849. picUrl: null,
  850. tocMark: null,
  851. methaneMark: null,
  852. vocsMark: null,
  853. remarks: null,
  854. approveStatus: 0,
  855. approveTime: null,
  856. deptId: null,
  857. delFlag: null,
  858. createrCode: null,
  859. createdate: null,
  860. updaterCode: null,
  861. updatedate: null
  862. };
  863. this.resetForm("form");
  864. this.regionOperation = [];
  865. this.deviceOperation = [];
  866. },
  867. /** 搜索按钮操作 */
  868. handleQuery() {
  869. this.queryParams.pageNum = 1;
  870. this.getList();
  871. },
  872. /** 重置按钮操作 */
  873. resetQuery() {
  874. this.resetForm("queryForm");
  875. this.handleQuery();
  876. this.regionOperation = [];
  877. this.deviceOperation = [];
  878. },
  879. // 多选框选中数据
  880. handleSelectionChange(selection) {
  881. this.ids = selection.map(item => item.id)
  882. this.status = selection.map(item => item.approveStatus)
  883. this.single = selection.length !== 1
  884. this.multiple = !selection.length
  885. },
  886. /** 新增按钮操作 */
  887. handleAdd() {
  888. this.reset();
  889. this.open = true;
  890. this.title = "添加密封点";
  891. },
  892. /** 修改按钮操作 */
  893. handleUpdate(row) {
  894. this.reset();
  895. const id = row.id || this.ids
  896. if (row.approveStatus != 0) {
  897. MessageBox.alert('已送审/已审核的数据不可删除!', '注意!', {
  898. confirmButtonText: '确定',
  899. })
  900. return
  901. }
  902. getPoint(id).then(response => {
  903. this.form = response.data;
  904. getAllRegion(this.form.plantId).then(response => {
  905. this.regionOperation = response.data;
  906. }
  907. );
  908. getAllDeviceByRegionId(this.form.regionId).then(response => {
  909. this.deviceOperation = response.data;
  910. }
  911. )
  912. this.open = true;
  913. this.title = "修改密封点";
  914. });
  915. },
  916. /** 提交按钮 */
  917. submitForm() {
  918. this.$refs["form"].validate(valid => {
  919. if (valid) {
  920. if (this.form.id != null) {
  921. updatePoint(this.form).then(response => {
  922. this.$modal.msgSuccess("修改成功");
  923. this.open = false;
  924. this.getList();
  925. });
  926. } else {
  927. addPoint(this.form).then(response => {
  928. this.$modal.msgSuccess("新增成功");
  929. this.open = false;
  930. this.getList();
  931. });
  932. }
  933. }
  934. });
  935. },
  936. /** 删除按钮操作 */
  937. handleDelete(row) {
  938. const ids = row.id || this.ids;
  939. if (row.approveStatus === undefined) {
  940. for (let i = 0; i < this.status.length; i++) {
  941. if (this.status[i] != 0) {
  942. MessageBox.alert('已送审/已审核的数据不可删除!', '注意!', {
  943. confirmButtonText: '确定',
  944. })
  945. return
  946. }
  947. }
  948. } else if (row.approveStatus != 0) {
  949. MessageBox.alert('已送审/已审核的数据不可删除!', '注意!', {
  950. confirmButtonText: '确定',
  951. })
  952. return
  953. }
  954. this.$modal.confirm('是否确认删除数据项?').then(function () {
  955. return delPoint(ids);
  956. }).then(() => {
  957. this.getList();
  958. this.$modal.msgSuccess("删除成功");
  959. }).catch(() => {
  960. });
  961. },
  962. /** 导出按钮操作 */
  963. handleExport() {
  964. this.download('base/point/export', {
  965. ...this.queryParams
  966. }, `point_${new Date().getTime()}.xlsx`)
  967. },
  968. handleToApprove() {
  969. alert("功能开发中......")
  970. },
  971. handleApprove() {
  972. alert("功能开发中......")
  973. }
  974. }
  975. };
  976. </script>