index.vue 53 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443
  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="unitCode">
  14. <el-input
  15. v-model="queryParams.unitCode"
  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="tagno">
  23. <el-input
  24. v-model="queryParams.tagno"
  25. :placeholder="$t('请输入') + $t('单位内编号')"
  26. clearable
  27. size="small"
  28. @keyup.enter.native="handleQuery"
  29. />
  30. </el-form-item>
  31. <el-form-item :label="$t('测厚部位CML')" prop="position">
  32. <el-input
  33. v-model="queryParams.position"
  34. :placeholder="$t('请输入') + $t('测厚部位CML')"
  35. clearable
  36. size="small"
  37. @keyup.enter.native="handleQuery"
  38. />
  39. </el-form-item>
  40. <el-form-item :label="$t('记录人')" prop="recorder">
  41. <el-input
  42. v-model="queryParams.recorder"
  43. :placeholder="$t('请输入') + $t('记录人')"
  44. clearable
  45. size="small"
  46. @keyup.enter.native="handleQuery"
  47. />
  48. </el-form-item>
  49. <el-form-item :label="$t('记录时间')" prop="recorderDate">
  50. <el-date-picker clearable size="small" style="width: 200px"
  51. v-model="queryParams.recorderDate"
  52. type="date"
  53. value-format="yyyy-MM-dd"
  54. :placeholder="$t('请选择') + $t('记录时间')">
  55. </el-date-picker>
  56. </el-form-item>
  57. <el-form-item :label="$t('设备/管线名称')" prop="equipmentName">
  58. <el-input
  59. v-model="queryParams.equipmentName"
  60. :placeholder="$t('请输入') + $t('设备/管线名称')"
  61. clearable
  62. size="small"
  63. @keyup.enter.native="handleQuery"
  64. />
  65. </el-form-item>
  66. <el-form-item :label="$t('材质')" prop="material">
  67. <el-input
  68. v-model="queryParams.material"
  69. :placeholder="$t('请输入') + $t('材质')"
  70. clearable
  71. size="small"
  72. @keyup.enter.native="handleQuery"
  73. />
  74. </el-form-item>
  75. <el-form-item :label="$t('腐蚀裕度(mm)')" prop="corAllowance">
  76. <el-input
  77. v-model="queryParams.corAllowance"
  78. :placeholder="$t('请输入') + $t('腐蚀裕度(mm)')"
  79. clearable
  80. size="small"
  81. @keyup.enter.native="handleQuery"
  82. />
  83. </el-form-item>
  84. <el-form-item :label="$t('原始壁厚(mm)')" prop="originalThickness">
  85. <el-input
  86. v-model="queryParams.originalThickness"
  87. :placeholder="$t('请输入') + $t('原始壁厚(mm)')"
  88. clearable
  89. size="small"
  90. @keyup.enter.native="handleQuery"
  91. />
  92. </el-form-item>
  93. <el-form-item :label="$t('介质')" prop="medium">
  94. <el-input
  95. v-model="queryParams.medium"
  96. :placeholder="$t('请输入') + $t('介质')"
  97. clearable
  98. size="small"
  99. @keyup.enter.native="handleQuery"
  100. />
  101. </el-form-item>
  102. <el-form-item :label="$t('压力(MPa)')" prop="pressure">
  103. <el-input
  104. v-model="queryParams.pressure"
  105. :placeholder="$t('请输入') + $t('压力(MPa)')"
  106. clearable
  107. size="small"
  108. @keyup.enter.native="handleQuery"
  109. />
  110. </el-form-item>
  111. <el-form-item :label="$t('规格')" prop="specification">
  112. <el-input
  113. v-model="queryParams.specification"
  114. :placeholder="$t('请输入') + $t('规格')"
  115. clearable
  116. size="small"
  117. @keyup.enter.native="handleQuery"
  118. />
  119. </el-form-item>
  120. <el-form-item :label="$t('流速(m/s)')" prop="flowRate">
  121. <el-input
  122. v-model="queryParams.flowRate"
  123. :placeholder="$t('请输入') + $t('流速(m/s)')"
  124. clearable
  125. size="small"
  126. @keyup.enter.native="handleQuery"
  127. />
  128. </el-form-item>
  129. <el-form-item :label="$t('温度(℃)')" prop="temperature">
  130. <el-input
  131. v-model="queryParams.temperature"
  132. :placeholder="$t('请输入') + $t('温度(℃)')"
  133. clearable
  134. size="small"
  135. @keyup.enter.native="handleQuery"
  136. />
  137. </el-form-item>
  138. <el-form-item :label="$t('公称壁厚(mm)')" prop="nominalTickness">
  139. <el-input
  140. v-model="queryParams.nominalTickness"
  141. :placeholder="$t('请输入') + $t('公称壁厚(mm)')"
  142. clearable
  143. size="small"
  144. @keyup.enter.native="handleQuery"
  145. />
  146. </el-form-item>
  147. <el-form-item>
  148. <el-button type="cyan" icon="el-icon-search" size="mini" @click="handleQuery">{{ $t('搜索') }}</el-button>
  149. <el-button icon="el-icon-refresh" size="mini" @click="resetQuery">{{ $t('重置') }}</el-button>
  150. </el-form-item>
  151. </el-form>
  152. <el-row :gutter="10" class="mb8">
  153. <el-col :span="1.5">
  154. <el-button
  155. type="primary"
  156. icon="el-icon-plus"
  157. size="mini"
  158. @click="handleAdd"
  159. v-hasPermi="['sems:thickness:add']"
  160. >{{ $t('新增') }}</el-button>
  161. </el-col>
  162. <el-col :span="1.5">
  163. <el-button
  164. type="success"
  165. icon="el-icon-edit"
  166. size="mini"
  167. :disabled="single"
  168. @click="handleUpdate"
  169. v-hasPermi="['sems:thickness:edit']"
  170. >{{ $t('修改') }}</el-button>
  171. </el-col>
  172. <el-col :span="1.5">
  173. <el-button
  174. type="danger"
  175. icon="el-icon-delete"
  176. size="mini"
  177. :disabled="multiple"
  178. @click="handleDelete"
  179. v-hasPermi="['sems:thickness:remove']"
  180. >{{ $t('删除') }}</el-button>
  181. </el-col>
  182. <el-col :span="1.5">
  183. <el-button
  184. type="warning"
  185. icon="el-icon-download"
  186. size="mini"
  187. @click="handleExport"
  188. v-hasPermi="['sems:thickness:export']"
  189. >{{ $t('导出') }}</el-button>
  190. </el-col>
  191. <el-col :span="1.5">
  192. <el-button
  193. type="info"
  194. icon="el-icon-upload2"
  195. size="mini"
  196. @click="handleImport"
  197. v-hasPermi="['sems:thickness:edit']"
  198. >{{$t('导入更新数据')}}
  199. </el-button>
  200. </el-col>
  201. <right-toolbar :showSearch.sync="showSearch" @queryTable="getList"></right-toolbar>
  202. </el-row>
  203. <el-table v-loading="loading" :data="thicknessList" @selection-change="handleSelectionChange" :cell-style="tableCellStyle" :height="clientHeight" border>
  204. <el-table-column type="selection" width="55" align="center" />
  205. <el-table-column :label="$t('装置名称')" align="center" prop="plantCode" :show-overflow-tooltip="true"/>
  206. <el-table-column :label="$t('单元名称')" align="center" prop="unitCode" :show-overflow-tooltip="true"/>
  207. <el-table-column :label="$t('单位内编号')" align="center" prop="tagno" :show-overflow-tooltip="true"/>
  208. <el-table-column :label="$t('状态')" align="center" prop="status" :formatter="statusFormat" />
  209. <el-table-column :label="$t('测厚部位CML')" align="center" prop="position" :show-overflow-tooltip="true"/>
  210. <el-table-column :label="$t('检测编号')" align="center" prop="measureNo" :show-overflow-tooltip="true"/>
  211. <!-- <el-table-column label="记录人" align="center" prop="recorder" :show-overflow-tooltip="true"/>-->
  212. <!-- <el-table-column label="记录时间" align="center" prop="recorderDate" width="100">-->
  213. <!-- <template slot-scope="scope">-->
  214. <!-- <span>{{ parseTime(scope.row.recorderDate, '{y}-{m}-{d}') }}</span>-->
  215. <!-- </template>-->
  216. <!-- </el-table-column>-->
  217. <el-table-column :label="$t('设备/管线名称')" align="center" prop="equipmentName" :show-overflow-tooltip="true"/>
  218. <el-table-column :label="$t('材质')" align="center" prop="material" :show-overflow-tooltip="true"/>
  219. <!-- <el-table-column label="腐蚀裕度" align="center" prop="corAllowance" :show-overflow-tooltip="true"/>-->
  220. <!-- <el-table-column label="原始壁厚" align="center" prop="originalThickness" :show-overflow-tooltip="true"/>-->
  221. <!-- <el-table-column label="介质" align="center" prop="medium" :show-overflow-tooltip="true"/>-->
  222. <!-- <el-table-column label="压力" align="center" prop="pressure" :show-overflow-tooltip="true"/>-->
  223. <!-- <el-table-column label="规格" align="center" prop="specification" :show-overflow-tooltip="true"/>-->
  224. <!-- <el-table-column label="流速" align="center" prop="flowRate" :show-overflow-tooltip="true"/>-->
  225. <!-- <el-table-column label="温度" align="center" prop="temperature" :show-overflow-tooltip="true"/>-->
  226. <!-- <el-table-column label="腐蚀类型" align="center" prop="corrosionType" :show-overflow-tooltip="true"/>-->
  227. <!-- <el-table-column label="腐蚀照片" align="center" prop="photo" :show-overflow-tooltip="true"/>-->
  228. <!-- <el-table-column label="原因分析" align="center" prop="analysis" :show-overflow-tooltip="true"/>-->
  229. <el-table-column :label="$t('公称壁厚(mm)')" align="center" prop="nominalTickness" :show-overflow-tooltip="true"/>
  230. <el-table-column :label="$t('最小允许壁厚(mm)')" align="center" prop="thicknessMin" :show-overflow-tooltip="true"/>
  231. <el-table-column :label="$t('短期腐蚀速率(mm/year)')" align="center" prop="stCorrosion" :show-overflow-tooltip="true"/>
  232. <el-table-column :label="$t('长期腐蚀速率(mm/year)')" align="center" prop="ltCorrosion" :show-overflow-tooltip="true"/>
  233. <el-table-column
  234. prop="firstMeasureDate"
  235. header-align="center"
  236. align="center"
  237. :label="$t('首次测厚日期')">
  238. </el-table-column>
  239. <el-table-column
  240. prop="newMeasureDate"
  241. header-align="center"
  242. align="center"
  243. :label="$t('最近测厚日期')">
  244. </el-table-column>
  245. <!-- <el-table-column
  246. prop="measureCycle"
  247. header-align="center"
  248. align="center"
  249. :label="$t('测厚周期(year)')">
  250. </el-table-column>
  251. <el-table-column
  252. prop="nextMeasureDate"
  253. header-align="center"
  254. align="center"
  255. :label="$t('下次测厚日期')">
  256. </el-table-column>-->
  257. <el-table-column :label="$t('预估剩余寿命(year)')" align="center" prop="estRemain" :show-overflow-tooltip="true">
  258. <template slot-scope="scope">
  259. <span v-if="scope.row.estRemain"> {{ scope.row.estRemain }}</span>
  260. <span v-else-if="!scope.row.thicknessMin">缺少最小允许壁厚</span>
  261. </template>
  262. </el-table-column>
  263. <el-table-column
  264. prop="nextWarnDate"
  265. header-align="center"
  266. align="center"
  267. :label="$t('下次测厚日期')">
  268. </el-table-column>
  269. <el-table-column :label="$t('检测方法')" align="center" prop="inspectionMethod" :formatter="inspectionMethodFormat" />
  270. <el-table-column :label="$t('操作')" align="center" fixed="right" width="120" class-name="small-padding fixed-width">
  271. <template slot-scope="scope">
  272. <el-button type="text" size="small" @click="handleView(scope.row)">{{ $t('查看') }}</el-button>
  273. <el-button type="text" size="small" @click="recordHandle(scope.row)">{{ $t('测厚记录') }}</el-button>
  274. <el-button type="text" size="small" @click="downloadHandle(scope.row)">{{ $t('下载报告') }}</el-button>
  275. </template>
  276. </el-table-column>
  277. </el-table>
  278. <form ref="downloadForm" :action="downloadAction" target="FORMSUBMIT">
  279. <input name="id" v-model="downloadForm.id" hidden />
  280. </form>
  281. <pagination
  282. v-show="total>0"
  283. :total="total"
  284. :page.sync="queryParams.pageNum"
  285. :limit.sync="queryParams.pageSize"
  286. @pagination="getList"
  287. />
  288. <!-- 添加或修改定点测厚对话框 -->
  289. <el-dialog v-dialogDrag :title="title" :visible.sync="open" width="1200" append-to-body>
  290. <el-form ref="form" :model="form" :rules="rules" label-width="120px">
  291. <el-row>
  292. <el-col :span="8">
  293. <el-form-item :label="$t('装置名称')" prop="plantCode">
  294. <el-select v-model="form.plantCode" :placeholder="$t('请选择') + $t('装置')" filterable clearable size="small">
  295. <el-option
  296. v-for="dict in plantOptions"
  297. :key="dict.name"
  298. :label="dict.name"
  299. :value="dict.name"
  300. />
  301. </el-select>
  302. </el-form-item>
  303. </el-col>
  304. <el-col :span="8">
  305. <el-form-item :label="$t('单元名称')" prop="unitCode">
  306. <el-input v-model="form.unitCode" :placeholder="$t('请输入') + $t('单元名称')" />
  307. </el-form-item>
  308. </el-col>
  309. <el-col :span="8">
  310. <el-form-item :label="$t('单位内编号')" prop="tagno">
  311. <el-input v-model="form.tagno" :placeholder="$t('请输入') + $t('单位内编号')" />
  312. </el-form-item>
  313. </el-col>
  314. </el-row>
  315. <el-row>
  316. <el-col :span="8">
  317. <el-form-item :label="$t('测厚部位CML')" prop="position">
  318. <el-input v-model="form.position" :placeholder="$t('请输入') + $t('测厚部位CML')" />
  319. </el-form-item>
  320. </el-col>
  321. <el-col :span="8">
  322. <el-form-item :label="$t('记录人')" prop="recorder">
  323. <el-input v-model="form.recorder" :placeholder="$t('请输入') + $t('记录人')" />
  324. </el-form-item>
  325. </el-col>
  326. <el-col :span="8">
  327. <el-form-item :label="$t('记录时间')" prop="recorderDate">
  328. <el-date-picker clearable size="small" style="width: 119.85px"
  329. v-model="form.recorderDate"
  330. type="date"
  331. value-format="yyyy-MM-dd"
  332. :placeholder="$t('请选择') + $t('记录时间')">
  333. </el-date-picker>
  334. </el-form-item>
  335. </el-col>
  336. </el-row>
  337. <el-row>
  338. <el-col :span="8">
  339. <el-form-item :label="$t('设备/管线名称')" prop="equipmentName">
  340. <el-input v-model="form.equipmentName" :placeholder="$t('请输入') + $t('设备/管线名称')" />
  341. </el-form-item>
  342. </el-col>
  343. <el-col :span="8">
  344. <el-form-item :label="$t('材质')" prop="material">
  345. <el-input v-model="form.material" :placeholder="$t('请输入') + $t('材质')" />
  346. </el-form-item>
  347. </el-col>
  348. <el-col :span="8">
  349. <el-form-item :label="$t('腐蚀裕度(mm)')" prop="corAllowance">
  350. <el-input v-model="form.corAllowance" :placeholder="$t('请输入') + $t('腐蚀裕度(mm)')" />
  351. </el-form-item>
  352. </el-col>
  353. </el-row>
  354. <el-row>
  355. <el-col :span="8">
  356. <el-form-item :label="$t('原始壁厚(mm)')" prop="originalThickness">
  357. <el-input v-model="form.originalThickness" :placeholder="$t('请输入') + $t('原始壁厚(mm)')" />
  358. </el-form-item>
  359. </el-col>
  360. <el-col :span="8">
  361. <el-form-item :label="$t('介质')" prop="medium">
  362. <el-input v-model="form.medium" :placeholder="$t('请输入') + $t('介质')" />
  363. </el-form-item>
  364. </el-col>
  365. <el-col :span="8">
  366. <el-form-item :label="$t('压力(MPa)')" prop="pressure">
  367. <el-input v-model="form.pressure" :placeholder="$t('请输入') + $t('压力(MPa)')" />
  368. </el-form-item>
  369. </el-col>
  370. </el-row>
  371. <el-row>
  372. <el-col :span="8">
  373. <el-form-item :label="$t('规格')" prop="specification">
  374. <el-input v-model="form.specification" :placeholder="$t('请输入') + $t('规格')" />
  375. </el-form-item>
  376. </el-col>
  377. <el-col :span="8">
  378. <el-form-item :label="$t('流速(m/s)')" prop="flowRate">
  379. <el-input v-model="form.flowRate" :placeholder="$t('请输入') + $t('流速(m/s)')" />
  380. </el-form-item>
  381. </el-col>
  382. <el-col :span="8">
  383. <el-form-item :label="$t('温度(℃)')" prop="temperature">
  384. <el-input v-model="form.temperature" :placeholder="$t('请输入') + $t('温度(℃)')" />
  385. </el-form-item>
  386. </el-col>
  387. </el-row>
  388. <el-form-item :label="$t('状态')">
  389. <el-radio-group v-model="form.status">
  390. <el-radio
  391. v-for="dict in statusOptions"
  392. :key="dict.dictValue"
  393. :label="parseInt(dict.dictValue)"
  394. >{{dict.dictLabel}}</el-radio>
  395. </el-radio-group>
  396. </el-form-item>
  397. <el-form-item :label="$t('腐蚀位置')" prop="locationUrl">
  398. <el-upload
  399. :action="locationpic.url"
  400. :headers="locationpic.headers"
  401. :file-list="locationList"
  402. :limit="3"
  403. :on-success="handleAvatarSuccess"
  404. :on-exceed="handleExceed"
  405. :before-upload="beforeAvatarUpload"
  406. list-type="picture-card"
  407. :on-preview="handlePictureCardPreview"
  408. :on-remove="handleRemove">
  409. <i class="el-icon-plus"></i>
  410. </el-upload>
  411. <el-dialog v-dialogDrag :visible.sync="dialogVisible" append-to-body>
  412. <img width="100%" :src="dialogImageUrl" alt="">
  413. </el-dialog>
  414. </el-form-item>
  415. <el-form-item :label="$t('检测方法')">
  416. <el-checkbox-group v-model="form.inspectionMethod">
  417. <el-checkbox
  418. v-for="dict in inspectionMethodOptions"
  419. :key="dict.dictValue"
  420. :label="dict.dictValue">
  421. {{dict.dictLabel}}
  422. </el-checkbox>
  423. </el-checkbox-group>
  424. <el-input :placeholder="$t('请输入') + $t('其他')+ $t('空格')+ $t('检测方法')" class="otherMethod" v-if="form.inspectionMethod == 5" v-model="form.otherContent"></el-input>
  425. </el-form-item>
  426. <el-form-item :label="$t('腐蚀照片')" prop="photo">
  427. <el-upload
  428. :action="photo.url"
  429. :headers="photo.headers"
  430. :file-list="photoList"
  431. :limit="3"
  432. :on-success="handleAvatarSuccess2"
  433. :on-exceed="handleExceed"
  434. :before-upload="beforeAvatarUpload"
  435. list-type="picture-card"
  436. :on-preview="handlePictureCardPreview"
  437. :on-remove="handleRemove2">
  438. <i class="el-icon-plus"></i>
  439. </el-upload>
  440. <el-dialog v-dialogDrag :visible.sync="dialogVisible" append-to-body>
  441. <img width="100%" :src="dialogImageUrl" alt="">
  442. </el-dialog>
  443. </el-form-item>
  444. <el-form-item :label="$t('原因分析')" prop="analysis">
  445. <el-input v-model="form.analysis" :placeholder="$t('请输入') + $t('原因分析')" />
  446. </el-form-item>
  447. <el-row>
  448. <el-col :span="8">
  449. <el-form-item :label="$t('公称壁厚(mm)')" prop="nominalTickness">
  450. <el-input v-model="form.nominalTickness" :placeholder="$t('请输入') + $t('名义壁厚(mm)')" />
  451. </el-form-item>
  452. <el-form-item :label="$t('原因分析附件')" prop="analysisUrl">
  453. <el-upload
  454. ref="analysis"
  455. :limit="1"
  456. :headers="analysis.headers"
  457. :action="analysis.url"
  458. :disabled="analysis.isUploading"
  459. :on-progress="handleFileDocProgress"
  460. :on-success="handleFileDocSuccess"
  461. :auto-upload="true"
  462. drag
  463. >
  464. <i class="el-icon-upload"></i>
  465. <div class="el-upload__text">
  466. {{ $t('将文件拖到此处,或') }}
  467. <em>{{ $t('点击上传') }}</em>
  468. </div>
  469. </el-upload>
  470. </el-form-item>
  471. </el-col>
  472. <el-col :span="16">
  473. <el-form-item :label="$t('最小允许壁厚(mm)')" label-width="150px" prop="thicknessMin">
  474. <el-input v-model="form.thicknessMin" :placeholder="$t('请输入') + $t('最小允许壁厚(mm)')" />
  475. </el-form-item>
  476. </el-col>
  477. </el-row>
  478. <el-form-item :label="$t('检测编号')" prop="measureNo">
  479. <el-input v-model="form.measureNo" :placeholder="$t('请输入') + $t('检测编号')" />
  480. </el-form-item>
  481. <el-row>
  482. <el-col :span="8">
  483. <el-form-item :label="$t('短期腐蚀速率(mm/year)')" label-width="180px" prop="stCorrosion">
  484. <el-input v-model="form.stCorrosion" :placeholder="$t('请输入') + $t('短期腐蚀速率(mm/year)')" />
  485. </el-form-item>
  486. </el-col>
  487. <el-col :span="8">
  488. <el-form-item :label="$t('长期腐蚀速率(mm/year)')" label-width="180px" prop="ltCorrosion">
  489. <el-input v-model="form.ltCorrosion" :placeholder="$t('请输入') + $t('长期腐蚀速率(mm/year)')" />
  490. </el-form-item>
  491. </el-col>
  492. <el-col :span="8">
  493. <el-form-item :label="$t('预估剩余寿命(year)')" label-width="180px" prop="estRemain">
  494. <el-input v-model="form.estRemain" :placeholder="$t('请输入') + $t('预估剩余寿命(year)')" />
  495. </el-form-item>
  496. </el-col>
  497. </el-row>
  498. <el-row>
  499. <el-form-item :label="$t('治理方法及依据')" prop="methodCause">
  500. <el-input v-model="form.methodCause" :placeholder="$t('请输入') + $t('治理方法及依据')" />
  501. </el-form-item>
  502. </el-row>
  503. <el-form-item :label="$t('效果跟踪')" prop="effectTracing">
  504. <el-input v-model="form.effectTracing" :placeholder="$t('请输入') + $t('效果跟踪')" />
  505. </el-form-item>
  506. <el-row>
  507. <el-col :span="8">
  508. <el-form-item :label="$t('提出人')" prop="raiser">
  509. <el-input v-model="form.raiser" :placeholder="$t('请输入') + $t('提出人')" />
  510. </el-form-item>
  511. </el-col>
  512. <el-col :span="16">
  513. <el-form-item :label="$t('提出时间')" prop="raiserDate">
  514. <el-date-picker clearable size="small" style="width: 200px"
  515. v-model="form.raiserDate"
  516. type="date"
  517. value-format="yyyy-MM-dd"
  518. :placeholder="$t('请选择') + $t('提出时间')">
  519. </el-date-picker>
  520. </el-form-item>
  521. </el-col>
  522. </el-row>
  523. <el-form-item :label="$t('下次测厚日期')" prop="raiserDate">
  524. <el-date-picker clearable size="small" style="width: 200px"
  525. v-model="form.nextWarnDate"
  526. type="date"
  527. value-format="yyyy-MM-dd"
  528. :placeholder="$t('请选择') + $t('下次测厚日期')">
  529. </el-date-picker>
  530. </el-form-item>
  531. <el-form-item :label="$t('备注')" prop="remarks">
  532. <el-input v-model="form.remarks" type="textarea" :placeholder="$t('请输入') + $t('内容')" />
  533. </el-form-item>
  534. </el-form>
  535. <div slot="footer" class="dialog-footer">
  536. <el-button type="primary" @click="submitForm">{{ $t('确 定') }}</el-button>
  537. <el-button @click="cancel">{{ $t('取 消') }}</el-button>
  538. </div>
  539. </el-dialog>
  540. <el-dialog
  541. :title="$t('查看')"
  542. :close-on-click-modal="false"
  543. width="1200px"
  544. :visible.sync="visible">
  545. <el-descriptions class="margin-top" :column="3" size="medium" border>
  546. <el-descriptions-item>
  547. <template slot="label">
  548. {{ $t('装置名称') }}
  549. </template>
  550. {{ dataForm.plantCode }}
  551. </el-descriptions-item>
  552. <el-descriptions-item>
  553. <template slot="label">
  554. {{ $t('单元名称') }}
  555. </template>
  556. {{ dataForm.unitCode }}
  557. </el-descriptions-item>
  558. <el-descriptions-item>
  559. <template slot="label">
  560. {{ $t('单位内编号') }}
  561. </template>
  562. {{ dataForm.tagno }}
  563. </el-descriptions-item>
  564. <el-descriptions-item>
  565. <template slot="label">
  566. {{ $t('测厚部位CML') }}
  567. </template>
  568. {{ dataForm.position }}
  569. </el-descriptions-item>
  570. <el-descriptions-item>
  571. <template slot="label">
  572. {{ $t('记录人') }}
  573. </template>
  574. {{ dataForm.recorder }}
  575. </el-descriptions-item>
  576. <el-descriptions-item>
  577. <template slot="label">
  578. {{ $t('记录时间') }}
  579. </template>
  580. {{ dataForm.recorderDate }}
  581. </el-descriptions-item>
  582. <el-descriptions-item>
  583. <template slot="label">
  584. {{ $t('设备/管线名称') }}
  585. </template>
  586. {{ dataForm.equipmentName }}
  587. </el-descriptions-item>
  588. <el-descriptions-item>
  589. <template slot="label">
  590. {{ $t('材质') }}
  591. </template>
  592. {{ dataForm.material }}
  593. </el-descriptions-item>
  594. <el-descriptions-item>
  595. <template slot="label">
  596. {{ $t('腐蚀裕度(mm)') }}
  597. </template>
  598. {{ dataForm.corAllowance }}
  599. </el-descriptions-item>
  600. <el-descriptions-item>
  601. <template slot="label">
  602. {{ $t('原始壁厚(mm)') }}
  603. </template>
  604. {{ dataForm.originalThickness }}
  605. </el-descriptions-item>
  606. <el-descriptions-item>
  607. <template slot="label">
  608. {{ $t('介质') }}
  609. </template>
  610. {{ dataForm.medium }}
  611. </el-descriptions-item>
  612. <el-descriptions-item>
  613. <template slot="label">
  614. {{ $t('压力(MPa)') }}
  615. </template>
  616. {{ dataForm.pressure }}
  617. </el-descriptions-item>
  618. <el-descriptions-item>
  619. <template slot="label">
  620. {{ $t('规格') }}
  621. </template>
  622. {{ dataForm.specification }}
  623. </el-descriptions-item>
  624. <el-descriptions-item>
  625. <template slot="label">
  626. {{ $t('流速(m/s)') }}
  627. </template>
  628. {{ dataForm.flowRate }}
  629. </el-descriptions-item>
  630. <el-descriptions-item>
  631. <template slot="label">
  632. {{ $t('温度(℃)') }}
  633. </template>
  634. {{ dataForm.temperature }}
  635. </el-descriptions-item>
  636. <el-descriptions-item span="3">
  637. <template slot="label">
  638. {{ $t('腐蚀位置') }}
  639. </template>
  640. <el-upload
  641. :action="locationpic.url"
  642. :headers="locationpic.headers"
  643. :file-list="locationList"
  644. :limit="3"
  645. :on-success="handleAvatarSuccess"
  646. :on-exceed="handleExceed"
  647. :before-upload="beforeAvatarUpload"
  648. list-type="picture-card"
  649. :on-preview="handlePictureCardPreview"
  650. :on-remove="handleRemove">
  651. <i class="el-icon-plus"></i>
  652. </el-upload>
  653. </el-descriptions-item>
  654. <el-descriptions-item span="3">
  655. <template slot="label">
  656. {{ $t('检测方法') }}
  657. </template>
  658. <el-checkbox-group v-model="dataForm.inspectionMethod">
  659. <el-checkbox
  660. v-for="dict in inspectionMethodOptions"
  661. :key="dict.dictValue"
  662. :label="dict.dictValue">
  663. {{dict.dictLabel}}
  664. </el-checkbox>
  665. </el-checkbox-group>
  666. {{ dataForm.otherContent }}
  667. </el-descriptions-item>
  668. <el-descriptions-item span="3">
  669. <template slot="label">
  670. {{ $t('腐蚀照片') }}
  671. </template>
  672. <el-upload
  673. :action="photo.url"
  674. :headers="photo.headers"
  675. :file-list="photoList"
  676. :limit="3"
  677. :on-success="handleAvatarSuccess2"
  678. :on-exceed="handleExceed"
  679. :before-upload="beforeAvatarUpload"
  680. list-type="picture-card"
  681. :on-preview="handlePictureCardPreview"
  682. :on-remove="handleRemove2">
  683. <i class="el-icon-plus"></i>
  684. </el-upload>
  685. </el-descriptions-item>
  686. <el-descriptions-item span="3">
  687. <template slot="label">
  688. {{ $t('原因分析') }}
  689. </template>
  690. {{ dataForm.analysis }}
  691. </el-descriptions-item>
  692. <el-descriptions-item span="1">
  693. <template slot="label">
  694. {{ $t('公称壁厚(mm)') }}
  695. </template>
  696. {{ dataForm.nominalTickness }}
  697. </el-descriptions-item>
  698. <el-descriptions-item span="2">
  699. <template slot="label">
  700. {{ $t('最小允许壁厚(mm)') }}
  701. </template>
  702. {{ dataForm.thicknessMin }}
  703. </el-descriptions-item>
  704. <el-descriptions-item span="1">
  705. <template slot="label">
  706. {{ $t('短期腐蚀速率(mm/year)') }}
  707. </template>
  708. {{ dataForm.stCorrosion }}
  709. </el-descriptions-item>
  710. <el-descriptions-item span="1">
  711. <template slot="label">
  712. {{ $t('长期腐蚀速率(mm/year)') }}
  713. </template>
  714. {{ dataForm.ltCorrosion }}
  715. </el-descriptions-item>
  716. <el-descriptions-item span="1">
  717. <template slot="label">
  718. {{ $t('预估剩余寿命(year)') }}
  719. </template>
  720. {{ dataForm.estRemain }}
  721. </el-descriptions-item>
  722. <el-descriptions-item span="3">
  723. <template slot="label">
  724. {{ $t('治理方法及依据') }}
  725. </template>
  726. {{ dataForm.methodCause }}
  727. </el-descriptions-item>
  728. <el-descriptions-item span="3">
  729. <template slot="label">
  730. {{ $t('效果跟踪') }}
  731. </template>
  732. {{ dataForm.effectTracing }}
  733. </el-descriptions-item>
  734. <el-descriptions-item span="1">
  735. <template slot="label">
  736. {{ $t('提出人') }}
  737. </template>
  738. {{ dataForm.raiser }}
  739. </el-descriptions-item>
  740. <el-descriptions-item span="2">
  741. <template slot="label">
  742. {{ $t('提出时间') }}
  743. </template>
  744. {{ dataForm.raiserDate }}
  745. </el-descriptions-item>
  746. <el-descriptions-item span="3">
  747. <template slot="label">
  748. {{ $t('趋势图') }}
  749. </template>
  750. <img :src="dataForm.recordUrl" width="900px" />
  751. </el-descriptions-item>
  752. </el-descriptions>
  753. <template slot="label">
  754. {{ $t('测厚数据') }}
  755. </template>
  756. <template>
  757. <el-table
  758. :data="dataList"
  759. border
  760. style="width: 100%;">
  761. <el-table-column
  762. prop="measureValue"
  763. header-align="center"
  764. align="center"
  765. :label="$t('实测记录')">
  766. <template slot-scope="scope">
  767. <el-input v-if="scope.row.isEdit" v-model="scope.row.measureValue"></el-input>
  768. <span v-else>{{scope.row.measureValue}}</span>
  769. </template>
  770. </el-table-column>
  771. <el-table-column
  772. prop="measureDate"
  773. header-align="center"
  774. align="center"
  775. :label="$t('日期')">
  776. <template slot-scope="scope">
  777. <el-date-picker
  778. v-if="scope.row.isEdit"
  779. v-model="scope.row.measureDate"
  780. type="date"
  781. value-format="yyyy-MM-dd"
  782. :placeholder="$t('日期')">
  783. </el-date-picker>
  784. <span v-else>{{scope.row.measureDate}}</span>
  785. </template>
  786. </el-table-column>
  787. </el-table>
  788. </template>
  789. <span slot="footer" class="dialog-footer">
  790. <el-button @click="visible = false">{{ $t('取消') }}</el-button>
  791. </span>
  792. </el-dialog>
  793. <!-- 用户导入对话框 -->
  794. <el-dialog :title="upload.title" :visible.sync="upload.open" width="400px" append-to-body>
  795. <el-upload
  796. ref="upload"
  797. :limit="1"
  798. accept=".xlsx, .xls"
  799. :headers="upload.headers"
  800. :action="upload.url + '?updateSupport=' + upload.updateSupport"
  801. :disabled="upload.isUploading"
  802. :on-progress="handleFileUploadProgress"
  803. :on-success="handleFileSuccess"
  804. :auto-upload="false"
  805. drag
  806. >
  807. <i class="el-icon-upload"></i>
  808. <div class="el-upload__text">
  809. 将文件拖到此处,或
  810. <em>点击上传</em>
  811. </div>
  812. <div class="el-upload__tip" slot="tip">
  813. <el-link type="info" style="font-size:12px" @click="importTemplate">下载模板</el-link>
  814. </div>
  815. <div class="el-upload__tip" style="color:red" slot="tip">提示:仅允许导入“xls”或“xlsx”格式文件!</div>
  816. </el-upload>
  817. <div slot="footer" class="dialog-footer">
  818. <el-button type="primary" @click="submitFileForm"
  819. v-loading.fullscreen.lock="fullscreenLoading">确 定</el-button>
  820. <el-button @click="upload.open = false">取 消</el-button>
  821. </div>
  822. <form ref="downloadFileForm" :action="upload.downloadAction" target="FORMSUBMIT">
  823. <input name="type" :value="upload.type" hidden/>
  824. </form>
  825. </el-dialog>
  826. <record v-if="recordVisible" ref="record" @refreshDataList="getList" :showFlag="showFlag" @closeChildDialog="closeChildDialog"></record>
  827. </div>
  828. </template>
  829. <script>
  830. import { listThickness, getThickness, delThickness, addThickness, updateThickness, exportThickness, importTemplate} from "@/api/sems/thickness";
  831. import { treeselect } from "@/api/system/dept";
  832. import { getToken } from "@/utils/auth";
  833. import Treeselect from "@riophae/vue-treeselect";
  834. import "@riophae/vue-treeselect/dist/vue-treeselect.css";
  835. import Editor from '@/components/Editor';
  836. import request from "@/utils/request";
  837. import record from './record'
  838. import {listMeasurerecord} from "@/api/sems/measure-record";
  839. import {listPlant, mylistPlant} from "@/api/system/plant";
  840. export default {
  841. name: "Thickness",
  842. components: { Treeselect ,record },
  843. // components: { Editor },
  844. data() {
  845. return {
  846. fullscreenLoading: false,
  847. recordVisible: false,
  848. showFlag: false,
  849. // 遮罩层
  850. loading: true,
  851. // 选中数组
  852. ids: [],
  853. // 非单个禁用
  854. single: true,
  855. // 非多个禁用
  856. multiple: true,
  857. // 显示搜索条件
  858. showSearch: false,
  859. // 总条数
  860. total: 0,
  861. // 定点测厚表格数据
  862. thicknessList: [],
  863. dataList: [],
  864. // 弹出层标题
  865. title: "",
  866. // 部门树选项
  867. deptOptions: undefined,
  868. clientHeight:300,
  869. // 是否显示弹出层
  870. open: false,
  871. visible: false,
  872. // 检测方法字典
  873. inspectionMethodOptions: [],
  874. statusOptions:[],
  875. plantOptions: [],
  876. // 用户导入参数
  877. upload: {
  878. //模板下载路由
  879. downloadAction: process.env.VUE_APP_BASE_API + '/common/template',
  880. //模板下载区分
  881. type: "thickness",
  882. // 是否显示弹出层(用户导入)
  883. open: false,
  884. // 弹出层标题(用户导入)
  885. title: "",
  886. // 是否禁用上传
  887. isUploading: false,
  888. // 是否更新已经存在的用户数据
  889. updateSupport: 0,
  890. // 设置上传的请求头部
  891. headers: { Authorization: "Bearer " + getToken() },
  892. // 上传的地址
  893. url: process.env.VUE_APP_BASE_API + "/sems/measure-record/importForUpdate"
  894. },
  895. downloadForm: {
  896. id: '',
  897. key: ''
  898. },
  899. downloadAction: process.env.VUE_APP_BASE_API +'/sems/thickness/measure/exportPDF',
  900. locationpic: {
  901. imageUrl: '',
  902. fileList: [],
  903. // 设置上传的请求头部
  904. headers: { Authorization: "Bearer " + getToken() },
  905. // 上传的地址
  906. url: process.env.VUE_APP_BASE_API + "/sems/thickness/uploadFile",
  907. },
  908. photo: {
  909. imageUrl: '',
  910. fileList: [],
  911. // 设置上传的请求头部
  912. headers: { Authorization: "Bearer " + getToken() },
  913. // 上传的地址
  914. url: process.env.VUE_APP_BASE_API + "/sems/thickness/uploadFile",
  915. },
  916. analysis: {
  917. file: "",
  918. // 是否显示弹出层(报告附件)
  919. open: false,
  920. // 弹出层标题(报告附件)
  921. title: "",
  922. // 是否禁用上传
  923. isUploading: false,
  924. // 是否更新已经存在的用户数据
  925. updateSupport: 0,
  926. // 报告附件上传位置编号
  927. ids: 0,
  928. // 设置上传的请求头部
  929. headers: { Authorization: "Bearer " + getToken() },
  930. // 上传的地址
  931. url: process.env.VUE_APP_BASE_API + "/sems/thickness/uploadFile",
  932. commonfileList: null,
  933. pType: 'traning',
  934. pId: null
  935. },
  936. locationList: [],
  937. photoList: [],
  938. dialogImageUrl: '',
  939. dialogVisible: false,
  940. // 查询参数
  941. queryParams: {
  942. pageNum: 1,
  943. pageSize: 20,
  944. plantCode: null,
  945. unitCode: null,
  946. tagno: null,
  947. status: null,
  948. remarks: null,
  949. position: null,
  950. recorder: null,
  951. recorderDate: null,
  952. equipmentName: null,
  953. material: null,
  954. corAllowance: null,
  955. originalThickness: null,
  956. medium: null,
  957. pressure: null,
  958. specification: null,
  959. flowRate: null,
  960. temperature: null,
  961. corrosionType: null,
  962. inspectionMethod: null,
  963. photo: null,
  964. analysis: null,
  965. nominalTickness: null,
  966. thicknessMin: null,
  967. stCorrosion: null,
  968. ltCorrosion: null,
  969. estRemain: null,
  970. methodCause: null,
  971. effectTracing: null,
  972. raiser: null,
  973. raiserDate: null,
  974. locationUrl: null,
  975. analysisUrl: null,
  976. measureCycle: null,
  977. recordUrl: null,
  978. otherContent: null
  979. }, // 查询参数
  980. recordParams: {
  981. pageNum: 1,
  982. pageSize: 99,
  983. },
  984. // 表单参数
  985. form: {},
  986. dataForm: {},
  987. // 表单校验
  988. rules: {
  989. plantCode: [
  990. { required: true, message: this.$t('装置名称')+this.$t('不能为空'), trigger: "blur" }
  991. ],
  992. unitCode: [
  993. { required: true, message: this.$t('单元名称')+this.$t('不能为空'), trigger: "blur" }
  994. ],
  995. position: [
  996. { required: true, message: this.$t('测厚部位CML')+this.$t('不能为空'), trigger: "blur" }
  997. ],
  998. recorder: [
  999. { required: true, message: this.$t('记录人')+this.$t('不能为空'), trigger: "blur" }
  1000. ],
  1001. recorderDate: [
  1002. { required: true, message: this.$t('记录时间')+this.$t('不能为空'), trigger: "blur" }
  1003. ],
  1004. equipmentName: [
  1005. { required: true, message: this.$t('设备/管线名称')+this.$t('不能为空'), trigger: "blur" }
  1006. ],
  1007. material: [
  1008. { required: true, message: this.$t('材质')+this.$t('不能为空'), trigger: "blur" }
  1009. ],
  1010. corAllowance: [
  1011. { required: true, message: this.$t('腐蚀裕度(mm)')+this.$t('不能为空'), trigger: "blur" }
  1012. ],
  1013. originalThickness: [
  1014. { required: true, message: this.$t('原始壁厚(mm)')+this.$t('不能为空'), trigger: "blur" }
  1015. ],
  1016. medium: [
  1017. { required: true, message: this.$t('介质')+this.$t('不能为空'), trigger: "blur" }
  1018. ],
  1019. pressure: [
  1020. { required: true, message: this.$t('压力')+this.$t('不能为空'), trigger: "blur" }
  1021. ],
  1022. specification: [
  1023. { required: true, message: this.$t('规格')+this.$t('不能为空'), trigger: "blur" }
  1024. ],
  1025. /* flowRate: [
  1026. { required: true, message: this.$t('流速(m/s)')+this.$t('不能为空'), trigger: "blur" }
  1027. ],*/
  1028. temperature: [
  1029. { required: true, message: this.$t('温度(℃)')+this.$t('不能为空'), trigger: "blur" }
  1030. ],
  1031. corrosionType: [
  1032. { required: true, message: this.$t('腐蚀类型')+this.$t('不能为空'), trigger: "change" }
  1033. ],
  1034. inspectionMethod: [
  1035. { required: true, message: this.$t('检测方法')+this.$t('不能为空'), trigger: "blur" }
  1036. ],
  1037. /*analysis: [
  1038. { required: true, message: "原因分析不能为空", trigger: "blur" }
  1039. ],*/
  1040. nominalTickness: [
  1041. { required: true, message: this.$t('公称壁厚(mm)')+this.$t('不能为空'), trigger: "blur" }
  1042. ],
  1043. // thicknessMin: [
  1044. // { required: true, message: this.$t('最小允许壁厚(mm)')+this.$t('不能为空'), trigger: "blur" }
  1045. // ],
  1046. /*stCorrosion: [
  1047. { required: true, message: "短期腐蚀速率不能为空", trigger: "blur" }
  1048. ],
  1049. ltCorrosion: [
  1050. { required: true, message: "长期腐蚀速率不能为空", trigger: "blur" }
  1051. ],
  1052. estRemain: [
  1053. { required: true, message: "预估剩余寿命不能为空", trigger: "blur" }
  1054. ],*/
  1055. /*methodCause: [
  1056. { required: true, message: "治理方法及依据不能为空", trigger: "blur" }
  1057. ],
  1058. effectTracing: [
  1059. { required: true, message: "效果跟踪不能为空", trigger: "blur" }
  1060. ],*/
  1061. /*raiser: [
  1062. { required: true, message: "提出人不能为空", trigger: "blur" }
  1063. ],
  1064. raiserDate: [
  1065. { required: true, message: "提出时间不能为空", trigger: "blur" }
  1066. ],
  1067. locationUrl: [
  1068. { required: true, message: "腐蚀位置不能为空", trigger: "blur" }
  1069. ],
  1070. measureCycle: [
  1071. { required: true, message: "测厚周期不能为空", trigger: "blur" }
  1072. ],
  1073. otherContent: [
  1074. { required: true, message: "其他检测方法内容不能为空", trigger: "blur" }
  1075. ]*/
  1076. }
  1077. };
  1078. },
  1079. watch: {
  1080. // 根据名称筛选部门树
  1081. deptName(val) {
  1082. this.$refs.tree.filter(val);
  1083. }
  1084. },
  1085. created() {
  1086. //设置表格高度对应屏幕高度
  1087. this.$nextTick(() => {
  1088. this.clientHeight = document.body.clientHeight -250
  1089. })
  1090. this.getList();
  1091. this.getTreeselect();
  1092. this.getDicts("spec_measure_status").then(response => {
  1093. this.statusOptions = response.data;
  1094. });
  1095. this.getDicts("spec_measure_method").then(response => {
  1096. this.inspectionMethodOptions = response.data;
  1097. });
  1098. let plantParams = {
  1099. pType: 1
  1100. }
  1101. mylistPlant(plantParams).then(response => {
  1102. this.plantOptions = response.data;
  1103. });
  1104. },
  1105. methods: {
  1106. /** 查询定点测厚列表 */
  1107. getList() {
  1108. this.loading = true;
  1109. listThickness(this.queryParams).then(response => {
  1110. this.thicknessList = response.rows;
  1111. this.total = response.total;
  1112. this.loading = false;
  1113. });
  1114. },
  1115. /** 查询部门下拉树结构 */
  1116. getTreeselect() {
  1117. treeselect().then(response => {
  1118. this.deptOptions = response.data;
  1119. });
  1120. },
  1121. // 状态字典翻译
  1122. statusFormat(row, column) {
  1123. return this.selectDictLabel(this.statusOptions, row.status);
  1124. },
  1125. // 检测方法字典翻译
  1126. inspectionMethodFormat(row, column) {
  1127. return this.selectDictLabels(this.inspectionMethodOptions, row.inspectionMethod);
  1128. },
  1129. // 取消按钮
  1130. cancel() {
  1131. this.open = false;
  1132. this.reset();
  1133. },
  1134. // 表单重置
  1135. reset() {
  1136. this.form = {
  1137. id: null,
  1138. plantCode: null,
  1139. unitCode: null,
  1140. tagno: null,
  1141. status: 0,
  1142. createdate: null,
  1143. updaterCode: null,
  1144. updatedate: null,
  1145. deptId: null,
  1146. remarks: null,
  1147. position: null,
  1148. recorder: null,
  1149. recorderDate: null,
  1150. equipmentName: null,
  1151. material: null,
  1152. corAllowance: null,
  1153. originalThickness: null,
  1154. medium: null,
  1155. pressure: null,
  1156. specification: null,
  1157. flowRate: null,
  1158. temperature: null,
  1159. corrosionType: null,
  1160. inspectionMethod: [],
  1161. photo: null,
  1162. analysis: null,
  1163. nominalTickness: null,
  1164. thicknessMin: null,
  1165. stCorrosion: null,
  1166. ltCorrosion: null,
  1167. estRemain: null,
  1168. methodCause: null,
  1169. effectTracing: null,
  1170. raiser: null,
  1171. raiserDate: null,
  1172. delFlag: null,
  1173. locationUrl: null,
  1174. analysisUrl: null,
  1175. measureCycle: null,
  1176. recordUrl: null,
  1177. otherContent: null,
  1178. measureNo: null,
  1179. nextWarnDate: null,
  1180. };
  1181. this.resetForm("form");
  1182. },
  1183. /** 搜索按钮操作 */
  1184. handleQuery() {
  1185. this.queryParams.pageNum = 1;
  1186. this.getList();
  1187. },
  1188. /** 重置按钮操作 */
  1189. resetQuery() {
  1190. this.resetForm("queryForm");
  1191. this.handleQuery();
  1192. },
  1193. // 多选框选中数据
  1194. handleSelectionChange(selection) {
  1195. this.ids = selection.map(item => item.id)
  1196. this.single = selection.length!==1
  1197. this.multiple = !selection.length
  1198. },
  1199. /** 新增按钮操作 */
  1200. handleAdd() {
  1201. this.reset();
  1202. this.open = true;
  1203. this.title = this.$t('添加') + this.$t('定点测厚');
  1204. },
  1205. /** 修改按钮操作 */
  1206. handleUpdate(row) {
  1207. this.reset();
  1208. const id = row.id || this.ids
  1209. getThickness(id).then(response => {
  1210. this.form = response.data;
  1211. this.form.inspectionMethod = this.form.inspectionMethod.split(",");
  1212. this.open = true;
  1213. this.title = this.$t('修改') + this.$t('定点测厚');
  1214. if (this.form.photo!= null){
  1215. this.photoList =[]
  1216. let fileList = this.form.photo.split(",")
  1217. for (let i = 0; i < fileList.length; i++) {
  1218. let item = {url: process.env.VUE_APP_BASE_API +fileList[i],response: {msg: fileList[i]} }
  1219. this.photoList.push(item)
  1220. }
  1221. }
  1222. if (this.form.locationUrl!= null){
  1223. this.locationList =[]
  1224. let fileList = this.form.locationUrl.split(",")
  1225. for (let i = 0; i < fileList.length; i++) {
  1226. let item = {url: process.env.VUE_APP_BASE_API +fileList[i],response: {msg: fileList[i]} }
  1227. this.locationList.push(item)
  1228. }
  1229. }
  1230. });
  1231. },
  1232. handleView (row){
  1233. const id = row.id
  1234. getThickness(id).then(response => {
  1235. this.dataForm = response.data;
  1236. this.dataForm.inspectionMethod = this.dataForm.inspectionMethod.split(",");
  1237. this.visible = true;
  1238. this.title = this.$t('查看') + this.$t('定点测厚');
  1239. if (this.dataForm.photo!= null){
  1240. this.photoList =[]
  1241. let fileList = this.dataForm.photo.split(",")
  1242. for (let i = 0; i < fileList.length; i++) {
  1243. let item = {url: process.env.VUE_APP_BASE_API +fileList[i],response: {msg: fileList[i]} }
  1244. this.photoList.push(item)
  1245. }
  1246. }
  1247. if (this.dataForm.locationUrl!= null){
  1248. this.locationList =[]
  1249. let fileList = this.dataForm.locationUrl.split(",")
  1250. for (let i = 0; i < fileList.length; i++) {
  1251. let item = {url: process.env.VUE_APP_BASE_API +fileList[i],response: {msg: fileList[i]} }
  1252. this.locationList.push(item)
  1253. }
  1254. }
  1255. this.dataForm.recordUrl = process.env.VUE_APP_BASE_API + this.dataForm.recordUrl
  1256. });
  1257. this.recordParams.measureId = row.id
  1258. listMeasurerecord(this.recordParams).then(response => {
  1259. this.dataList = response.rows;
  1260. });
  1261. },
  1262. /** 提交按钮 */
  1263. submitForm() {
  1264. this.$refs["form"].validate(valid => {
  1265. if (valid) {
  1266. this.form.inspectionMethod = this.form.inspectionMethod.join(",");
  1267. if (this.form.id != null) {
  1268. updateThickness(this.form).then(response => {
  1269. this.msgSuccess(this.$t('修改成功'));
  1270. this.open = false;
  1271. this.getList();
  1272. });
  1273. } else {
  1274. addThickness(this.form).then(response => {
  1275. this.msgSuccess(this.$t('新增成功'));
  1276. this.open = false;
  1277. this.getList();
  1278. });
  1279. }
  1280. }
  1281. });
  1282. },
  1283. /** 删除按钮操作 */
  1284. handleDelete(row) {
  1285. const ids = row.id || this.ids;
  1286. this.$confirm(this.$t('是否确认删除?'), this.$t('警告'), {
  1287. confirmButtonText: this.$t('确定'),
  1288. cancelButtonText: this.$t('取消'),
  1289. type: "warning"
  1290. }).then(function() {
  1291. return delThickness(ids);
  1292. }).then(() => {
  1293. this.getList();
  1294. this.msgSuccess(this.$t('删除成功'));
  1295. })
  1296. },
  1297. /** 导出按钮操作 */
  1298. handleExport() {
  1299. const queryParams = this.queryParams;
  1300. this.$confirm(this.$t('是否确认导出所有定点测厚数据项?'), this.$t('警告'), {
  1301. confirmButtonText: this.$t('确定'),
  1302. cancelButtonText: this.$t('取消'),
  1303. type: "warning"
  1304. }).then(function() {
  1305. return exportThickness(queryParams);
  1306. }).then(response => {
  1307. this.download(response.msg);
  1308. })
  1309. },
  1310. /** 导入按钮操作 */
  1311. handleImport() {
  1312. this.upload.title = this.$t('导入更新数据');
  1313. this.upload.open = true;
  1314. },
  1315. /** 下载模板操作 */
  1316. importTemplate() {
  1317. this.$refs['downloadFileForm'].submit()
  1318. },
  1319. // 文件上传中处理
  1320. handleFileUploadProgress(event, file, fileList) {
  1321. this.upload.isUploading = true;
  1322. },
  1323. // 文件上传成功处理
  1324. handleFileSuccess(response, file, fileList) {
  1325. this.upload.open = false;
  1326. this.upload.isUploading = false;
  1327. this.$refs.upload.clearFiles();
  1328. this.fullscreenLoading = false;
  1329. if (response.data.length > 0) {
  1330. let failrow = ''
  1331. for (let i = 0; i < response.data.length; i++) {
  1332. failrow += response.data[i] + ','
  1333. }
  1334. this.$alert(this.$t('导入成功条数:') + response.msg + '<br>' + this.$t('失败行数:') + failrow, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  1335. } else {
  1336. this.$alert(this.$t('导入成功条数:') + response.msg, this.$t('导入结果'), {dangerouslyUseHTMLString: true});
  1337. }
  1338. this.getList();
  1339. },
  1340. // 提交上传文件
  1341. submitFileForm() {
  1342. this.$refs.upload.submit();
  1343. this.fullscreenLoading = true;
  1344. },
  1345. //下载报告
  1346. downloadHandle (row) {
  1347. this.downloadForm.id = row.id;
  1348. this.$nextTick(() => {
  1349. this.$refs['downloadForm'].submit()
  1350. })
  1351. },
  1352. //查询测厚记录
  1353. recordHandle (row) {
  1354. this.recordVisible = true
  1355. this.$nextTick(() => {
  1356. this.$refs.record.init(row)
  1357. })
  1358. },
  1359. closeChildDialog () {
  1360. this.showFlag = false
  1361. this.getList();
  1362. },
  1363. handleExceed(files, fileList) {
  1364. this.$message.warning(`当前限制选择 3 个文件`);
  1365. },
  1366. handleRemove(file, fileList) {
  1367. this.form.locationUrl = fileList.map((obj)=>{return obj.response.msg}).join(",");
  1368. console.log(this.form.locationUrl)
  1369. },
  1370. handleAvatarSuccess(res, file, fileList) {
  1371. console.log(fileList)
  1372. this.locationList = fileList
  1373. this.form.locationUrl = fileList.map((obj)=>{return obj.response.msg}).join(",");
  1374. console.log(this.form.locationUrl)
  1375. },
  1376. handleRemove2(file, fileList) {
  1377. this.form.photo = fileList.map((obj)=>{return obj.response.msg}).join(",");
  1378. },
  1379. handleAvatarSuccess2(res, file, fileList) {
  1380. console.log(fileList)
  1381. this.photoList = fileList
  1382. this.form.photo = fileList.map((obj)=>{return obj.response.msg}).join(",");
  1383. },
  1384. handlePictureCardPreview(file) {
  1385. this.dialogImageUrl = file.url;
  1386. this.dialogVisible = true;
  1387. },
  1388. beforeAvatarUpload(file) {
  1389. const isJPG = file.type === 'image/jpeg' || file.type === 'image/png'
  1390. const isLt2M = file.size / 1024 / 1024 < 2
  1391. if (!isJPG) {
  1392. this.$message.error(this.$t('上传图片只能是 JPG/PNG 格式!'));
  1393. }
  1394. if (!isLt2M) {
  1395. this.$message.error(this.$t('上传图片大小不能超过 2MB!'));
  1396. }
  1397. return isJPG && isLt2M;
  1398. },
  1399. //附件上传中处理
  1400. handleFileDocProgress(event, file, fileList) {
  1401. this.analysis.file = file;
  1402. },
  1403. //附件上传成功处理
  1404. handleFileDocSuccess(response, file, fileList) {
  1405. this.form.analysisUrl = response.msg
  1406. this.$alert(response.msg, this.$t('导入结果'), { dangerouslyUseHTMLString: true });
  1407. },
  1408. //寿命颜色预警
  1409. tableCellStyle({ row, column, rowIndex, columnIndex }) {
  1410. if (columnIndex == 18 && row.warnFlag == 1){
  1411. return "color: rgba(255, 26, 26, 0.98) "
  1412. }else if (columnIndex == 17 && row.warnFlag == 1){
  1413. return "color: rgba(255, 26, 26, 0.98) "
  1414. }
  1415. },
  1416. }
  1417. };
  1418. </script>
  1419. <style>
  1420. .otherMethod {
  1421. width: 40%;
  1422. }
  1423. </style>