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.

2593 lines
89 KiB

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