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.

1954 lines
68 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
10 months ago
3 years ago
10 months ago
7 months 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
10 months ago
11 months ago
11 months ago
10 months ago
11 months ago
11 months ago
10 months ago
7 months ago
10 months ago
11 months ago
10 months ago
10 months ago
7 months ago
7 months ago
7 months ago
7 months ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
7 months ago
3 years ago
3 years ago
10 months ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
7 months 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
3 years ago
7 months ago
7 months ago
11 months ago
11 months ago
7 months 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
10 months ago
11 months ago
11 months ago
7 months ago
3 years ago
3 years ago
3 years ago
9 months ago
7 months 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
3 years ago
11 months ago
3 years ago
7 months ago
3 years ago
7 months ago
7 months ago
7 months ago
3 years ago
  1. <template>
  2. <div class="mod-config">
  3. <el-form :inline="true" label-position="top" :model="searchData">
  4. <el-form-item :label="'BU'">
  5. <el-select v-model="searchData.buDesc" placeholder="请选择" clearable style="width: 80px">
  6. <el-option
  7. v-for = "i in userBuList"
  8. :key = "i.buNo"
  9. :label = "i.buDesc"
  10. :value = "i.buDesc">
  11. </el-option>
  12. </el-select>
  13. </el-form-item>
  14. <el-form-item :label="'报修方式'">
  15. <el-select v-model="searchData.repairReportingType" placeholder="请选择" clearable style="width: 100px">
  16. <el-option label="设备故障" value="设备故障"></el-option>
  17. <el-option label="TPM红牌" value="TPM红牌"></el-option>
  18. </el-select>
  19. </el-form-item>
  20. <el-form-item :label="'维修类型'">
  21. <el-select v-model="searchData.repairType" placeholder="请选择" clearable style="width: 100px">
  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.urgency" placeholder="请选择" clearable style="width: 80px">
  28. <el-option label="特急" value="特急"></el-option>
  29. <el-option label="紧急" value="紧急"></el-option>
  30. <el-option label="一般" value="一般"></el-option>
  31. </el-select>
  32. </el-form-item>
  33. <el-form-item :label="'反馈单号'">
  34. <el-input v-model="searchData.feedBackID" clearable style="width: 120px"></el-input>
  35. </el-form-item>
  36. <el-form-item :label="'设备编码'">
  37. <el-input v-model="searchData.objectID" clearable style="width: 100px"></el-input>
  38. </el-form-item>
  39. <el-form-item :label="'故障原因'">
  40. <el-input v-model="searchData.defectDesc" clearable style="width: 120px"></el-input>
  41. </el-form-item>
  42. <el-form-item :label="'设备区域'">
  43. <el-input v-model="searchData.locationName" clearable style="width: 100px"></el-input>
  44. </el-form-item>
  45. <el-form-item :label="'部门'">
  46. <el-input v-model="searchData.department" clearable style="width: 120px"></el-input>
  47. </el-form-item>
  48. <el-form-item :label="'状态'">
  49. <el-select filterable v-model="searchData.status" clearable style="width: 100px">
  50. <el-option label="已录入" value="已录入"></el-option>
  51. <el-option label="事项跟踪" value="事项跟踪"></el-option>
  52. <el-option label="已下达" value="已下达"></el-option>
  53. <el-option label="维修确认" value="维修确认"></el-option>
  54. <el-option label="维修完成" value="维修完成"></el-option>
  55. <el-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-date-picker
  61. style="width: 120px"
  62. v-model="searchData.startDate"
  63. type="date"
  64. value-format="yyyy-MM-dd"
  65. placeholder="选择日期">
  66. </el-date-picker>
  67. </el-form-item>
  68. <el-form-item style="margin-top: 23px;">
  69. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  70. </el-form-item>
  71. <el-form-item :label="' '">
  72. <el-date-picker
  73. style="width: 120px"
  74. v-model="searchData.endDate"
  75. type="date"
  76. value-format="yyyy-MM-dd"
  77. placeholder="选择日期">
  78. </el-date-picker>
  79. </el-form-item>
  80. <el-form-item :label="' '">
  81. <el-button v-if="!authSearch" @click="getDataList">查询</el-button>
  82. <el-button v-if="!authSave" @click="saveModal">新增</el-button>
  83. <el-button @click="exportExcel()" type="primary" style="margin-left: 2px">{{'导出'}}</el-button>
  84. <!-- <download-excel-->
  85. <!-- :fields="fields()"-->
  86. <!-- :data="exportData"-->
  87. <!-- type="xls"-->
  88. <!-- :name="exportName"-->
  89. <!-- :header="exportHeader"-->
  90. <!-- :footer="exportFooter"-->
  91. <!-- :fetch="createExportData"-->
  92. <!-- :before-generate="startDownload"-->
  93. <!-- :before-finish="finishDownload"-->
  94. <!-- worksheet="导出信息"-->
  95. <!-- class="el-button el-button&#45;&#45;primary el-button&#45;&#45;medium">-->
  96. <!-- {{ "导出" }}-->
  97. <!-- </download-excel>-->
  98. </el-form-item>
  99. </el-form>
  100. <el-table
  101. :height="height"
  102. :data="dataList"
  103. border
  104. v-loading="dataListLoading"
  105. @selection-change="selectionChangeHandle"
  106. style="width: 100%;">
  107. <el-table-column
  108. prop="buDesc"
  109. header-align="center"
  110. align="center"
  111. label="BU"
  112. width="60">
  113. </el-table-column>
  114. <el-table-column
  115. prop="urgency"
  116. header-align="center"
  117. align="center"
  118. label="紧急程度"
  119. width="70">
  120. <template slot-scope="scope">
  121. <div :style="{fontWeight:'bold', color: scope.row.urgency === '特急' ? 'red' : scope.row.urgency === '紧急' ? '#ffa500e0' : scope.row.urgency === '一般' ? '#47B0FF' : ''}">
  122. {{ scope.row.urgency }}
  123. </div>
  124. </template>
  125. </el-table-column>
  126. <el-table-column
  127. v-for="(item,index) in columnList" :key="index"
  128. :sortable="item.columnSortable"
  129. :prop="item.columnProp"
  130. :header-align="item.headerAlign"
  131. :show-overflow-tooltip="item.showOverflowTooltip"
  132. :align="item.align"
  133. :fixed="item.fixed==''?false:item.fixed"
  134. :min-width="item.columnWidth"
  135. :label="item.columnLabel">
  136. <template slot-scope="scope">
  137. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  138. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  139. </template>
  140. </el-table-column>
  141. <el-table-column
  142. fixed="right"
  143. header-align="center"
  144. align="center"
  145. width="130"
  146. label="操作">
  147. <template slot-scope="scope">
  148. <el-link style="cursor: pointer" v-if="(scope.row.status === '已录入'||scope.row.status === '事项跟踪') && !authCancel" @click="cancelFeedBack(scope.row)">取消反馈</el-link>
  149. <el-link style="cursor: pointer" v-if="(scope.row.status === '已录入'||scope.row.status === '事项跟踪') && !authRelease" @click="createDefectOrderModel1(scope.row)">下达</el-link>
  150. <el-link style="cursor: pointer" v-if="scope.row.repairReportingType === 'TPM红牌'" @click="searchFeedMatterRecord(scope.row)">事项</el-link>
  151. </template>
  152. </el-table-column>
  153. </el-table>
  154. <el-pagination
  155. @size-change="sizeChangeHandle"
  156. @current-change="currentChangeHandle"
  157. :current-page="pageIndex"
  158. :page-sizes="[20, 50, 100, 200, 500]"
  159. :page-size="pageSize"
  160. :total="totalPage"
  161. layout="total, sizes, prev, pager, next, jumper">
  162. </el-pagination>
  163. <!-- 下达按钮弹框-->
  164. <el-dialog title="下达" :close-on-click-modal="false" v-drag :visible.sync="chooseReachModelFlag" width="410px">
  165. <el-form :inline="true" label-position="top">
  166. <el-form-item >
  167. <span slot="label" @click="getOperatorList(0)"><a>选择计划执行人员</a></span>
  168. <el-input v-model="this.xdplanOperatorName" style="width: 389px"></el-input>
  169. </el-form-item>
  170. </el-form>
  171. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  172. <el-button type="primary" @click="reach()">保存</el-button>
  173. <el-button type="primary" @click="chooseReachModelFlag = false">关闭</el-button>
  174. </el-footer>
  175. </el-dialog>
  176. <!-- 下达 -->
  177. <el-dialog title="下达维修工单" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="570px">
  178. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  179. <el-form-item label="计划编码:">
  180. <el-input v-model="modalData.feedBackID" disabled style="width: 120px"></el-input>
  181. </el-form-item>
  182. <el-form-item label="计划描述:">
  183. <el-input v-model="modalData.feedBackDesc" disabled style="width: 120px"></el-input>
  184. </el-form-item>
  185. <el-form-item >
  186. <span slot="label" style="">设备编码</span>
  187. <el-input v-model="modalData.objectID" disabled style="width: 120px"></el-input>
  188. </el-form-item>
  189. <el-form-item label="设备名称:">
  190. <el-input v-model="modalData.objectDesc" disabled style="width: 120px"></el-input>
  191. </el-form-item>
  192. </el-form>
  193. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  194. <el-form-item >
  195. <span slot="label" style="">故障编码</span>
  196. <el-input v-model="modalData.defectID" disabled style="width: 120px"></el-input>
  197. </el-form-item>
  198. <el-form-item label="故障原因:">
  199. <el-input v-model="modalData.defectDesc" disabled style="width: 120px"></el-input>
  200. </el-form-item>
  201. <el-form-item label="计划维修日期:">
  202. <el-date-picker
  203. style="width: 120px"
  204. v-model="modalData.planDate"
  205. type="date"
  206. value-format="yyyy-MM-dd"
  207. placeholder="必选">
  208. </el-date-picker>
  209. </el-form-item>
  210. <el-form-item >
  211. <span style="cursor: pointer" slot="label" @click="getBaseList(201)"><a>计划执行人员</a></span>
  212. <el-input v-model="modalData.planOperator" style="width: 120px"></el-input>
  213. </el-form-item>
  214. </el-form>
  215. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  216. <el-button type="primary" @click="saveDefectOrder()">保存</el-button>
  217. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  218. </el-footer>
  219. </el-dialog>
  220. <!-- 新增 -->
  221. <el-dialog title="设备故障报备" top="25vh" :close-on-click-modal="false" v-drag :visible.sync="saveModalFlag" width="500px">
  222. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  223. <el-form-item label="BU" prop="bu" :rules="saveRules.bu">
  224. <el-select v-model="saveModalData.bu" placeholder="请选择" :disabled="modalDisableFlag" @change="buChangedMethod" style="width: 221px">
  225. <el-option
  226. v-for = "i in userBuList"
  227. :key = "i.buNo"
  228. :label = "i.sitename"
  229. :value = "i.buNo">
  230. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  231. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  232. {{ i.buDesc }}
  233. </span>
  234. </el-option>
  235. </el-select>
  236. </el-form-item>
  237. <el-form-item label="反馈单号">
  238. <el-input v-model="saveModalData.feedBackID" disabled style="width: 105px"></el-input>
  239. </el-form-item>
  240. <el-form-item label="报修方式" prop="repairReportingType">
  241. <el-select v-model="saveModalData.repairReportingType" @change="repairReportingTypeChange" style="width: 102px">
  242. <el-option label="设备故障" value="设备故障"></el-option>
  243. <el-option label="TPM红牌" value="TPM红牌"></el-option>
  244. </el-select>
  245. </el-form-item>
  246. </el-form>
  247. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px">
  248. <el-form-item prop="objectID">
  249. <span style="cursor: pointer" slot="label" @click="getBaseList(200)"><a>设备编码</a></span>
  250. <el-input v-model="saveModalData.objectID" style="width: 221px"></el-input>
  251. </el-form-item>
  252. <el-form-item label="设备名称">
  253. <el-input v-model="saveModalData.objectDesc" disabled style="width: 221px"></el-input>
  254. </el-form-item>
  255. </el-form>
  256. <el-form v-if="saveModalData.repairReportingType === '设备故障'" :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px">
  257. <el-form-item prop="defectID">
  258. <span style="cursor: pointer" slot="label" @click="getBaseList(1055)"><a>故障编码</a></span>
  259. <el-input v-model="saveModalData.defectID" style="width: 221px"></el-input>
  260. </el-form-item>
  261. <el-form-item label="故障名称">
  262. <el-input v-model="saveModalData.defectDesc" disabled style="width: 221px"></el-input>
  263. </el-form-item>
  264. </el-form>
  265. <el-form v-if="saveModalData.repairReportingType === '设备故障'" :inline="true" label-position="top" :model="saveModalData" style="margin-left: 7px">
  266. <el-form-item label="故障日期" :rules="saveRules.defectDate">
  267. <el-date-picker style="width: 221px" v-model="saveModalData.defectDate" type="date" value-format="yyyy-MM-dd" format='yyyy-MM-dd' placeholder="请选择故障日期" :editable=false :picker-options="pickerOptions"></el-date-picker>
  268. </el-form-item>
  269. <!-- <el-form-item label="故障描述">-->
  270. <!-- <el-input v-model="saveModalData.feedBackDesc" style="width: 221px"></el-input>-->
  271. <!-- </el-form-item>-->
  272. </el-form>
  273. <el-form v-else :inline="true" label-position="top" :model="saveModalData" style="margin-left: 7px">
  274. <el-form-item label="反馈时间">
  275. <el-date-picker style="width: 221px" v-model="saveModalData.defectDate" type="date" value-format="yyyy-MM-dd" format='yyyy-MM-dd' placeholder="请选择故障日期" :editable=false :picker-options="pickerOptions"></el-date-picker>
  276. </el-form-item>
  277. <el-form-item label="反馈描述">
  278. <el-input v-model="saveModalData.feedBackDesc" style="width: 221px"></el-input>
  279. </el-form-item>
  280. </el-form>
  281. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px">
  282. <el-form-item label="紧急程度" prop="urgency" :rules="saveRules.urgency">
  283. <el-select v-model="saveModalData.urgency" style="width: 104px">
  284. <el-option label="一般" value="一般"></el-option>
  285. <el-option label="紧急" value="紧急"></el-option>
  286. <el-option label="特急" value="特急"></el-option>
  287. </el-select>
  288. </el-form-item>
  289. <el-form-item v-if="saveModalData.repairReportingType === '设备故障'" label="维修类型" prop="repairType">
  290. <el-select v-model="saveModalData.repairType" style="width: 104px" :disabled="this.repairReportingTypeFlag?'disabled':false">
  291. <el-option label="换线专家组" value="换线专家组"></el-option>
  292. <el-option label="设备维修组" value="设备维修组"></el-option>
  293. </el-select>
  294. </el-form-item>
  295. <el-form-item :rules="saveRules.planOperatorName">
  296. <span style="cursor: pointer" slot="label" @click="getOperatorList(0)"><a>计划维修人员</a></span>
  297. <el-input v-model="saveModalData.planOperatorName" disabled style="width: 130px"></el-input>
  298. </el-form-item>
  299. <el-form-item :label="' '">
  300. <el-button type="primary" @click="uploadFaultImageModal()">故障图片</el-button>
  301. </el-form-item>
  302. </el-form>
  303. <el-form :inline="true" label-position="top" :model="saveModalData" style="margin-left: 7px">
  304. <el-form-item label="备注">
  305. <el-input v-model="saveModalData.remark" style="width: 456px"></el-input>
  306. </el-form-item>
  307. </el-form>
  308. <el-form :inline="true" label-position="top" :model="saveModalData" style="margin-left: 7px">
  309. <el-form-item label="故障描述":rules="saveRules.feedBackDesc">
  310. <el-input type="textarea" v-model="saveModalData.feedBackDesc" :rows="3" resize='none' show-word-limit style="width: 456px"></el-input>
  311. </el-form-item>
  312. </el-form>
  313. <el-footer style="height:35px;margin-top: 50px;text-align:center">
  314. <el-button :loading="saveLoading" type="primary" @click="saveData">保存</el-button>
  315. <el-button type="primary" @click="saveModalFlag = false">关闭</el-button>
  316. </el-footer>
  317. </el-dialog>
  318. <!-- 维修事项 -->
  319. <el-dialog title="事项列表" top="20vh" :close-on-click-modal="false" v-drag :visible.sync="searchFeedMatterFlag" width="800px">
  320. <el-form label-position="top" style="margin-top: 2px; margin-left: 2px;">
  321. <el-button type="primary" @click="createFeedMatterModel">添加</el-button>
  322. </el-form>
  323. <el-table
  324. :data="matterList"
  325. height="300"
  326. border
  327. style="width: 100%;">
  328. <el-table-column
  329. v-for="(item,index) in columnMatterList" :key="index"
  330. :sortable="item.columnSortable"
  331. :prop="item.columnProp"
  332. :header-align="item.headerAlign"
  333. :show-overflow-tooltip="item.showOverflowTooltip"
  334. :align="item.align"
  335. :fixed="item.fixed==''?false:item.fixed"
  336. :min-width="item.columnWidth"
  337. :label="item.columnLabel">
  338. <template slot-scope="scope">
  339. <span v-if="!item.columnHidden">{{scope.row[item.columnProp]}}</span>
  340. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  341. </template>
  342. </el-table-column>
  343. <el-table-column
  344. fixed="right"
  345. header-align="center"
  346. align="center"
  347. width="100"
  348. label="操作">
  349. <template slot-scope="scope">
  350. <el-link style="cursor: pointer" @click="updateFeedMatterModel(scope.row)">编辑 |</el-link>
  351. <el-link style="cursor: pointer" @click="deleteFeedMatter(scope.row)">删除</el-link>
  352. </template>
  353. </el-table-column>
  354. </el-table>
  355. <el-footer style="height:35px;margin-top: 10px;text-align:center">
  356. <el-button type="primary" @click="searchFeedMatterFlag = false">关闭</el-button>
  357. </el-footer>
  358. </el-dialog>
  359. <!-- 添加事项 -->
  360. <el-dialog title="新增事项" top="23vh" :close-on-click-modal="false" v-drag :visible.sync="saveFeedMatterFlag" width="500px">
  361. <el-form :inline="true" label-position="top" :rules="saveMatterRules" style="margin-left: 7px;margin-top: -5px;">
  362. <el-form-item label="计划完成日期">
  363. <el-date-picker
  364. style="width: 120px"
  365. v-model="saveMatterData.plannedExecutionDate"
  366. type="date"
  367. value-format="yyyy-MM-dd">
  368. </el-date-picker>
  369. </el-form-item>
  370. <el-form-item label="实际完成日期">
  371. <el-date-picker
  372. style="width: 120px"
  373. v-model="saveMatterData.actualExecutionDate"
  374. type="date"
  375. value-format="yyyy-MM-dd">
  376. </el-date-picker>
  377. </el-form-item>
  378. <el-form-item label="状态" prop="status">
  379. <el-input v-model="saveMatterData.status" style="width: 90px"></el-input>
  380. </el-form-item>
  381. <el-form-item>
  382. <span style="cursor: pointer" slot="label" @click="getBaseList(201)"><a>跟踪人员</a></span>
  383. <el-input v-model="saveMatterData.trackingPersonnel" disabled style="width: 90px"></el-input>
  384. </el-form-item>
  385. </el-form>
  386. <el-form :inline="true" label-position="top" :rules="saveMatterRules" style="margin-left: 7px;">
  387. <el-form-item label="事项描述" prop="eventDesc">
  388. <el-input type="textarea" v-model="saveMatterData.eventDesc" :rows="3" resize='none' show-word-limit style="width: 460px"></el-input>
  389. </el-form-item>
  390. </el-form>
  391. <el-footer style="height:35px;margin-top: 55px;text-align:center">
  392. <el-button type="primary" @click="saveFeedMatter">保存</el-button>
  393. <el-button type="primary" @click="saveFeedMatterFlag = false">关闭</el-button>
  394. </el-footer>
  395. </el-dialog>
  396. <!-- 执行人员清单 -->
  397. <el-dialog title="执行人员清单" :close-on-click-modal="false" v-drag :visible.sync="operatorModelFlag" width="820px">
  398. <div class="rq">
  399. <el-form :inline="true" label-position="top" :model="operatorData">
  400. <el-form-item label="排班日期">
  401. <el-date-picker style="width: 221px" v-model="operatorData.date" type="date" value-format="yyyy-MM-dd" format='yyyy-MM-dd' :editable=false :picker-options="pickerOptions"></el-date-picker>
  402. </el-form-item>
  403. <el-form-item label="班次">
  404. <el-select v-model="operatorData.classesCode" placeholder="请选择" clearable >
  405. <el-option
  406. v-for = "i in classesList"
  407. :key = "i.code"
  408. :label = "i.code+' '+i.description"
  409. :value = "i.code">
  410. </el-option>
  411. </el-select>
  412. </el-form-item>
  413. <el-form-item :label="'所属角色'">
  414. <el-select v-model="operatorData.roleId" placeholder="请选择" style="width: 120px">
  415. <el-option
  416. v-for = "i in roleList"
  417. :key = "i.roleId"
  418. :label = "i.roleName"
  419. :value = "i.roleId">
  420. </el-option>
  421. </el-select>
  422. </el-form-item>
  423. <el-form-item :label="'人员编码'">
  424. <el-input v-model="operatorData.adminID" clearable style="width: 120px"></el-input>
  425. </el-form-item>
  426. <el-form-item :label="'人员姓名'">
  427. <el-input v-model="operatorData.adminName" clearable style="width: 120px"></el-input>
  428. </el-form-item>
  429. <el-form-item :label="' '">
  430. <el-button type="primary" @click="getOperatorList2">查询</el-button>
  431. </el-form-item>
  432. </el-form>
  433. <el-table
  434. :height="300"
  435. :data="operatorList"
  436. @row-dblclick="operatorClick"
  437. border
  438. style="width: 100%;">
  439. <el-table-column
  440. v-for="(item,index) in operatorDetailList" :key="index"
  441. :sortable="item.columnSortable"
  442. :prop="item.columnProp"
  443. :header-align="item.headerAlign"
  444. :show-overflow-tooltip="item.showOverflowTooltip"
  445. :align="item.align"
  446. :fixed="item.fixed==''?false:item.fixed"
  447. :min-width="item.columnWidth"
  448. :label="item.columnLabel">
  449. <template slot-scope="scope">
  450. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  451. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  452. </template>
  453. </el-table-column>
  454. </el-table>
  455. </div>
  456. <el-footer style="height:40px;margin-top: 20px;text-align:center">
  457. <el-button type="primary" @click="operatorModelFlag = false">关闭</el-button>
  458. </el-footer>
  459. </el-dialog>
  460. <!-- chooseList -->
  461. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  462. <upload-file-list ref="feedBackRef" :folder="uploadData.folder" :title="uploadData.title" :upload-status="true" :label="'反馈单号:'" :file-list.sync="fileData.file" :no="uploadData.feedBackID" :upload-dialog.sync="uploadDialog"></upload-file-list>
  463. </div>
  464. </template>
  465. <script>
  466. import {
  467. eamFeedBackSearch,
  468. cancelFeedBack,
  469. saveDefectOrder,
  470. saveEamGzBbData, // 新增方法
  471. getSiteAndBuByUserName,
  472. getFeedBackId, // 获得反馈单号
  473. searchFeedMatterRecord, // 查询维修事项
  474. saveFeedMatter, // 新增维修事项
  475. updateFeedMatter, // 编辑维修事项
  476. deleteFeedMatter, // 删除维修事项
  477. getUserRoleList, // 获取用户角色列表
  478. getOperatorListByOrder, // 获取用户列表
  479. updateEamDefectFeedBackPlanOperator, // 更新计划执行人员
  480. } from "@/api/eam/eam.js"
  481. import {
  482. getTableDefaultListLanguage,
  483. getTableUserListLanguage,
  484. } from "@/api/table.js"
  485. import Chooselist from '@/views/modules/common/Chooselist_eam'
  486. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  487. import {uploadFileList} from '../../../api/base/baseFunction.js';
  488. import UploadFileList from "../common/uploadFileList.vue";
  489. import excel from "@/utils/excel-util.js";
  490. import {getClassesList,
  491. getSchedulingOperator
  492. } from "../../../api/scheduling/scheduling";
  493. export default {
  494. components: {
  495. Chooselist,
  496. UploadFileList
  497. },
  498. watch: {
  499. "saveModalData.bu"(newV, oldV) {
  500. if (newV.includes('RFID') && this.saveModalData.repairReportingType !== 'TPM红牌') {
  501. this.saveModalData.repairType = '换线专家组'
  502. } else {
  503. this.saveModalData.repairType = '设备维修组'
  504. }
  505. },
  506. },
  507. data () {
  508. return {
  509. uploadDialog: false,
  510. repairReportingTypeFlag:true,
  511. chooseReachModelFlag: false,
  512. xdrowData:{},
  513. xdplanOperator:'',
  514. xdplanOperatorName:'',
  515. uploadData: {
  516. folder: '',
  517. title: '',
  518. feedBackID: ''
  519. },
  520. fileData: {
  521. file: [],
  522. orderRef1: '',
  523. orderRef2: '',
  524. orderRef3: '',
  525. orderRef4: '',
  526. folder: ''
  527. },
  528. // 是否收藏
  529. favorite: false,
  530. // 导出 start
  531. exportData: [],
  532. exportName: "维修反馈" + this.dayjs().format('YYYYMMDDHHmmss'),
  533. exportHeader: ["维修反馈"],
  534. exportFooter: [],
  535. exportList: [],
  536. // 导出 end
  537. tagNo: '',
  538. searchData: {
  539. site: '',
  540. userName: this.$store.state.user.name,
  541. feedBackID: '',
  542. objectID: '',
  543. planOperator: '',
  544. functionType: 'C',
  545. status: '',
  546. startDate: '',
  547. defectDesc: '',
  548. endDate: '',
  549. page: 1,
  550. limit: 10,
  551. buDesc: '',
  552. urgency: '',
  553. repairReportingType: '',
  554. repairType: '',
  555. matterTrackingFlag: '',
  556. },
  557. height: 200,
  558. pageIndex: 1,
  559. pageSize: 50,
  560. totalPage: 0,
  561. dataList: [],
  562. dataListLoading: false,
  563. dataListSelections: [],
  564. modalFlag: false,
  565. modalDisableFlag: false,
  566. saveModalFlag: false,
  567. saveModalDisableFlag: false,
  568. modalData: {
  569. site: '',
  570. bu: '',
  571. feedBackID: '',
  572. feedBackDesc: '',
  573. objectID: '',
  574. objectDesc: '',
  575. defectID: '',
  576. defectDesc: '',
  577. planDate: '',
  578. planOperator: '',
  579. createdBy: '',
  580. repairReportingType: '',
  581. repairType: ''
  582. },
  583. saveModalData: {
  584. site: '',
  585. bu: '',
  586. feedBackID: '',
  587. feedBackDesc: '',
  588. objectID: '',
  589. objectDesc: '',
  590. defectID: '',
  591. defectDesc: '',
  592. defectDate: '',
  593. remark: '',
  594. urgency: '',
  595. status: '',
  596. createdBy: '',
  597. updateBy: '',
  598. repairReportingType: '',
  599. repairType: '',
  600. planOperator: '',
  601. planOperatorName: ''
  602. },
  603. classesList: [],
  604. operatorData: {
  605. site: '',
  606. bu: '',
  607. adminID: '',
  608. adminName: '',
  609. roleId: '',
  610. roleName: '',
  611. functionType: 'C'
  612. },
  613. departmentList: [],
  614. matterList: [],
  615. roleList: [],
  616. operatorList: [],
  617. // 展示列集
  618. columnList: [
  619. {
  620. userId: this.$store.state.user.name,
  621. functionId: 101004001,
  622. serialNumber: '101004001Table1FeedBackID',
  623. tableId: "101004001Table1",
  624. tableName: "维修反馈表",
  625. columnProp: 'feedBackID',
  626. headerAlign: "center",
  627. align: "center",
  628. columnLabel: '反馈单号',
  629. columnHidden: false,
  630. columnImage: false,
  631. columnSortable: false,
  632. sortLv: 0,
  633. status: true,
  634. fixed: '',
  635. columnWidth: 95,
  636. },
  637. {
  638. userId: this.$store.state.user.name,
  639. functionId: 101004001,
  640. serialNumber: '101004001Table1FeedBackDesc',
  641. tableId: "101004001Table1",
  642. tableName: "维修反馈表",
  643. columnProp: 'feedBackDesc',
  644. headerAlign: "center",
  645. align: "center",
  646. columnLabel: '反馈描述',
  647. columnHidden: false,
  648. columnImage: false,
  649. columnSortable: false,
  650. sortLv: 0,
  651. status: true,
  652. fixed: '',
  653. columnWidth: 95,
  654. },
  655. {
  656. userId: this.$store.state.user.name,
  657. functionId: 101004001,
  658. serialNumber: '101004001Table1DefectID',
  659. tableId: "101004001Table1",
  660. tableName: "维修反馈表",
  661. columnProp: 'defectID',
  662. headerAlign: "center",
  663. align: "center",
  664. columnLabel: '故障代码',
  665. columnHidden: false,
  666. columnImage: false,
  667. columnSortable: false,
  668. sortLv: 0,
  669. status: true,
  670. fixed: '',
  671. columnWidth: 95,
  672. },
  673. {
  674. userId: this.$store.state.user.name,
  675. functionId: 101004001,
  676. serialNumber: '101004001Table1DefectDesc',
  677. tableId: "101004001Table1",
  678. tableName: "维修反馈表",
  679. columnProp: 'defectDesc',
  680. headerAlign: "center",
  681. align: "center",
  682. columnLabel: '故障原因',
  683. columnHidden: false,
  684. columnImage: false,
  685. columnSortable: false,
  686. sortLv: 0,
  687. status: true,
  688. fixed: '',
  689. columnWidth: 95,
  690. },
  691. {
  692. userId: this.$store.state.user.name,
  693. functionId: 101004001,
  694. serialNumber: '101004001Table1ObjectID',
  695. tableId: "101004001Table1",
  696. tableName: "维修反馈表",
  697. columnProp: 'objectID',
  698. headerAlign: "center",
  699. align: "center",
  700. columnLabel: '设备编码',
  701. columnHidden: false,
  702. columnImage: false,
  703. columnSortable: false,
  704. sortLv: 0,
  705. status: true,
  706. fixed: '',
  707. columnWidth: 95,
  708. },
  709. {
  710. userId: this.$store.state.user.name,
  711. functionId: 101004001,
  712. serialNumber: '101004001Table1ObjectDesc',
  713. tableId: "101004001Table1",
  714. tableName: "维修反馈表",
  715. columnProp: 'objectDesc',
  716. headerAlign: "center",
  717. align: "center",
  718. columnLabel: '设备名称',
  719. columnHidden: false,
  720. columnImage: false,
  721. columnSortable: false,
  722. sortLv: 0,
  723. status: true,
  724. fixed: '',
  725. columnWidth: 95,
  726. },
  727. {
  728. userId: this.$store.state.user.name,
  729. functionId: 101004001,
  730. serialNumber: '101004001Table1LocationName',
  731. tableId: "101004001Table1",
  732. tableName: "维修反馈表",
  733. columnProp: 'locationName',
  734. headerAlign: "center",
  735. align: "left",
  736. columnLabel: '设备区域',
  737. columnHidden: false,
  738. columnImage: false,
  739. columnSortable: false,
  740. sortLv: 0,
  741. status: true,
  742. fixed: '',
  743. columnWidth: 120,
  744. },
  745. {
  746. userId: this.$store.state.user.name,
  747. functionId: 101004001,
  748. serialNumber: '101004001TableDepartment',
  749. tableId: "101004001Table1",
  750. tableName: "维修反馈表",
  751. columnProp: 'department',
  752. headerAlign: "center",
  753. align: "left",
  754. columnLabel: '部门',
  755. columnHidden: false,
  756. columnImage: false,
  757. columnSortable: false,
  758. sortLv: 0,
  759. status: true,
  760. fixed: '',
  761. columnWidth: 113,
  762. },
  763. {
  764. userId: this.$store.state.user.name,
  765. functionId: 101004001,
  766. serialNumber: '101004001Table1Status',
  767. tableId: "101004001Table1",
  768. tableName: "维修反馈表",
  769. columnProp: 'status',
  770. headerAlign: "center",
  771. align: "center",
  772. columnLabel: '状态',
  773. columnHidden: false,
  774. columnImage: false,
  775. columnSortable: false,
  776. sortLv: 0,
  777. status: true,
  778. fixed: '',
  779. columnWidth: 95,
  780. },
  781. {
  782. userId: this.$store.state.user.name,
  783. functionId: 101004001,
  784. serialNumber: '101004001Table1PlanOperatorName',
  785. tableId: "101004001Table1",
  786. tableName: "维修反馈表",
  787. columnProp: 'planOperatorName',
  788. headerAlign: "center",
  789. align: "center",
  790. columnLabel: '计划执行人员',
  791. columnHidden: false,
  792. columnImage: false,
  793. columnSortable: false,
  794. sortLv: 0,
  795. status: true,
  796. fixed: '',
  797. columnWidth: 95,
  798. },
  799. {
  800. userId: this.$store.state.user.name,
  801. functionId: 101004001,
  802. serialNumber: '101004001Table1ActualOperatorName',
  803. tableId: "101004001Table1",
  804. tableName: "维修反馈表",
  805. columnProp: 'actualOperatorName',
  806. headerAlign: "center",
  807. align: "center",
  808. columnLabel: '实际执行人员',
  809. columnHidden: false,
  810. columnImage: false,
  811. columnSortable: false,
  812. sortLv: 0,
  813. status: true,
  814. fixed: '',
  815. columnWidth: 95,
  816. },
  817. {
  818. userId: this.$store.state.user.name,
  819. functionId: 101004001,
  820. serialNumber: '101004001Table1DefectDate',
  821. tableId: "101004001Table1",
  822. tableName: "维修反馈表",
  823. columnProp: 'defectDate',
  824. headerAlign: "center",
  825. align: "center",
  826. columnLabel: '故障发现日期',
  827. columnHidden: false,
  828. columnImage: false,
  829. columnSortable: false,
  830. sortLv: 0,
  831. status: true,
  832. fixed: '',
  833. columnWidth: 95,
  834. },
  835. {
  836. userId: this.$store.state.user.name,
  837. functionId: 101004001,
  838. serialNumber: '101004001Table1CreatedDate',
  839. tableId: "101004001Table1",
  840. tableName: "维修反馈表",
  841. columnProp: 'createdDate',
  842. headerAlign: "center",
  843. align: "center",
  844. columnLabel: '反馈时间',
  845. columnHidden: false,
  846. columnImage: false,
  847. columnSortable: false,
  848. sortLv: 0,
  849. status: true,
  850. fixed: '',
  851. columnWidth: 95,
  852. },
  853. {
  854. userId: this.$store.state.user.name,
  855. functionId: 101004001,
  856. serialNumber: '101004001Table1FinishDate',
  857. tableId: "101004001Table1",
  858. tableName: "维修反馈表",
  859. columnProp: 'finishDate',
  860. headerAlign: "center",
  861. align: "center",
  862. columnLabel: '维修时间',
  863. columnHidden: false,
  864. columnImage: false,
  865. columnSortable: false,
  866. sortLv: 0,
  867. status: true,
  868. fixed: '',
  869. columnWidth: 95,
  870. },
  871. {
  872. userId: this.$store.state.user.name,
  873. functionId: 101004001,
  874. serialNumber: '101004001Table1CreatedBy',
  875. tableId: "101004001Table1",
  876. tableName: "维修反馈表",
  877. columnProp: 'createdBy',
  878. headerAlign: "center",
  879. align: "center",
  880. columnLabel: '报修人员账号',
  881. columnHidden: false,
  882. columnImage: false,
  883. columnSortable: false,
  884. sortLv: 0,
  885. status: true,
  886. fixed: '',
  887. columnWidth: 95,
  888. },
  889. {
  890. userId: this.$store.state.user.name,
  891. functionId: 101004001,
  892. serialNumber: '101004001Table1FeedbackBy',
  893. tableId: "101004001Table1",
  894. tableName: "维修反馈表",
  895. columnProp: 'feedbackBy',
  896. headerAlign: "center",
  897. align: "center",
  898. columnLabel: '报修人员名称',
  899. columnHidden: false,
  900. columnImage: false,
  901. columnSortable: false,
  902. sortLv: 0,
  903. status: true,
  904. fixed: '',
  905. columnWidth: 95,
  906. },
  907. {
  908. userId: this.$store.state.user.name,
  909. functionId: 101004001,
  910. serialNumber: '101004001Table1Remark',
  911. tableId: "101004001Table1",
  912. tableName: "维修反馈表",
  913. columnProp: 'remark',
  914. headerAlign: "center",
  915. align: "center",
  916. columnLabel: '备注',
  917. columnHidden: false,
  918. columnImage: false,
  919. columnSortable: false,
  920. sortLv: 0,
  921. status: true,
  922. fixed: '',
  923. columnWidth: 95,
  924. },
  925. ],
  926. columnMatterList: [
  927. {
  928. columnProp: 'eventDesc',
  929. headerAlign: "center",
  930. align: "left",
  931. columnLabel: '事项描述',
  932. columnHidden: false,
  933. columnImage: false,
  934. status: true,
  935. fixed: '',
  936. columnWidth: 250,
  937. },
  938. {
  939. columnProp: 'status',
  940. headerAlign: "center",
  941. align: "left",
  942. columnLabel: '状态',
  943. columnHidden: false,
  944. columnImage: false,
  945. status: true,
  946. fixed: '',
  947. columnWidth: 80,
  948. },
  949. {
  950. columnProp: 'plannedExecutionDate',
  951. headerAlign: 'center',
  952. align: 'center',
  953. columnLabel: '计划完成日期',
  954. columnHidden: false,
  955. columnImage: false,
  956. status: true,
  957. fixed: '',
  958. columnWidth: 120,
  959. },
  960. {
  961. columnProp: 'actualExecutionDate',
  962. headerAlign: 'center',
  963. align: 'center',
  964. columnLabel: '实际完成日期',
  965. columnHidden: false,
  966. columnImage: false,
  967. status: true,
  968. fixed: '',
  969. columnWidth: 120,
  970. },
  971. {
  972. columnProp: 'trackingPersonnel',
  973. headerAlign: 'center',
  974. align: 'center',
  975. columnLabel: '跟踪人员',
  976. columnHidden: false,
  977. columnImage: false,
  978. status: true,
  979. fixed: '',
  980. columnWidth: 100,
  981. },
  982. ],
  983. pickerOptions: {
  984. disabledDate(time) {
  985. let curDate = new Date().getTime()
  986. let curD = new Date()
  987. /* 获取当前月份 */
  988. let curMonth = curD.getMonth()
  989. /* 生成实际的月份: 由于curMonth会比实际月份小1, 故需加1 */
  990. curD.setMonth(curMonth + 1)
  991. /* 将日期设置为0, 这里为什么要这样设置, 我不知道原因, 这是从网上学来的 */
  992. curD.setDate(0)
  993. /* 返回当月的天数 */
  994. let days = curD.getDate()
  995. let three = days * 24 * 3600 * 1000
  996. let threeMonths = curDate - three
  997. return time.getTime() > Date.now() || time.getTime() < threeMonths
  998. },
  999. },
  1000. operatorDetailList: [
  1001. {
  1002. columnProp: 'adminID',
  1003. headerAlign: "center",
  1004. align: "center",
  1005. columnLabel: '用户账号',
  1006. columnHidden: false,
  1007. columnImage: false,
  1008. columnSortable: false,
  1009. sortLv: 0,
  1010. status: true,
  1011. fixed: '',
  1012. },
  1013. {
  1014. columnProp: 'adminName',
  1015. headerAlign: "center",
  1016. align: "center",
  1017. columnLabel: '用户名称',
  1018. columnHidden: false,
  1019. columnImage: false,
  1020. columnSortable: false,
  1021. sortLv: 0,
  1022. status: true,
  1023. fixed: '',
  1024. },
  1025. {
  1026. columnProp: 'planOrderCount',
  1027. headerAlign: "center",
  1028. align: "right",
  1029. columnLabel: '计划分配工单数',
  1030. columnHidden: false,
  1031. columnImage: false,
  1032. columnSortable: false,
  1033. sortLv: 0,
  1034. status: true,
  1035. fixed: '',
  1036. },
  1037. {
  1038. columnProp: 'actualOrderCount',
  1039. headerAlign: "center",
  1040. align: "right",
  1041. columnLabel: '维修中工单数',
  1042. columnHidden: false,
  1043. columnImage: false,
  1044. columnSortable: false,
  1045. sortLv: 0,
  1046. status: true,
  1047. fixed: '',
  1048. },
  1049. {
  1050. columnProp: 'loadRate',
  1051. headerAlign: "center",
  1052. align: "right",
  1053. columnLabel: '负荷率(%)',
  1054. columnHidden: false,
  1055. columnImage: false,
  1056. columnSortable: false,
  1057. sortLv: 0,
  1058. status: true,
  1059. fixed: '',
  1060. },
  1061. ],
  1062. saveRules: {
  1063. objectID: [
  1064. {
  1065. required: true,
  1066. message: ' ',
  1067. trigger: ['blur','change']
  1068. }
  1069. ],
  1070. objectDesc: [
  1071. {
  1072. required: true,
  1073. message: ' ',
  1074. trigger: ['blur','change']
  1075. }
  1076. ],
  1077. defectID: [
  1078. {
  1079. required: true,
  1080. message: ' ',
  1081. trigger: ['blur','change']
  1082. }
  1083. ],
  1084. defectDate: [
  1085. {
  1086. required: true,
  1087. message: ' ',
  1088. trigger: ['blur','change']
  1089. }
  1090. ],
  1091. defectDesc: [
  1092. {
  1093. required: true,
  1094. message: ' ',
  1095. trigger: ['blur','change']
  1096. }
  1097. ],
  1098. urgency: [
  1099. {
  1100. required: true,
  1101. message: ' ',
  1102. trigger: ['blur','change']
  1103. }
  1104. ],
  1105. bu: [
  1106. {
  1107. required: true,
  1108. message: ' ',
  1109. trigger: ['blur','change']
  1110. }
  1111. ],
  1112. repairReportingType: [
  1113. {
  1114. required: true,
  1115. message: ' ',
  1116. trigger: ['blur','change']
  1117. }
  1118. ],
  1119. repairType: [
  1120. {
  1121. required: true,
  1122. message: ' ',
  1123. trigger: ['blur','change']
  1124. }
  1125. ],
  1126. planOperatorName: [
  1127. {
  1128. required: true,
  1129. message: ' ',
  1130. trigger: ['blur','change']
  1131. }
  1132. ],
  1133. feedBackDesc: [
  1134. {
  1135. required: true,
  1136. message: ' ',
  1137. trigger: ['blur','change']
  1138. }
  1139. ]
  1140. },
  1141. saveMatterRules: {
  1142. eventDesc: [
  1143. {
  1144. required: true,
  1145. message: ' ',
  1146. trigger: ['blur','change']
  1147. }
  1148. ],
  1149. status: [
  1150. {
  1151. required: true,
  1152. message: ' ',
  1153. trigger: ['blur','change']
  1154. }
  1155. ],
  1156. },
  1157. matterData: {
  1158. site: '',
  1159. bu: '',
  1160. feedBackId: ''
  1161. },
  1162. saveMatterData: {
  1163. flag: '',
  1164. id: '',
  1165. site: '',
  1166. bu: '',
  1167. feedBackId: '',
  1168. eventDesc: '',
  1169. status: '',
  1170. plannedExecutionDate: '',
  1171. actualExecutionDate: '',
  1172. trackingPersonnel: '',
  1173. createBy: '',
  1174. updateBy: ''
  1175. },
  1176. saveLoading: false,
  1177. userBuList: [],
  1178. authSearch: false,
  1179. authSave: false,
  1180. authCancel: false,
  1181. authRelease: false,
  1182. menuId: this.$route.meta.menuId,
  1183. saveFeedMatterFlag: false,
  1184. searchFeedMatterFlag: false,
  1185. operatorModelFlag: false,
  1186. }
  1187. },
  1188. mounted () {
  1189. this.$nextTick(() => {
  1190. this.height = window.innerHeight - 173
  1191. })
  1192. },
  1193. created () {
  1194. // 按钮控制
  1195. this.getButtonAuthData()
  1196. // 获取用户的 site 和 bu
  1197. this.getSiteAndBuByUserName()
  1198. // 校验用户是否收藏
  1199. this.favoriteIsOk()
  1200. // 动态列
  1201. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  1202. if (!this.authSearch) {
  1203. // 获取数据列表
  1204. this.getDataList()
  1205. }
  1206. // 获取用户角色
  1207. this.getUserRoleList()
  1208. },
  1209. methods: {
  1210. // 获取用户的bu
  1211. getSiteAndBuByUserName () {
  1212. let tempData = {
  1213. username: this.$store.state.user.name,
  1214. }
  1215. getSiteAndBuByUserName(tempData).then(({data}) => {
  1216. if (data.code === 0) {
  1217. this.userBuList = data.rows
  1218. }
  1219. })
  1220. },
  1221. // 获取用户角色
  1222. getUserRoleList () {
  1223. getUserRoleList().then(({data}) => {
  1224. if (data.code === 0) {
  1225. this.roleList = data.rows
  1226. } else {
  1227. this.roleList = []
  1228. }
  1229. })
  1230. },
  1231. buChangedMethod(){
  1232. if (this.saveModalData.bu=='2_01-Label'){
  1233. this.repairReportingTypeFlag=true
  1234. }else {
  1235. this.repairReportingTypeFlag=false
  1236. }
  1237. },
  1238. // 报修方式改变事件
  1239. repairReportingTypeChange () {
  1240. this.saveModalData.defectID = ''
  1241. this.saveModalData.defectDesc = ''
  1242. if (this.saveModalData.repairReportingType === 'TPM红牌') {
  1243. this.saveModalData.defectID = '***'
  1244. this.saveModalData.repairType = '设备维修组'
  1245. }
  1246. },
  1247. reach () {
  1248. console.log('1')
  1249. if (this.xdplanOperatorName === '' || this.xdplanOperatorName == null) {
  1250. this.$message.warning('请选择计划执行人员!')
  1251. return
  1252. }
  1253. console.log('2')
  1254. let tempData = {
  1255. ...this.xdrowData,
  1256. planOperator: this.xdplanOperator,
  1257. planOperatorName: this.xdplanOperatorName
  1258. }
  1259. updateEamDefectFeedBackPlanOperator(tempData).then()
  1260. this.chooseReachModelFlag = false
  1261. this.createDefectOrderModel(tempData)
  1262. },
  1263. // 新增模态框
  1264. saveModal () {
  1265. this.saveModalData.bu = ''
  1266. // 获取反馈单号
  1267. getFeedBackId().then(({data}) => {
  1268. if (data.code === 0) {
  1269. this.saveModalData = {
  1270. site: '',
  1271. bu: this.userBuList[0].buNo,
  1272. feedBackID: data.feedBackID,
  1273. feedBackDesc: '',
  1274. objectID: '',
  1275. objectDesc: '',
  1276. defectID: '',
  1277. defectDesc: '',
  1278. defectDate: new Date(),
  1279. remark: '',
  1280. urgency: '',
  1281. status: '已录入',
  1282. createdBy: this.$store.state.user.name,
  1283. repairReportingType: '设备故障',
  1284. repairType: '设备维修组',
  1285. planOperator: '',
  1286. planOperatorName: ''
  1287. }
  1288. this.fileData = {
  1289. file: [],
  1290. orderRef1: '',
  1291. orderRef2: '',
  1292. orderRef3: '',
  1293. orderRef4: '',
  1294. folder: ''
  1295. }
  1296. if (this.saveModalData.bu == '2_01-Label'){
  1297. this.repairReportingTypeFlag=true
  1298. } else {
  1299. this.repairReportingTypeFlag=false
  1300. }
  1301. this.saveModalDisableFlag = false
  1302. this.saveModalFlag = true
  1303. } else {
  1304. this.$alert(data.msg, '错误', {
  1305. confirmButtonText: '确定'
  1306. })
  1307. }
  1308. })
  1309. },
  1310. // 新增/编辑方法
  1311. saveData () {
  1312. if (this.saveModalData.bu === '' || this.saveModalData.bu == null) {
  1313. this.$message.warning('请选择BU!')
  1314. return
  1315. }
  1316. if (this.saveModalData.objectID === '' || this.saveModalData.objectID == null) {
  1317. this.$message.warning("请选择设备!")
  1318. return;
  1319. }
  1320. if (this.saveModalData.defectID === '' || this.saveModalData.defectID == null) {
  1321. this.$message.warning("请选择故障!")
  1322. return;
  1323. }
  1324. if (this.saveModalData.urgency === '' || this.saveModalData.urgency == null) {
  1325. this.$message.warning("请选择紧急程度!")
  1326. return;
  1327. }
  1328. if (this.saveModalData.repairReportingType === '' || this.saveModalData.repairReportingType == null) {
  1329. this.$message.warning("请选择报修方式!")
  1330. return;
  1331. }
  1332. if (this.saveModalData.repairType === '' || this.saveModalData.repairType == null) {
  1333. this.$message.warning("请选择维修类型!")
  1334. return;
  1335. }
  1336. if (this.saveModalData.planOperatorName === '' || this.saveModalData.planOperatorName == null) {
  1337. this.$message.warning("请选择计划执行人员!")
  1338. return;
  1339. }
  1340. if (this.saveModalData.feedBackDesc === '' || this.saveModalData.feedBackDesc == null) {
  1341. this.$message.warning("请填写故障描述!")
  1342. return;
  1343. }
  1344. if (this.saveModalData.defectDate === '' || this.saveModalData.defectDate == null) {
  1345. this.$message.warning("请选择故障时间!")
  1346. return;
  1347. }
  1348. this.saveLoading = true
  1349. this.fileData.orderRef1 = this.saveModalData.bu.split('_')[0]
  1350. this.fileData.orderRef2 = this.saveModalData.feedBackID
  1351. this.fileData.orderRef3 = this.uploadData.folder
  1352. this.fileData.orderRef4 = this.saveModalData.bu.split('_')[1]
  1353. this.fileData.folder = this.uploadData.folder
  1354. saveEamGzBbData(this.saveModalData).then(({data}) => {
  1355. if (data && data.code === 0) {
  1356. if (this.fileData.file.length > 0) { // 上传文件
  1357. let tempData = new FormData()
  1358. for (let i in this.fileData) {
  1359. if (i === 'file') {
  1360. for (let j = 0; j < this.fileData.file.length; j++) {
  1361. tempData.append("file", this.fileData.file[j].raw)
  1362. }
  1363. continue
  1364. }
  1365. tempData.append(i, this.fileData[i])
  1366. }
  1367. uploadFileList(tempData).then(({data}) => {
  1368. if (data.code !== 0) {
  1369. this.$message.warning(data.msg)
  1370. }
  1371. })
  1372. }
  1373. this.getDataList()
  1374. this.saveModalFlag = false
  1375. this.$message({
  1376. message: '操作成功',
  1377. type: 'success',
  1378. duration: 1500,
  1379. onClose: () => {}
  1380. })
  1381. } else {
  1382. this.$alert(data.msg, '错误', {
  1383. confirmButtonText: '确定'
  1384. })
  1385. }
  1386. this.saveLoading = false
  1387. })
  1388. },
  1389. // 获取数据列表
  1390. getDataList () {
  1391. this.searchData.limit = this.pageSize
  1392. this.searchData.page = this.pageIndex
  1393. eamFeedBackSearch(this.searchData).then(({data}) => {
  1394. if (data.code === 0) {
  1395. this.dataList = data.page.list
  1396. this.pageIndex = data.page.currPage
  1397. this.pageSize = data.page.pageSize
  1398. this.totalPage = data.page.totalCount
  1399. }
  1400. this.dataListLoading = false
  1401. })
  1402. },
  1403. // 每页数
  1404. sizeChangeHandle (val) {
  1405. this.pageSize = val
  1406. this.pageIndex = 1
  1407. this.getDataList()
  1408. },
  1409. // 当前页
  1410. currentChangeHandle (val) {
  1411. this.pageIndex = val
  1412. this.getDataList()
  1413. },
  1414. // 多选
  1415. selectionChangeHandle (val) {
  1416. this.dataListSelections = val
  1417. },
  1418. cancelFeedBack (row) {
  1419. this.$confirm(`是否取消选定反馈单?`, '提示', {
  1420. confirmButtonText: '确定',
  1421. cancelButtonText: '取消',
  1422. type: 'warning'
  1423. }).then(() => {
  1424. cancelFeedBack(row).then(({data}) => {
  1425. if (data && data.code === 0) {
  1426. this.getDataList()
  1427. this.$message({
  1428. message: '操作成功',
  1429. type: 'success',
  1430. duration: 1500,
  1431. onClose: () => {}
  1432. })
  1433. } else {
  1434. this.$alert(data.msg, '错误', {
  1435. confirmButtonText: '确定'
  1436. })
  1437. }
  1438. })
  1439. }).catch(() => {
  1440. })
  1441. },
  1442. createDefectOrderModel1(row){
  1443. this.xdplanOperator = row.planOperator
  1444. this.xdplanOperatorName = row.planOperatorName
  1445. this.chooseReachModelFlag=true
  1446. this.xdrowData = row
  1447. this.saveModalData.bu = row.site+'_'+row.buNo
  1448. },
  1449. // 下达
  1450. createDefectOrderModel (row) {
  1451. // this.$confirm(`是否下达反馈单?`, '提示', {
  1452. // confirmButtonText: '确定',
  1453. // cancelButtonText: '取消',
  1454. // type: 'warning'
  1455. // }).then(() => {
  1456. // saveDefectOrder(row).then(({data}) => {
  1457. // if (data && data.code === 0) {
  1458. // this.getDataList()
  1459. // this.$message({
  1460. // message: '操作成功',
  1461. // type: 'success',
  1462. // duration: 1500,
  1463. // onClose: () => {}
  1464. // })
  1465. // } else {
  1466. // this.$alert(data.msg, '错误', {
  1467. // confirmButtonText: '确定'
  1468. // })
  1469. // }
  1470. // })
  1471. // })
  1472. saveDefectOrder(row).then(({data}) => {
  1473. if (data && data.code === 0) {
  1474. this.getDataList()
  1475. this.$message({
  1476. message: '操作成功',
  1477. type: 'success',
  1478. duration: 1500,
  1479. onClose: () => {}
  1480. })
  1481. } else {
  1482. this.$alert(data.msg, '错误', {
  1483. confirmButtonText: '确定'
  1484. })
  1485. }
  1486. })
  1487. },
  1488. // 查计划事项
  1489. searchFeedMatterRecord (row) {
  1490. this.matterData = {
  1491. site: row.site,
  1492. buNo: row.buNo,
  1493. feedBackId: row.feedBackID
  1494. }
  1495. this.searchFeedMatterRecord2()
  1496. },
  1497. searchFeedMatterRecord2 () {
  1498. searchFeedMatterRecord(this.matterData).then(({data}) => {
  1499. if (data && data.code === 0) {
  1500. this.matterList = data.rows
  1501. this.searchFeedMatterFlag = true
  1502. } else {
  1503. this.matterList = []
  1504. }
  1505. })
  1506. },
  1507. // 新增事项模态框
  1508. createFeedMatterModel () {
  1509. this.saveMatterData = {
  1510. flag: '1',
  1511. id: '',
  1512. site: this.matterData.site,
  1513. buNo: this.matterData.buNo,
  1514. feedBackId: this.matterData.feedBackId,
  1515. eventDesc: '',
  1516. status: '',
  1517. plannedExecutionDate: '',
  1518. actualExecutionDate: '',
  1519. trackingPersonnel: '',
  1520. createBy: this.$store.state.user.name
  1521. }
  1522. this.saveFeedMatterFlag = true
  1523. },
  1524. // 编辑事项模态框
  1525. updateFeedMatterModel (row) {
  1526. this.saveMatterData = {
  1527. flag: '2',
  1528. id: row.id,
  1529. site: row.site,
  1530. buNo: row.buNo,
  1531. feedBackId: row.feedBackId,
  1532. eventDesc: row.eventDesc,
  1533. status: row.status,
  1534. plannedExecutionDate: row.plannedExecutionDate,
  1535. actualExecutionDate: row.actualExecutionDate,
  1536. trackingPersonnel: row.trackingPersonnel,
  1537. updateBy: this.$store.state.user.name
  1538. }
  1539. this.saveFeedMatterFlag = true
  1540. },
  1541. async getClassesList() {
  1542. let split = this.saveModalData.bu.split('_')
  1543. let params = {
  1544. site: split[0],
  1545. buNo: split[1]
  1546. }
  1547. await getClassesList(params).then(({data}) => {
  1548. if (data.code === 0) {
  1549. this.classesList = data.rows
  1550. let h = new Date().getHours();
  1551. this.classesList.forEach((options)=>{
  1552. //判断当前时间是白班|夜班
  1553. if (h >= 8 && h < 20){
  1554. if (options.description.includes('白班')){
  1555. this.$set(this.operatorData,'classesCode',options.code)
  1556. }
  1557. } else {
  1558. if (options.description.includes('夜班')){
  1559. this.$set(this.operatorData,'classesCode',options.code)
  1560. }
  1561. }
  1562. })
  1563. } else {
  1564. this.$message.warning(data.msg)
  1565. }
  1566. }).catch((error)=>{
  1567. this.$message.error(error)
  1568. })
  1569. },
  1570. // 新增事项
  1571. saveFeedMatter () {
  1572. if (this.saveMatterData.eventDesc === '' || this.saveMatterData.eventDesc == null) {
  1573. this.$message.warning('请填写事项描述!')
  1574. return
  1575. }
  1576. if (this.saveMatterData.status === '' || this.saveMatterData.status == null) {
  1577. this.$message.warning('请填写状态!')
  1578. return
  1579. }
  1580. if (this.saveMatterData.flag === '1') {
  1581. saveFeedMatter(this.saveMatterData).then(({data}) => {
  1582. if (data && data.code === 0) {
  1583. this.searchFeedMatterRecord2()
  1584. this.getDataList()
  1585. this.saveFeedMatterFlag = false
  1586. this.$message({
  1587. message: '操作成功',
  1588. type: 'success',
  1589. duration: 1500,
  1590. onClose: () => {}
  1591. })
  1592. } else {
  1593. this.$alert(data.msg, '错误', {
  1594. confirmButtonText: '确定'
  1595. })
  1596. }
  1597. })
  1598. } else {
  1599. updateFeedMatter(this.saveMatterData).then(({data}) => {
  1600. if (data && data.code === 0) {
  1601. this.searchFeedMatterRecord2()
  1602. this.saveFeedMatterFlag = false
  1603. this.$message({
  1604. message: '操作成功',
  1605. type: 'success',
  1606. duration: 1500,
  1607. onClose: () => {}
  1608. })
  1609. } else {
  1610. this.$alert(data.msg, '错误', {
  1611. confirmButtonText: '确定'
  1612. })
  1613. }
  1614. })
  1615. }
  1616. },
  1617. // 删除事项
  1618. deleteFeedMatter (row) {
  1619. this.$confirm(`是否删除该事项?`, '提示', {
  1620. confirmButtonText: '确定',
  1621. cancelButtonText: '取消',
  1622. type: 'warning'
  1623. }).then(() => {
  1624. deleteFeedMatter(row).then(({data}) => {
  1625. if (data && data.code === 0) {
  1626. this.searchFeedMatterRecord2()
  1627. this.$message({
  1628. message: '操作成功',
  1629. type: 'success',
  1630. duration: 1500,
  1631. onClose: () => {}
  1632. })
  1633. } else {
  1634. this.$alert(data.msg, '错误', {
  1635. confirmButtonText: '确定'
  1636. })
  1637. }
  1638. })
  1639. })
  1640. },
  1641. // 获取基础数据列表S
  1642. getBaseList (val,type) {
  1643. this.tagNo = val
  1644. this.$nextTick(() => {
  1645. let strVal = ''
  1646. let conSql = ''
  1647. if (val === 201) {
  1648. strVal = this.saveMatterData.trackingPersonnel
  1649. this.$refs.baseList.init(val, strVal)
  1650. }
  1651. if (val === 200) {
  1652. strVal = this.saveModalData.objectID
  1653. if (this.saveModalData.bu === null || this.saveModalData.bu === '') {
  1654. this.$message.warning("请选择BU!")
  1655. return
  1656. } else {
  1657. conSql = " and bu_no = '" + this.saveModalData.bu.split('_')[1] + "'"
  1658. this.$refs.baseList.init(val, strVal, conSql)
  1659. }
  1660. }
  1661. if (val === 1055) {
  1662. strVal = this.saveModalData.defectID
  1663. this.$refs.baseList.init(val, strVal)
  1664. }
  1665. if (val === 1058) {
  1666. strVal = this.saveModalData.defectID
  1667. this.$refs.baseList.init(val, strVal)
  1668. }
  1669. })
  1670. },
  1671. // 列表方法的回调
  1672. async getBaseData (val) {
  1673. if (this.tagNo === 201) {
  1674. this.saveMatterData.trackingPersonnel = val.username
  1675. }
  1676. if (this.tagNo === 200) {
  1677. this.saveModalData.objectID = val.ObjectID
  1678. this.saveModalData.objectDesc = val.ObjectDesc
  1679. if (val.deviceManager!=''&&val.deviceManager!=null){
  1680. let peopleList = val.deviceManager.split(';')
  1681. await this.getOperatorList(1)
  1682. peopleList.forEach((username)=>{
  1683. this.operatorList.forEach((item)=>{
  1684. if (item.adminID === username){
  1685. this.saveModalData.planOperator = item.adminID
  1686. this.saveModalData.planOperatorName = item.adminName
  1687. }
  1688. })
  1689. })
  1690. }
  1691. }
  1692. if (this.tagNo === 1055) {
  1693. this.saveModalData.defectID = val.DefectID
  1694. this.saveModalData.defectDesc = val.DefectDesc
  1695. }
  1696. if (this.tagNo === 1058) {
  1697. this.saveModalData.defectID = val.DefectID
  1698. this.saveModalData.defectDesc = val.DefectDesc
  1699. }
  1700. },
  1701. // 校验用户是否收藏
  1702. favoriteIsOk () {
  1703. let userFavorite = {
  1704. userId: this.$store.state.user.id,
  1705. languageCode: this.$i18n.locale
  1706. }
  1707. userFavoriteList(userFavorite).then(({data}) => {
  1708. for (let i = 0; i < data.list.length; i++) {
  1709. if(this.$route.meta.menuId === data.list[i].menuId){
  1710. this.favorite = true
  1711. }
  1712. }
  1713. })
  1714. },
  1715. // 收藏 OR 取消收藏
  1716. favoriteFunction () {
  1717. let userFavorite = {
  1718. userId: this.$store.state.user.id,
  1719. functionId: this.$route.meta.menuId,
  1720. }
  1721. if (this.favorite) {
  1722. removeUserFavorite(userFavorite).then(({data}) => {
  1723. this.$message.success(data.msg)
  1724. this.favorite = false
  1725. })
  1726. } else {
  1727. // 收藏
  1728. saveUserFavorite(userFavorite).then(({data}) => {
  1729. this.$message.success(data.msg)
  1730. this.favorite = true
  1731. })
  1732. }
  1733. },
  1734. async exportExcel() {
  1735. this.searchData.limit = this.pageSize
  1736. this.searchData.page = this.pageIndex
  1737. excel.exportTable({
  1738. url: "/pms/eam/eamFeedBackSearch",
  1739. columnMapping: this.columnList,//可以直接用table,不需要的列就剔除
  1740. mergeSetting: [],//需要合并的列
  1741. params: this.searchData,
  1742. fileName: this.exportName+".xlsx",
  1743. rowFetcher: res => res.data,
  1744. columnFormatter: [],
  1745. dropColumns: [],//需要剔除的列,例如dropColumns: ["netWeight"],即剔除净重列
  1746. });
  1747. },
  1748. //导出excel
  1749. // async createExportData () {
  1750. // this.searchData.limit = -1
  1751. // this.searchData.page = 1
  1752. // await eamFeedBackSearch(this.searchData).then(({data}) => {
  1753. // this.exportList= data.page.list
  1754. // })
  1755. // return this.exportList
  1756. // },
  1757. //
  1758. // startDownload () {},
  1759. //
  1760. // finishDownload () {},
  1761. //
  1762. // fields () {
  1763. // let json = "{"
  1764. // this.columnList.forEach((item, index) => {
  1765. // if (index === this.columnList.length - 1) {
  1766. // json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  1767. // } else {
  1768. // json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  1769. // }
  1770. // })
  1771. // json += "}"
  1772. // let s = eval("(" + json + ")")
  1773. // return s
  1774. // },
  1775. // 动态列开始 获取 用户保存的 格式列
  1776. async getTableUserColumn(tableId, columnId) {
  1777. let queryTableUser = {
  1778. userId: this.$store.state.user.name,
  1779. functionId: this.$route.meta.menuId,
  1780. tableId: tableId,
  1781. status: true,
  1782. languageCode: this.$i18n.locale
  1783. }
  1784. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  1785. if (data.rows.length > 0) {
  1786. switch (columnId) {
  1787. case 1:
  1788. this.columnList = data.rows
  1789. break;
  1790. }
  1791. } else {
  1792. this.getColumnList(tableId, columnId)
  1793. }
  1794. })
  1795. },
  1796. // 获取 tableDefault 列
  1797. async getColumnList(tableId, columnId) {
  1798. let queryTable= {
  1799. functionId: this.$route.meta.menuId,
  1800. tableId: tableId,
  1801. languageCode: this.$i18n.locale
  1802. }
  1803. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  1804. if (!data.rows.length == 0) {
  1805. switch (columnId) {
  1806. case 1:
  1807. this.columnList = data.rows
  1808. break;
  1809. }
  1810. }
  1811. })
  1812. },
  1813. //获取按钮的权限数据
  1814. getButtonAuthData () {
  1815. let searchFlag = this.isAuth(this.menuId+":search")
  1816. let saveFlag = this.isAuth(this.menuId+":save")
  1817. let cancelFlag = this.isAuth(this.menuId+":cancel")
  1818. let releaseFlag = this.isAuth(this.menuId+":release")
  1819. //处理页面的权限数据
  1820. this.authSearch = !searchFlag
  1821. this.authSave = !saveFlag
  1822. this.authCancel = !cancelFlag
  1823. this.authRelease = !releaseFlag
  1824. },
  1825. // 上传保修故障图片
  1826. uploadFaultImageModal () {
  1827. this.uploadData = {
  1828. folder: 'feedBack',
  1829. title: '故障保修图片上传',
  1830. feedBackID: this.saveModalData.feedBackID
  1831. }
  1832. this.uploadDialog = true
  1833. },
  1834. // 获取机修人员列表
  1835. async getOperatorList (type) {
  1836. this.operatorData.bu = this.saveModalData.bu
  1837. this.$set(this.operatorData,'date',this.saveModalData.defectDate)
  1838. if (this.roleList.length > 0) {
  1839. let filterList = this.roleList.filter(item => item.roleName === '机修人员')
  1840. if (filterList.length > 0) {
  1841. this.operatorData.roleId = filterList[0].roleId
  1842. } else {
  1843. this.operatorData.roleId = this.roleList[0].roleId
  1844. }
  1845. } else {
  1846. this.operatorData.roleId = ''
  1847. }
  1848. //先清空班次信息
  1849. this.$set(this.operatorData,'classesCode','')
  1850. //根据bu查询班次信息
  1851. await this.getClassesList()
  1852. // 查询人员
  1853. await getOperatorListByOrder(this.operatorData).then(({data}) => {
  1854. if (data && data.code === 0) {
  1855. this.operatorList = data.rows
  1856. if (type != 1){
  1857. this.operatorModelFlag = true
  1858. }
  1859. } else {
  1860. this.operatorList = []
  1861. }
  1862. })
  1863. },
  1864. // 查询机修人员列表
  1865. getOperatorList2 () {
  1866. // 查询人员
  1867. getOperatorListByOrder(this.operatorData).then(({data}) => {
  1868. if (data && data.code === 0) {
  1869. this.operatorList = data.rows
  1870. } else {
  1871. this.operatorList = []
  1872. }
  1873. })
  1874. },
  1875. // 选中人员
  1876. operatorClick (row) {
  1877. if (this.chooseReachModelFlag){
  1878. this.xdplanOperator = row.adminID;
  1879. this.xdplanOperatorName = row.adminName;
  1880. this.operatorModelFlag = false;
  1881. } else {
  1882. // 找到operatorList中actualOrderCount最小值
  1883. const minActualOrderCount = Math.min(...this.operatorList.map(item => item.actualOrderCount));
  1884. if (this.saveModalData.bu==='2_01-Label'){
  1885. this.saveModalData.planOperator = row.adminID;
  1886. this.saveModalData.planOperatorName = row.adminName;
  1887. this.operatorModelFlag = false;
  1888. } else {
  1889. if (row.actualOrderCount === minActualOrderCount) {
  1890. // 只有actualOrderCount最小的行允许选择
  1891. this.saveModalData.planOperator = row.adminID;
  1892. this.saveModalData.planOperatorName = row.adminName;
  1893. this.operatorModelFlag = false;
  1894. } else {
  1895. // 不是最小,给提示或不做处理
  1896. this.$message.warning('只能选择实际维修工单数最小的人员!');
  1897. }
  1898. }
  1899. }
  1900. },
  1901. }
  1902. }
  1903. </script>
  1904. <style scoped lang="scss">
  1905. /deep/ .el-table .cell {
  1906. line-height: 14px;
  1907. font-size: 12px;
  1908. height: auto;
  1909. }
  1910. </style>