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.

1842 lines
64 KiB

3 years ago
1 year 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
1 year ago
1 year ago
1 year ago
1 year ago
11 months 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
1 year 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
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
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
11 months ago
3 years ago
3 years ago
1 year ago
11 months ago
1 year 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
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
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <!-- <div>-->
  4. <!-- <span @click="favoriteFunction()">-->
  5. <!-- <icon-svg :name="favorite?'xiangqufill':'xiangqu'" class="sl-svg"></icon-svg>-->
  6. <!-- </span>-->
  7. <!-- </div>-->
  8. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  9. <el-form-item :label="'BU'">
  10. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 100px">
  11. <el-option
  12. v-for = "i in userBuList"
  13. :key = "i.buNo"
  14. :label = "i.buDesc"
  15. :value = "i.buDesc">
  16. </el-option>
  17. </el-select>
  18. </el-form-item>
  19. <el-form-item :label="'紧急程度'">
  20. <el-select v-model="searchData.urgency" placeholder="请选择" clearable style="width: 100px">
  21. <el-option label="特急" value="特急"></el-option>
  22. <el-option label="紧急" value="紧急"></el-option>
  23. <el-option label="一般" value="一般"></el-option>
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item :label="'维修结论'">
  27. <el-select v-model="searchData.result" placeholder="请选择" clearable style="width: 120px">
  28. <el-option label="维修完成" value="维修完成"></el-option>
  29. <el-option label="维修失败" value="维修失败"></el-option>
  30. </el-select>
  31. </el-form-item>
  32. <el-form-item :label="'反馈单号'">
  33. <el-input v-model="searchData.planID" clearable style="width: 120px"></el-input>
  34. </el-form-item>
  35. <el-form-item :label="'工单编码'">
  36. <el-input v-model="searchData.orderNo" clearable style="width: 120px"></el-input>
  37. </el-form-item>
  38. <el-form-item :label="'设备编码'">
  39. <el-input v-model="searchData.objectID" clearable style="width: 120px"></el-input>
  40. </el-form-item>
  41. <el-form-item :label="'人员部门'">
  42. <el-input v-model="searchData.departmentName" readonly style="width: 160px"></el-input>
  43. </el-form-item>
  44. </el-form>
  45. <el-form :inline="true" label-position="top" :model="searchData" @keyup.enter.native="getDataList()">
  46. <el-form-item :label="'核心配件编码'">
  47. <el-input v-model="searchData.corePartNo" clearable style="width: 120px"></el-input>
  48. </el-form-item>
  49. <el-form-item :label="'状态'">
  50. <el-select v-model="searchData.status" clearable style="width: 100px">
  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-option label="已完工" value="已完工"></el-option>
  56. <el-option label="已取消" value="已取消"></el-option>
  57. </el-select>
  58. </el-form-item>
  59. <el-form-item :label="'单据来源'">
  60. <el-select v-model="searchData.documentSource" clearable style="width: 100px">
  61. <el-option label="设备点检" value="设备点检"></el-option>
  62. <el-option label="设备维修" value="设备维修"></el-option>
  63. <el-option label="维修失败" value="维修失败"></el-option>
  64. </el-select>
  65. </el-form-item>
  66. <el-form-item :label="'计划执行日期'">
  67. <el-date-picker
  68. style="width: 120px"
  69. v-model="searchData.startDate"
  70. type="date"
  71. value-format="yyyy-MM-dd"
  72. placeholder="选择日期">
  73. </el-date-picker>
  74. </el-form-item>
  75. <el-form-item style="margin-top: 23px;">
  76. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  77. </el-form-item>
  78. <el-form-item :label="' '">
  79. <el-date-picker
  80. style="width: 120px"
  81. v-model="searchData.endDate"
  82. type="date"
  83. value-format="yyyy-MM-dd"
  84. placeholder="选择日期">
  85. </el-date-picker>
  86. </el-form-item>
  87. <el-form-item :label="' '">
  88. <el-button v-if="!authSearch" @click="getDataList()">查询</el-button>
  89. <el-button v-if="!authChange" type="primary" @click="changeModel()">更改执行人员</el-button>
  90. <download-excel
  91. :fields="fields()"
  92. :data="exportData"
  93. type="xls"
  94. :name="exportName"
  95. :header="exportHeader"
  96. :footer="exportFooter"
  97. :fetch="createExportData"
  98. :before-generate="startDownload"
  99. :before-finish="finishDownload"
  100. worksheet="导出信息"
  101. class="el-button el-button--primary el-button--medium">
  102. {{ "导出" }}
  103. </download-excel>
  104. </el-form-item>
  105. </el-form>
  106. <el-table
  107. :height="height"
  108. :data="dataList"
  109. border
  110. v-loading="dataListLoading"
  111. @selection-change="selectionChangeHandle"
  112. :row-style="controlRowStyle"
  113. style="width: 100%;">
  114. <el-table-column
  115. type="selection"
  116. header-align="center"
  117. align="center"
  118. :selectable="selectFlag"
  119. width="50">
  120. </el-table-column>
  121. <el-table-column
  122. prop="urgency"
  123. header-align="center"
  124. align="center"
  125. label="紧急程度"
  126. width="70">
  127. <template slot-scope="scope">
  128. <div :style="{fontWeight:'bold', color: scope.row.urgency === '特急' ? 'red' : scope.row.urgency === '紧急' ? '#ffa500e0' : scope.row.urgency === '一般' ? '#47B0FF' : ''}">
  129. {{ scope.row.urgency }}
  130. </div>
  131. </template>
  132. </el-table-column>
  133. <el-table-column
  134. prop="result"
  135. header-align="center"
  136. align="center"
  137. label="维修结论"
  138. width="80">
  139. <template slot-scope="scope">
  140. <div :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. <a type="text" size="small" v-if="(scope.row.status === '待审核' || scope.row.status === '已完工') && !authDetail" @click="reportModal(scope.row)">详情</a>
  169. <a type="text" size="small" v-if="scope.row.status === '待确认' && !authDetail" @click="confirmResult(scope.row)">确认</a>
  170. <a type="text" size="small" v-if="scope.row.status === '未开工' && !authCancel" @click="cancelOrder(scope.row)">取消工单</a>
  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 slot="label" style="" @click="getBaseList(201)"><a herf="#">计划执行人员</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 title="执行结果" top="22vh" :close-on-click-modal="false" v-drag :visible.sync="detailModelFlag" width="960px">
  217. <el-form :inline="true" label-position="top">
  218. <el-form-item :label="'设备编码'">
  219. <el-input v-model="detailData.objectID" disabled style="width: 221px"></el-input>
  220. </el-form-item>
  221. <el-form-item :label="'设备名称'">
  222. <el-input v-model="detailData.objectDesc" disabled style="width: 221px"></el-input>
  223. </el-form-item>
  224. <el-form-item :label="'机台'">
  225. <el-input v-model="detailData.resourceDesc" disabled style="width: 221px"></el-input>
  226. </el-form-item>
  227. <el-form-item :label="'反馈描述'">
  228. <el-input v-model="detailData.feedBackDesc" disabled style="width: 221px"></el-input>
  229. </el-form-item>
  230. </el-form>
  231. <el-form :inline="true" label-position="top">
  232. <el-form-item label="故障编码">
  233. <el-input v-model="detailData.defectID" disabled style="width: 221px"></el-input>
  234. </el-form-item>
  235. <el-form-item label="故障名称">
  236. <el-input v-model="detailData.defectDesc" disabled style="width: 221px"></el-input>
  237. </el-form-item>
  238. <el-form-item :label="'维修结果'">
  239. <el-input v-model="detailData.result" disabled style="width: 221px"></el-input>
  240. </el-form-item>
  241. <el-form-item :label="'处置措施'">
  242. <el-input v-model="detailData.disposalMeasures" disabled style="width: 221px"></el-input>
  243. </el-form-item>
  244. </el-form>
  245. <el-form :inline="true" label-position="top">
  246. <el-form-item :label="'计划执行日期'">
  247. <el-date-picker style="width: 221px" v-model="detailData.planDate" type="datetime" disabled value-format='yyyy-MM-dd' format='yyyy-MM-dd'></el-date-picker>
  248. </el-form-item>
  249. <el-form-item :label="'到达时间'">
  250. <el-date-picker v-if="detailData.status === '待审核'" style="width: 221px" v-model="detailData.reachDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  251. <el-date-picker v-else disabled style="width: 221px" v-model="detailData.reachDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  252. </el-form-item>
  253. <el-form-item :label="'实际执行时间'">
  254. <el-date-picker v-if="detailData.status === '待审核'" style="width: 221px" v-model="detailData.actualDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  255. <el-date-picker v-else disabled style="width: 221px" v-model="detailData.actualDate" type="datetime" value-format='yyyy-MM-dd HH:mm:ss' format='yyyy-MM-dd HH:mm:ss'></el-date-picker>
  256. </el-form-item>
  257. <el-form-item :label="'工作时长(m)'">
  258. <!-- <el-input class="numInput" v-model="detailData.workTime" type="number" disabled :min="0" style="width: 221px"></el-input>-->
  259. <el-input class="numInput" v-if="detailData.status === '待审核'" v-model="detailData.workTime" type="number" @input="handleInput(detailData.workTime,1)" style="width: 221px"></el-input>
  260. <el-input class="numInput" v-if="detailData.status === '已完工'" v-model="detailData.workTime" type="number" disabled style="width: 221px"></el-input>
  261. </el-form-item>
  262. </el-form>
  263. <el-form :inline="true" label-position="top">
  264. <el-form-item label="执行人员">
  265. <el-input v-model="detailData.actualOperatorName" disabled style="width: 523px"></el-input>
  266. </el-form-item>
  267. <el-form-item :label="' '">
  268. <el-button v-if="detailData.status === '已完工'" type="primary" @click="checkModal()">取消审核</el-button>
  269. <el-button v-if="detailData.status === '待审核'" type="primary" @click="checkModal()">审核</el-button>
  270. </el-form-item>
  271. <el-form-item :label="' '">
  272. <el-button type="primary" @click="checkFaultImageModal()">故障图片</el-button>
  273. </el-form-item>
  274. <el-form-item :label="' '">
  275. <el-button type="primary" @click="checkSparPartImageModal()">备件图片</el-button>
  276. </el-form-item>
  277. <el-form-item :label="' '">
  278. <el-button type="primary" @click="coreComponentModal">核心配件</el-button>
  279. </el-form-item>
  280. </el-form>
  281. <el-form :inline="true" label-position="top">
  282. <el-form-item :label="'故障原因'">
  283. <el-input v-if="detailData.status === '已完工'" readonly type="textarea" v-model="detailData.faultReason" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  284. <el-input v-if="detailData.status === '待审核'" type="textarea" v-model="detailData.faultReason" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  285. </el-form-item>
  286. <el-form-item :label="'处理方式'">
  287. <el-input v-if="detailData.status === '已完工'" readonly type="textarea" v-model="detailData.handlingMethod" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  288. <el-input v-if="detailData.status === '待审核'" type="textarea" v-model="detailData.handlingMethod" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  289. </el-form-item>
  290. </el-form>
  291. <el-form :inline="true" label-position="top" style="margin-top: 45px">
  292. <el-form-item :label="'预防措施'">
  293. <el-input v-if="detailData.status === '已完工'" readonly type="textarea" v-model="detailData.preventiveMeasure" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  294. <el-input v-if="detailData.status === '待审核'" type="textarea" v-model="detailData.preventiveMeasure" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  295. </el-form-item>
  296. <el-form-item :label="'备注说明'">
  297. <el-input v-if="detailData.status === '已完工'" readonly type="textarea" v-model="detailData.remark" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  298. <el-input v-if="detailData.status === '待审核'" type="textarea" v-model="detailData.remark" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  299. </el-form-item>
  300. </el-form>
  301. <el-footer style="height:40px;margin-top: 65px;text-align:center">
  302. <el-button style="margin-left: -12px" type="primary" @click="updateResult()">保存</el-button>
  303. <el-button type="primary" @click="detailModelFlag = false">关闭</el-button>
  304. </el-footer>
  305. </el-dialog>
  306. <el-dialog title="核心配件" :close-on-click-modal="false" v-drag :visible.sync="coreComponentFlag" width="460px">
  307. <el-form :inline="true" label-position="top">
  308. <el-form-item label="备件编码">
  309. <el-input v-model="coreComponentData.partNo" disabled style="width: 200px"></el-input>
  310. </el-form-item>
  311. <el-form-item label="备件名称">
  312. <el-input v-model="coreComponentData.partDescription" disabled style="width: 200px"></el-input>
  313. </el-form-item>
  314. </el-form>
  315. <el-form :inline="true" label-position="top">
  316. <el-form-item label="老序列号">
  317. <el-input v-model="coreComponentData.oldSerialNo" disabled style="width: 200px"></el-input>
  318. </el-form-item>
  319. <el-form-item label="新序列号">
  320. <el-input v-model="coreComponentData.newSerialNo" disabled style="width: 200px"></el-input>
  321. </el-form-item>
  322. </el-form>
  323. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  324. <el-button type="primary" @click="coreComponentFlag = false">关闭</el-button>
  325. </el-footer>
  326. </el-dialog>
  327. <!-- 部门 -->
  328. <el-dialog title="部门清单" :close-on-click-modal="false" v-drag :visible.sync="departmentModelFlag" width="520px">
  329. <div class="rq">
  330. <el-form :inline="true" label-position="top" :model="departmentData">
  331. <el-form-item :label="'部门编码'">
  332. <el-input v-model="departmentData.deptId" style="width: 120px"></el-input>
  333. </el-form-item>
  334. <el-form-item :label="'部门名称'">
  335. <el-input v-model="departmentData.deptName" style="width: 120px"></el-input>
  336. </el-form-item>
  337. <el-form-item :label="' '">
  338. <el-button type="primary" @click="getDepartmentList()">查询</el-button>
  339. </el-form-item>
  340. </el-form>
  341. <el-table
  342. :height="300"
  343. :data="departmentList"
  344. ref="departmentTable"
  345. @row-click="departmentClickRow"
  346. @selection-change="selectionDepartment"
  347. :row-key="getRowKeys"
  348. border
  349. v-loading="dataListLoading"
  350. style="width: 100%;">
  351. <el-table-column
  352. type="selection"
  353. header-align="center"
  354. align="center"
  355. :reserve-selection="true"
  356. width="50">
  357. </el-table-column>
  358. <el-table-column
  359. v-for="(item,index) in departmentDetailList" :key="index"
  360. :sortable="item.columnSortable"
  361. :prop="item.columnProp"
  362. :header-align="item.headerAlign"
  363. :show-overflow-tooltip="item.showOverflowTooltip"
  364. :align="item.align"
  365. :fixed="item.fixed==''?false:item.fixed"
  366. :min-width="item.columnWidth"
  367. :label="item.columnLabel">
  368. <template slot-scope="scope">
  369. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  370. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  371. </template>
  372. </el-table-column>
  373. </el-table>
  374. </div>
  375. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  376. <el-button type="primary" @click="confirmDepartment()">确认</el-button>
  377. <el-button type="primary" @click="departmentModelFlag = false">关闭</el-button>
  378. </el-footer>
  379. </el-dialog>
  380. <el-dialog title="图片查看" :close-on-click-modal="false" v-drag :visible.sync="imageModalFlag" width="390px" style="height: 550px;">
  381. <div v-viewer>
  382. <img v-for="(item, index) in descImages" :src="item" :key="index" style="width: 100px;height: 100px"/>
  383. </div>
  384. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  385. <el-button type="primary" @click="imageModalFlag = false">关闭</el-button>
  386. </el-footer>
  387. </el-dialog>
  388. <el-dialog title="维修确认" top="22vh" :close-on-click-modal="false" v-drag :visible.sync="confirmDefectModal" width="320px">
  389. <el-form :inline="true" label-position="top">
  390. <el-form-item :label="'确认结果'">
  391. <el-select v-model="confirmData.confirmResult" style="width: 135px">
  392. <el-option label="成功" value="Y"></el-option>
  393. <el-option label="失败" value="N"></el-option>
  394. </el-select>
  395. </el-form-item>
  396. <el-form-item :label="'维修评估'">
  397. <el-select v-model="confirmData.confirmAssessment" style="width: 135px">
  398. <el-option label="优秀" value="优秀"></el-option>
  399. <el-option label="一般" value="一般"></el-option>
  400. <el-option label="差" value="差"></el-option>
  401. <el-option label="未完全修复" value="未完全修复"></el-option>
  402. </el-select>
  403. </el-form-item>
  404. </el-form>
  405. <el-form :inline="true" label-position="top">
  406. <el-form-item :label="'生产维修评估说明'">
  407. <el-input type="textarea" v-model="confirmData.confirmRemark" :rows="3" resize='none' show-word-limit style="width: 285px"></el-input>
  408. </el-form-item>
  409. </el-form>
  410. <el-footer style="height:30px;margin-top: 50px;text-align:center">
  411. <el-button style="margin-left: -12px" type="primary" @click="confirmDefectOrder()">保存</el-button>
  412. <el-button type="primary" @click="confirmDefectModal = false">关闭</el-button>
  413. </el-footer>
  414. </el-dialog>
  415. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  416. </div>
  417. </template>
  418. <script>
  419. import {
  420. eamWorkOrderSearchForDefect,
  421. cancelOrder,
  422. changeOrderOperator,
  423. submitDefect,
  424. searchFileUrl,
  425. getEmpyDeptList,
  426. getDeptList,
  427. updateReportResult, // 修改执行结果
  428. getSiteAndBuByUserName,
  429. confirmDefectOrder, // 维修确认
  430. } from "@/api/eam/eam.js"
  431. import {
  432. getTableDefaultListLanguage,
  433. getTableUserListLanguage,
  434. } from "@/api/table.js"
  435. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  436. import Chooselist from '@/views/modules/common/Chooselist_eam'
  437. import {isAuth} from '../../../utils'
  438. export default {
  439. components: {
  440. Chooselist
  441. },
  442. watch: {
  443. searchData: {
  444. deep: true,
  445. handler: function (newV, oldV) {
  446. this.searchData.groupID = this.searchData.groupID.toUpperCase()
  447. }
  448. },
  449. detailData: {
  450. deep: true,
  451. handler: function (newV, oldV) {
  452. this.detailData.workTime = Math.ceil(Math.floor(this.dayjs(this.detailData.actualDate).diff(this.detailData.reachDate, 'seconds') / 30) / 2)
  453. }
  454. }
  455. },
  456. data () {
  457. return {
  458. // 是否收藏
  459. favorite: false,
  460. // 导出 start
  461. exportData: [],
  462. exportName: "维修工单" + this.dayjs().format('YYYYMMDDHHmmss'),
  463. exportHeader: ["维修工单"],
  464. exportFooter: [],
  465. exportList: [],
  466. // 导出 end
  467. tagNo: '',
  468. coreComponentData:{
  469. site:'',
  470. orderNo:'',
  471. buNo:'',
  472. objectID:'',
  473. partNo:'',
  474. partDescription:'',
  475. createdBy:'',
  476. oldSerialNo:'',
  477. newSerialNo:'',
  478. },
  479. coreComponentFlag:false,
  480. searchData: {
  481. site: '',
  482. userName: this.$store.state.user.name,
  483. orderNo: '',
  484. corePartNo: '',
  485. planID: '',
  486. objectID: '',
  487. planOperator: '',
  488. planOperatorName: '',
  489. functionType: 'C',
  490. status: '',
  491. startDate:'',
  492. endDate:'',
  493. departmentName: '',
  494. documentSource: '',
  495. page: 1,
  496. limit: 10,
  497. urgency: '',
  498. result: ''
  499. },
  500. height: 200,
  501. pageIndex: 1,
  502. pageSize: 50,
  503. totalPage: 0,
  504. dataList: [],
  505. dataListLoading: false,
  506. dataListSelections: [],
  507. modalFlag: false,
  508. modalDisableFlag: false,
  509. departmentList: [],
  510. // 展示列集
  511. columnList: [
  512. {
  513. userId: this.$store.state.user.name,
  514. functionId: 101004002,
  515. serialNumber: '101004002Table1BuDesc',
  516. tableId: "101004002Table1",
  517. tableName: "维修工单表",
  518. columnProp: 'buDesc',
  519. headerAlign: "center",
  520. align: "center",
  521. columnLabel: 'BU',
  522. columnHidden: false,
  523. columnImage: false,
  524. columnSortable: false,
  525. sortLv: 0,
  526. status: true,
  527. fixed: '',
  528. columnWidth: 80,
  529. },
  530. {
  531. userId: this.$store.state.user.name,
  532. functionId: 101004002,
  533. serialNumber: '101004002Table1DisposalMeasures',
  534. tableId: "101004002Table1",
  535. tableName: "维修工单表",
  536. columnProp: 'disposalMeasures',
  537. headerAlign: "center",
  538. align: "center",
  539. columnLabel: '处置措施',
  540. columnHidden: false,
  541. columnImage: false,
  542. columnSortable: false,
  543. sortLv: 0,
  544. status: true,
  545. fixed: '',
  546. columnWidth: 80,
  547. },
  548. {
  549. userId: this.$store.state.user.name,
  550. functionId: 101004002,
  551. serialNumber: '101004002Table1OrderNo',
  552. tableId: "101004002Table1",
  553. tableName: "维修工单表",
  554. columnProp: 'orderNo',
  555. headerAlign: "center",
  556. align: "center",
  557. columnLabel: '工单编码',
  558. columnHidden: false,
  559. columnImage: false,
  560. columnSortable: true,
  561. sortLv: 0,
  562. status: true,
  563. fixed: '',
  564. columnWidth: 100,
  565. },
  566. {
  567. userId: this.$store.state.user.name,
  568. functionId: 101004002,
  569. serialNumber: '101004002Table1PlanID',
  570. tableId: "101004002Table1",
  571. tableName: "维修工单表",
  572. columnProp: 'planID',
  573. headerAlign: "center",
  574. align: "center",
  575. columnLabel: '反馈单号',
  576. columnHidden: false,
  577. columnImage: false,
  578. columnSortable: true,
  579. sortLv: 0,
  580. status: true,
  581. fixed: '',
  582. columnWidth: 100,
  583. },
  584. {
  585. userId: this.$store.state.user.name,
  586. functionId: 101004002,
  587. serialNumber: '101004002Table1FeedBackDesc',
  588. tableId: "101004002Table1",
  589. tableName: "维修工单表",
  590. columnProp: 'feedBackDesc',
  591. headerAlign: "center",
  592. align: "center",
  593. columnLabel: '反馈描述',
  594. columnHidden: false,
  595. columnImage: false,
  596. columnSortable: true,
  597. sortLv: 0,
  598. status: true,
  599. fixed: '',
  600. columnWidth: 100,
  601. },
  602. {
  603. userId: this.$store.state.user.name,
  604. functionId: 101004002,
  605. serialNumber: '101004002Table1DefectID',
  606. tableId: "101004002Table1",
  607. tableName: "维修工单表",
  608. columnProp: 'defectID',
  609. headerAlign: "center",
  610. align: "center",
  611. columnLabel: '故障编码',
  612. columnHidden: false,
  613. columnImage: false,
  614. columnSortable: false,
  615. sortLv: 0,
  616. status: true,
  617. fixed: '',
  618. columnWidth: 80,
  619. },
  620. {
  621. userId: this.$store.state.user.name,
  622. functionId: 101004002,
  623. serialNumber: '101004002Table1DefectDesc',
  624. tableId: "101004002Table1",
  625. tableName: "维修工单表",
  626. columnProp: 'defectDesc',
  627. headerAlign: "center",
  628. align: "center",
  629. columnLabel: '故障名称',
  630. columnHidden: false,
  631. columnImage: false,
  632. columnSortable: false,
  633. sortLv: 0,
  634. status: true,
  635. fixed: '',
  636. columnWidth: 80,
  637. },
  638. {
  639. userId: this.$store.state.user.name,
  640. functionId: 101004002,
  641. serialNumber: '101004002Table1ObjectID',
  642. tableId: "101004002Table1",
  643. tableName: "维修工单表",
  644. columnProp: 'objectID',
  645. headerAlign: "center",
  646. align: "center",
  647. columnLabel: '设备编码',
  648. columnHidden: false,
  649. columnImage: false,
  650. columnSortable: false,
  651. sortLv: 0,
  652. status: true,
  653. fixed: '',
  654. columnWidth: 80,
  655. },
  656. {
  657. userId: this.$store.state.user.name,
  658. functionId: 101004002,
  659. serialNumber: '101004002Table1ObjectDesc',
  660. tableId: "101004002Table1",
  661. tableName: "维修工单表",
  662. columnProp: 'objectDesc',
  663. headerAlign: "center",
  664. align: "center",
  665. columnLabel: '设备名称',
  666. columnHidden: false,
  667. columnImage: false,
  668. columnSortable: false,
  669. sortLv: 0,
  670. status: true,
  671. fixed: '',
  672. columnWidth: 120,
  673. },
  674. {
  675. userId: this.$store.state.user.name,
  676. functionId: 101004002,
  677. serialNumber: '101004002Table1ResourceDesc',
  678. tableId: "101004002Table1",
  679. tableName: "维修工单表",
  680. columnProp: 'resourceDesc',
  681. headerAlign: "center",
  682. align: "center",
  683. columnLabel: '机台名称',
  684. columnHidden: false,
  685. columnImage: false,
  686. columnSortable: false,
  687. sortLv: 0,
  688. status: true,
  689. fixed: '',
  690. columnWidth: 120,
  691. },
  692. {
  693. userId: this.$store.state.user.name,
  694. functionId: 101004002,
  695. serialNumber: '101004002Table1DepartmentName',
  696. tableId: "101004002Table1",
  697. tableName: "维修工单表",
  698. columnProp: 'departmentName',
  699. headerAlign: "center",
  700. align: "center",
  701. columnLabel: '设备部门',
  702. columnHidden: false,
  703. columnImage: false,
  704. columnSortable: false,
  705. sortLv: 0,
  706. status: true,
  707. fixed: '',
  708. columnWidth: 100,
  709. },
  710. {
  711. userId: this.$store.state.user.name,
  712. functionId: 101004002,
  713. serialNumber: '101004002Table1CreateBy',
  714. tableId: "101004002Table1",
  715. tableName: "维修工单表",
  716. columnProp: 'createBy',
  717. headerAlign: "center",
  718. align: "center",
  719. columnLabel: '报修人员名称',
  720. columnHidden: false,
  721. columnImage: false,
  722. columnSortable: false,
  723. sortLv: 0,
  724. status: true,
  725. fixed: '',
  726. columnWidth: 80,
  727. },
  728. {
  729. userId: this.$store.state.user.name,
  730. functionId: 101004002,
  731. serialNumber: '101004002Table1Status',
  732. tableId: "101004002Table1",
  733. tableName: "维修工单表",
  734. columnProp: 'status',
  735. headerAlign: "center",
  736. align: "center",
  737. columnLabel: '状态',
  738. columnHidden: false,
  739. columnImage: false,
  740. columnSortable: true,
  741. sortLv: 0,
  742. status: true,
  743. fixed: '',
  744. columnWidth: 80,
  745. },
  746. {
  747. userId: this.$store.state.user.name,
  748. functionId: 101004002,
  749. serialNumber: '101004002Table1PlanOperatorName',
  750. tableId: "101004002Table1",
  751. tableName: "维修工单表",
  752. columnProp: 'planOperatorName',
  753. headerAlign: "center",
  754. align: "center",
  755. columnLabel: '计划执行人员',
  756. columnHidden: false,
  757. columnImage: false,
  758. columnSortable: false,
  759. sortLv: 0,
  760. status: true,
  761. fixed: '',
  762. columnWidth: 100,
  763. },
  764. {
  765. userId: this.$store.state.user.name,
  766. functionId: 101004002,
  767. serialNumber: '101004002Table1ActualOperatorName',
  768. tableId: "101004002Table1",
  769. tableName: "维修工单表",
  770. columnProp: 'actualOperatorName',
  771. headerAlign: "center",
  772. align: "center",
  773. columnLabel: '实际执行人员',
  774. columnHidden: false,
  775. columnImage: false,
  776. columnSortable: false,
  777. sortLv: 0,
  778. status: true,
  779. fixed: '',
  780. columnWidth: 100,
  781. },
  782. {
  783. userId: this.$store.state.user.name,
  784. functionId: 101004002,
  785. serialNumber: '101004002Table1PlanDate',
  786. tableId: "101004002Table1",
  787. tableName: "维修工单表",
  788. columnProp: 'planDate',
  789. headerAlign: "center",
  790. align: "center",
  791. columnLabel: '计划执行日期',
  792. columnHidden: false,
  793. columnImage: false,
  794. columnSortable: true,
  795. sortLv: 0,
  796. status: true,
  797. fixed: '',
  798. columnWidth: 100,
  799. },
  800. {
  801. userId: this.$store.state.user.name,
  802. functionId: 101004002,
  803. serialNumber: '101004002Table1CreatedDate',
  804. tableId: "101004002Table1",
  805. tableName: "维修工单表",
  806. columnProp: 'createdDate',
  807. headerAlign: "center",
  808. align: "center",
  809. columnLabel: '故障时间',
  810. columnHidden: false,
  811. columnImage: false,
  812. columnSortable: true,
  813. sortLv: 0,
  814. status: true,
  815. fixed: '',
  816. columnWidth: 130,
  817. },
  818. {
  819. userId: this.$store.state.user.name,
  820. functionId: 101004002,
  821. serialNumber: '101004002Table1ReachDate',
  822. tableId: "101004002Table1",
  823. tableName: "维修工单表",
  824. columnProp: 'reachDate',
  825. headerAlign: "center",
  826. align: "center",
  827. columnLabel: '到达时间',
  828. columnHidden: false,
  829. columnImage: false,
  830. columnSortable: true,
  831. sortLv: 0,
  832. status: true,
  833. fixed: '',
  834. columnWidth: 130,
  835. },
  836. {
  837. userId: this.$store.state.user.name,
  838. functionId: 101004002,
  839. serialNumber: '101004002Table1ActualDate',
  840. tableId: "101004002Table1",
  841. tableName: "维修工单表",
  842. columnProp: 'actualDate',
  843. headerAlign: "center",
  844. align: "center",
  845. columnLabel: '实际执行时间',
  846. columnHidden: false,
  847. columnImage: false,
  848. columnSortable: true,
  849. sortLv: 0,
  850. status: true,
  851. fixed: '',
  852. columnWidth: 130,
  853. },
  854. {
  855. userId: this.$store.state.user.name,
  856. functionId: 101004002,
  857. serialNumber: '101004002Table1ResponseTime',
  858. tableId: "101004002Table1",
  859. tableName: "维修工单表",
  860. columnProp: 'responseTime',
  861. headerAlign: "center",
  862. align: "right",
  863. columnLabel: '维修响应时长(m)',
  864. columnHidden: false,
  865. columnImage: false,
  866. columnSortable: false,
  867. sortLv: 0,
  868. status: true,
  869. fixed: '',
  870. columnWidth: 110,
  871. },
  872. {
  873. userId: this.$store.state.user.name,
  874. functionId: 101004002,
  875. serialNumber: '101004002Table1WorkTime',
  876. tableId: "101004002Table1",
  877. tableName: "维修工单表",
  878. columnProp: 'workTime',
  879. headerAlign: "center",
  880. align: "right",
  881. columnLabel: '工作时长(m)',
  882. columnHidden: false,
  883. columnImage: false,
  884. columnSortable: false,
  885. sortLv: 0,
  886. status: true,
  887. fixed: '',
  888. columnWidth: 80,
  889. },
  890. {
  891. userId: this.$store.state.user.name,
  892. functionId: 101004002,
  893. serialNumber: '101004002Table1Remark',
  894. tableId: "101004002Table1",
  895. tableName: "维修工单表",
  896. columnProp: 'remark',
  897. headerAlign: "center",
  898. align: "center",
  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: '101004002Table1DifficultyLevel',
  912. tableId: "101004002Table1",
  913. tableName: "维修工单表",
  914. columnProp: 'difficultyLevel',
  915. headerAlign: "center",
  916. align: "center",
  917. columnLabel: '难度等级',
  918. columnHidden: false,
  919. columnImage: false,
  920. columnSortable: false,
  921. sortLv: 0,
  922. status: true,
  923. fixed: '',
  924. columnWidth: 80,
  925. },
  926. {
  927. userId: this.$store.state.user.name,
  928. functionId: 101004002,
  929. serialNumber: '101004002Table1DifficultyRemark',
  930. tableId: "101004002Table1",
  931. tableName: "维修工单表",
  932. columnProp: 'difficultyRemark',
  933. headerAlign: "center",
  934. align: "center",
  935. columnLabel: '难度备注',
  936. columnHidden: false,
  937. columnImage: false,
  938. columnSortable: false,
  939. sortLv: 0,
  940. status: true,
  941. fixed: '',
  942. columnWidth: 120,
  943. },
  944. {
  945. userId: this.$store.state.user.name,
  946. functionId: 101004002,
  947. serialNumber: '101004002Table1DocumentSource',
  948. tableId: "101004002Table1",
  949. tableName: "维修工单表",
  950. columnProp: 'documentSource',
  951. headerAlign: "center",
  952. align: "center",
  953. columnLabel: '单据来源',
  954. columnHidden: false,
  955. columnImage: false,
  956. columnSortable: false,
  957. sortLv: 0,
  958. status: true,
  959. fixed: '',
  960. columnWidth: 100,
  961. },
  962. {
  963. userId: this.$store.state.user.name,
  964. functionId: 101004002,
  965. serialNumber: '101004002Table1FaultReason',
  966. tableId: "101004002Table1",
  967. tableName: "维修工单表",
  968. columnProp: 'faultReason',
  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: 200,
  979. },
  980. {
  981. userId: this.$store.state.user.name,
  982. functionId: 101004002,
  983. serialNumber: '101004002Table1HandlingMethod',
  984. tableId: "101004002Table1",
  985. tableName: "维修工单表",
  986. columnProp: 'handlingMethod',
  987. headerAlign: "center",
  988. align: "left",
  989. columnLabel: '处理方式',
  990. columnHidden: false,
  991. columnImage: false,
  992. columnSortable: false,
  993. sortLv: 0,
  994. status: true,
  995. fixed: '',
  996. columnWidth: 200,
  997. },
  998. {
  999. userId: this.$store.state.user.name,
  1000. functionId: 101004002,
  1001. serialNumber: '101004002Table1PreventiveMeasure',
  1002. tableId: "101004002Table1",
  1003. tableName: "维修工单表",
  1004. columnProp: 'preventiveMeasure',
  1005. headerAlign: "center",
  1006. align: "left",
  1007. columnLabel: '预防措施',
  1008. columnHidden: false,
  1009. columnImage: false,
  1010. columnSortable: false,
  1011. sortLv: 0,
  1012. status: true,
  1013. fixed: '',
  1014. columnWidth: 200,
  1015. },
  1016. {
  1017. userId: this.$store.state.user.name,
  1018. functionId: 101004002,
  1019. serialNumber: '101004002Table1Remark',
  1020. tableId: "101004002Table1",
  1021. tableName: "维修工单表",
  1022. columnProp: 'remark',
  1023. headerAlign: "center",
  1024. align: "left",
  1025. columnLabel: '备注说明',
  1026. columnHidden: false,
  1027. columnImage: false,
  1028. columnSortable: false,
  1029. sortLv: 0,
  1030. status: true,
  1031. fixed: '',
  1032. columnWidth: 200,
  1033. },
  1034. {
  1035. userId: this.$store.state.user.name,
  1036. functionId: 101004002,
  1037. serialNumber: '101004002Table1CorePartNo',
  1038. tableId: "101004002Table1",
  1039. tableName: "维修执行表",
  1040. columnProp: 'corePartNo',
  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: '101004002Table1CorePartDescription',
  1056. tableId: "101004002Table1",
  1057. tableName: "维修执行表",
  1058. columnProp: 'corePartDescription',
  1059. headerAlign: "center",
  1060. align: "left",
  1061. columnLabel: '更换配件名称',
  1062. columnHidden: false,
  1063. columnImage: false,
  1064. columnSortable: false,
  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: '101004002Table1OldSerialNo',
  1074. tableId: "101004002Table1",
  1075. tableName: "维修执行表",
  1076. columnProp: 'oldSerialNo',
  1077. headerAlign: "center",
  1078. align: "left",
  1079. columnLabel: '老序列号',
  1080. columnHidden: false,
  1081. columnImage: false,
  1082. columnSortable: false,
  1083. sortLv: 0,
  1084. status: true,
  1085. fixed: '',
  1086. columnWidth: 120,
  1087. },
  1088. {
  1089. userId: this.$store.state.user.name,
  1090. functionId: 101004002,
  1091. serialNumber: '101004002Table1NewSerialNo',
  1092. tableId: "101004002Table1",
  1093. tableName: "维修执行表",
  1094. columnProp: 'newSerialNo',
  1095. headerAlign: "center",
  1096. align: "left",
  1097. columnLabel: '新序列号',
  1098. columnHidden: false,
  1099. columnImage: false,
  1100. columnSortable: false,
  1101. sortLv: 0,
  1102. status: true,
  1103. fixed: '',
  1104. columnWidth: 120,
  1105. },
  1106. ],
  1107. changeModelFlag: false,
  1108. planOperator: '',
  1109. planOperatorName: '',
  1110. submitData: {
  1111. site: '',
  1112. buNo: '',
  1113. orderNo: '',
  1114. planID: '',
  1115. objectID: '',
  1116. checker: '',
  1117. checkerName: '',
  1118. difficultyLevel: '',
  1119. difficultyRemark: '',
  1120. status: '',
  1121. updateBy: this.$store.state.user.name,
  1122. createBy: this.$store.state.user.name,
  1123. planDesc: '',
  1124. disposalMeasures: '',
  1125. defectID: '',
  1126. remark: ''
  1127. },
  1128. submitModelFlag: false,
  1129. detailData: {},
  1130. detailModelFlag: false,
  1131. descImages: [],
  1132. imageModalFlag: false,
  1133. departmentModelFlag: false,
  1134. departmentData: {
  1135. site: '',
  1136. buNo: '',
  1137. deptId: '',
  1138. deptName: '',
  1139. },
  1140. departmentListSelections: [],
  1141. departmentDetailList: [
  1142. {
  1143. columnProp: 'deptId',
  1144. headerAlign: "center",
  1145. align: "center",
  1146. columnLabel: '部门编码',
  1147. columnHidden: false,
  1148. columnImage: false,
  1149. columnSortable: false,
  1150. sortLv: 0,
  1151. status: true,
  1152. fixed: '',
  1153. },
  1154. {
  1155. columnProp: 'deptName',
  1156. headerAlign: "center",
  1157. align: "center",
  1158. columnLabel: '部门名称',
  1159. columnHidden: false,
  1160. columnImage: false,
  1161. columnSortable: false,
  1162. sortLv: 0,
  1163. status: true,
  1164. fixed: '',
  1165. },
  1166. ],
  1167. userBuList: [],
  1168. authSearch: false,
  1169. authChange: false,
  1170. authDetail: false,
  1171. authCancel: false,
  1172. menuId: this.$route.meta.menuId,
  1173. confirmData: {
  1174. site: '',
  1175. buNo: '',
  1176. orderNo: '',
  1177. functionType: '',
  1178. confirmResult: '',
  1179. confirmAssessment: '',
  1180. confirmRemark: '',
  1181. confirmBy: ''
  1182. },
  1183. confirmDefectModal: false
  1184. }
  1185. },
  1186. mounted () {
  1187. this.$nextTick(() => {
  1188. this.height = window.innerHeight - 210
  1189. })
  1190. },
  1191. created () {
  1192. // 按钮控制
  1193. this.getButtonAuthData()
  1194. // 获取用户的 site 和 bu
  1195. this.getSiteAndBuByUserName()
  1196. this.favoriteIsOk()
  1197. // 动态列
  1198. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  1199. if (!this.authSearch) {
  1200. // 查询登陆人员的部门,并过滤出相应工单
  1201. this.getUserDept()
  1202. }
  1203. },
  1204. methods: {
  1205. // ======= 正则校验 =======
  1206. handleInput (value, type) {
  1207. // 大于等于0,且只能输入4位小数
  1208. let val = value.replace(/^\D*([0-9]\d*\.?\d{0,4})?.*$/,'$1')
  1209. if (val === null || val === undefined || val === '') {
  1210. val = 0
  1211. }
  1212. if (type === 1) {
  1213. this.detailData.workTime = val
  1214. }
  1215. },
  1216. // 获取用户的bu
  1217. getSiteAndBuByUserName () {
  1218. let tempData = {
  1219. username: this.$store.state.user.name,
  1220. }
  1221. getSiteAndBuByUserName(tempData).then(({data}) => {
  1222. if (data.code === 0) {
  1223. this.userBuList = data.rows
  1224. }
  1225. })
  1226. },
  1227. // 控制单行的背景颜色
  1228. controlRowStyle ({row, rowIndex}) {
  1229. // 区分不同的样式对应不同的颜色
  1230. if (row.status === '待审核') {
  1231. return "background-color: #D8ECF1"
  1232. }
  1233. },
  1234. // 查询登陆人员的部门
  1235. getUserDept () {
  1236. let tempDate = {
  1237. site: '',
  1238. username: this.$store.state.user.name,
  1239. }
  1240. getDeptList(tempDate).then(({data}) => {
  1241. if (data.code === 0) {
  1242. data.rows.forEach(val => {
  1243. this.searchData.departmentName = this.searchData.departmentName + ";" + val
  1244. })
  1245. this.searchData.departmentName = this.searchData.departmentName.substring(1)
  1246. this.getDataList()
  1247. }
  1248. })
  1249. },
  1250. // 校验用户是否收藏
  1251. favoriteIsOk () {
  1252. let userFavorite = {
  1253. userId: this.$store.state.user.id,
  1254. languageCode: this.$i18n.locale
  1255. }
  1256. userFavoriteList(userFavorite).then(({data}) => {
  1257. for (let i = 0; i < data.list.length; i++) {
  1258. if (this.$route.meta.menuId === data.list[i].menuId) {
  1259. this.favorite = true
  1260. }
  1261. }
  1262. })
  1263. },
  1264. // 收藏 OR 取消收藏
  1265. favoriteFunction () {
  1266. let userFavorite = {
  1267. userId: this.$store.state.user.id,
  1268. functionId: this.$route.meta.menuId,
  1269. }
  1270. if (this.favorite) {
  1271. removeUserFavorite(userFavorite).then(({data}) => {
  1272. this.$message.success(data.msg)
  1273. this.favorite = false
  1274. })
  1275. } else {
  1276. // 收藏
  1277. saveUserFavorite(userFavorite).then(({data}) => {
  1278. this.$message.success(data.msg)
  1279. this.favorite = true
  1280. })
  1281. }
  1282. },
  1283. // 获取基础数据列表S
  1284. getBaseList (val,type) {
  1285. this.tagNo = val
  1286. this.$nextTick(() => {
  1287. let strVal = ''
  1288. if (val === 201) {
  1289. strVal = this.planOperator
  1290. this.$refs.baseList.init(val, strVal)
  1291. }
  1292. })
  1293. },
  1294. /* 列表方法的回调 */
  1295. getBaseData (val) {
  1296. if (this.tagNo === 201) {
  1297. this.planOperator = val.username
  1298. this.planOperatorName = val.user_display
  1299. }
  1300. },
  1301. //导出excel
  1302. async createExportData () {
  1303. this.searchData.limit = -1
  1304. this.searchData.page = 1
  1305. await eamWorkOrderSearchForDefect(this.searchData).then(({data}) => {
  1306. this.exportList= data.page.list
  1307. })
  1308. return this.exportList
  1309. },
  1310. startDownload () {},
  1311. finishDownload () {},
  1312. fields () {
  1313. let json = "{"
  1314. this.columnList.forEach((item, index) => {
  1315. if (index == this.columnList.length - 1) {
  1316. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  1317. } else {
  1318. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  1319. }
  1320. })
  1321. json += "}"
  1322. let s = eval("(" + json + ")")
  1323. return s
  1324. },
  1325. // 获取数据列表
  1326. getDataList () {
  1327. this.searchData.limit = this.pageSize
  1328. this.searchData.page = this.pageIndex
  1329. eamWorkOrderSearchForDefect(this.searchData).then(({data}) => {
  1330. if (data.code === 0) {
  1331. this.dataList = data.page.list
  1332. this.pageIndex = data.page.currPage
  1333. this.pageSize = data.page.pageSize
  1334. this.totalPage = data.page.totalCount
  1335. }
  1336. this.dataListLoading = false
  1337. })
  1338. },
  1339. // 每页数
  1340. sizeChangeHandle (val) {
  1341. this.pageSize = val
  1342. this.pageIndex = 1
  1343. this.getDataList()
  1344. },
  1345. // 当前页
  1346. currentChangeHandle (val) {
  1347. this.pageIndex = val
  1348. this.getDataList()
  1349. },
  1350. // 多选
  1351. selectionChangeHandle (val) {
  1352. this.dataListSelections = val
  1353. },
  1354. cancelOrder (row) {
  1355. this.$confirm(`是否取消选定工单?`, '提示', {
  1356. confirmButtonText: '确定',
  1357. cancelButtonText: '取消',
  1358. type: 'warning'
  1359. }).then(() => {
  1360. cancelOrder(row).then(({data}) => {
  1361. if (data && data.code === 0) {
  1362. this.getDataList()
  1363. this.$message({
  1364. message: '操作成功',
  1365. type: 'success',
  1366. duration: 1500,
  1367. onClose: () => {}
  1368. })
  1369. } else {
  1370. this.$alert(data.msg, '错误', {
  1371. confirmButtonText: '确定'
  1372. })
  1373. }
  1374. })
  1375. }).catch(() => {
  1376. })
  1377. },
  1378. selectFlag (row,index) {
  1379. if (row.status !== '未开工') {
  1380. return false
  1381. } else {
  1382. return true
  1383. }
  1384. },
  1385. changeModel () {
  1386. if (this.dataListSelections.length === 0) {
  1387. this.$alert('请勾选工单!', '错误', {
  1388. confirmButtonText: '确定'
  1389. })
  1390. return false
  1391. }
  1392. this.planOperator = ''
  1393. this.planOperatorName = ''
  1394. this.changeModelFlag = true
  1395. },
  1396. changeOrderOperator () {
  1397. let inList = JSON.parse(JSON.stringify(this.dataListSelections))
  1398. for (let i = 0; i <inList.length ; i++) {
  1399. inList[i].planOperator = this.planOperator
  1400. }
  1401. changeOrderOperator(inList).then(({data}) => {
  1402. if (data && data.code === 0) {
  1403. this.changeModelFlag = false
  1404. this.getDataList()
  1405. this.$message({
  1406. message: '操作成功',
  1407. type: 'success',
  1408. duration: 1500,
  1409. onClose: () => {}
  1410. })
  1411. } else {
  1412. this.$alert(data.msg, '错误', {
  1413. confirmButtonText: '确定'
  1414. })
  1415. }
  1416. })
  1417. },
  1418. // 审核按钮
  1419. checkModal () {
  1420. if (!this.isAuth(this.$route.meta.menuId+":check")) {
  1421. this.$message.warning('无审核权限!')
  1422. return
  1423. }
  1424. this.submitData.site = this.detailData.site
  1425. this.submitData.buNo = this.detailData.buNo
  1426. this.submitData.orderNo = this.detailData.orderNo
  1427. this.submitData.planID = this.detailData.planID
  1428. this.submitData.objectID = this.detailData.objectID
  1429. this.submitData.planDesc = this.detailData.planDesc
  1430. this.submitData.disposalMeasures = this.detailData.disposalMeasures
  1431. this.submitData.defectID = this.detailData.defectID
  1432. this.submitData.remark = this.detailData.remark
  1433. this.submitData.difficultyLevel = ''
  1434. this.submitData.difficultyRemark = ''
  1435. if (this.detailData.status === '已完工') {
  1436. this.$confirm(`是否取消审核?`, '提示', {
  1437. confirmButtonText: '确定',
  1438. cancelButtonText: '取消',
  1439. type: 'warning'
  1440. }).then(() => {
  1441. this.submitData.status = '待审核'
  1442. submitDefect(this.submitData).then(({data}) => {
  1443. if (data && data.code === 0) {
  1444. this.getDataList()
  1445. this.detailData.status = '待审核'
  1446. this.$message({
  1447. message: '操作成功',
  1448. type: 'success',
  1449. duration: 1500,
  1450. onClose: () => {}
  1451. })
  1452. } else {
  1453. this.$alert(data.msg, '错误', {
  1454. confirmButtonText: '确定'
  1455. })
  1456. }
  1457. })
  1458. }).catch(() => {
  1459. })
  1460. } else {
  1461. this.submitData.status = '已完工'
  1462. this.submitModelFlag = true
  1463. }
  1464. },
  1465. // 确认审核
  1466. submitModel () {
  1467. if (this.submitData.difficultyLevel === ''||this.submitData.difficultyLevel == null) {
  1468. this.$alert('请选择难度等级!', '提示', {
  1469. confirmButtonText: '确定'
  1470. })
  1471. return false
  1472. }
  1473. submitDefect(this.submitData).then(({data}) => {
  1474. if (data && data.code === 0) {
  1475. this.getDataList()
  1476. this.detailData.status = '已完工'
  1477. this.submitModelFlag = false
  1478. this.$message({
  1479. message: '操作成功',
  1480. type: 'success',
  1481. duration: 1500,
  1482. onClose: () => {}
  1483. })
  1484. } else {
  1485. this.$alert(data.msg, '错误', {
  1486. confirmButtonText: '确定'
  1487. })
  1488. }
  1489. })
  1490. },
  1491. // 详情
  1492. reportModal (row) {
  1493. this.detailData = {
  1494. site: row.site,
  1495. buNo: row.buNo,
  1496. orderNo: row.orderNo,
  1497. planID: row.planID,
  1498. objectID: row.objectID,
  1499. objectDesc: row.objectDesc,
  1500. status: row.status,
  1501. remark: row.remark,
  1502. workTime: row.workTime,
  1503. result: row.result,
  1504. defectID: row.defectID,
  1505. defectDesc: row.defectDesc,
  1506. actualOperatorName: row.actualOperatorName,
  1507. planDate: row.planDate,
  1508. reachDate: row.reachDate,
  1509. actualDate: row.actualDate,
  1510. planDesc: row.planDesc,
  1511. disposalMeasures: row.disposalMeasures,
  1512. handlingMethod: row.handlingMethod,
  1513. functionType: row.functionType,
  1514. resourceDesc: row.resourceDesc,
  1515. feedBackDesc: row.feedBackDesc,
  1516. faultReason: row.faultReason,
  1517. preventiveMeasure: row.preventiveMeasure,
  1518. corePartNo:row.corePartNo,
  1519. corePartDescription:row.corePartDescription,
  1520. oldSerialNo:row.oldSerialNo,
  1521. newSerialNo:row.newSerialNo,
  1522. }
  1523. this.detailModelFlag = true
  1524. },
  1525. updateResult () {
  1526. if (!this.isAuth(this.$route.meta.menuId+":check")) {
  1527. this.$message.warning('无审核权限!')
  1528. return
  1529. }
  1530. if (this.detailData.reachDate === '' || this.detailData.reachDate == null) {
  1531. this.$message.warning('请选择到达时间!')
  1532. return
  1533. }
  1534. if (this.detailData.actualDate === '' || this.detailData.actualDate == null) {
  1535. this.$message.warning('请选择实际执行时间!')
  1536. return
  1537. }
  1538. if (this.detailData.reachDate > this.detailData.actualDate) {
  1539. this.$message.warning('到达时间不能大于实际执行时间!')
  1540. return
  1541. }
  1542. updateReportResult(this.detailData).then(({data}) => {
  1543. if (data && data.code === 0) {
  1544. this.getDataList()
  1545. this.detailModelFlag = false
  1546. this.$message({
  1547. message: '操作成功',
  1548. type: 'success',
  1549. duration: 1500,
  1550. onClose: () => {}
  1551. })
  1552. } else {
  1553. this.$alert(data.msg, '错误', {
  1554. confirmButtonText: '确定'
  1555. })
  1556. }
  1557. })
  1558. },
  1559. // 维修确认
  1560. confirmResult (row) {
  1561. this.confirmData = {
  1562. site: row.site,
  1563. buNo: row.buNo,
  1564. orderNo: row.orderNo,
  1565. planID: row.planID,
  1566. functionType: row.functionType,
  1567. confirmResult: 'Y',
  1568. confirmAssessment: '优秀',
  1569. confirmRemark: '',
  1570. confirmBy: this.$store.state.user.name
  1571. }
  1572. this.confirmDefectModal = true
  1573. },
  1574. // 确认结果
  1575. confirmDefectOrder () {
  1576. if (this.confirmData.confirmResult === '' || this.confirmData.confirmResult == null) {
  1577. this.$message.warning('请选择确认结果!')
  1578. return
  1579. }
  1580. if (this.confirmData.confirmAssessment === '' || this.confirmData.confirmAssessment == null) {
  1581. this.$message.warning('请选择维修评估!')
  1582. return
  1583. }
  1584. confirmDefectOrder(this.confirmData).then(({data}) => {
  1585. if (data && data.code === 0) {
  1586. this.getDataList()
  1587. this.confirmDefectModal = false
  1588. this.$message({
  1589. message: '操作成功',
  1590. type: 'success',
  1591. duration: 1500,
  1592. onClose: () => {}
  1593. })
  1594. } else {
  1595. this.$alert(data.msg, '错误', {
  1596. confirmButtonText: '确定'
  1597. })
  1598. }
  1599. })
  1600. },
  1601. /**
  1602. * 查看故障图片
  1603. */
  1604. checkFaultImageModal () {
  1605. this.descImages = []
  1606. let tempData = {
  1607. site: this.detailData.site,
  1608. buNo: this.detailData.buNo,
  1609. orderNo: this.detailData.orderNo,
  1610. folder: 'reportFault',
  1611. }
  1612. searchFileUrl(tempData).then(({data}) => {
  1613. if (data.code === 0) {
  1614. for (let i = 0; i < data.rows.length; i++) {
  1615. this.descImages.push(data.rows[i].url)
  1616. }
  1617. } else {
  1618. this.$message.warning(data.msg)
  1619. }
  1620. })
  1621. this.imageModalFlag = true
  1622. },
  1623. /**
  1624. * 查看备件图片
  1625. */
  1626. checkSparPartImageModal () {
  1627. this.descImages = []
  1628. let tempData = {
  1629. site: this.detailData.site,
  1630. buNo: this.detailData.buNo,
  1631. orderNo: this.detailData.orderNo,
  1632. folder: 'reportSparPart',
  1633. }
  1634. searchFileUrl(tempData).then(({data}) => {
  1635. if (data.code === 0) {
  1636. for (let i = 0; i < data.rows.length; i++) {
  1637. this.descImages.push(data.rows[i].url)
  1638. }
  1639. } else {
  1640. this.$message.warning(data.msg)
  1641. }
  1642. })
  1643. this.imageModalFlag = true
  1644. },
  1645. // 获取部门列表
  1646. getDepartmentList () {
  1647. // 先清空缓存选中
  1648. this.$nextTick(() => this.$refs.departmentTable.clearSelection())
  1649. // 拿到选中的部门编号
  1650. let tempDataList = (this.searchData.departmentName == null ? '' : this.searchData.departmentName).split(';')
  1651. // 查询部门
  1652. getEmpyDeptList(this.departmentData).then(({data}) => {
  1653. if (data && data.code === 0) {
  1654. this.departmentList = data.rows
  1655. this.departmentList.forEach(val => {
  1656. // 回显选中的部门
  1657. if (tempDataList.includes(val.deptName)) {
  1658. this.$nextTick(() => this.$refs.departmentTable.toggleRowSelection(val, true))
  1659. }
  1660. })
  1661. this.departmentModelFlag = true
  1662. }else {
  1663. this.$alert(data.msg, '错误', {
  1664. confirmButtonText: '确定'
  1665. })
  1666. }
  1667. })
  1668. },
  1669. // 部门
  1670. departmentClickRow (row) {
  1671. this.$refs.departmentTable.toggleRowSelection(row)
  1672. },
  1673. // 多选
  1674. selectionDepartment (val) {
  1675. this.departmentListSelections = val
  1676. },
  1677. getRowKeys (row) {
  1678. // 唯一值,一般都为id
  1679. return row.deptId
  1680. },
  1681. // 确认多选部门
  1682. confirmDepartment () {
  1683. this.searchData.departmentName = ''
  1684. for (let i = 0; i < this.departmentListSelections.length; i++) {
  1685. this.searchData.departmentName = this.searchData.departmentName + ";" + this.departmentListSelections[i].deptName
  1686. }
  1687. this.searchData.departmentName = this.searchData.departmentName.substring(1)
  1688. this.departmentModelFlag = false
  1689. },
  1690. // 清空搜索框部门
  1691. clearDepartmentName () {
  1692. this.searchData.departmentName = ''
  1693. },
  1694. // 动态列开始 获取 用户保存的 格式列
  1695. async getTableUserColumn(tableId, columnId) {
  1696. let queryTableUser = {
  1697. userId: this.$store.state.user.name,
  1698. functionId: this.$route.meta.menuId,
  1699. tableId: tableId,
  1700. status: true,
  1701. languageCode: this.$i18n.locale
  1702. }
  1703. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  1704. if (data.rows.length > 0) {
  1705. //this.columnList1 = []
  1706. switch (columnId) {
  1707. case 1:
  1708. this.columnList = data.rows
  1709. break;
  1710. // case 2:
  1711. // this.columnDetailList = data.rows
  1712. // break;
  1713. // case 3:
  1714. // this.columnList2 = data.rows
  1715. // break;
  1716. // case 4:
  1717. // this.columnList3 = data.rows
  1718. // break;
  1719. }
  1720. } else {
  1721. this.getColumnList(tableId, columnId)
  1722. }
  1723. })
  1724. },
  1725. // 获取 tableDefault 列
  1726. async getColumnList(tableId, columnId) {
  1727. let queryTable= {
  1728. functionId: this.$route.meta.menuId,
  1729. tableId: tableId,
  1730. languageCode: this.$i18n.locale
  1731. }
  1732. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  1733. if (!data.rows.length == 0) {
  1734. switch (columnId) {
  1735. case 1:
  1736. this.columnList = data.rows
  1737. break;
  1738. // case 2:
  1739. // this.columnDetailList = data.rows
  1740. // break;
  1741. // case 3:
  1742. // this.columnList2 = data.rows
  1743. // break;
  1744. // case 4:
  1745. // this.columnList3 = data.rows
  1746. // break;
  1747. }
  1748. } else {
  1749. // this.showDefault = true.
  1750. }
  1751. })
  1752. },
  1753. //获取按钮的权限数据
  1754. getButtonAuthData () {
  1755. let searchFlag = this.isAuth(this.menuId+":search")
  1756. let changeFlag = this.isAuth(this.menuId+":change")
  1757. let detailFlag = this.isAuth(this.menuId+":detail")
  1758. let cancelFlag = this.isAuth(this.menuId+":cancel")
  1759. //处理页面的权限数据
  1760. this.authSearch = !searchFlag
  1761. this.authChange = !changeFlag
  1762. this.authDetail = !detailFlag
  1763. this.authCancel = !cancelFlag
  1764. },
  1765. coreComponentModal(){
  1766. this.coreComponentData={
  1767. site:this.detailData.site,
  1768. buNo:this.detailData.buNo,
  1769. orderNo:this.detailData.orderNo,
  1770. objectID:this.detailData.objectID,
  1771. partNo:this.detailData.corePartNo,
  1772. partDescription:this.detailData.corePartDescription,
  1773. createdBy:this.$store.state.user.name,
  1774. oldSerialNo:this.detailData.oldSerialNo,
  1775. newSerialNo:this.detailData.newSerialNo,
  1776. }
  1777. this.coreComponentFlag=true;
  1778. },
  1779. }
  1780. }
  1781. </script>
  1782. <style scoped>
  1783. .numInput /deep/ .el-input__inner{
  1784. text-align: right;
  1785. }
  1786. </style>