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.

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