ylgdopen.vue 52 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356
  1. <template>
  2. <div class="app-container">
  3. <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch" label-width="68px">
  4. <el-form-item :label="$t('装置名称')" prop="plantCode">
  5. <el-input
  6. v-model="queryParams.plantCode"
  7. :placeholder="$t('请输入') + $t('装置名称')"
  8. clearable
  9. size="small"
  10. @keyup.enter.native="handleQuery"
  11. />
  12. </el-form-item>
  13. <el-form-item :label="$t('单元')" prop="unit">
  14. <el-input
  15. v-model="queryParams.unit"
  16. :placeholder="$t('请输入') + $t('单元')"
  17. clearable
  18. size="small"
  19. @keyup.enter.native="handleQuery"
  20. />
  21. </el-form-item>
  22. <el-form-item :label="$t('申请状态')" prop="approveStatus">
  23. <el-select v-model="queryParams.approveStatus" :placeholder="$t('请选择') + $t('申请状态')" clearable size="small">
  24. <el-option
  25. v-for="dict in approveStatusOptions"
  26. :key="dict.dictValue"
  27. :label="dict.dictLabel"
  28. :value="dict.dictValue"
  29. />
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item>
  33. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('搜索') }}</el-button>
  34. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('重置') }}</el-button>
  35. </el-form-item>
  36. </el-form>
  37. <el-row :gutter="10" class="mb8">
  38. <el-col :span="1.5">
  39. <el-button
  40. type="success"
  41. size="mini"
  42. @click="thirdPartyList"
  43. >{{ $t('第三方数据列表') }}
  44. </el-button>
  45. </el-col>
  46. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  47. </el-row>
  48. <u-table v-loading="loading" ref="tableRef" :data="reportYlgdList" @selection-change="handleSelectionChange"
  49. :height="clientHeight" :row-key="row => { return row.id }"
  50. use-virtual
  51. showBodyOverflow="title"
  52. border>
  53. <u-table-column type="selection" width="55" :reserve-selection="true" align="center"/>
  54. <u-table-column :label="$t('装置名称')" align="center" fixed="left" prop="plantCode" :show-overflow-tooltip="true"/>
  55. <u-table-column :label="$t('单元')" align="center" fixed="left" prop="unit" :show-overflow-tooltip="true"/>
  56. <u-table-column :label="$t('管道名称')" align="center" fixed="left" prop="devname" :show-overflow-tooltip="true"/>
  57. <u-table-column :label="$t('管道编号')" align="center" fixed="left" prop="devno" :show-overflow-tooltip="true"/>
  58. <u-table-column :label="$t('申请状态')" align="center" fixed="left" prop="approveStatus"
  59. :formatter="approveStatusFormat" :show-overflow-tooltip="true"/>
  60. <u-table-column :label="$t('管道级别')" align="center" prop="grade" :show-overflow-tooltip="true"/>
  61. <u-table-column :label="$t('介质')" align="center" prop="medium" :show-overflow-tooltip="true">
  62. <template slot-scope="scope">
  63. <el-input v-if="scope.row.isEdit" v-model="scope.row.medium" :placeholder="$t('请输入')+$t('介质')"/>
  64. <span v-else>{{ scope.row.medium }}</span>
  65. </template>
  66. </u-table-column>
  67. <u-table-column :label="$t('设计压力')+'(MPa)'" align="center" prop="desPressure" :show-overflow-tooltip="true">
  68. <template slot-scope="scope">
  69. <el-input v-if="scope.row.isEdit" v-model="scope.row.desPressure"
  70. :placeholder="$t('请输入')+$t('设计压力')+'(MPa)'"/>
  71. <span v-else>{{ scope.row.desPressure }}</span>
  72. </template>
  73. </u-table-column>
  74. <u-table-column :label="$t('设计温度')+'(℃)'" align="center" prop="desTemp" :show-overflow-tooltip="true">
  75. <template slot-scope="scope">
  76. <el-input v-if="scope.row.isEdit" v-model="scope.row.desTemp" :placeholder="$t('请输入')+$t('设计温度')+'(℃)'"/>
  77. <span v-else>{{ scope.row.desTemp }}</span>
  78. </template>
  79. </u-table-column>
  80. <u-table-column :label="$t('操作压力')+'(MPa)'" align="center" prop="optPressure" :show-overflow-tooltip="true">
  81. <template slot-scope="scope">
  82. <el-input v-if="scope.row.isEdit" v-model="scope.row.optPressure"
  83. :placeholder="$t('请输入')+$t('操作压力')+'(MPa)'"/>
  84. <span v-else>{{ scope.row.optPressure }}</span>
  85. </template>
  86. </u-table-column>
  87. <u-table-column :label="$t('操作温度')+'(℃)'" align="center" prop="optTemp" :show-overflow-tooltip="true">
  88. <template slot-scope="scope">
  89. <el-input v-if="scope.row.isEdit" v-model="scope.row.optTemp" :placeholder="$t('请输入')+$t('操作温度')+'(℃)'"/>
  90. <span v-else>{{ scope.row.optTemp }}</span>
  91. </template>
  92. </u-table-column>
  93. <u-table-column :label="$t('安全状况等级')" align="center" prop="safeClass" :show-overflow-tooltip="true"/>
  94. <u-table-column :label="$t('下次定期检验日期')" align="center" prop="nextWarnDate" width="100">
  95. <template slot-scope="scope">
  96. <span>{{ parseTime(scope.row.nextWarnDate, '{y}-{m}-{d}') }}</span>
  97. </template>
  98. </u-table-column>
  99. <u-table-column label="1" align="center" prop="pj1" :render-header="renderHeader">
  100. <template slot-scope="scope">
  101. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj1" :placeholder="$t('请选择')">
  102. <el-option
  103. v-for="dict in pj1Options"
  104. :key="dict.dictValue"
  105. :label="dict.dictLabel"
  106. :value="dict.dictValue"
  107. ></el-option>
  108. </el-select>
  109. <span v-if="scope.row.isEdit === false && scope.row.pj1 != null">{{ pj1Format(scope.row) }}</span>
  110. </template>
  111. </u-table-column>
  112. <u-table-column label="2" align="center" prop="pj2" :render-header="renderHeader">
  113. <template slot-scope="scope">
  114. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj2" :placeholder="$t('请选择')">
  115. <el-option
  116. v-for="dict in pj2Options"
  117. :key="dict.dictValue"
  118. :label="dict.dictLabel"
  119. :value="dict.dictValue"
  120. ></el-option>
  121. </el-select>
  122. <span v-if="scope.row.isEdit === false && scope.row.pj2 != null">{{ pj2Format(scope.row) }}</span>
  123. </template>
  124. </u-table-column>
  125. <u-table-column label="3" align="center" prop="pj3" :render-header="renderHeader">
  126. <template slot-scope="scope">
  127. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj3" :placeholder="$t('请选择')">
  128. <el-option
  129. v-for="dict in pj3Options"
  130. :key="dict.dictValue"
  131. :label="dict.dictLabel"
  132. :value="dict.dictValue"
  133. ></el-option>
  134. </el-select>
  135. <span v-if="scope.row.isEdit === false && scope.row.pj3 != null">{{ pj3Format(scope.row) }}</span>
  136. </template>
  137. </u-table-column>
  138. <u-table-column label="4" align="center" prop="pj4" :render-header="renderHeader">
  139. <template slot-scope="scope">
  140. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj4" :placeholder="$t('请选择')">
  141. <el-option
  142. v-for="dict in pj4Options"
  143. :key="dict.dictValue"
  144. :label="dict.dictLabel"
  145. :value="dict.dictValue"
  146. ></el-option>
  147. </el-select>
  148. <span v-if="scope.row.isEdit === false && scope.row.pj4 != null">{{ pj4Format(scope.row) }}</span>
  149. </template>
  150. </u-table-column>
  151. <u-table-column label="5" align="center" prop="pj5" :render-header="renderHeader">
  152. <template slot-scope="scope">
  153. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj5" :placeholder="$t('请选择')">
  154. <el-option
  155. v-for="dict in pj5Options"
  156. :key="dict.dictValue"
  157. :label="dict.dictLabel"
  158. :value="dict.dictValue"
  159. ></el-option>
  160. </el-select>
  161. <span v-if="scope.row.isEdit === false && scope.row.pj5 != null">{{ pj5Format(scope.row) }}</span>
  162. </template>
  163. </u-table-column>
  164. <u-table-column :label="$t('安全附件仪表及检查情况')" align="center">
  165. <u-table-column label="6" align="center" prop="pj6" :render-header="renderHeader">
  166. <template slot-scope="scope">
  167. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj6" :placeholder="$t('请选择')">
  168. <el-option
  169. v-for="dict in pj6Options"
  170. :key="dict.dictValue"
  171. :label="dict.dictLabel"
  172. :value="dict.dictValue"
  173. ></el-option>
  174. </el-select>
  175. <span v-if="scope.row.isEdit === false && scope.row.pj6 != null">{{ pj6Format(scope.row) }}</span>
  176. </template>
  177. </u-table-column>
  178. <u-table-column label="7" align="center" prop="pj7" :render-header="renderHeader">
  179. <template slot-scope="scope">
  180. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj7" :placeholder="$t('请选择')">
  181. <el-option
  182. v-for="dict in pj7Options"
  183. :key="dict.dictValue"
  184. :label="dict.dictLabel"
  185. :value="dict.dictValue"
  186. ></el-option>
  187. </el-select>
  188. <span v-if="scope.row.isEdit === false && scope.row.pj7 != null">{{ pj7Format(scope.row) }}</span>
  189. </template>
  190. </u-table-column>
  191. <u-table-column label="8" align="center" prop="pj8" :render-header="renderHeader">
  192. <template slot-scope="scope">
  193. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj8" :placeholder="$t('请选择')">
  194. <el-option
  195. v-for="dict in pj8Options"
  196. :key="dict.dictValue"
  197. :label="dict.dictLabel"
  198. :value="dict.dictValue"
  199. ></el-option>
  200. </el-select>
  201. <span v-if="scope.row.isEdit === false && scope.row.pj8 != null">{{ pj8Format(scope.row) }}</span>
  202. </template>
  203. </u-table-column>
  204. <u-table-column label="9" align="center" prop="pj9" :render-header="renderHeader">
  205. <template slot-scope="scope">
  206. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj9" :placeholder="$t('请选择')">
  207. <el-option
  208. v-for="dict in pj9Options"
  209. :key="dict.dictValue"
  210. :label="dict.dictLabel"
  211. :value="dict.dictValue"
  212. ></el-option>
  213. </el-select>
  214. <span v-if="scope.row.isEdit === false && scope.row.pj9 != null">{{ pj9Format(scope.row) }}</span>
  215. </template>
  216. </u-table-column>
  217. <u-table-column label="10" align="center" prop="pj10" :render-header="renderHeader">
  218. <template slot-scope="scope">
  219. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj10" :placeholder="$t('请选择')">
  220. <el-option
  221. v-for="dict in pj10Options"
  222. :key="dict.dictValue"
  223. :label="dict.dictLabel"
  224. :value="dict.dictValue"
  225. ></el-option>
  226. </el-select>
  227. <span v-if="scope.row.isEdit === false && scope.row.pj10 != null">{{ pj10Format(scope.row) }}</span>
  228. </template>
  229. </u-table-column>
  230. <u-table-column label="11" align="center" prop="pj11" :render-header="renderHeader">
  231. <template slot-scope="scope">
  232. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj11" :placeholder="$t('请选择')">
  233. <el-option
  234. v-for="dict in pj11Options"
  235. :key="dict.dictValue"
  236. :label="dict.dictLabel"
  237. :value="dict.dictValue"
  238. ></el-option>
  239. </el-select>
  240. <span v-if="scope.row.isEdit === false && scope.row.pj11 != null">{{ pj11Format(scope.row) }}</span>
  241. </template>
  242. </u-table-column>
  243. </u-table-column>
  244. <u-table-column label="12" align="center" prop="pj12" :render-header="renderHeader">
  245. <template slot-scope="scope">
  246. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj12" :placeholder="$t('请选择')">
  247. <el-option
  248. v-for="dict in pj12Options"
  249. :key="dict.dictValue"
  250. :label="dict.dictLabel"
  251. :value="dict.dictValue"
  252. ></el-option>
  253. </el-select>
  254. <span v-if="scope.row.isEdit === false && scope.row.pj12 != null">{{ pj12Format(scope.row) }}</span>
  255. </template>
  256. </u-table-column>
  257. <u-table-column label="13" align="center" prop="pj13" :render-header="renderHeader">
  258. <template slot-scope="scope">
  259. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj13" :placeholder="$t('请选择')">
  260. <el-option
  261. v-for="dict in pj13Options"
  262. :key="dict.dictValue"
  263. :label="dict.dictLabel"
  264. :value="dict.dictValue"
  265. ></el-option>
  266. </el-select>
  267. <span v-if="scope.row.isEdit === false && scope.row.pj13 != null">{{ pj13Format(scope.row) }}</span>
  268. </template>
  269. </u-table-column>
  270. <u-table-column label="14" align="center" prop="pj14" :render-header="renderHeader">
  271. <template slot-scope="scope">
  272. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj14" :placeholder="$t('请选择')">
  273. <el-option
  274. v-for="dict in pj14Options"
  275. :key="dict.dictValue"
  276. :label="dict.dictLabel"
  277. :value="dict.dictValue"
  278. ></el-option>
  279. </el-select>
  280. <span v-if="scope.row.isEdit === false && scope.row.pj14 != null">{{ pj14Format(scope.row) }}</span>
  281. </template>
  282. </u-table-column>
  283. <u-table-column label="15" align="center" prop="pj15" :render-header="renderHeader">
  284. <template slot-scope="scope">
  285. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj15" :placeholder="$t('请选择')">
  286. <el-option
  287. v-for="dict in pj15Options"
  288. :key="dict.dictValue"
  289. :label="dict.dictLabel"
  290. :value="dict.dictValue"
  291. ></el-option>
  292. </el-select>
  293. <span v-if="scope.row.isEdit === false && scope.row.pj15 != null">{{ pj15Format(scope.row) }}</span>
  294. </template>
  295. </u-table-column>
  296. <u-table-column label="16" align="center" prop="pj16" :render-header="renderHeader">
  297. <template slot-scope="scope">
  298. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj16" :placeholder="$t('请选择')">
  299. <el-option
  300. v-for="dict in pj16Options"
  301. :key="dict.dictValue"
  302. :label="dict.dictLabel"
  303. :value="dict.dictValue"
  304. ></el-option>
  305. </el-select>
  306. <span v-if="scope.row.isEdit === false && scope.row.pj16 != null">{{ pj16Format(scope.row) }}</span>
  307. </template>
  308. </u-table-column>
  309. <u-table-column label="17" align="center" prop="pj17" :render-header="renderHeader">
  310. <template slot-scope="scope">
  311. <el-select v-if="scope.row.isEdit" v-model="scope.row.pj17" :placeholder="$t('请选择')">
  312. <el-option
  313. v-for="dict in pj17Options"
  314. :key="dict.dictValue"
  315. :label="dict.dictLabel"
  316. :value="dict.dictValue"
  317. ></el-option>
  318. </el-select>
  319. <span v-if="scope.row.isEdit === false && scope.row.pj17 != null">{{ pj17Format(scope.row) }}</span>
  320. </template>
  321. </u-table-column>
  322. <u-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true">
  323. <template slot-scope="scope">
  324. <el-input v-if="scope.row.isEdit" v-model="scope.row.remarks" :placeholder="$t('请输入')+$t('备注')"/>
  325. <span v-else>{{ scope.row.remarks }}</span>
  326. </template>
  327. </u-table-column>
  328. <u-table-column :label="$t('检查日期')" align="center" prop="checkDate" width="100">
  329. <template slot-scope="scope">
  330. <el-date-picker clearable size="small" style="width: 200px"
  331. v-model="scope.row.checkDate"
  332. type="date"
  333. v-if="scope.row.isEdit"
  334. value-format="yyyy-MM-dd"
  335. :placeholder="$t('请选择')+$t('检查日期')">
  336. </el-date-picker>
  337. <span v-else>{{ parseTime(scope.row.checkDate, '{y}-{m}-{d}') }}</span>
  338. </template>
  339. </u-table-column>
  340. <u-table-column :label="$t('下次年度检查日期')" align="center" prop="nextCheckDate" width="100">
  341. <template slot-scope="scope">
  342. <el-date-picker clearable size="small" style="width: 200px"
  343. v-model="scope.row.nextCheckDate"
  344. type="date"
  345. v-if="scope.row.isEdit"
  346. value-format="yyyy-MM-dd"
  347. :placeholder="$t('请选择')+$t('下次年度检查日期')">
  348. </el-date-picker>
  349. <span v-else>{{ parseTime(scope.row.nextCheckDate, '{y}-{m}-{d}') }}</span>
  350. </template>
  351. </u-table-column>
  352. <u-table-column :label="$t('问题及处理')" align="center" prop="problem" :show-overflow-tooltip="true">
  353. <template slot-scope="scope">
  354. <el-input v-if="scope.row.isEdit" v-model="scope.row.problem" :placeholder="$t('请输入')+$t('问题及处理')"/>
  355. <span v-else>{{ scope.row.problem }}</span>
  356. </template>
  357. </u-table-column>
  358. <u-table-column :label="$t('检查结论')" align="center" prop="con" :formatter="conFormat">
  359. <template slot-scope="scope">
  360. <el-select v-if="scope.row.isEdit" v-model="scope.row.con" :placeholder="$t('请选择')+$t('检查结论')">
  361. <el-option
  362. v-for="dict in conOptions"
  363. :key="dict.dictValue"
  364. :label="dict.dictLabel"
  365. :value="dict.dictValue"
  366. ></el-option>
  367. </el-select>
  368. <span v-if="scope.row.isEdit === false && scope.row.con != null">{{ conFormat(scope.row) }}</span>
  369. </template>
  370. </u-table-column>
  371. <u-table-column :label="$t('年检报告编号')" align="center" prop="yearReportNo" :show-overflow-tooltip="true">
  372. <template slot-scope="scope">
  373. <el-input v-if="scope.row.isEdit" v-model="scope.row.yearReportNo" :placeholder="$t('请输入')+$t('年检报告编号')"/>
  374. <span v-else>{{ scope.row.yearReportNo }}</span>
  375. </template>
  376. </u-table-column>
  377. <u-table-column :label="$t('操作')" align="center" fixed="right" width="200"
  378. class-name="small-padding">
  379. <template slot-scope="scope">
  380. <el-button
  381. size="mini"
  382. type="text"
  383. icon="el-icon-tickets"
  384. @click="handleHistory(scope.row)"
  385. v-if="!scope.row.isEdit"
  386. >{{ $t('历史报告') }}
  387. </el-button>
  388. <el-button
  389. type="text"
  390. size="mini"
  391. v-if="scope.row.isEdit"
  392. @click="handleSave(scope.row)"
  393. >{{ $t('保存') }}
  394. </el-button>
  395. <el-button
  396. type="text"
  397. size="small"
  398. v-if="scope.row.isEdit"
  399. @click="handleCancel(scope.row, scope.$index)"
  400. >{{ $t('取消') }}
  401. </el-button>
  402. </template>
  403. </u-table-column>
  404. </u-table>
  405. <pagination
  406. v-show="total>0"
  407. :total="total"
  408. :page-sizes="[20,100,200,500]"
  409. :page.sync="queryParams.pageNum"
  410. :limit.sync="queryParams.pageSize"
  411. @pagination="getList"
  412. />
  413. <!-- 历史报告对话框 -->
  414. <el-dialog :close-on-click-modal="false" v-dialogDrag :title="title" :visible.sync="open" width="90%" append-to-body>
  415. <el-table :data="historyYlgdList" border>
  416. <el-table-column :label="$t('生成时间')" align="center" prop="buildDate" fixed="left" width="100">
  417. <template slot-scope="scope">
  418. <span>{{ parseTime(scope.row.buildDate, '{y}-{m}-{d}') }}</span>
  419. </template>
  420. </el-table-column>
  421. <el-table-column :label="$t('装置名称')" align="center" prop="plantCode" :show-overflow-tooltip="true"/>
  422. <el-table-column :label="$t('单元')" align="center" prop="unit" :show-overflow-tooltip="true"/>
  423. <el-table-column :label="$t('管道名称')" align="center" prop="devname" :show-overflow-tooltip="true"/>
  424. <el-table-column :label="$t('管道编号')" align="center" prop="devno" :show-overflow-tooltip="true"/>
  425. <el-table-column :label="$t('管道级别')" align="center" prop="grade" :show-overflow-tooltip="true"/>
  426. <el-table-column :label="$t('介质')" align="center" prop="medium" :show-overflow-tooltip="true"/>
  427. <el-table-column :label="$t('设计压力')+'(MPa)'" align="center" prop="desPressure" :show-overflow-tooltip="true"/>
  428. <el-table-column :label="$t('设计温度')+'(℃)'" align="center" prop="desTemp" :show-overflow-tooltip="true"/>
  429. <el-table-column :label="$t('操作压力')+'(MPa)'" align="center" prop="optPressure" :show-overflow-tooltip="true"/>
  430. <el-table-column :label="$t('操作温度')+'(℃)'" align="center" prop="optTemp" :show-overflow-tooltip="true"/>
  431. <el-table-column :label="$t('安全状况等级')" align="center" prop="safeClass" :show-overflow-tooltip="true"/>
  432. <el-table-column :label="$t('下次定期检验日期')" align="center" prop="nextWarnDate" width="100">
  433. <template slot-scope="scope">
  434. <span>{{ parseTime(scope.row.nextWarnDate, '{y}-{m}-{d}') }}</span>
  435. </template>
  436. </el-table-column>
  437. <el-table-column :label="$t('年检报告编号')" align="center" prop="yearReportNo" :show-overflow-tooltip="true"/>
  438. <el-table-column label="1" align="center" prop="pj1" :render-header="renderHeader" :formatter="pj1Format"/>
  439. <el-table-column label="2" align="center" prop="pj2" :render-header="renderHeader" :formatter="pj2Format"/>
  440. <el-table-column label="3" align="center" prop="pj3" :render-header="renderHeader" :formatter="pj3Format"/>
  441. <el-table-column label="4" align="center" prop="pj4" :render-header="renderHeader" :formatter="pj4Format"/>
  442. <el-table-column label="5" align="center" prop="pj5" :render-header="renderHeader" :formatter="pj5Format"/>
  443. <el-table-column :label="$t('安全附件仪表及检查情况')" align="center">
  444. <el-table-column label="6" align="center" prop="pj6" :render-header="renderHeader" :formatter="pj6Format"/>
  445. <el-table-column label="7" align="center" prop="pj7" :render-header="renderHeader" :formatter="pj7Format"/>
  446. <el-table-column label="8" align="center" prop="pj8" :render-header="renderHeader" :formatter="pj8Format"/>
  447. <el-table-column label="9" align="center" prop="pj9" :render-header="renderHeader" :formatter="pj9Format"/>
  448. <el-table-column label="10" align="center" prop="pj10" :render-header="renderHeader" :formatter="pj10Format"/>
  449. <el-table-column label="11" align="center" prop="pj11" :render-header="renderHeader" :formatter="pj11Format"/>
  450. </el-table-column>
  451. <el-table-column label="12" align="center" prop="pj12" :render-header="renderHeader" :formatter="pj12Format"/>
  452. <el-table-column label="13" align="center" prop="pj13" :render-header="renderHeader" :formatter="pj13Format"/>
  453. <el-table-column label="14" align="center" prop="pj14" :render-header="renderHeader" :formatter="pj14Format"/>
  454. <el-table-column label="15" align="center" prop="pj15" :render-header="renderHeader" :formatter="pj15Format"/>
  455. <el-table-column label="16" align="center" prop="pj16" :render-header="renderHeader" :formatter="pj16Format"/>
  456. <el-table-column label="17" align="center" prop="pj17" :render-header="renderHeader" :formatter="pj17Format"/>
  457. <el-table-column :label="$t('备注')" align="center" prop="remarks" :show-overflow-tooltip="true"/>
  458. <eltable-column :label="$t('检查日期')" align="center" prop="checkDate" width="100">
  459. <template slot-scope="scope">
  460. <span>{{ parseTime(scope.row.checkDate, '{y}-{m}-{d}') }}</span>
  461. </template>
  462. </eltable-column>
  463. <el-table-column :label="$t('下次年度检查日期')" align="center" prop="nextCheckDate" width="100">
  464. <template slot-scope="scope">
  465. <span>{{ parseTime(scope.row.nextCheckDate, '{y}-{m}-{d}') }}</span>
  466. </template>
  467. </el-table-column>
  468. <el-table-column :label="$t('问题及处理')" align="center" prop="problem" :show-overflow-tooltip="true"/>
  469. <el-table-column :label="$t('检查结论')" align="center" prop="con" :formatter="conFormat"/>
  470. <el-table-column :label="$t('操作')" align="center" fixed="right" width="120"
  471. class-name="small-padding fixed-width">
  472. <template slot-scope="scope">
  473. <el-button type="text" size="small"
  474. @click="handleDownloadReport(scope.row)">{{ $t('下载报告') }}
  475. </el-button>
  476. </template>
  477. </el-table-column>
  478. </el-table>
  479. <form ref="downloadForm" :action="downloadAction" target="FORMSUBMIT">
  480. <input name="id" v-model="downloadForm.id" hidden/>
  481. </form>
  482. </el-dialog>
  483. <year-approve v-if="approveVisible" ref="yearApprove" @refreshDataList="getList"></year-approve>
  484. <form ref="downloadForm2" :action="downloadAction2" target="FORMSUBMIT">
  485. <input name="year" v-model="downloadForm2.year" hidden/>
  486. </form>
  487. <!-- 批量导出年检报告的历史报告 -->
  488. <el-dialog :close-on-click-modal="false"
  489. title="选择需要导出的历史报告年份"
  490. :visible.sync="dialogVisible"
  491. width="20%">
  492. <el-date-picker
  493. v-model="exportCheckYear"
  494. type="year"
  495. placeholder="选择需要导出的历史报告年份">
  496. </el-date-picker>
  497. <span slot="footer" class="dialog-footer">
  498. <el-button @click="dialogVisible = false">取 消</el-button>
  499. <el-button type="primary" @click="exportDataForYear">确 定</el-button>
  500. </span>
  501. </el-dialog>
  502. <!-- 用户导入对话框 -->
  503. <el-dialog :close-on-click-modal="false" :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  504. <el-form ref="dateform" label-width="120px">
  505. <el-form-item>
  506. <span>{{$t('已选择')}} {{dataListSelections.length}}</span>
  507. </el-form-item>
  508. <el-form-item>
  509. <el-button type="primary" :disabled="dataListSelections.length <= 0" @click="downloadDev(2)">{{$t('downloadSelect')}}</el-button>
  510. </el-form-item>
  511. <el-upload
  512. ref="upload"
  513. :limit="1"
  514. accept=".xlsx, .xls"
  515. :headers="upload.headers"
  516. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  517. :disabled="upload.isUploading"
  518. :on-progress="handleFileUploadProgress"
  519. :on-success="handleFileSuccess"
  520. :auto-upload="false"
  521. drag
  522. >
  523. <i class="el-icon-upload"></i>
  524. <div class="el-upload__text">
  525. 将文件拖到此处,或
  526. <em>点击上传</em>
  527. </div>
  528. <!--<div class="el-upload__tip" slot="tip">-->
  529. <!--<el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>-->
  530. <!--</div>-->
  531. <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
  532. </el-upload>
  533. </el-form>
  534. <div slot="footer" class="dialog-footer">
  535. <el-button type="primary" @click="submitFileForm"
  536. v-loading.fullscreen.lock="fullscreenLoading">确 定
  537. </el-button>
  538. <el-button @click="upload.open = false">取 消</el-button>
  539. </div>
  540. <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
  541. <input name="type" :value="upload.type" hidden/>
  542. </form>
  543. </el-dialog>
  544. <!-- 第三方导入对话框 -->
  545. <el-dialog :close-on-click-modal="false" :title="thirdUpload.title" :visible.sync="thirdUpload.open" width="400px" append-to-body>
  546. <div>装置:
  547. <el-select v-model="plantCodeThird" :placeholder="$t('请选择') + $t('导入装置')" clearable size="small">
  548. <el-option
  549. v-for="dict in plantOptions"
  550. :key="dict.name"
  551. :label="dict.name"
  552. :value="dict.name"
  553. />
  554. </el-select>
  555. </div>
  556. <div>年份:
  557. <el-date-picker
  558. v-model="importThirdYear"
  559. type="year"
  560. placeholder="选择导入的第三方数据年份">
  561. </el-date-picker>
  562. </div>
  563. <el-upload
  564. ref="thirdUpload"
  565. :limit="1"
  566. accept=".xlsx, .xls"
  567. :data="submitData"
  568. :headers="thirdUpload.headers"
  569. :action="thirdUpload.url + '?updateSupport=' + thirdUpload.updateSupport"
  570. :disabled="thirdUpload.isUploading"
  571. :on-progress="handleFileUploadProgressThird"
  572. :on-success="handleFileSuccessThird"
  573. :auto-upload="false"
  574. drag
  575. >
  576. <i class="el-icon-upload"></i>
  577. <div class="el-upload__text">
  578. 将文件拖到此处,或
  579. <em>点击上传</em>
  580. </div>
  581. <!-- <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>-->
  582. </el-upload>
  583. <div slot="footer" class="dialog-footer">
  584. <el-button type="primary" @click="thirdSubmitFileForm"
  585. v-loading.fullscreen.lock="fullscreenLoading">确 定
  586. </el-button>
  587. <el-button @click="thirdUpload.open = false">取 消</el-button>
  588. </div>
  589. </el-dialog>
  590. <!-- 第三方数据列表对话框 -->
  591. <el-dialog :close-on-click-modal="false" :title="thirdList.title" :visible.sync="thirdList.open" width="650px" append-to-body>
  592. <el-table
  593. :data="reportThirdList"
  594. style="width: 100%">
  595. <u-table-column
  596. prop="plantCode"
  597. :label="$t('装置名称')"
  598. width="100"
  599. :show-overflow-tooltip="true"
  600. align="center"/>
  601. <u-table-column
  602. prop="year"
  603. :label="$t('年份')"
  604. width="100"
  605. :show-overflow-tooltip="true"
  606. align="center"/>
  607. <u-table-column
  608. prop="fileName"
  609. :label="$t('文件名称')"
  610. width="300"
  611. :show-overflow-tooltip="true"
  612. align="center">
  613. <template slot-scope="scope">
  614. <a class="link-type" @click="handleDownload(scope.row)">
  615. <span>{{ scope.row.fileName }}</span>
  616. </a>
  617. </template>
  618. </u-table-column>
  619. <u-table-column :label="$t('操作')" align="center" fixed="right">
  620. <template slot-scope="scope">
  621. <el-button
  622. size="mini"
  623. type="text"
  624. icon="el-icon-delete"
  625. @click="handleDeleteThird(scope.row)"
  626. >{{ $t('删除') }}
  627. </el-button>
  628. </template>
  629. </u-table-column>
  630. </el-table>
  631. </el-dialog>
  632. </div>
  633. </template>
  634. <script>
  635. import {
  636. listReportYlgd,
  637. delReportYlgd,
  638. updateReportYlgd,
  639. exportReportYlgd,
  640. syncReportYlgd,
  641. exportReportYlgdSelected,
  642. exportPDF
  643. } from "@/api/sems/reportYlgd";
  644. import {listHistoryYlgd} from "@/api/sems/historyYlgd";
  645. import {treeselect} from "@/api/system/dept";
  646. import {getToken} from "@/utils/auth";
  647. import Treeselect from "@riophae/vue-treeselect";
  648. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  649. import YearApprove from './yearapprove'
  650. import {listTReportThird, delReportThird} from "@/api/sems/tReportThird";
  651. import {mylistPlant} from "@/api/system/plant";
  652. export default {
  653. name: "ReportYlgd",
  654. components: {Treeselect, YearApprove},
  655. data() {
  656. return {
  657. submitData: {
  658. plantCode: null,
  659. year: null,
  660. },
  661. thirdListQuery: {
  662. type: 2,
  663. },
  664. reportThirdList: [],
  665. plantCodeThird: null,
  666. importThirdYear: null,
  667. plantOptions: [],
  668. // 用户导入参数
  669. upload: {
  670. downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
  671. type: "reportYlgd",
  672. // 是否显示弹出层(用户导入)
  673. open: false,
  674. // 弹出层标题(用户导入)
  675. title: "",
  676. // 是否禁用上传
  677. isUploading: false,
  678. // 是否更新已经存在的用户数据
  679. updateSupport: 0,
  680. // 设置上传的请求头部
  681. headers: {Authorization: "Bearer " + getToken()},
  682. // 上传的地址
  683. url: process.env.VUE_APP_BASE_API + "/sems/reportYlgd/importForUpdate"
  684. },
  685. // 第三方导入参数
  686. thirdUpload: {
  687. // 是否显示弹出层
  688. open: false,
  689. // 弹出层标题
  690. title: "",
  691. // 是否禁用上传
  692. isUploading: false,
  693. // 是否更新已经存在的用户数据
  694. updateSupport: 0,
  695. // 设置上传的请求头部
  696. headers: {Authorization: "Bearer " + getToken()},
  697. // 上传的地址
  698. url: process.env.VUE_APP_BASE_API + "/sems/reportYlgd/importForThird"
  699. },
  700. fullscreenLoading: false,
  701. // 第三方数据列表
  702. thirdList: {
  703. // 是否显示弹出层
  704. open: false,
  705. // 弹出层标题
  706. title: "",
  707. },
  708. exportCheckYear: null,
  709. dialogVisible: false,
  710. // 遮罩层
  711. loading: true,
  712. approveVisible: false,
  713. // 选中数组
  714. ids: [],
  715. dataListSelections: [],
  716. // 非单个禁用
  717. single: true,
  718. // 非多个禁用
  719. multiple: true,
  720. // 显示搜索条件
  721. showSearch: false,
  722. // 总条数
  723. total: 0,
  724. // 压力管道年检报告表格数据
  725. reportYlgdList: [],
  726. // 压力管道报告历史表格数据
  727. historyYlgdList: [],
  728. // 弹出层标题
  729. title: "",
  730. // 部门树选项
  731. deptOptions: undefined,
  732. clientHeight: 300,
  733. // 是否显示弹出层
  734. open: false,
  735. // 1字典
  736. pj1Options: [],
  737. // 2字典
  738. pj2Options: [],
  739. // 3字典
  740. pj3Options: [],
  741. // 4字典
  742. pj4Options: [],
  743. // 5字典
  744. pj5Options: [],
  745. // 6字典
  746. pj6Options: [],
  747. // 7字典
  748. pj7Options: [],
  749. // 8字典
  750. pj8Options: [],
  751. // 9字典
  752. pj9Options: [],
  753. // 10字典
  754. pj10Options: [],
  755. // 11字典
  756. pj11Options: [],
  757. // 12字典
  758. pj12Options: [],
  759. // 13字典
  760. pj13Options: [],
  761. // 14字典
  762. pj14Options: [],
  763. // 15字典
  764. pj15Options: [],
  765. // 16字典
  766. pj16Options: [],
  767. // 17字典
  768. pj17Options: [],
  769. // 检查结论字典
  770. conOptions: [],
  771. approveStatusOptions: [],
  772. // 查询参数
  773. queryParams: {
  774. plantCode: 'BCC',
  775. unit: null,
  776. approveStatus: null,
  777. pageNum: 1,
  778. pageSize: 20,
  779. orderByColumn: null,
  780. isAsc: null,
  781. },
  782. // 查询历史报告参数
  783. queryHistoryParams: {
  784. pageNum: 1,
  785. pageSize: 20,
  786. reportId: null,
  787. },
  788. // 表单参数
  789. form: {},
  790. //下载参数
  791. downloadForm: {
  792. id: ''
  793. },
  794. downloadForm2: {
  795. year: '',
  796. },
  797. downloadAction: process.env.VUE_APP_BASE_API + '/sems/historyYlgd/exportPDF',
  798. downloadAction2: process.env.VUE_APP_BASE_API + '/sems/historyYlgd/exportPDFForYear',
  799. // 表单校验
  800. rules: {
  801. devId: [
  802. {required: true, message: this.$t('设备id') + this.$t('不能为空'), trigger: "blur"}
  803. ],
  804. },
  805. };
  806. },
  807. watch: {
  808. // 根据名称筛选部门树
  809. deptName(val) {
  810. this.$refs.tree.filter(val);
  811. },
  812. },
  813. created() {
  814. //设置表格高度对应屏幕高度
  815. this.$nextTick(() => {
  816. this.clientHeight = document.body.clientHeight - 250
  817. })
  818. this.getList();
  819. this.getTreeselect();
  820. this.getDicts("spec_approve_status").then(response => {
  821. for (let i = 0; i < response.data.length; i++) {
  822. if (["0", "7", "8"].includes(response.data[i].dictValue)) {
  823. this.approveStatusOptions.push(response.data[i])
  824. }
  825. }
  826. });
  827. this.getDicts("TEST_RESULT").then(response => {
  828. this.pj1Options = response.data;
  829. });
  830. this.getDicts("TEST_RESULT").then(response => {
  831. this.pj2Options = response.data;
  832. });
  833. this.getDicts("TEST_RESULT").then(response => {
  834. this.pj3Options = response.data;
  835. });
  836. this.getDicts("TEST_RESULT").then(response => {
  837. this.pj4Options = response.data;
  838. });
  839. this.getDicts("TEST_RESULT").then(response => {
  840. this.pj5Options = response.data;
  841. });
  842. this.getDicts("TEST_RESULT").then(response => {
  843. this.pj6Options = response.data;
  844. });
  845. this.getDicts("TEST_RESULT").then(response => {
  846. this.pj7Options = response.data;
  847. });
  848. this.getDicts("TEST_RESULT").then(response => {
  849. this.pj8Options = response.data;
  850. });
  851. this.getDicts("TEST_RESULT").then(response => {
  852. this.pj9Options = response.data;
  853. });
  854. this.getDicts("TEST_RESULT").then(response => {
  855. this.pj10Options = response.data;
  856. });
  857. this.getDicts("TEST_RESULT").then(response => {
  858. this.pj11Options = response.data;
  859. });
  860. this.getDicts("TEST_RESULT").then(response => {
  861. this.pj12Options = response.data;
  862. });
  863. this.getDicts("TEST_RESULT").then(response => {
  864. this.pj13Options = response.data;
  865. });
  866. this.getDicts("TEST_RESULT").then(response => {
  867. this.pj14Options = response.data;
  868. });
  869. this.getDicts("TEST_RESULT").then(response => {
  870. this.pj15Options = response.data;
  871. });
  872. this.getDicts("TEST_RESULT").then(response => {
  873. this.pj16Options = response.data;
  874. });
  875. this.getDicts("TEST_RESULT").then(response => {
  876. this.pj17Options = response.data;
  877. });
  878. this.getDicts("REPORT_CON").then(response => {
  879. this.conOptions = response.data;
  880. });
  881. let plantParams = {
  882. pType: 1
  883. }
  884. mylistPlant(plantParams).then(response => {
  885. this.plantOptions = response.data;
  886. });
  887. },
  888. methods: {
  889. //导出excel
  890. downloadDev(type){
  891. var rows = this.dataListSelections.map(item => {
  892. return item.id
  893. })
  894. const queryParams = {ids: null};
  895. queryParams.ids = rows.join()
  896. exportReportYlgdSelected(queryParams).then(response => {
  897. this.download(response.msg);
  898. })
  899. },
  900. /** 查询压力管道年检报告列表 */
  901. getList() {
  902. this.loading = true;
  903. listReportYlgd(this.queryParams).then(response => {
  904. response.rows.forEach(element => {
  905. element["isEdit"] = false
  906. });
  907. this.reportYlgdList = response.rows;
  908. this.total = response.total;
  909. // this.$nextTick(() => {
  910. // this.$refs.tableRef.doLayout(); // 解决表格错位
  911. // });
  912. this.loading = false;
  913. });
  914. },
  915. /** 查询部门下拉树结构 */
  916. getTreeselect() {
  917. treeselect().then(response => {
  918. this.deptOptions = response.data;
  919. });
  920. },
  921. // 申请状态字典翻译
  922. approveStatusFormat(row, column) {
  923. return this.selectDictLabel(this.approveStatusOptions, row.approveStatus);
  924. },
  925. // 1字典翻译
  926. pj1Format(row, column) {
  927. return this.selectDictLabel(this.pj1Options, row.pj1);
  928. },
  929. // 2字典翻译
  930. pj2Format(row, column) {
  931. return this.selectDictLabel(this.pj2Options, row.pj2);
  932. },
  933. // 3字典翻译
  934. pj3Format(row, column) {
  935. return this.selectDictLabel(this.pj3Options, row.pj3);
  936. },
  937. // 4字典翻译
  938. pj4Format(row, column) {
  939. return this.selectDictLabel(this.pj4Options, row.pj4);
  940. },
  941. // 5字典翻译
  942. pj5Format(row, column) {
  943. return this.selectDictLabel(this.pj5Options, row.pj5);
  944. },
  945. // 6字典翻译
  946. pj6Format(row, column) {
  947. return this.selectDictLabel(this.pj6Options, row.pj6);
  948. },
  949. // 7字典翻译
  950. pj7Format(row, column) {
  951. return this.selectDictLabel(this.pj7Options, row.pj7);
  952. },
  953. // 8字典翻译
  954. pj8Format(row, column) {
  955. return this.selectDictLabel(this.pj8Options, row.pj8);
  956. },
  957. // 9字典翻译
  958. pj9Format(row, column) {
  959. return this.selectDictLabel(this.pj9Options, row.pj9);
  960. },
  961. // 10字典翻译
  962. pj10Format(row, column) {
  963. return this.selectDictLabel(this.pj10Options, row.pj10);
  964. },
  965. // 11字典翻译
  966. pj11Format(row, column) {
  967. return this.selectDictLabel(this.pj11Options, row.pj11);
  968. },
  969. // 12字典翻译
  970. pj12Format(row, column) {
  971. return this.selectDictLabel(this.pj12Options, row.pj12);
  972. },
  973. // 13字典翻译
  974. pj13Format(row, column) {
  975. return this.selectDictLabel(this.pj13Options, row.pj13);
  976. },
  977. // 14字典翻译
  978. pj14Format(row, column) {
  979. return this.selectDictLabel(this.pj14Options, row.pj14);
  980. },
  981. // 15字典翻译
  982. pj15Format(row, column) {
  983. return this.selectDictLabel(this.pj15Options, row.pj15);
  984. },
  985. // 16字典翻译
  986. pj16Format(row, column) {
  987. return this.selectDictLabel(this.pj16Options, row.pj16);
  988. },
  989. // 17字典翻译
  990. pj17Format(row, column) {
  991. return this.selectDictLabel(this.pj17Options, row.pj17);
  992. },
  993. // 检查结论字典翻译
  994. conFormat(row, column) {
  995. return this.selectDictLabel(this.conOptions, row.con);
  996. },
  997. // 表单重置
  998. reset() {
  999. this.form = {
  1000. id: null,
  1001. devId: null,
  1002. medium: null,
  1003. desPressure: null,
  1004. desTemp: null,
  1005. optPressure: null,
  1006. optTemp: null,
  1007. yearReportNo: null,
  1008. pj1: null,
  1009. pj2: null,
  1010. pj3: null,
  1011. pj4: null,
  1012. pj5: null,
  1013. pj6: null,
  1014. pj7: null,
  1015. pj8: null,
  1016. pj9: null,
  1017. pj10: null,
  1018. pj11: null,
  1019. pj12: null,
  1020. pj13: null,
  1021. pj14: null,
  1022. pj15: null,
  1023. pj16: null,
  1024. pj17: null,
  1025. remarks: null,
  1026. checkDate: null,
  1027. nextCheckDate: null,
  1028. problem: null,
  1029. con: null,
  1030. approveStatus: 0,
  1031. approveTime: null,
  1032. deptId: null,
  1033. delFlag: null,
  1034. createrCode: null,
  1035. createdate: null,
  1036. updaterCode: null,
  1037. updatedate: null
  1038. };
  1039. this.resetForm("form");
  1040. },
  1041. /** 搜索按钮操作 */
  1042. handleQuery() {
  1043. this.queryParams.pageNum = 1;
  1044. this.getList();
  1045. },
  1046. /** 重置按钮操作 */
  1047. resetQuery() {
  1048. this.resetForm("queryForm");
  1049. this.handleQuery();
  1050. },
  1051. // 多选框选中数据
  1052. handleSelectionChange(selection) {
  1053. this.ids = selection.map(item => item.id)
  1054. this.single = selection.length !== 1
  1055. this.multiple = !selection.length
  1056. this.dataListSelections = selection
  1057. },
  1058. /** 历史报告按钮操作 */
  1059. handleHistory(row) {
  1060. this.queryHistoryParams.reportId = row.id;
  1061. listHistoryYlgd(this.queryHistoryParams).then(response => {
  1062. this.historyYlgdList = response.rows;
  1063. this.open = true;
  1064. this.title = row.devno + this.$t('空格') + this.$t('历史报告');
  1065. });
  1066. },
  1067. /** 修改按钮操作 */
  1068. handleUpdate(row) {
  1069. // 备份原始数据
  1070. row['oldRow'] = JSON.parse(JSON.stringify(row));
  1071. this.$nextTick(() => {
  1072. row.isEdit = true;
  1073. })
  1074. },
  1075. /** 保存按钮操作 */
  1076. handleSave(row) {
  1077. row.isEdit = false;
  1078. this.loading = true;
  1079. this.form = row;
  1080. updateReportYlgd(this.form).then(response => {
  1081. this.msgSuccess(this.$t('修改成功'));
  1082. this.getList();
  1083. });
  1084. },
  1085. /** 取消按钮操作 */
  1086. handleCancel(row, index) {
  1087. // 还原数据
  1088. for (const i in row.oldRow) {
  1089. row[i] = row.oldRow[i]
  1090. }
  1091. row.isEdit = false
  1092. },
  1093. /** 删除按钮操作 */
  1094. handleDelete(row) {
  1095. const ids = row.id || this.ids;
  1096. this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
  1097. confirmButtonText: this.$t('确定'),
  1098. cancelButtonText: this.$t('取消'),
  1099. type: "warning"
  1100. }).then(function () {
  1101. return delReportYlgd(ids);
  1102. }).then(() => {
  1103. this.getList();
  1104. this.msgSuccess(this.$t('删除成功'));
  1105. })
  1106. },
  1107. /** 第三方文件删除按钮操作 */
  1108. handleDeleteThird(row) {
  1109. const ids = row.id;
  1110. this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
  1111. confirmButtonText: this.$t('确定'),
  1112. cancelButtonText: this.$t('取消'),
  1113. type: "warning"
  1114. }).then(function () {
  1115. return delReportThird(ids);
  1116. }).then(() => {
  1117. this.thirdPartyList();
  1118. this.msgSuccess(this.$t('删除成功'));
  1119. })
  1120. },
  1121. //提交报告
  1122. approveHandle(row) {
  1123. var rows = this.dataListSelections.map(item => {
  1124. return item
  1125. })
  1126. for (let i = 0; i < rows.length; i++) {
  1127. if (rows[i].approveStatus != 0) {
  1128. this.$alert(this.$t('当前设备正在申请中,无法重复申请'), this.$t('提示'), {
  1129. type: 'warning'
  1130. })
  1131. return
  1132. }
  1133. }
  1134. this.approveVisible = true
  1135. this.$nextTick(() => {
  1136. this.$refs.yearApprove.init(rows)
  1137. })
  1138. },
  1139. // 根据压力管道台账数据进行同步
  1140. syncData() {
  1141. syncReportYlgd().then(response => {
  1142. this.$message({
  1143. message: response.msg,
  1144. type: 'success'
  1145. });
  1146. this.getList();
  1147. })
  1148. },
  1149. //结论备注
  1150. renderHeader(h, {column, $index}) {
  1151. return [
  1152. column.label,
  1153. h(
  1154. "el-tooltip",
  1155. {
  1156. props: {
  1157. content: (function () {
  1158. if (column.label == 1) {
  1159. return `安全管理情况`
  1160. } else if (column.label == 2) {
  1161. return `设计图纸文档、维修记录、质量证明等资料`
  1162. } else if (column.label == 3) {
  1163. return `作业人员定期培训情况`
  1164. } else if (column.label == 4) {
  1165. return `管道本体及支架`
  1166. } else if (column.label == 5) {
  1167. return `管道运行情况`
  1168. } else if (column.label == 6) {
  1169. return `安全阀`
  1170. } else if (column.label == 7) {
  1171. return `爆破片装置`
  1172. } else if (column.label == 8) {
  1173. return `阻火器装置`
  1174. } else if (column.label == 9) {
  1175. return `紧急切断阀`
  1176. } else if (column.label == 10) {
  1177. return `压力表`
  1178. } else if (column.label == 11) {
  1179. return `测温仪表`
  1180. } else if (column.label == 12) {
  1181. return `电阻值测量`
  1182. } else if (column.label == 13) {
  1183. return `壁厚测定`
  1184. } else if (column.label == 14) {
  1185. return ``
  1186. } else if (column.label == 15) {
  1187. return ``
  1188. } else if (column.label == 16) {
  1189. return ``
  1190. } else if (column.label == 17) {
  1191. return ``
  1192. } else {
  1193. return ` `
  1194. }
  1195. })(),
  1196. placement: "top"
  1197. }
  1198. },
  1199. [
  1200. h("span", {
  1201. class: {
  1202. "el-icon-question": true,
  1203. "report-headerTips": true
  1204. }
  1205. })
  1206. ]
  1207. )
  1208. ]
  1209. },
  1210. //下载报告
  1211. downloadReport(row) {
  1212. this.downloadForm.id = row.id;
  1213. this.$nextTick(() => {
  1214. this.$refs['downloadForm'].submit()
  1215. })
  1216. },
  1217. // 文件下载处理
  1218. handleDownloadReport(row) {
  1219. let param = {
  1220. id: row.id
  1221. }
  1222. exportPDF(param).then(response => {
  1223. let url = response;
  1224. var name = response;
  1225. var suffix = url.substring(url.lastIndexOf("."), url.length);
  1226. console.log(url)
  1227. const a = document.createElement('a')
  1228. a.setAttribute('download', name)
  1229. a.setAttribute('target', '_blank')
  1230. a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
  1231. a.click()
  1232. });
  1233. },
  1234. //批量下载某年份的历史报告
  1235. exportDataForYear() {
  1236. //将控件时间转为年,如果未选中年份,默认当前年
  1237. if (this.exportCheckYear == null) {
  1238. this.exportCheckYear = Date.now();
  1239. }
  1240. var date = new Date(this.exportCheckYear)
  1241. this.downloadForm2.year = date.getFullYear();
  1242. this.$nextTick(() => {
  1243. this.$refs['downloadForm2'].submit()
  1244. })
  1245. //下载完成后关闭弹窗
  1246. this.dialogVisible = false;
  1247. },
  1248. /** 导入按钮操作 */
  1249. handleImport() {
  1250. this.upload.title = "用户导入";
  1251. this.upload.open = true;
  1252. },
  1253. /** 下载模板操作 */
  1254. importTemplate() {
  1255. this.$refs['downloadFileForm'].submit()
  1256. },
  1257. // 文件上传中处理
  1258. handleFileUploadProgress(event, file, fileList) {
  1259. this.upload.isUploading = true;
  1260. },
  1261. // 文件上传成功处理
  1262. handleFileSuccess(response, file, fileList) {
  1263. this.upload.open = false;
  1264. this.upload.isUploading = false;
  1265. this.$refs.upload.clearFiles();
  1266. this.fullscreenLoading = false;
  1267. if (response.data.length > 0) {
  1268. let failrow = ''
  1269. for (let i = 0; i < response.data.length; i++) {
  1270. failrow += response.data[i] + ','
  1271. }
  1272. this.$alert(this.$t('导入成功条数:') + response.msg + '<br>' + this.$t('失败行数:') + failrow, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  1273. } else {
  1274. this.$alert(this.$t('导入成功条数:') + response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  1275. }
  1276. this.getList();
  1277. },
  1278. // 提交上传文件
  1279. submitFileForm() {
  1280. this.$refs.upload.submit();
  1281. this.fullscreenLoading = true;
  1282. },
  1283. /** 导出按钮操作 */
  1284. handleExport() {
  1285. const queryParams = this.queryParams;
  1286. this.$confirm(this.$t('是否确认导出所有特种设备压力管道年检报告数据项?'), this.$t('警告'), {
  1287. confirmButtonText: this.$t('确定'),
  1288. cancelButtonText: this.$t('取消'),
  1289. type: "warning"
  1290. }).then(function () {
  1291. return exportReportYlgd(queryParams);
  1292. }).then(response => {
  1293. this.download(response.msg);
  1294. })
  1295. },
  1296. //导入第三方数据
  1297. importThirdParty() {
  1298. this.thirdUpload.title = "第三方数据导入";
  1299. this.thirdUpload.open = true;
  1300. },
  1301. thirdSubmitFileForm() {
  1302. this.submitData.plantCode = this.plantCodeThird;
  1303. this.submitData.year = new Date(this.importThirdYear).getFullYear();
  1304. this.$refs.thirdUpload.submit();
  1305. this.fullscreenLoading = true;
  1306. },
  1307. //第三方数据列表
  1308. thirdPartyList() {
  1309. listTReportThird(this.thirdListQuery).then(response => {
  1310. this.reportThirdList = response.data;
  1311. });
  1312. this.thirdList.title = "第三方数据列表";
  1313. this.thirdList.open = true;
  1314. },
  1315. // 第三方文件上传中处理
  1316. handleFileUploadProgressThird(event, file, fileList) {
  1317. this.thirdUpload.isUploading = true;
  1318. },
  1319. // 第三方文件上传成功处理
  1320. handleFileSuccessThird(response, file, fileList) {
  1321. this.thirdUpload.open = false;
  1322. this.thirdUpload.isUploading = false;
  1323. this.$refs.thirdUpload.clearFiles();
  1324. this.fullscreenLoading = false;
  1325. if (response.data.length > 0) {
  1326. this.$alert(this.$t('导入成功'));
  1327. } else {
  1328. this.$alert(this.$t('导入成功'));
  1329. }
  1330. this.getList();
  1331. },
  1332. // 文件下载处理
  1333. handleDownload(row) {
  1334. var name = row.fileName;
  1335. var url = row.filePath;
  1336. var suffix = url.substring(url.lastIndexOf("."), url.length);
  1337. const a = document.createElement('a')
  1338. a.setAttribute('download', name)
  1339. a.setAttribute('target', '_blank')
  1340. a.setAttribute('href', process.env.VUE_APP_BASE_API + url)
  1341. a.click()
  1342. },
  1343. },
  1344. };
  1345. </script>