You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2628 lines
90 KiB

11 months ago
11 months ago
11 months ago
10 months ago
10 months ago
10 months ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" :model="searchData">
  4. <el-form-item :label="'BU'">
  5. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 80px">
  6. <el-option
  7. v-for="i in userBuList"
  8. :key="i.buNo"
  9. :label="i.buDesc"
  10. :value="i.buDesc">
  11. </el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item :label="'报修方式'">
  15. <el-select v-model="searchData.repairReportingType" placeholder="请选择" clearable style="width: 100px">
  16. <el-option label="设备故障" value="设备故障"></el-option>
  17. <el-option label="TPM红牌" value="TPM红牌"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item :label="'紧急程度'">
  21. <el-select v-model="searchData.urgency" placeholder="请选择" clearable style="width: 80px">
  22. <el-option label="特急" value="特急"></el-option>
  23. <el-option label="紧急" value="紧急"></el-option>
  24. <el-option label="一般" value="一般"></el-option>
  25. </el-select>
  26. </el-form-item>
  27. <el-form-item :label="'维修结论'">
  28. <el-select v-model="searchData.result" placeholder="请选择" clearable style="width: 100px">
  29. <el-option label="维修完成" value="维修完成"></el-option>
  30. <el-option label="维修失败" value="维修失败"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item :label="'反馈单号'">
  34. <el-input v-model="searchData.planID" clearable style="width: 120px"></el-input>
  35. </el-form-item>
  36. <el-form-item :label="'工单编码'">
  37. <el-input v-model="searchData.orderNo" clearable style="width: 120px"></el-input>
  38. </el-form-item>
  39. <el-form-item :label="'设备编码'">
  40. <el-input v-model="searchData.objectID" clearable style="width: 100px"></el-input>
  41. </el-form-item>
  42. <el-form-item :label="'人员部门'">
  43. <el-input v-model="searchData.departmentName" readonly style="width: 200px"></el-input>
  44. </el-form-item>
  45. </el-form>
  46. <el-form :inline="true" label-position="top" :model="searchData">
  47. <el-form-item :label="'状态'">
  48. <el-select v-model="searchData.status" clearable style="width: 100px">
  49. <el-option label="未开工" value="未开工"></el-option>
  50. <el-option label="已到达" value="已到达"></el-option>
  51. <el-option label="待确认" value="待确认"></el-option>
  52. <el-option label="待审核" value="待审核"></el-option>
  53. <el-option label="已完工" value="已完工"></el-option>
  54. <el-option label="已取消" value="已取消"></el-option>
  55. </el-select>
  56. </el-form-item>
  57. <el-form-item :label="'单据来源'">
  58. <el-select v-model="searchData.documentSource" clearable style="width: 100px">
  59. <el-option label="设备点检" value="设备点检"></el-option>
  60. <el-option label="设备维修" value="设备维修"></el-option>
  61. <el-option label="维修失败" value="维修失败"></el-option>
  62. </el-select>
  63. </el-form-item>
  64. <el-form-item :label="'计划执行日期'">
  65. <el-date-picker
  66. style="width: 120px"
  67. v-model="searchData.startDate"
  68. type="date"
  69. value-format="yyyy-MM-dd"
  70. placeholder="选择日期">
  71. </el-date-picker>
  72. </el-form-item>
  73. <el-form-item style="margin-top: 23px;">
  74. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  75. </el-form-item>
  76. <el-form-item :label="' '">
  77. <el-date-picker
  78. style="width: 120px"
  79. v-model="searchData.endDate"
  80. type="date"
  81. value-format="yyyy-MM-dd"
  82. placeholder="选择日期">
  83. </el-date-picker>
  84. </el-form-item>
  85. <el-form-item :label="' '">
  86. <el-button v-if="!authSearch" @click="getDataList()">查询</el-button>
  87. <el-button v-if="!authCheck" @click="checkModals()">批量审核</el-button>
  88. <el-button v-if="!authChange" type="primary" @click="changeModel()">更改执行人员</el-button>
  89. <download-excel
  90. :fields="fields()"
  91. :data="exportData"
  92. type="xls"
  93. :name="exportName"
  94. :header="exportHeader"
  95. :footer="exportFooter"
  96. :fetch="createExportData"
  97. :before-generate="startDownload"
  98. :before-finish="finishDownload"
  99. worksheet="导出信息"
  100. class="el-button el-button--primary el-button--medium">
  101. {{ "导出" }}
  102. </download-excel>
  103. </el-form-item>
  104. </el-form>
  105. <el-table
  106. :height="height"
  107. :data="dataList"
  108. border
  109. v-loading="dataListLoading"
  110. @selection-change="selectionChangeHandle"
  111. :row-style="controlRowStyle"
  112. style="width: 100%;">
  113. <el-table-column
  114. type="selection"
  115. header-align="center"
  116. align="center"
  117. width="50">
  118. </el-table-column>
  119. <el-table-column
  120. prop="urgency"
  121. header-align="center"
  122. align="center"
  123. label="紧急程度"
  124. width="70">
  125. <template slot-scope="scope">
  126. <div
  127. :style="{fontWeight:'bold', color: scope.row.urgency === '特急' ? 'red' : scope.row.urgency === '紧急' ? '#ffa500e0' : scope.row.urgency === '一般' ? '#47B0FF' : ''}">
  128. {{ scope.row.urgency }}
  129. </div>
  130. </template>
  131. </el-table-column>
  132. <el-table-column
  133. prop="result"
  134. header-align="center"
  135. align="center"
  136. label="维修结论"
  137. width="80">
  138. <template slot-scope="scope">
  139. <div
  140. :style="{fontWeight:'bold', color: scope.row.result === '维修失败' ? 'red' : scope.row.result === '维修完成' ? '#3ac252' : ''}">
  141. {{ scope.row.result }}
  142. </div>
  143. </template>
  144. </el-table-column>
  145. <el-table-column
  146. v-for="(item,index) in columnList" :key="index"
  147. :sortable="item.columnSortable"
  148. :prop="item.columnProp"
  149. :header-align="item.headerAlign"
  150. :show-overflow-tooltip="item.showOverflowTooltip"
  151. :align="item.align"
  152. :fixed="item.fixed==''?false:item.fixed"
  153. :min-width="item.columnWidth"
  154. :label="item.columnLabel">
  155. <template slot-scope="scope">
  156. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  157. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  158. </template>
  159. </el-table-column>
  160. <el-table-column
  161. fixed="right"
  162. header-align="center"
  163. align="center"
  164. width="100"
  165. label="操作">
  166. <template slot-scope="scope">
  167. <!-- <a type="text" size="small" v-if="scope.row.status === '待审核'" @click="checkModal(scope.row)">审核</a>-->
  168. <el-link style="cursor: pointer" v-if="(scope.row.status === '待审核' || scope.row.status === '已完工') && !authDetail" @click="reportModal(scope.row)">详情</el-link>
  169. <el-link style="cursor: pointer" v-if="scope.row.status === '待确认' && !authDetail" @click="confirmResult(scope.row)">确认</el-link>
  170. <el-link style="cursor: pointer" v-if="scope.row.status === '未开工' && !authCancel" @click="cancelOrder(scope.row)">取消工单</el-link>
  171. </template>
  172. </el-table-column>
  173. </el-table>
  174. <el-pagination
  175. @size-change="sizeChangeHandle"
  176. @current-change="currentChangeHandle"
  177. :current-page="pageIndex"
  178. :page-sizes="[20, 50, 100, 200, 500]"
  179. :page-size="pageSize"
  180. :total="totalPage"
  181. layout="total, sizes, prev, pager, next, jumper">
  182. </el-pagination>
  183. <el-dialog title="批量修改计划人员" :close-on-click-modal="false" v-drag :visible.sync="changeModelFlag" width="300px">
  184. <el-form :inline="true" label-position="top">
  185. <el-form-item style="margin-left: 10px">
  186. <span style="cursor: pointer" slot="label" @click="getBaseList(201)"><a>计划执行人员</a></span>
  187. <el-input v-model="planOperator" style="width: 120px"></el-input>
  188. </el-form-item>
  189. <el-form-item :label="'人员名称'">
  190. <el-input v-model="planOperatorName" disabled style="width: 120px"></el-input>
  191. </el-form-item>
  192. </el-form>
  193. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  194. <el-button type="primary" @click="changeOrderOperator()">保存</el-button>
  195. <el-button type="primary" @click="changeModelFlag = false">关闭</el-button>
  196. </el-footer>
  197. </el-dialog>
  198. <el-dialog title="审核" :close-on-click-modal="false" v-drag :visible.sync="submitModelFlag" width="375px">
  199. <el-form :inline="true" label-position="top">
  200. <el-form-item :label="'难度等级'">
  201. <el-select filterable v-model="submitData.difficultyLevel" style="width: 130px" placeholder="请评估难度等级">
  202. <el-option label="难度一" value="难度一"></el-option>
  203. <el-option label="难度二" value="难度二"></el-option>
  204. <el-option label="难度三" value="难度三"></el-option>
  205. </el-select>
  206. </el-form-item>
  207. <el-form-item :label="'备注'">
  208. <el-input v-model="submitData.difficultyRemark" style="width: 200px"></el-input>
  209. </el-form-item>
  210. </el-form>
  211. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  212. <el-button type="primary" @click="submitModel()">确定</el-button>
  213. <el-button type="primary" @click="submitModelFlag = false">取消</el-button>
  214. </el-footer>
  215. </el-dialog>
  216. <el-dialog top="12vh" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="1000px">
  217. <template v-slot:title>
  218. <div style="padding-top: 5px;padding-left: 15px">
  219. <span :style="{ fontSize: '15px', fontWeight: 'bold' }">维修工单</span>
  220. <span :style="{
  221. marginTop: '-5px',
  222. marginLeft: '5px',
  223. fontSize: '15px',
  224. verticalAlign: 'middle',
  225. display: 'inline-block',
  226. width: '17px',
  227. height: '17px',
  228. borderRadius: '50%',
  229. background: detailData.urgency === '特急' ? 'red' : detailData.urgency === '紧急' ? '#ffa500e0' : detailData.urgency === '一般' ? '#47B0FF' : ''}">
  230. </span>
  231. </div>
  232. </template>
  233. <div style="margin-left: 70px">
  234. <el-form :inline="true" label-position="top" style="margin-top: 10px">
  235. <el-form-item label="工单号">
  236. <el-input v-model="detailData.orderNo" disabled style="width: 100px"></el-input>
  237. </el-form-item>
  238. <el-form-item label="计划执行人员" style="margin-left: 30px">
  239. <el-input v-model="detailData.planOperatorName" disabled style="width: 100px"></el-input>
  240. </el-form-item>
  241. <el-form-item label="计划执行日期" style="margin-left: 30px">
  242. <el-date-picker style="width: 100px" v-model="detailData.planDate" type="datetime" disabled value-format='yyyy-MM-dd' format='yyyy-MM-dd'></el-date-picker>
  243. </el-form-item>
  244. <el-form-item label="设备编码" style="margin-left: 30px">
  245. <el-input v-model="detailData.objectID" disabled style="width: 100px"></el-input>
  246. </el-form-item>
  247. <el-form-item label="设备名称" style="margin-left: 30px">
  248. <el-input v-model="detailData.objectDesc" disabled style="width: 150px"></el-input>
  249. </el-form-item>
  250. <el-form-item label="机台" style="margin-left: 30px">
  251. <el-input v-model="detailData.resourceDesc" disabled style="width: 100px"></el-input>
  252. </el-form-item>
  253. </el-form>
  254. <el-form :inline="true" label-position="top">
  255. <el-form-item label="报修人">
  256. <el-input v-model="detailData.createBy" disabled style="width: 100px"></el-input>
  257. </el-form-item>
  258. <el-form-item label="报修时间" style="margin-left: 30px">
  259. <el-input v-model="detailData.createdDate" disabled style="width: 130px"></el-input>
  260. </el-form-item>
  261. <el-form-item label="响应人">
  262. <el-input v-model="detailData.reachOperatorName" disabled style="width: 100px"></el-input>
  263. </el-form-item>
  264. <el-form-item label="响应时间" style="margin-left: 30px">
  265. <el-date-picker :disabled="detailData.status === '已完工'" style="width: 170px" v-model="detailData.reachDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  266. </el-form-item>
  267. <el-form-item label="响应时长(m)" style="margin-left: 30px">
  268. <el-input-number :controls="false" :step="0" :min="0" :disabled="detailData.status === '已完工'" v-model="detailData.responseTime" style="width: 80px"></el-input-number>
  269. </el-form-item>
  270. </el-form>
  271. <el-form :inline="true" label-position="top">
  272. <el-form-item label="维修结果">
  273. <el-input v-model="detailData.result" disabled style="width: 100px"></el-input>
  274. </el-form-item>
  275. <el-form-item label="处置措施" style="margin-left: 30px">
  276. <el-input v-model="detailData.disposalMeasures" disabled style="width: 130px"></el-input>
  277. </el-form-item>
  278. <el-form-item label="是否停机保修">
  279. <el-input v-model="detailData.shutdownWarranty" disabled style="width: 100px"></el-input>
  280. </el-form-item>
  281. <el-form-item label="实际执行时间" style="margin-left: 30px">
  282. <el-date-picker :disabled="detailData.status === '已完工'" style="width: 170px" v-model="detailData.actualDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  283. </el-form-item>
  284. <el-form-item label="工作时长(m)" style="margin-left: 30px">
  285. <el-input-number :controls="false" :step="0" :min="0" v-model="detailData.workTime" :disabled="detailData.status === '已完工'" style="width: 80px"></el-input-number>
  286. </el-form-item>
  287. </el-form>
  288. <el-form :inline="true" :model="detailData" label-position="top">
  289. <el-form-item label="报修反馈描述">
  290. <el-input type="textarea" disabled v-model="detailData.feedBackDesc" :rows="3" resize='none' show-word-limit style="width: 900px"></el-input>
  291. </el-form-item>
  292. </el-form>
  293. <el-tabs v-model="activeTable" style="margin-top: 55px; width: 99%; height: 100%;" @tab-click="tabClick" class="customer-tab">
  294. <el-tab-pane label="维修单" name="inspection_form" style="height: 320px">
  295. <el-form :inline="true" label-position="top" style="margin-top: 5px">
  296. <el-form-item label="故障编码">
  297. <el-input v-model="detailData.defectID" disabled style="width: 100px"></el-input>
  298. </el-form-item>
  299. <el-form-item label="故障名称" style="margin-left: -10px">
  300. <el-input v-model="detailData.defectDesc" disabled style="width: 200px"></el-input>
  301. </el-form-item>
  302. <el-form-item label="实际维修人员">
  303. <el-input v-model="detailData.actualOperatorName" disabled style="width: 200px"></el-input>
  304. </el-form-item>
  305. <el-form-item :label="' '" style="margin-left: 20px">
  306. <el-checkbox v-model="detailData.knowledgeFlag" true-label="Y">维修记录移至知识库</el-checkbox>
  307. <el-button v-if="detailData.status === '已完工'" type="primary" @click="checkModal()" style="margin-left: 10px">取消审核</el-button>
  308. <el-button v-else type="primary" @click="checkModal()" style="margin-left: 10px">审核</el-button>
  309. </el-form-item>
  310. <!-- <el-form-item :label="' '">-->
  311. <!-- <el-button type="primary" @click="coreComponentModal">核心配件</el-button>-->
  312. <!-- </el-form-item>-->
  313. </el-form>
  314. <el-form :inline="true" label-position="top" style="margin-top: 0px">
  315. <el-form-item label="故障原因">
  316. <el-input :readonly="detailData.status === '已完工'" type="textarea" v-model="detailData.faultReason" :rows="3" resize='none' show-word-limit style="width: 431px"></el-input>
  317. </el-form-item>
  318. <el-form-item label="处理方式">
  319. <el-input :readonly="detailData.status === '已完工'" type="textarea" v-model="detailData.handlingMethod" :rows="3" resize='none' show-word-limit style="width: 431px"></el-input></el-form-item>
  320. </el-form>
  321. <el-form :inline="true" label-position="top" style="margin-top: 45px">
  322. <el-form-item label="预防措施">
  323. <el-input :readonly="detailData.status === '已完工'" type="textarea" v-model="detailData.preventiveMeasure" :rows="3" resize='none' show-word-limit style="width: 431px"></el-input>
  324. </el-form-item>
  325. <el-form-item label="备注说明">
  326. <el-input :readonly="detailData.status === '已完工'" type="textarea" v-model="detailData.remark" :rows="3" resize='none' show-word-limit style="width: 431px"></el-input>
  327. </el-form-item>
  328. </el-form>
  329. <el-form :inline="true" label-position="top" style="margin-top: 45px">
  330. <el-form-item label="车间评估结论">
  331. <el-select v-model="detailData.confirmAssessment" disabled style="width: 100px;margin-top: 20px">
  332. <el-option label="优秀" value="优秀"></el-option>
  333. <el-option label="一般" value="一般"></el-option>
  334. <el-option label="差" value="差"></el-option>
  335. <el-option label="未完全修复" value="未完全修复"></el-option>
  336. </el-select>
  337. </el-form-item>
  338. <el-form-item label="备注说明">
  339. <el-input readonly type="textarea" v-model="detailData.confirmRemark" :rows="3" resize='none' show-word-limit style="width: 318px"></el-input>
  340. </el-form-item>
  341. <el-form-item label="维修评估结论">
  342. <el-select v-model="detailData.checkAssessment" :disabled="detailData.status === '已完工'" style="width: 100px;margin-top: 20px">
  343. <el-option label="优秀" value="优秀"></el-option>
  344. <el-option label="一般" value="一般"></el-option>
  345. <el-option label="差" value="差"></el-option>
  346. <el-option label="未完全修复" value="未完全修复"></el-option>
  347. </el-select>
  348. </el-form-item>
  349. <el-form-item label="备注说明">
  350. <el-input :readonly="detailData.status === '已完工'" type="textarea" v-model="detailData.checkNotes" :rows="3" resize='none' show-word-limit style="width: 318px"></el-input>
  351. </el-form-item>
  352. </el-form>
  353. </el-tab-pane>
  354. <el-tab-pane label="故障图片" name="feed_back_img">
  355. <div class="rq ">
  356. <el-table
  357. :height="325"
  358. :data="feedBackImages"
  359. border
  360. style="width: 100%;">
  361. <el-table-column
  362. v-for="(item,index) in columnFeedBackImages" :key="index"
  363. :sortable="item.columnSortable"
  364. :prop="item.columnProp"
  365. :header-align="item.headerAlign"
  366. :show-overflow-tooltip="item.showOverflowTooltip"
  367. :align="item.align"
  368. :fixed="item.fixed==''?false:item.fixed"
  369. :min-width="item.columnWidth"
  370. :label="item.columnLabel">
  371. <template slot-scope="scope">
  372. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  373. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  374. </template>
  375. </el-table-column>
  376. <el-table-column
  377. fixed="right"
  378. header-align="center"
  379. align="center"
  380. width="120"
  381. label="操作">
  382. <template slot-scope="scope">
  383. <el-link style="cursor:pointer" @click="previewFile(scope.row)">预览</el-link>
  384. <el-link style="cursor:pointer" @click="downloadFile(scope.row)">下载</el-link>
  385. </template>
  386. </el-table-column>
  387. </el-table>
  388. </div>
  389. </el-tab-pane>
  390. <el-tab-pane label="备件图片" name="spar_part_img">
  391. <div class="rq ">
  392. <el-table
  393. :height="325"
  394. :data="sparPartImages"
  395. border
  396. style="width: 100%;">
  397. <el-table-column
  398. v-for="(item,index) in columnSparPartImages" :key="index"
  399. :sortable="item.columnSortable"
  400. :prop="item.columnProp"
  401. :header-align="item.headerAlign"
  402. :show-overflow-tooltip="item.showOverflowTooltip"
  403. :align="item.align"
  404. :fixed="item.fixed==''?false:item.fixed"
  405. :min-width="item.columnWidth"
  406. :label="item.columnLabel">
  407. <template slot-scope="scope">
  408. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  409. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  410. </template>
  411. </el-table-column>
  412. <el-table-column
  413. fixed="right"
  414. header-align="center"
  415. align="center"
  416. width="120"
  417. label="操作">
  418. <template slot-scope="scope">
  419. <el-link style="cursor:pointer" @click="previewFile(scope.row)">预览</el-link>
  420. <el-link style="cursor:pointer" @click="downloadFile(scope.row)">下载</el-link>
  421. </template>
  422. </el-table-column>
  423. </el-table>
  424. </div>
  425. </el-tab-pane>
  426. <el-tab-pane label="备品备件清单" name="part_spare_list">
  427. <div class="rq ">
  428. <el-table
  429. :height="325"
  430. :data="partSpareList"
  431. border
  432. style="width: 100%;">
  433. <el-table-column
  434. v-for="(item,index) in columnPartSpareList" :key="index"
  435. :sortable="item.columnSortable"
  436. :prop="item.columnProp"
  437. :header-align="item.headerAlign"
  438. :show-overflow-tooltip="item.showOverflowTooltip"
  439. :align="item.align"
  440. :fixed="item.fixed==''?false:item.fixed"
  441. :min-width="item.columnWidth"
  442. :label="item.columnLabel">
  443. <template slot-scope="scope">
  444. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  445. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  446. </template>
  447. </el-table-column>
  448. </el-table>
  449. </div>
  450. </el-tab-pane>
  451. <el-tab-pane label="维修记录" name="history_record">
  452. <div class="rq " style="margin-top: -10px">
  453. <el-form :inline="true" label-position="top" style="margin-top: 0px">
  454. <el-form-item :label="'维修时间'">
  455. <el-date-picker
  456. style="width: 120px"
  457. v-model="detailData.startDate"
  458. type="date"
  459. value-format="yyyy-MM-dd"
  460. placeholder="选择日期">
  461. </el-date-picker>
  462. </el-form-item>
  463. <el-form-item style="margin-top: 23px;">
  464. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  465. </el-form-item>
  466. <el-form-item :label="' '">
  467. <el-date-picker
  468. style="width: 120px"
  469. v-model="detailData.endDate"
  470. type="date"
  471. value-format="yyyy-MM-dd"
  472. placeholder="选择日期">
  473. </el-date-picker>
  474. </el-form-item>
  475. <el-form-item :label="' '">
  476. <el-button v-if="!authSearch" @click="queryHistoryRecord()">查询</el-button>
  477. </el-form-item>
  478. </el-form>
  479. <el-table
  480. :height="295"
  481. :data="historyRecordList"
  482. border
  483. style="width: 100%;">
  484. <el-table-column
  485. v-for="(item,index) in columnHistoryList" :key="index"
  486. :sortable="item.columnSortable"
  487. :prop="item.columnProp"
  488. :header-align="item.headerAlign"
  489. :show-overflow-tooltip="item.showOverflowTooltip"
  490. :align="item.align"
  491. :fixed="item.fixed==''?false:item.fixed"
  492. :min-width="item.columnWidth"
  493. :label="item.columnLabel">
  494. <template slot-scope="scope">
  495. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  496. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  497. </template>
  498. </el-table-column>
  499. <el-table-column
  500. fixed="right"
  501. header-align="center"
  502. align="center"
  503. width="120"
  504. label="图片">
  505. <template slot-scope="scope">
  506. <el-button type="primary" @click="checkFaultImageModal(scope.row)">故障</el-button>
  507. <el-button type="primary" @click="checkSparPartImageModal(scope.row)">备件</el-button>
  508. </template>
  509. </el-table-column>
  510. </el-table>
  511. <!-- 分页插件 -->
  512. <el-pagination
  513. style="margin-top: 0px"
  514. @size-change="sizeChangeHandle2"
  515. @current-change="currentChangeHandle2"
  516. :current-page="pageIndex2"
  517. :page-sizes="[20, 50, 100, 200, 500]"
  518. :page-size="pageSize2"
  519. :total="totalPage2"
  520. layout="total, sizes, prev, pager, next, jumper">
  521. </el-pagination>
  522. </div>
  523. </el-tab-pane>
  524. <el-tab-pane label="核心备件" name="core_component">
  525. <div class="rq ">
  526. <el-table
  527. :height="280"
  528. :data="corePartSpareList"
  529. border
  530. style="width: 100%;">
  531. <el-table-column
  532. v-for="(item,index) in columnCoreComponent" :key="index"
  533. :sortable="item.columnSortable"
  534. :prop="item.columnProp"
  535. :header-align="item.headerAlign"
  536. :show-overflow-tooltip="item.showOverflowTooltip"
  537. :align="item.align"
  538. :fixed="item.fixed==''?false:item.fixed"
  539. :min-width="item.columnWidth"
  540. :label="item.columnLabel">
  541. <template slot-scope="scope">
  542. <span v-if="!item.columnHidden"> {{ scope.row[item.columnProp] }}</span>
  543. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  544. </template>
  545. </el-table-column>
  546. </el-table>
  547. </div>
  548. </el-tab-pane>
  549. </el-tabs>
  550. </div>
  551. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  552. <el-button style="margin-left: -12px" type="primary" @click="updateResult()">保存</el-button>
  553. <el-button type="primary" @click="detailModelFlag = false">关闭</el-button>
  554. </el-footer>
  555. </el-dialog>
  556. <el-dialog title="核心备件" :close-on-click-modal="false" v-drag :visible.sync="coreComponentFlag" width="450px">
  557. <el-form :inline="true" label-position="top">
  558. <el-form-item label="备件编码">
  559. <el-select v-model="coreComponentData.partNo" placeholder="请选择" style="width: 120px">
  560. <el-option
  561. v-for = "i in corePartSpareList"
  562. :key = "i.partNo"
  563. :label = "i.partNo"
  564. :value = "i.partNo">
  565. </el-option>
  566. </el-select>
  567. </el-form-item>
  568. <el-form-item label="备件名称">
  569. <el-input v-model="coreComponentData.partDescription" disabled style="width: 280px"></el-input>
  570. </el-form-item>
  571. </el-form>
  572. <el-form :inline="true" label-position="top">
  573. <el-form-item label="老序列号">
  574. <el-input v-model="coreComponentData.oldSerialNo" disabled style="width: 200px"></el-input>
  575. </el-form-item>
  576. <el-form-item label="新序列号">
  577. <el-input v-model="coreComponentData.newSerialNo" disabled style="width: 200px"></el-input>
  578. </el-form-item>
  579. </el-form>
  580. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  581. <el-button type="primary" @click="coreComponentFlag = false">关闭</el-button>
  582. </el-footer>
  583. </el-dialog>
  584. <!-- 部门 -->
  585. <el-dialog title="部门清单" :close-on-click-modal="false" v-drag :visible.sync="departmentModelFlag" width="520px">
  586. <div class="rq">
  587. <el-form :inline="true" label-position="top" :model="departmentData">
  588. <el-form-item :label="'部门编码'">
  589. <el-input v-model="departmentData.deptId" style="width: 120px"></el-input>
  590. </el-form-item>
  591. <el-form-item :label="'部门名称'">
  592. <el-input v-model="departmentData.deptName" style="width: 120px"></el-input>
  593. </el-form-item>
  594. <el-form-item :label="' '">
  595. <el-button type="primary" @click="getDepartmentList()">查询</el-button>
  596. </el-form-item>
  597. </el-form>
  598. <el-table
  599. :height="300"
  600. :data="departmentList"
  601. ref="departmentTable"
  602. @row-click="departmentClickRow"
  603. @selection-change="selectionDepartment"
  604. :row-key="getRowKeys"
  605. border
  606. v-loading="dataListLoading"
  607. style="width: 100%;">
  608. <el-table-column
  609. type="selection"
  610. header-align="center"
  611. align="center"
  612. :reserve-selection="true"
  613. width="50">
  614. </el-table-column>
  615. <el-table-column
  616. v-for="(item,index) in departmentDetailList" :key="index"
  617. :sortable="item.columnSortable"
  618. :prop="item.columnProp"
  619. :header-align="item.headerAlign"
  620. :show-overflow-tooltip="item.showOverflowTooltip"
  621. :align="item.align"
  622. :fixed="item.fixed==''?false:item.fixed"
  623. :min-width="item.columnWidth"
  624. :label="item.columnLabel">
  625. <template slot-scope="scope">
  626. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  627. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  628. </template>
  629. </el-table-column>
  630. </el-table>
  631. </div>
  632. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  633. <el-button type="primary" @click="confirmDepartment()">确认</el-button>
  634. <el-button type="primary" @click="departmentModelFlag = false">关闭</el-button>
  635. </el-footer>
  636. </el-dialog>
  637. <el-dialog title="图片查看" :close-on-click-modal="false" v-drag :visible.sync="imageModalFlag" width="390px" style="height: 550px;">
  638. <div v-viewer>
  639. <img v-for="(item, index) in descImages" :src="item" :key="index" style="width: 100px;height: 100px"/>
  640. </div>
  641. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  642. <el-button type="primary" @click="imageModalFlag = false">关闭</el-button>
  643. </el-footer>
  644. </el-dialog>
  645. <el-dialog title="维修确认" top="22vh" :close-on-click-modal="false" v-drag :visible.sync="confirmDefectModal" width="320px">
  646. <el-form :inline="true" label-position="top">
  647. <el-form-item :label="'确认结果'">
  648. <el-select v-model="confirmData.confirmResult" style="width: 135px">
  649. <el-option label="成功" value="Y"></el-option>
  650. <el-option label="失败" value="N"></el-option>
  651. </el-select>
  652. </el-form-item>
  653. <el-form-item :label="'维修评估'">
  654. <el-select v-model="confirmData.confirmAssessment" style="width: 135px">
  655. <el-option label="优秀" value="优秀"></el-option>
  656. <el-option label="一般" value="一般"></el-option>
  657. <el-option label="差" value="差"></el-option>
  658. <el-option label="未完全修复" value="未完全修复"></el-option>
  659. </el-select>
  660. </el-form-item>
  661. </el-form>
  662. <el-form :inline="true" label-position="top">
  663. <el-form-item :label="'生产维修评估说明'">
  664. <el-input type="textarea" v-model="confirmData.confirmRemark" :rows="3" resize='none' show-word-limit style="width: 285px"></el-input>
  665. </el-form-item>
  666. </el-form>
  667. <el-footer style="height:30px;margin-top: 50px;text-align:center">
  668. <el-button style="margin-left: -12px" type="primary" @click="confirmDefectOrder()">保存</el-button>
  669. <el-button type="primary" @click="confirmDefectModal = false">关闭</el-button>
  670. </el-footer>
  671. </el-dialog>
  672. <el-dialog title="批量审核" top="25vh" :close-on-click-modal="false" v-drag :visible.sync="submitModelsFlag" width="340px">
  673. <el-form :inline="true" label-position="top">
  674. <el-form-item label="难度等级">
  675. <el-select filterable v-model="submitData.difficultyLevel" style="width: 130px" placeholder="请评估难度等级">
  676. <el-option label="难度一" value="难度一"></el-option>
  677. <el-option label="难度二" value="难度二"></el-option>
  678. <el-option label="难度三" value="难度三"></el-option>
  679. </el-select>
  680. </el-form-item>
  681. <el-form-item label=" " style="margin-left: 20px">
  682. <el-checkbox v-model="knowledgeFlag" true-label="Y">维修记录移至知识库</el-checkbox>
  683. </el-form-item>
  684. </el-form>
  685. <el-form :inline="true" label-position="top">
  686. <el-form-item label="备注">
  687. <el-input v-model="submitData.difficultyRemark" style="width: 300px"></el-input>
  688. </el-form-item>
  689. </el-form>
  690. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  691. <el-button type="primary" @click="submitModels()">确定</el-button>
  692. <el-button type="primary" @click="submitModelsFlag = false">取消</el-button>
  693. </el-footer>
  694. </el-dialog>
  695. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  696. </div>
  697. </template>
  698. <script>
  699. import {
  700. eamWorkOrderSearchForDefect,
  701. cancelOrder,
  702. changeOrderOperator,
  703. submitDefect,
  704. searchFileUrl,
  705. getEmpyDeptList,
  706. getDeptList,
  707. updateReportResult, // 修改执行结果
  708. getSiteAndBuByUserName,
  709. confirmDefectOrder, // 维修确认
  710. submitDefects, // 批量审核
  711. getFeedBackImages, // 获取故障图片
  712. queryHistoryRecord, // 查看维修历史
  713. getSparPartImages, // 获取备件图片
  714. } from "@/api/eam/eam.js"
  715. import {
  716. downLoadObjectFile,
  717. getDeviceCorePartList,
  718. getDevicePartList,
  719. getKnowledgeBaseList,
  720. getFileContentList
  721. } from '@/api/eam/eam_object_list.js';
  722. import {
  723. getTableDefaultListLanguage,
  724. getTableUserListLanguage,
  725. } from "@/api/table.js"
  726. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  727. import Chooselist from '@/views/modules/common/Chooselist_eam'
  728. import {isAuth} from '../../../utils'
  729. export default {
  730. components: {
  731. Chooselist
  732. },
  733. watch: {
  734. searchData: {
  735. deep: true,
  736. handler: function (newV, oldV) {
  737. this.searchData.groupID = this.searchData.groupID.toUpperCase()
  738. }
  739. },
  740. "detailData.actualDate"(newV, oldV) {
  741. this.detailData.workTime = Math.ceil(Math.floor(this.dayjs(this.detailData.actualDate).diff(this.detailData.reachDate, 'seconds') / 30) / 2)
  742. },
  743. "detailData.reachDate"(newV, oldV) {
  744. this.detailData.workTime = Math.ceil(Math.floor(this.dayjs(this.detailData.actualDate).diff(this.detailData.reachDate, 'seconds') / 30) / 2)
  745. this.detailData.responseTime = Math.ceil(Math.floor(this.dayjs(this.detailData.reachDate).diff(this.detailData.createDate, 'seconds') / 30) / 2)
  746. }
  747. },
  748. data() {
  749. return {
  750. // 是否收藏
  751. favorite: false,
  752. // 导出 start
  753. exportData: [],
  754. exportName: "维修工单" + this.dayjs().format('YYYYMMDDHHmmss'),
  755. exportHeader: ["维修工单"],
  756. exportFooter: [],
  757. exportList: [],
  758. // 导出 end
  759. tagNo: '',
  760. coreComponentData: {
  761. site: '',
  762. orderNo: '',
  763. buNo: '',
  764. objectID: '',
  765. partNo: '',
  766. partDescription: '',
  767. createdBy: '',
  768. oldSerialNo: '',
  769. newSerialNo: '',
  770. },
  771. coreComponentFlag: false,
  772. searchData: {
  773. site: '',
  774. userName: this.$store.state.user.name,
  775. orderNo: '',
  776. planID: '',
  777. objectID: '',
  778. planOperator: '',
  779. planOperatorName: '',
  780. functionType: 'C',
  781. status: '',
  782. startDate: '',
  783. endDate: '',
  784. departmentName: '',
  785. documentSource: '',
  786. page: 1,
  787. limit: 10,
  788. urgency: '',
  789. result: '',
  790. repairReportingType: '',
  791. repairType: '设备维修组'
  792. },
  793. height: 200,
  794. pageIndex: 1,
  795. pageSize: 50,
  796. totalPage: 0,
  797. pageIndex2: 1,
  798. pageSize2: 20,
  799. totalPage2: 0,
  800. dataList: [],
  801. dataListLoading: false,
  802. dataListSelections: [],
  803. modalFlag: false,
  804. modalDisableFlag: false,
  805. departmentList: [],
  806. // 展示列集
  807. columnList: [
  808. {
  809. userId: this.$store.state.user.name,
  810. functionId: 101004006,
  811. serialNumber: '101004006Table1BuDesc',
  812. tableId: "101004006Table1",
  813. tableName: "维修工单表",
  814. columnProp: 'buDesc',
  815. headerAlign: "center",
  816. align: "center",
  817. columnLabel: 'BU',
  818. columnHidden: false,
  819. columnImage: false,
  820. columnSortable: false,
  821. sortLv: 0,
  822. status: true,
  823. fixed: '',
  824. columnWidth: 80,
  825. },
  826. {
  827. userId: this.$store.state.user.name,
  828. functionId: 101004006,
  829. serialNumber: '101004006Table1DisposalMeasures',
  830. tableId: "101004006Table1",
  831. tableName: "维修工单表",
  832. columnProp: 'disposalMeasures',
  833. headerAlign: "center",
  834. align: "center",
  835. columnLabel: '处置措施',
  836. columnHidden: false,
  837. columnImage: false,
  838. columnSortable: false,
  839. sortLv: 0,
  840. status: true,
  841. fixed: '',
  842. columnWidth: 80,
  843. },
  844. {
  845. userId: this.$store.state.user.name,
  846. functionId: 101004006,
  847. serialNumber: '101004006Table1OrderNo',
  848. tableId: "101004006Table1",
  849. tableName: "维修工单表",
  850. columnProp: 'orderNo',
  851. headerAlign: "center",
  852. align: "left",
  853. columnLabel: '工单编码',
  854. columnHidden: false,
  855. columnImage: false,
  856. columnSortable: true,
  857. sortLv: 0,
  858. status: true,
  859. fixed: '',
  860. columnWidth: 100,
  861. },
  862. {
  863. userId: this.$store.state.user.name,
  864. functionId: 101004006,
  865. serialNumber: '101004006Table1PlanID',
  866. tableId: "101004006Table1",
  867. tableName: "维修工单表",
  868. columnProp: 'planID',
  869. headerAlign: "center",
  870. align: "left",
  871. columnLabel: '反馈单号',
  872. columnHidden: false,
  873. columnImage: false,
  874. columnSortable: true,
  875. sortLv: 0,
  876. status: true,
  877. fixed: '',
  878. columnWidth: 100,
  879. },
  880. {
  881. userId: this.$store.state.user.name,
  882. functionId: 101004006,
  883. serialNumber: '101004006Table1FeedBackDesc',
  884. tableId: "101004006Table1",
  885. tableName: "维修工单表",
  886. columnProp: 'feedBackDesc',
  887. headerAlign: "center",
  888. align: "left",
  889. columnLabel: '反馈描述',
  890. columnHidden: false,
  891. columnImage: false,
  892. columnSortable: true,
  893. sortLv: 0,
  894. status: true,
  895. fixed: '',
  896. columnWidth: 200,
  897. },
  898. {
  899. userId: this.$store.state.user.name,
  900. functionId: 101004006,
  901. serialNumber: '101004006Table1DefectID',
  902. tableId: "101004006Table1",
  903. tableName: "维修工单表",
  904. columnProp: 'defectID',
  905. headerAlign: "center",
  906. align: "left",
  907. columnLabel: '故障编码',
  908. columnHidden: false,
  909. columnImage: false,
  910. columnSortable: false,
  911. sortLv: 0,
  912. status: true,
  913. fixed: '',
  914. columnWidth: 100,
  915. },
  916. {
  917. userId: this.$store.state.user.name,
  918. functionId: 101004006,
  919. serialNumber: '101004006Table1DefectDesc',
  920. tableId: "101004006Table1",
  921. tableName: "维修工单表",
  922. columnProp: 'defectDesc',
  923. headerAlign: "center",
  924. align: "left",
  925. columnLabel: '故障名称',
  926. columnHidden: false,
  927. columnImage: false,
  928. columnSortable: false,
  929. sortLv: 0,
  930. status: true,
  931. fixed: '',
  932. columnWidth: 120,
  933. },
  934. {
  935. userId: this.$store.state.user.name,
  936. functionId: 101004006,
  937. serialNumber: '101004006Table1ObjectID',
  938. tableId: "101004006Table1",
  939. tableName: "维修工单表",
  940. columnProp: 'objectID',
  941. headerAlign: "center",
  942. align: "left",
  943. columnLabel: '设备编码',
  944. columnHidden: false,
  945. columnImage: false,
  946. columnSortable: false,
  947. sortLv: 0,
  948. status: true,
  949. fixed: '',
  950. columnWidth: 100,
  951. },
  952. {
  953. userId: this.$store.state.user.name,
  954. functionId: 101004006,
  955. serialNumber: '101004006Table1ObjectDesc',
  956. tableId: "101004006Table1",
  957. tableName: "维修工单表",
  958. columnProp: 'objectDesc',
  959. headerAlign: "center",
  960. align: "left",
  961. columnLabel: '设备名称',
  962. columnHidden: false,
  963. columnImage: false,
  964. columnSortable: false,
  965. sortLv: 0,
  966. status: true,
  967. fixed: '',
  968. columnWidth: 150,
  969. },
  970. {
  971. userId: this.$store.state.user.name,
  972. functionId: 101004006,
  973. serialNumber: '101004006Table1ResourceDesc',
  974. tableId: "101004006Table1",
  975. tableName: "维修工单表",
  976. columnProp: 'resourceDesc',
  977. headerAlign: "center",
  978. align: "left",
  979. columnLabel: '机台名称',
  980. columnHidden: false,
  981. columnImage: false,
  982. columnSortable: false,
  983. sortLv: 0,
  984. status: true,
  985. fixed: '',
  986. columnWidth: 120,
  987. },
  988. {
  989. userId: this.$store.state.user.name,
  990. functionId: 101004006,
  991. serialNumber: '101004006Table1DepartmentName',
  992. tableId: "101004006Table1",
  993. tableName: "维修工单表",
  994. columnProp: 'departmentName',
  995. headerAlign: "center",
  996. align: "left",
  997. columnLabel: '设备部门',
  998. columnHidden: false,
  999. columnImage: false,
  1000. columnSortable: false,
  1001. sortLv: 0,
  1002. status: true,
  1003. fixed: '',
  1004. columnWidth: 100,
  1005. },
  1006. {
  1007. userId: this.$store.state.user.name,
  1008. functionId: 101004006,
  1009. serialNumber: '101004006Table1CreateBy',
  1010. tableId: "101004006Table1",
  1011. tableName: "维修工单表",
  1012. columnProp: 'createBy',
  1013. headerAlign: "center",
  1014. align: "center",
  1015. columnLabel: '报修人员名称',
  1016. columnHidden: false,
  1017. columnImage: false,
  1018. columnSortable: false,
  1019. sortLv: 0,
  1020. status: true,
  1021. fixed: '',
  1022. columnWidth: 100,
  1023. },
  1024. {
  1025. userId: this.$store.state.user.name,
  1026. functionId: 101004006,
  1027. serialNumber: '101004006Table1Status',
  1028. tableId: "101004006Table1",
  1029. tableName: "维修工单表",
  1030. columnProp: 'status',
  1031. headerAlign: "center",
  1032. align: "center",
  1033. columnLabel: '状态',
  1034. columnHidden: false,
  1035. columnImage: false,
  1036. columnSortable: true,
  1037. sortLv: 0,
  1038. status: true,
  1039. fixed: '',
  1040. columnWidth: 80,
  1041. },
  1042. {
  1043. userId: this.$store.state.user.name,
  1044. functionId: 101004006,
  1045. serialNumber: '101004006Table1PlanOperatorName',
  1046. tableId: "101004006Table1",
  1047. tableName: "维修工单表",
  1048. columnProp: 'planOperatorName',
  1049. headerAlign: "center",
  1050. align: "center",
  1051. columnLabel: '计划执行人员',
  1052. columnHidden: false,
  1053. columnImage: false,
  1054. columnSortable: false,
  1055. sortLv: 0,
  1056. status: true,
  1057. fixed: '',
  1058. columnWidth: 100,
  1059. },
  1060. {
  1061. userId: this.$store.state.user.name,
  1062. functionId: 101004006,
  1063. serialNumber: '101004006Table1ActualOperatorName',
  1064. tableId: "101004006Table1",
  1065. tableName: "维修工单表",
  1066. columnProp: 'actualOperatorName',
  1067. headerAlign: "center",
  1068. align: "center",
  1069. columnLabel: '实际执行人员',
  1070. columnHidden: false,
  1071. columnImage: false,
  1072. columnSortable: false,
  1073. sortLv: 0,
  1074. status: true,
  1075. fixed: '',
  1076. columnWidth: 100,
  1077. },
  1078. {
  1079. userId: this.$store.state.user.name,
  1080. functionId: 101004006,
  1081. serialNumber: '101004006Table1PlanDate',
  1082. tableId: "101004006Table1",
  1083. tableName: "维修工单表",
  1084. columnProp: 'planDate',
  1085. headerAlign: "center",
  1086. align: "center",
  1087. columnLabel: '计划执行日期',
  1088. columnHidden: false,
  1089. columnImage: false,
  1090. columnSortable: true,
  1091. sortLv: 0,
  1092. status: true,
  1093. fixed: '',
  1094. columnWidth: 100,
  1095. },
  1096. {
  1097. userId: this.$store.state.user.name,
  1098. functionId: 101004006,
  1099. serialNumber: '101004006Table1CreatedDate',
  1100. tableId: "101004006Table1",
  1101. tableName: "维修工单表",
  1102. columnProp: 'createdDate',
  1103. headerAlign: "center",
  1104. align: "center",
  1105. columnLabel: '故障时间',
  1106. columnHidden: false,
  1107. columnImage: false,
  1108. columnSortable: true,
  1109. sortLv: 0,
  1110. status: true,
  1111. fixed: '',
  1112. columnWidth: 140,
  1113. },
  1114. {
  1115. userId: this.$store.state.user.name,
  1116. functionId: 101004006,
  1117. serialNumber: '101004006Table1ReachDate',
  1118. tableId: "101004006Table1",
  1119. tableName: "维修工单表",
  1120. columnProp: 'reachDate',
  1121. headerAlign: "center",
  1122. align: "center",
  1123. columnLabel: '到达时间',
  1124. columnHidden: false,
  1125. columnImage: false,
  1126. columnSortable: true,
  1127. sortLv: 0,
  1128. status: true,
  1129. fixed: '',
  1130. columnWidth: 140,
  1131. },
  1132. {
  1133. userId: this.$store.state.user.name,
  1134. functionId: 101004006,
  1135. serialNumber: '101004006Table1ActualDate',
  1136. tableId: "101004006Table1",
  1137. tableName: "维修工单表",
  1138. columnProp: 'actualDate',
  1139. headerAlign: "center",
  1140. align: "center",
  1141. columnLabel: '实际执行时间',
  1142. columnHidden: false,
  1143. columnImage: false,
  1144. columnSortable: true,
  1145. sortLv: 0,
  1146. status: true,
  1147. fixed: '',
  1148. columnWidth: 140,
  1149. },
  1150. {
  1151. userId: this.$store.state.user.name,
  1152. functionId: 101004006,
  1153. serialNumber: '101004006Table1ResponseTime',
  1154. tableId: "101004006Table1",
  1155. tableName: "维修工单表",
  1156. columnProp: 'responseTime',
  1157. headerAlign: "center",
  1158. align: "right",
  1159. columnLabel: '维修响应时长(m)',
  1160. columnHidden: false,
  1161. columnImage: false,
  1162. columnSortable: false,
  1163. sortLv: 0,
  1164. status: true,
  1165. fixed: '',
  1166. columnWidth: 110,
  1167. },
  1168. {
  1169. userId: this.$store.state.user.name,
  1170. functionId: 101004006,
  1171. serialNumber: '101004006Table1WorkTime',
  1172. tableId: "101004006Table1",
  1173. tableName: "维修工单表",
  1174. columnProp: 'workTime',
  1175. headerAlign: "center",
  1176. align: "right",
  1177. columnLabel: '工作时长(m)',
  1178. columnHidden: false,
  1179. columnImage: false,
  1180. columnSortable: false,
  1181. sortLv: 0,
  1182. status: true,
  1183. fixed: '',
  1184. columnWidth: 80,
  1185. },
  1186. {
  1187. userId: this.$store.state.user.name,
  1188. functionId: 101004006,
  1189. serialNumber: '101004006Table1DifficultyLevel',
  1190. tableId: "101004006Table1",
  1191. tableName: "维修工单表",
  1192. columnProp: 'difficultyLevel',
  1193. headerAlign: "center",
  1194. align: "center",
  1195. columnLabel: '难度等级',
  1196. columnHidden: false,
  1197. columnImage: false,
  1198. columnSortable: false,
  1199. sortLv: 0,
  1200. status: true,
  1201. fixed: '',
  1202. columnWidth: 80,
  1203. },
  1204. {
  1205. userId: this.$store.state.user.name,
  1206. functionId: 101004006,
  1207. serialNumber: '101004006Table1DifficultyRemark',
  1208. tableId: "101004006Table1",
  1209. tableName: "维修工单表",
  1210. columnProp: 'difficultyRemark',
  1211. headerAlign: "center",
  1212. align: "left",
  1213. columnLabel: '难度备注',
  1214. columnHidden: false,
  1215. columnImage: false,
  1216. columnSortable: false,
  1217. sortLv: 0,
  1218. status: true,
  1219. fixed: '',
  1220. columnWidth: 120,
  1221. },
  1222. {
  1223. userId: this.$store.state.user.name,
  1224. functionId: 101004006,
  1225. serialNumber: '101004006Table1DocumentSource',
  1226. tableId: "101004006Table1",
  1227. tableName: "维修工单表",
  1228. columnProp: 'documentSource',
  1229. headerAlign: "center",
  1230. align: "center",
  1231. columnLabel: '单据来源',
  1232. columnHidden: false,
  1233. columnImage: false,
  1234. columnSortable: false,
  1235. sortLv: 0,
  1236. status: true,
  1237. fixed: '',
  1238. columnWidth: 100,
  1239. },
  1240. {
  1241. userId: this.$store.state.user.name,
  1242. functionId: 101004006,
  1243. serialNumber: '101004006Table1FaultReason',
  1244. tableId: "101004006Table1",
  1245. tableName: "维修工单表",
  1246. columnProp: 'faultReason',
  1247. headerAlign: "center",
  1248. align: "left",
  1249. columnLabel: '故障原因',
  1250. columnHidden: false,
  1251. columnImage: false,
  1252. columnSortable: false,
  1253. sortLv: 0,
  1254. status: true,
  1255. fixed: '',
  1256. columnWidth: 200,
  1257. },
  1258. {
  1259. userId: this.$store.state.user.name,
  1260. functionId: 101004006,
  1261. serialNumber: '101004006Table1HandlingMethod',
  1262. tableId: "101004006Table1",
  1263. tableName: "维修工单表",
  1264. columnProp: 'handlingMethod',
  1265. headerAlign: "center",
  1266. align: "left",
  1267. columnLabel: '处理方式',
  1268. columnHidden: false,
  1269. columnImage: false,
  1270. columnSortable: false,
  1271. sortLv: 0,
  1272. status: true,
  1273. fixed: '',
  1274. columnWidth: 200,
  1275. },
  1276. {
  1277. userId: this.$store.state.user.name,
  1278. functionId: 101004006,
  1279. serialNumber: '101004006Table1PreventiveMeasure',
  1280. tableId: "101004006Table1",
  1281. tableName: "维修工单表",
  1282. columnProp: 'preventiveMeasure',
  1283. headerAlign: "center",
  1284. align: "left",
  1285. columnLabel: '预防措施',
  1286. columnHidden: false,
  1287. columnImage: false,
  1288. columnSortable: false,
  1289. sortLv: 0,
  1290. status: true,
  1291. fixed: '',
  1292. columnWidth: 200,
  1293. },
  1294. {
  1295. userId: this.$store.state.user.name,
  1296. functionId: 101004006,
  1297. serialNumber: '101004006Table1Remark',
  1298. tableId: "101004006Table1",
  1299. tableName: "维修工单表",
  1300. columnProp: 'remark',
  1301. headerAlign: "center",
  1302. align: "left",
  1303. columnLabel: '备注说明',
  1304. columnHidden: false,
  1305. columnImage: false,
  1306. columnSortable: false,
  1307. sortLv: 0,
  1308. status: true,
  1309. fixed: '',
  1310. columnWidth: 200,
  1311. },
  1312. ],
  1313. changeModelFlag: false,
  1314. planOperator: '',
  1315. planOperatorName: '',
  1316. submitData: {
  1317. site: '',
  1318. buNo: '',
  1319. orderNo: '',
  1320. planID: '',
  1321. objectID: '',
  1322. checker: '',
  1323. checkerName: '',
  1324. difficultyLevel: '',
  1325. difficultyRemark: '',
  1326. status: '',
  1327. updateBy: this.$store.state.user.name,
  1328. createBy: this.$store.state.user.name,
  1329. planDesc: '',
  1330. disposalMeasures: '',
  1331. defectID: '',
  1332. defectDesc: '',
  1333. remark: '',
  1334. faultReason: '',
  1335. handlingMethod: '',
  1336. preventiveMeasure: '',
  1337. feedbackBy: '',
  1338. actualOperatorName: '',
  1339. knowledgeFlag: '',
  1340. },
  1341. submitModelFlag: false,
  1342. detailData: {
  1343. site: '',
  1344. buNo: '',
  1345. orderNo: '',
  1346. planID: '',
  1347. objectID: '',
  1348. objectDesc: '',
  1349. status: '',
  1350. remark: '',
  1351. workTime: '',
  1352. result: '',
  1353. defectID: '',
  1354. defectDesc: '',
  1355. actualOperatorName: '',
  1356. planDate: '',
  1357. reachDate: '',
  1358. actualDate: '',
  1359. planDesc: '',
  1360. disposalMeasures: '',
  1361. handlingMethod: '',
  1362. functionType: '',
  1363. resourceDesc: '',
  1364. feedBackDesc: '',
  1365. faultReason: '',
  1366. preventiveMeasure: '',
  1367. corePartNo: '',
  1368. corePartDescription: '',
  1369. oldSerialNo: '',
  1370. newSerialNo: '',
  1371. planOperatorName: '',
  1372. createBy: '',
  1373. createdDate: '',
  1374. reachOperator: '',
  1375. reachOperatorName: '',
  1376. responseTime: '',
  1377. createDate: '',
  1378. confirmAssessment: '',
  1379. confirmRemark: '',
  1380. checkAssessment: '',
  1381. checkNotes: '',
  1382. knowledgeFlag: '',
  1383. shutdownWarranty: '',
  1384. startDate: '',
  1385. endDate: ''
  1386. },
  1387. detailModelFlag: false,
  1388. descImages: [],
  1389. imageModalFlag: false,
  1390. departmentModelFlag: false,
  1391. departmentData: {
  1392. site: '',
  1393. buNo: '',
  1394. deptId: '',
  1395. deptName: '',
  1396. },
  1397. departmentListSelections: [],
  1398. departmentDetailList: [
  1399. {
  1400. columnProp: 'deptId',
  1401. headerAlign: "center",
  1402. align: "center",
  1403. columnLabel: '部门编码',
  1404. columnHidden: false,
  1405. columnImage: false,
  1406. columnSortable: false,
  1407. sortLv: 0,
  1408. status: true,
  1409. fixed: '',
  1410. },
  1411. {
  1412. columnProp: 'deptName',
  1413. headerAlign: "center",
  1414. align: "center",
  1415. columnLabel: '部门名称',
  1416. columnHidden: false,
  1417. columnImage: false,
  1418. columnSortable: false,
  1419. sortLv: 0,
  1420. status: true,
  1421. fixed: '',
  1422. },
  1423. ],
  1424. userBuList: [],
  1425. authSearch: false,
  1426. authChange: false,
  1427. authDetail: false,
  1428. authCancel: false,
  1429. authCheck: false,
  1430. menuId: this.$route.meta.menuId,
  1431. confirmData: {
  1432. site: '',
  1433. buNo: '',
  1434. orderNo: '',
  1435. functionType: '',
  1436. confirmResult: '',
  1437. confirmAssessment: '',
  1438. confirmRemark: '',
  1439. confirmBy: ''
  1440. },
  1441. confirmDefectModal: false,
  1442. submitModelsFlag: false,
  1443. activeTable: 'inspection_form',
  1444. feedBackImages: [],
  1445. sparPartImages: [],
  1446. partSpareList: [],
  1447. historyRecordList: [],
  1448. columnFeedBackImages: [
  1449. {
  1450. columnProp: 'fileName',
  1451. headerAlign: 'center',
  1452. align: 'left',
  1453. columnLabel: '文件名称',
  1454. columnHidden: false,
  1455. columnImage: false,
  1456. status: true,
  1457. fixed: false
  1458. },
  1459. {
  1460. columnProp: 'typeFlag',
  1461. headerAlign: 'center',
  1462. align: 'center',
  1463. columnLabel: '图片来源',
  1464. columnHidden: false,
  1465. columnImage: false,
  1466. status: true,
  1467. fixed: false
  1468. },
  1469. {
  1470. columnProp: 'createdBy',
  1471. headerAlign: 'center',
  1472. align: 'center',
  1473. columnLabel: '上传人',
  1474. columnHidden: false,
  1475. columnImage: false,
  1476. status: true,
  1477. fixed: false
  1478. },
  1479. {
  1480. columnProp: 'createDate',
  1481. headerAlign: 'center',
  1482. align: 'center',
  1483. columnLabel: '上传时间',
  1484. columnHidden: false,
  1485. columnImage: false,
  1486. status: true,
  1487. fixed: false
  1488. }
  1489. ],
  1490. columnSparPartImages: [
  1491. {
  1492. columnProp: 'fileName',
  1493. headerAlign: 'center',
  1494. align: 'left',
  1495. columnLabel: '文件名称',
  1496. columnHidden: false,
  1497. columnImage: false,
  1498. status: true,
  1499. fixed: false
  1500. },
  1501. {
  1502. columnProp: 'createdBy',
  1503. headerAlign: 'center',
  1504. align: 'center',
  1505. columnLabel: '上传人',
  1506. columnHidden: false,
  1507. columnImage: false,
  1508. status: true,
  1509. fixed: false
  1510. },
  1511. {
  1512. columnProp: 'createDate',
  1513. headerAlign: 'center',
  1514. align: 'center',
  1515. columnLabel: '上传时间',
  1516. columnHidden: false,
  1517. columnImage: false,
  1518. status: true,
  1519. fixed: false
  1520. }
  1521. ],
  1522. columnPartSpareList: [
  1523. {
  1524. columnProp: 'partNo',
  1525. headerAlign: 'center',
  1526. align: 'center',
  1527. columnLabel: '备品备件编码',
  1528. columnHidden: false,
  1529. columnImage: false,
  1530. status: true,
  1531. fixed: false,
  1532. columnWidth: 120,
  1533. },
  1534. {
  1535. columnProp: 'partDescription',
  1536. headerAlign: 'center',
  1537. align: 'left',
  1538. columnLabel: '备品备件名称',
  1539. columnHidden: false,
  1540. columnImage: false,
  1541. status: true,
  1542. fixed: false,
  1543. columnWidth: 150,
  1544. },
  1545. {
  1546. columnProp: 'spec',
  1547. headerAlign: 'center',
  1548. align: 'left',
  1549. columnLabel: '规格型号',
  1550. columnHidden: false,
  1551. columnImage: false,
  1552. status: true,
  1553. fixed: false,
  1554. columnWidth: 120,
  1555. },
  1556. {
  1557. columnProp: 'umid',
  1558. headerAlign: 'center',
  1559. align: 'left',
  1560. columnLabel: '单位',
  1561. columnHidden: false,
  1562. columnImage: false,
  1563. status: true,
  1564. fixed: false,
  1565. columnWidth: 100,
  1566. },
  1567. ],
  1568. columnHistoryList: [
  1569. {
  1570. columnWidth: 100,
  1571. columnProp: 'orderNo',
  1572. headerAlign: "center",
  1573. align: "left",
  1574. columnLabel: '工单编号',
  1575. columnHidden: false,
  1576. columnImage: false,
  1577. columnSortable: false,
  1578. sortLv: 0,
  1579. status: true,
  1580. fixed: '',
  1581. },
  1582. {
  1583. columnWidth: 200,
  1584. columnProp: 'planDesc',
  1585. headerAlign: "center",
  1586. align: "left",
  1587. columnLabel: '故障描述',
  1588. columnHidden: false,
  1589. columnImage: false,
  1590. columnSortable: false,
  1591. sortLv: 0,
  1592. status: true,
  1593. fixed: '',
  1594. },
  1595. {
  1596. columnWidth: 120,
  1597. columnProp: 'defectDesc',
  1598. headerAlign: "center",
  1599. align: "left",
  1600. columnLabel: '故障名称',
  1601. columnHidden: false,
  1602. columnImage: false,
  1603. columnSortable: false,
  1604. sortLv: 0,
  1605. status: true,
  1606. fixed: '',
  1607. },
  1608. {
  1609. columnWidth: 100,
  1610. columnProp: 'result',
  1611. headerAlign: "center",
  1612. align: "center",
  1613. columnLabel: '维修结论',
  1614. columnHidden: false,
  1615. columnImage: false,
  1616. columnSortable: false,
  1617. sortLv: 0,
  1618. status: true,
  1619. fixed: '',
  1620. },
  1621. {
  1622. columnWidth: 100,
  1623. columnProp: 'disposalMeasures',
  1624. headerAlign: "center",
  1625. align: "left",
  1626. columnLabel: '处置措施',
  1627. columnHidden: false,
  1628. columnImage: false,
  1629. columnSortable: false,
  1630. sortLv: 0,
  1631. status: true,
  1632. fixed: '',
  1633. },
  1634. {
  1635. columnWidth: 100,
  1636. columnProp: 'actualOperatorName',
  1637. headerAlign: "center",
  1638. align: "center",
  1639. columnLabel: '维修人员',
  1640. columnHidden: false,
  1641. columnImage: false,
  1642. columnSortable: false,
  1643. sortLv: 0,
  1644. status: true,
  1645. fixed: '',
  1646. },
  1647. {
  1648. columnWidth: 80,
  1649. columnProp: 'workTime',
  1650. headerAlign: "center",
  1651. align: "right",
  1652. columnLabel: '工作时长(m)',
  1653. columnHidden: false,
  1654. columnImage: false,
  1655. columnSortable: false,
  1656. sortLv: 0,
  1657. status: true,
  1658. fixed: '',
  1659. },
  1660. {
  1661. columnWidth: 130,
  1662. columnProp: 'actualDate',
  1663. headerAlign: "center",
  1664. align: "center",
  1665. columnLabel: '维修时间',
  1666. columnHidden: false,
  1667. columnImage: false,
  1668. columnSortable: false,
  1669. sortLv: 0,
  1670. status: true,
  1671. fixed: '',
  1672. },
  1673. {
  1674. columnWidth: 200,
  1675. columnProp: 'remark',
  1676. headerAlign: "center",
  1677. align: "left",
  1678. columnLabel: '备注说明',
  1679. columnHidden: false,
  1680. columnImage: false,
  1681. columnSortable: false,
  1682. sortLv: 0,
  1683. status: true,
  1684. fixed: '',
  1685. },
  1686. ],
  1687. columnCoreComponent: [
  1688. {
  1689. columnProp: 'partNo',
  1690. headerAlign: 'center',
  1691. align: 'left',
  1692. columnLabel: '备件编码',
  1693. columnHidden: false,
  1694. columnImage: false,
  1695. status: true,
  1696. fixed: false,
  1697. columnWidth: 120,
  1698. },
  1699. {
  1700. columnProp: 'partDescription',
  1701. headerAlign: 'center',
  1702. align: 'left',
  1703. columnLabel: '备件名称',
  1704. columnHidden: false,
  1705. columnImage: false,
  1706. status: true,
  1707. fixed: false,
  1708. columnWidth: 200,
  1709. },
  1710. {
  1711. columnProp: 'oldSerialNo',
  1712. headerAlign: 'center',
  1713. align: 'left',
  1714. columnLabel: '老序列号',
  1715. columnHidden: false,
  1716. columnImage: false,
  1717. status: true,
  1718. fixed: false,
  1719. columnWidth: 120,
  1720. },
  1721. {
  1722. columnProp: 'newSerialNo',
  1723. headerAlign: 'center',
  1724. align: 'left',
  1725. columnLabel: '新序列号',
  1726. columnHidden: false,
  1727. columnImage: false,
  1728. status: true,
  1729. fixed: false,
  1730. columnWidth: 120,
  1731. },
  1732. ],
  1733. knowledgeFlag: '',
  1734. corePartSpareList: []
  1735. }
  1736. },
  1737. mounted() {
  1738. this.$nextTick(() => {
  1739. this.height = window.innerHeight - 210
  1740. })
  1741. },
  1742. created() {
  1743. // 按钮控制
  1744. this.getButtonAuthData()
  1745. // 获取用户的 site 和 bu
  1746. this.getSiteAndBuByUserName()
  1747. this.favoriteIsOk()
  1748. // 动态列
  1749. this.getTableUserColumn(this.$route.meta.menuId + 'table1', 1)
  1750. if (!this.authSearch) {
  1751. // 查询登陆人员的部门,并过滤出相应工单
  1752. this.getUserDept()
  1753. }
  1754. },
  1755. methods: {
  1756. // ======= 正则校验 =======
  1757. handleInput(value, type) {
  1758. // 大于等于0,且只能输入4位小数
  1759. let val = value.replace(/^\D*([0-9]\d*\.?\d{0,4})?.*$/, '$1')
  1760. if (val === null || val === undefined || val === '') {
  1761. val = 0
  1762. }
  1763. if (type === 1) {
  1764. this.detailData.workTime = val
  1765. } else if (type === 2) {
  1766. this.detailData.responseTime = val
  1767. }
  1768. },
  1769. // 获取用户的bu
  1770. getSiteAndBuByUserName() {
  1771. let tempData = {
  1772. username: this.$store.state.user.name,
  1773. }
  1774. getSiteAndBuByUserName(tempData).then(({data}) => {
  1775. if (data.code === 0) {
  1776. this.userBuList = data.rows
  1777. }
  1778. })
  1779. },
  1780. // 控制单行的背景颜色
  1781. controlRowStyle({row, rowIndex}) {
  1782. // 区分不同的样式对应不同的颜色
  1783. if (row.status === '待审核') {
  1784. return "background-color: #D8ECF1"
  1785. }
  1786. },
  1787. // 查询登陆人员的部门
  1788. getUserDept() {
  1789. let tempDate = {
  1790. site: '',
  1791. username: this.$store.state.user.name,
  1792. }
  1793. getDeptList(tempDate).then(({data}) => {
  1794. if (data.code === 0) {
  1795. data.rows.forEach(val => {
  1796. this.searchData.departmentName = this.searchData.departmentName + ";" + val
  1797. })
  1798. this.searchData.departmentName = this.searchData.departmentName.substring(1)
  1799. this.getDataList()
  1800. }
  1801. })
  1802. },
  1803. // 校验用户是否收藏
  1804. favoriteIsOk() {
  1805. let userFavorite = {
  1806. userId: this.$store.state.user.id,
  1807. languageCode: this.$i18n.locale
  1808. }
  1809. userFavoriteList(userFavorite).then(({data}) => {
  1810. for (let i = 0; i < data.list.length; i++) {
  1811. if (this.$route.meta.menuId === data.list[i].menuId) {
  1812. this.favorite = true
  1813. }
  1814. }
  1815. })
  1816. },
  1817. // 收藏 OR 取消收藏
  1818. favoriteFunction() {
  1819. let userFavorite = {
  1820. userId: this.$store.state.user.id,
  1821. functionId: this.$route.meta.menuId,
  1822. }
  1823. if (this.favorite) {
  1824. removeUserFavorite(userFavorite).then(({data}) => {
  1825. this.$message.success(data.msg)
  1826. this.favorite = false
  1827. })
  1828. } else {
  1829. // 收藏
  1830. saveUserFavorite(userFavorite).then(({data}) => {
  1831. this.$message.success(data.msg)
  1832. this.favorite = true
  1833. })
  1834. }
  1835. },
  1836. // 获取基础数据列表S
  1837. getBaseList(val, type) {
  1838. this.tagNo = val
  1839. this.$nextTick(() => {
  1840. let strVal = ''
  1841. if (val === 201) {
  1842. strVal = this.planOperator
  1843. this.$refs.baseList.init(val, strVal)
  1844. }
  1845. })
  1846. },
  1847. /* 列表方法的回调 */
  1848. getBaseData(val) {
  1849. if (this.tagNo === 201) {
  1850. this.planOperator = val.username
  1851. this.planOperatorName = val.user_display
  1852. }
  1853. },
  1854. //导出excel
  1855. async createExportData() {
  1856. this.searchData.limit = -1
  1857. this.searchData.page = 1
  1858. await eamWorkOrderSearchForDefect(this.searchData).then(({data}) => {
  1859. this.exportList = data.page.list
  1860. })
  1861. return this.exportList
  1862. },
  1863. startDownload() {
  1864. },
  1865. finishDownload() {
  1866. },
  1867. fields() {
  1868. let json = "{"
  1869. this.columnList.forEach((item, index) => {
  1870. if (index == this.columnList.length - 1) {
  1871. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  1872. } else {
  1873. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  1874. }
  1875. })
  1876. json += "}"
  1877. let s = eval("(" + json + ")")
  1878. return s
  1879. },
  1880. // 获取数据列表
  1881. getDataList() {
  1882. this.searchData.limit = this.pageSize
  1883. this.searchData.page = this.pageIndex
  1884. eamWorkOrderSearchForDefect(this.searchData).then(({data}) => {
  1885. if (data.code === 0) {
  1886. this.dataList = data.page.list
  1887. this.pageIndex = data.page.currPage
  1888. this.pageSize = data.page.pageSize
  1889. this.totalPage = data.page.totalCount
  1890. }
  1891. this.dataListLoading = false
  1892. })
  1893. },
  1894. // 每页数
  1895. sizeChangeHandle(val) {
  1896. this.pageSize = val
  1897. this.pageIndex = 1
  1898. this.getDataList()
  1899. },
  1900. // 当前页
  1901. currentChangeHandle(val) {
  1902. this.pageIndex = val
  1903. this.getDataList()
  1904. },
  1905. // 每页数
  1906. sizeChangeHandle2 (val) {
  1907. this.pageSize2 = val
  1908. this.pageIndex2 = 1
  1909. this.queryHistoryRecord()
  1910. },
  1911. // 当前页
  1912. currentChangeHandle2 (val) {
  1913. this.pageIndex2 = val
  1914. this.queryHistoryRecord()
  1915. },
  1916. // 多选
  1917. selectionChangeHandle(val) {
  1918. this.dataListSelections = val
  1919. },
  1920. cancelOrder(row) {
  1921. this.$confirm(`是否取消选定工单?`, '提示', {
  1922. confirmButtonText: '确定',
  1923. cancelButtonText: '取消',
  1924. type: 'warning'
  1925. }).then(() => {
  1926. cancelOrder(row).then(({data}) => {
  1927. if (data && data.code === 0) {
  1928. this.getDataList()
  1929. this.$message({
  1930. message: '操作成功',
  1931. type: 'success',
  1932. duration: 1500,
  1933. onClose: () => {
  1934. }
  1935. })
  1936. } else {
  1937. this.$alert(data.msg, '错误', {
  1938. confirmButtonText: '确定'
  1939. })
  1940. }
  1941. })
  1942. }).catch(() => {
  1943. })
  1944. },
  1945. // 更改执行人员
  1946. changeModel() {
  1947. let tempData1 = '' // 记录不是未开工的单号
  1948. if (this.dataListSelections.length === 0) {
  1949. this.$message.warning('请勾选要更改的工单!')
  1950. return
  1951. }
  1952. for (let i = 0; i < this.dataListSelections.length; i++) {
  1953. if (this.dataListSelections[i].status !== '未开工') {
  1954. tempData1 = tempData1 + this.dataListSelections[i].orderNo + '、'
  1955. }
  1956. }
  1957. if (tempData1 !== '') {
  1958. tempData1 = tempData1.substring(0, tempData1.length - 1)
  1959. this.$message.warning('工单编码 [' + tempData1 + '] 不是未开工状态!')
  1960. return
  1961. }
  1962. this.planOperator = ''
  1963. this.planOperatorName = ''
  1964. this.changeModelFlag = true
  1965. },
  1966. changeOrderOperator() {
  1967. let inList = JSON.parse(JSON.stringify(this.dataListSelections))
  1968. for (let i = 0; i < inList.length; i++) {
  1969. inList[i].planOperator = this.planOperator
  1970. }
  1971. changeOrderOperator(inList).then(({data}) => {
  1972. if (data && data.code === 0) {
  1973. this.changeModelFlag = false
  1974. this.getDataList()
  1975. this.$message({
  1976. message: '操作成功',
  1977. type: 'success',
  1978. duration: 1500,
  1979. onClose: () => {
  1980. }
  1981. })
  1982. } else {
  1983. this.$alert(data.msg, '错误', {
  1984. confirmButtonText: '确定'
  1985. })
  1986. }
  1987. })
  1988. },
  1989. // 批量审核按钮
  1990. checkModals() {
  1991. let tempData1 = '' // 记录不是待审核的单号
  1992. if (this.dataListSelections.length === 0) {
  1993. this.$message.warning('请勾选要审核的工单!')
  1994. return
  1995. }
  1996. for (let i = 0; i < this.dataListSelections.length; i++) {
  1997. if (this.dataListSelections[i].status !== '待审核') {
  1998. tempData1 = tempData1 + this.dataListSelections[i].orderNo + '、'
  1999. }
  2000. }
  2001. if (tempData1 !== '') {
  2002. tempData1 = tempData1.substring(0, tempData1.length - 1)
  2003. this.$message.warning('工单编码 [' + tempData1 + '] 不是待审核状态!')
  2004. return
  2005. }
  2006. this.submitData.difficultyLevel = ''
  2007. this.submitData.difficultyRemark = ''
  2008. this.knowledgeFlag = ''
  2009. this.submitModelsFlag = true
  2010. },
  2011. submitModels() {
  2012. if (this.submitData.difficultyLevel === '' || this.submitData.difficultyLevel == null) {
  2013. this.$message.warning('请选择难度等级!')
  2014. return
  2015. }
  2016. const list = this.dataListSelections.map(item => ({
  2017. ...item,
  2018. checker: '',
  2019. checkerName: '',
  2020. status: '已完工',
  2021. updateBy: this.$store.state.user.name,
  2022. createBy: this.$store.state.user.name,
  2023. difficultyLevel: this.submitData.difficultyLevel,
  2024. difficultyRemark: this.submitData.difficultyRemark,
  2025. planDesc: item.feedBackDesc,
  2026. feedbackBy: item.createBy,
  2027. knowledgeFlag: ''
  2028. }))
  2029. submitDefects(list).then(({data}) => {
  2030. if (data && data.code === 0) {
  2031. this.getDataList()
  2032. this.submitModelsFlag = false
  2033. this.$message({
  2034. message: '操作成功',
  2035. type: 'success',
  2036. duration: 1500,
  2037. onClose: () => {}
  2038. })
  2039. } else {
  2040. this.$alert(data.msg, '错误', {
  2041. confirmButtonText: '确定'
  2042. })
  2043. }
  2044. })
  2045. },
  2046. // 审核按钮
  2047. checkModal() {
  2048. if (this.authCheck) {
  2049. this.$message.warning('无审核权限!')
  2050. return
  2051. }
  2052. this.submitData.site = this.detailData.site
  2053. this.submitData.buNo = this.detailData.buNo
  2054. this.submitData.orderNo = this.detailData.orderNo
  2055. this.submitData.planID = this.detailData.planID
  2056. this.submitData.objectID = this.detailData.objectID
  2057. this.submitData.planDesc = this.detailData.feedBackDesc
  2058. this.submitData.disposalMeasures = this.detailData.disposalMeasures
  2059. this.submitData.defectID = this.detailData.defectID
  2060. this.submitData.defectDesc = this.detailData.defectDesc
  2061. this.submitData.remark = this.detailData.remark
  2062. this.submitData.difficultyLevel = ''
  2063. this.submitData.difficultyRemark = ''
  2064. this.submitData.faultReason = this.detailData.faultReason
  2065. this.submitData.handlingMethod = this.detailData.handlingMethod
  2066. this.submitData.preventiveMeasure = this.detailData.preventiveMeasure
  2067. this.submitData.feedbackBy = this.detailData.createBy
  2068. this.submitData.actualOperatorName = this.detailData.actualOperatorName
  2069. this.submitData.knowledgeFlag = this.detailData.knowledgeFlag
  2070. this.submitData.updateBy = this.$store.state.user.name
  2071. if (this.detailData.status === '已完工') {
  2072. this.$confirm(`是否取消审核?`, '提示', {
  2073. confirmButtonText: '确定',
  2074. cancelButtonText: '取消',
  2075. type: 'warning'
  2076. }).then(() => {
  2077. this.submitData.status = '待审核'
  2078. submitDefect(this.submitData).then(({data}) => {
  2079. if (data && data.code === 0) {
  2080. this.getDataList()
  2081. this.detailData.status = '待审核'
  2082. this.$message({
  2083. message: '操作成功',
  2084. type: 'success',
  2085. duration: 1500,
  2086. onClose: () => {
  2087. }
  2088. })
  2089. } else {
  2090. this.$alert(data.msg, '错误', {
  2091. confirmButtonText: '确定'
  2092. })
  2093. }
  2094. })
  2095. })
  2096. } else {
  2097. this.submitData.status = '已完工'
  2098. this.submitModelFlag = true
  2099. }
  2100. },
  2101. // 确认审核
  2102. submitModel () {
  2103. if (this.submitData.difficultyLevel === '' || this.submitData.difficultyLevel == null) {
  2104. this.$message.warning('请选择难度等级!')
  2105. return
  2106. }
  2107. submitDefect(this.submitData).then(({data}) => {
  2108. if (data && data.code === 0) {
  2109. this.getDataList()
  2110. this.detailData.status = '已完工'
  2111. this.submitModelFlag = false
  2112. this.$message({
  2113. message: '操作成功',
  2114. type: 'success',
  2115. duration: 1500,
  2116. onClose: () => {}
  2117. })
  2118. } else {
  2119. this.$alert(data.msg, '错误', {
  2120. confirmButtonText: '确定'
  2121. })
  2122. }
  2123. })
  2124. },
  2125. // 详情
  2126. reportModal(row) {
  2127. this.detailData = {
  2128. ...row,
  2129. shutdownWarranty: row.repairReportingType === '设备故障' ? '是' : '否'
  2130. }
  2131. // startDate为当前日期年月日,date类型
  2132. this.detailData.startDate = new Date()
  2133. // endDate为当前日期年月日加一个月,date类型
  2134. this.detailData.endDate = new Date(new Date().setMonth(new Date().getMonth() - 1))
  2135. this.activeTable = 'inspection_form'
  2136. this.detailModelFlag = true
  2137. },
  2138. updateResult() {
  2139. if (this.authCheck) {
  2140. this.$message.warning('无审核权限!')
  2141. return
  2142. }
  2143. if (this.detailData.reachDate === '' || this.detailData.reachDate == null) {
  2144. this.$message.warning('请选择到达时间!')
  2145. return
  2146. }
  2147. if (this.detailData.actualDate === '' || this.detailData.actualDate == null) {
  2148. this.$message.warning('请选择实际执行时间!')
  2149. return
  2150. }
  2151. if (this.detailData.reachDate > this.detailData.actualDate) {
  2152. this.$message.warning('到达时间不能大于实际执行时间!')
  2153. return
  2154. }
  2155. if (this.detailData.checkAssessment === '' || this.detailData.checkAssessment == null) {
  2156. this.$message.warning('请选择维修评估结论!')
  2157. return
  2158. }
  2159. if (this.detailData.checkNotes === '' || this.detailData.checkNotes == null) {
  2160. this.$message.warning('请填写维修评估的备注说明!')
  2161. return
  2162. }
  2163. updateReportResult(this.detailData).then(({data}) => {
  2164. if (data && data.code === 0) {
  2165. this.getDataList()
  2166. this.detailModelFlag = false
  2167. this.$message({
  2168. message: '操作成功',
  2169. type: 'success',
  2170. duration: 1500,
  2171. onClose: () => {
  2172. }
  2173. })
  2174. } else {
  2175. this.$alert(data.msg, '错误', {
  2176. confirmButtonText: '确定'
  2177. })
  2178. }
  2179. })
  2180. },
  2181. // 维修确认
  2182. confirmResult(row) {
  2183. this.confirmData = {
  2184. site: row.site,
  2185. buNo: row.buNo,
  2186. orderNo: row.orderNo,
  2187. planID: row.planID,
  2188. functionType: row.functionType,
  2189. confirmResult: 'Y',
  2190. confirmAssessment: '优秀',
  2191. confirmRemark: '',
  2192. confirmBy: this.$store.state.user.name
  2193. }
  2194. this.confirmDefectModal = true
  2195. },
  2196. // 确认结果
  2197. confirmDefectOrder() {
  2198. if (this.confirmData.confirmResult === '' || this.confirmData.confirmResult == null) {
  2199. this.$message.warning('请选择确认结果!')
  2200. return
  2201. }
  2202. if (this.confirmData.confirmAssessment === '' || this.confirmData.confirmAssessment == null) {
  2203. this.$message.warning('请选择维修评估!')
  2204. return
  2205. }
  2206. if (this.confirmData.confirmRemark === '' || this.confirmData.confirmRemark == null) {
  2207. this.$message.warning('请填写生产维修评估说明!')
  2208. return
  2209. }
  2210. confirmDefectOrder(this.confirmData).then(({data}) => {
  2211. if (data && data.code === 0) {
  2212. this.getDataList()
  2213. this.confirmDefectModal = false
  2214. this.$message({
  2215. message: '操作成功',
  2216. type: 'success',
  2217. duration: 1500,
  2218. onClose: () => {}
  2219. })
  2220. } else {
  2221. this.$alert(data.msg, '错误', {
  2222. confirmButtonText: '确定'
  2223. })
  2224. }
  2225. })
  2226. },
  2227. // 查看故障图片
  2228. checkFaultImageModal() {
  2229. this.descImages = []
  2230. let tempData = {
  2231. site: this.detailData.site,
  2232. buNo: this.detailData.buNo,
  2233. orderNo: this.detailData.orderNo,
  2234. folder: 'reportFault',
  2235. }
  2236. searchFileUrl(tempData).then(({data}) => {
  2237. if (data.code === 0) {
  2238. for (let i = 0; i < data.rows.length; i++) {
  2239. this.descImages.push(data.rows[i].url)
  2240. }
  2241. } else {
  2242. this.$message.warning(data.msg)
  2243. }
  2244. })
  2245. this.imageModalFlag = true
  2246. },
  2247. // 查看备件图片
  2248. checkSparPartImageModal() {
  2249. this.descImages = []
  2250. let tempData = {
  2251. site: this.detailData.site,
  2252. buNo: this.detailData.buNo,
  2253. orderNo: this.detailData.orderNo,
  2254. folder: 'reportSparPart',
  2255. }
  2256. searchFileUrl(tempData).then(({data}) => {
  2257. if (data.code === 0) {
  2258. for (let i = 0; i < data.rows.length; i++) {
  2259. this.descImages.push(data.rows[i].url)
  2260. }
  2261. } else {
  2262. this.$message.warning(data.msg)
  2263. }
  2264. })
  2265. this.imageModalFlag = true
  2266. },
  2267. // 获取部门列表
  2268. getDepartmentList() {
  2269. // 先清空缓存选中
  2270. this.$nextTick(() => this.$refs.departmentTable.clearSelection())
  2271. // 拿到选中的部门编号
  2272. let tempDataList = (this.searchData.departmentName == null ? '' : this.searchData.departmentName).split(';')
  2273. // 查询部门
  2274. getEmpyDeptList(this.departmentData).then(({data}) => {
  2275. if (data && data.code === 0) {
  2276. this.departmentList = data.rows
  2277. this.departmentList.forEach(val => {
  2278. // 回显选中的部门
  2279. if (tempDataList.includes(val.deptName)) {
  2280. this.$nextTick(() => this.$refs.departmentTable.toggleRowSelection(val, true))
  2281. }
  2282. })
  2283. this.departmentModelFlag = true
  2284. } else {
  2285. this.$alert(data.msg, '错误', {
  2286. confirmButtonText: '确定'
  2287. })
  2288. }
  2289. })
  2290. },
  2291. // 部门
  2292. departmentClickRow(row) {
  2293. this.$refs.departmentTable.toggleRowSelection(row)
  2294. },
  2295. // 多选
  2296. selectionDepartment(val) {
  2297. this.departmentListSelections = val
  2298. },
  2299. getRowKeys(row) {
  2300. // 唯一值,一般都为id
  2301. return row.deptId
  2302. },
  2303. // 确认多选部门
  2304. confirmDepartment() {
  2305. this.searchData.departmentName = ''
  2306. for (let i = 0; i < this.departmentListSelections.length; i++) {
  2307. this.searchData.departmentName = this.searchData.departmentName + ";" + this.departmentListSelections[i].deptName
  2308. }
  2309. this.searchData.departmentName = this.searchData.departmentName.substring(1)
  2310. this.departmentModelFlag = false
  2311. },
  2312. // 清空搜索框部门
  2313. clearDepartmentName() {
  2314. this.searchData.departmentName = ''
  2315. },
  2316. // 列表表格选择替换
  2317. tabClick(tab, event) {
  2318. // 刷新列表数据
  2319. this.refreshCurrentTabTable()
  2320. },
  2321. // 刷新页签的table数据
  2322. refreshCurrentTabTable() {
  2323. // 区分不同的页签刷新不同的列表数据
  2324. if (this.activeTable === 'inspection_form') {
  2325. //this.getInspectionFormData()
  2326. } else if (this.activeTable === 'history_record') {
  2327. this.queryHistoryRecord()
  2328. } else if (this.activeTable === 'feed_back_img') {
  2329. this.getFeedBackImages()
  2330. } else if (this.activeTable === 'part_spare_list') {
  2331. this.getPartSpareList()
  2332. } else if (this.activeTable === 'eam_knowledge') {
  2333. this.queryKnowledgeRecord()
  2334. } else if (this.activeTable === 'spar_part_img') {
  2335. this.getSparPartImages()
  2336. } else if (this.activeTable === 'core_component') {
  2337. this.getCorePartSpareList()
  2338. }
  2339. },
  2340. // 获取故障图片
  2341. getFeedBackImages () {
  2342. let tempData = {
  2343. site: this.detailData.site,
  2344. buNo: this.detailData.buNo,
  2345. orderNo: this.detailData.orderNo
  2346. }
  2347. getFeedBackImages(tempData).then(({data}) => {
  2348. if (data && data.code === 0) {
  2349. this.feedBackImages = data.rows
  2350. } else {
  2351. this.feedBackImages = []
  2352. }
  2353. })
  2354. },
  2355. // 获取备件图片
  2356. getSparPartImages () {
  2357. let tempData = {
  2358. site: this.detailData.site,
  2359. buNo: this.detailData.buNo,
  2360. orderNo: this.detailData.orderNo,
  2361. folder: 'reportSparPart'
  2362. }
  2363. getSparPartImages(tempData).then(({data}) => {
  2364. if (data && data.code === 0) {
  2365. this.sparPartImages = data.rows
  2366. } else {
  2367. this.sparPartImages = []
  2368. }
  2369. })
  2370. },
  2371. // 获取备品备件信息
  2372. getPartSpareList () {
  2373. let tempData = {
  2374. site: this.detailData.site,
  2375. objectID: this.detailData.objectID
  2376. }
  2377. getDevicePartList(tempData).then(({data}) => {
  2378. // 区分请求成功和失败的状况
  2379. if (data && data.code === 200) {
  2380. this.partSpareList = data.rows
  2381. } else {
  2382. this.partSpareList = []
  2383. }
  2384. })
  2385. },
  2386. // 维修记录
  2387. queryHistoryRecord () {
  2388. let tempData = {
  2389. site: this.detailData.site,
  2390. buNo: this.detailData.buNo,
  2391. objectID: this.detailData.objectID,
  2392. functionType: 'C',
  2393. limit: this.pageSize2,
  2394. page: this.pageIndex2,
  2395. startDate: this.detailData.startDate,
  2396. endDate: this.detailData.endDate,
  2397. }
  2398. queryHistoryRecord(tempData).then(({data}) => {
  2399. if (data && data.code === 0) {
  2400. this.historyRecordList = data.page.list
  2401. this.pageIndex2 = data.page.currPage
  2402. this.pageSize2 = data.page.pageSize
  2403. this.totalPage2 = data.page.totalCount
  2404. } else {
  2405. this.historyRecordList = []
  2406. }
  2407. })
  2408. },
  2409. // 预览
  2410. previewFile (row) {
  2411. // 预览文件
  2412. let image = ['jpg', 'jpeg', 'png', 'gif', 'bmp']
  2413. let type = ''
  2414. if (image.includes(row.fileType.toLowerCase())) {
  2415. type = 'image/' + row.fileType
  2416. }
  2417. let video = ['mp4', 'avi', 'mov', 'wmv', 'flv']
  2418. if (video.includes(row.fileType.toLowerCase())) {
  2419. type = 'video/' + row.fileType
  2420. }
  2421. let txt = ['txt']
  2422. if (txt.includes(row.fileType.toLowerCase())) {
  2423. type = 'text/plain;charset=utf-8'
  2424. }
  2425. let office = ['doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx']
  2426. if (office.includes(row.fileType.toLowerCase())) {
  2427. if (row.fileType.toLowerCase() === 'doc' || row.fileType.toLowerCase() === 'docx') {
  2428. type = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
  2429. } else if (row.fileType.toLowerCase() === 'ppt' || row.fileType.toLowerCase() === 'pptx') {
  2430. type = 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
  2431. } else {
  2432. type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  2433. }
  2434. }
  2435. let pdf = ['pdf']
  2436. if (pdf.includes(row.fileType.toLowerCase())) {
  2437. type = 'application/pdf'
  2438. }
  2439. downLoadObjectFile(row).then(({data}) => {
  2440. const blob = new Blob([data], { type: type });
  2441. // 创建URL来生成预览
  2442. const fileURL = URL.createObjectURL(blob);
  2443. // 在新标签页中打开文件预览
  2444. const newTab = window.open(fileURL, '_blank')
  2445. })
  2446. },
  2447. // 下载
  2448. downloadFile (row) {
  2449. downLoadObjectFile(row)
  2450. .then(({data}) => {
  2451. // 不限制文件下载类型
  2452. const blob = new Blob([data], {type:'application/octet-stream;charset=utf-8'})
  2453. // 下载文件名称
  2454. const fileName = row.fileName
  2455. // a标签下载
  2456. const linkNode = document.createElement('a')
  2457. linkNode.download = fileName // a标签的download属性规定下载文件的名称
  2458. linkNode.style.display = 'none'
  2459. linkNode.href = URL.createObjectURL(blob) // 生成一个Blob URL
  2460. document.body.appendChild(linkNode)
  2461. linkNode.click() // 模拟在按钮上的一次鼠标单击
  2462. URL.revokeObjectURL(linkNode.href) // 释放URL 对象
  2463. document.body.removeChild(linkNode)
  2464. })
  2465. },
  2466. // 动态列开始 获取 用户保存的 格式列
  2467. async getTableUserColumn(tableId, columnId) {
  2468. let queryTableUser = {
  2469. userId: this.$store.state.user.name,
  2470. functionId: this.$route.meta.menuId,
  2471. tableId: tableId,
  2472. status: true,
  2473. languageCode: this.$i18n.locale
  2474. }
  2475. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  2476. if (data.rows.length > 0) {
  2477. switch (columnId) {
  2478. case 1:
  2479. this.columnList = data.rows
  2480. break;
  2481. }
  2482. } else {
  2483. this.getColumnList(tableId, columnId)
  2484. }
  2485. })
  2486. },
  2487. // 获取 tableDefault 列
  2488. async getColumnList(tableId, columnId) {
  2489. let queryTable = {
  2490. functionId: this.$route.meta.menuId,
  2491. tableId: tableId,
  2492. languageCode: this.$i18n.locale
  2493. }
  2494. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  2495. if (!data.rows.length == 0) {
  2496. switch (columnId) {
  2497. case 1:
  2498. this.columnList = data.rows
  2499. break;
  2500. }
  2501. }
  2502. })
  2503. },
  2504. //获取按钮的权限数据
  2505. getButtonAuthData() {
  2506. let searchFlag = this.isAuth(this.menuId + ":search")
  2507. let changeFlag = this.isAuth(this.menuId + ":change")
  2508. let detailFlag = this.isAuth(this.menuId + ":detail")
  2509. let cancelFlag = this.isAuth(this.menuId + ":cancel")
  2510. let checkFlag = this.isAuth(this.menuId + ":check")
  2511. //处理页面的权限数据
  2512. this.authSearch = !searchFlag
  2513. this.authChange = !changeFlag
  2514. this.authDetail = !detailFlag
  2515. this.authCancel = !cancelFlag
  2516. this.authCheck = !checkFlag
  2517. },
  2518. coreComponentModal() {
  2519. this.coreComponentData = {
  2520. site: this.detailData.site,
  2521. buNo: this.detailData.buNo,
  2522. orderNo: this.detailData.orderNo,
  2523. objectID: this.detailData.objectID,
  2524. partNo: this.detailData.corePartNo,
  2525. partDescription: this.detailData.corePartDescription,
  2526. createdBy: this.$store.state.user.name,
  2527. oldSerialNo: this.detailData.oldSerialNo,
  2528. newSerialNo: this.detailData.newSerialNo,
  2529. }
  2530. this.coreComponentFlag = true
  2531. },
  2532. getCorePartSpareList () {
  2533. let tempData = {
  2534. site: this.detailData.site,
  2535. buNo: this.detailData.buNo,
  2536. objectID: this.detailData.objectID,
  2537. orderNo: this.detailData.orderNo,
  2538. }
  2539. getDeviceCorePartList(tempData).then(({data}) => {
  2540. if (data && data.code === 200) {
  2541. this.corePartSpareList = data.rows
  2542. } else {
  2543. this.corePartSpareList = []
  2544. }
  2545. })
  2546. },
  2547. }
  2548. }
  2549. </script>
  2550. <style scoped>
  2551. .numInput /deep/ .el-input__inner {
  2552. text-align: right;
  2553. }
  2554. /deep/ .customer-tab .el-tabs__content {
  2555. padding: 5px !important;
  2556. }
  2557. </style>