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.

1152 lines
38 KiB

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
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
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. <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-input v-model="searchData.feedBackID" clearable style="width: 120px"></el-input>
  28. </el-form-item>
  29. <el-form-item :label="'设备编码'">
  30. <el-input v-model="searchData.objectID" clearable style="width: 120px"></el-input>
  31. </el-form-item>
  32. <el-form-item :label="'故障原因'">
  33. <el-input v-model="searchData.defectDesc" clearable style="width: 120px"></el-input>
  34. </el-form-item>
  35. <el-form-item :label="'状态'">
  36. <el-select filterable v-model="searchData.status" clearable style="width: 130px">
  37. <el-option label="已下达" value="已下达"></el-option>
  38. <el-option label="维修确认" value="维修确认"></el-option>
  39. <el-option label="维修完成" value="维修完成"></el-option>
  40. <el-option label="维修失败" value="维修失败"></el-option>
  41. <el-option label="已取消" value="已取消"></el-option>
  42. </el-select>
  43. </el-form-item>
  44. <el-form-item :label="'故障发现日期'">
  45. <el-date-picker
  46. style="width: 120px"
  47. v-model="searchData.startDate"
  48. type="date"
  49. value-format="yyyy-MM-dd"
  50. placeholder="选择日期">
  51. </el-date-picker>
  52. </el-form-item>
  53. <el-form-item style="margin-top: 23px;">
  54. <laber style="margin-left: -9px;font-size: 19px">&#10142</laber>
  55. </el-form-item>
  56. <el-form-item :label="' '">
  57. <el-date-picker
  58. style="width: 120px"
  59. v-model="searchData.endDate"
  60. type="date"
  61. value-format="yyyy-MM-dd"
  62. placeholder="选择日期">
  63. </el-date-picker>
  64. </el-form-item>
  65. <el-form-item :label="' '">
  66. <el-button v-if="!authSearch" @click="getDataList">查询</el-button>
  67. <el-button v-if="!authSave" @click="saveModal">新增</el-button>
  68. <download-excel
  69. :fields="fields()"
  70. :data="exportData"
  71. type="xls"
  72. :name="exportName"
  73. :header="exportHeader"
  74. :footer="exportFooter"
  75. :fetch="createExportData"
  76. :before-generate="startDownload"
  77. :before-finish="finishDownload"
  78. worksheet="导出信息"
  79. class="el-button el-button--primary el-button--medium">
  80. {{ "导出" }}
  81. </download-excel>
  82. </el-form-item>
  83. </el-form>
  84. <el-table
  85. :height="height"
  86. :data="dataList"
  87. border
  88. v-loading="dataListLoading"
  89. @selection-change="selectionChangeHandle"
  90. style="width: 100%;">
  91. <el-table-column
  92. prop="buDesc"
  93. header-align="center"
  94. align="center"
  95. label="BU"
  96. width="60">
  97. </el-table-column>
  98. <el-table-column
  99. prop="urgency"
  100. header-align="center"
  101. align="center"
  102. label="紧急程度"
  103. width="70">
  104. <template slot-scope="scope">
  105. <div :style="{fontWeight:'bold', color: scope.row.urgency === '特急' ? 'red' : scope.row.urgency === '紧急' ? '#ffa500e0' : scope.row.urgency === '一般' ? '#47B0FF' : ''}">
  106. {{ scope.row.urgency }}
  107. </div>
  108. </template>
  109. </el-table-column>
  110. <el-table-column
  111. v-for="(item,index) in columnList" :key="index"
  112. :sortable="item.columnSortable"
  113. :prop="item.columnProp"
  114. :header-align="item.headerAlign"
  115. :show-overflow-tooltip="item.showOverflowTooltip"
  116. :align="item.align"
  117. :fixed="item.fixed==''?false:item.fixed"
  118. :min-width="item.columnWidth"
  119. :label="item.columnLabel">
  120. <template slot-scope="scope">
  121. <span v-if="!item.columnHidden">{{ scope.row[item.columnProp] }}</span>
  122. <span v-if="item.columnImage"><img :src="scope.row[item.columnProp]" style="width: 100px; height: 80px"/></span>
  123. </template>
  124. </el-table-column>
  125. <el-table-column
  126. fixed="right"
  127. header-align="center"
  128. align="center"
  129. width="100"
  130. label="操作">
  131. <template slot-scope="scope">
  132. <a type="text" size="small" v-if="scope.row.status === '已录入' && !authCancel" @click="cancelFeedBack(scope.row)">取消反馈</a>
  133. <a type="text" size="small" v-if="scope.row.status === '已录入' && !authRelease" @click="createDefectOrderModel(scope.row)">下达</a>
  134. </template>
  135. </el-table-column>
  136. </el-table>
  137. <el-pagination
  138. @size-change="sizeChangeHandle"
  139. @current-change="currentChangeHandle"
  140. :current-page="pageIndex"
  141. :page-sizes="[20, 50, 100, 200, 500]"
  142. :page-size="pageSize"
  143. :total="totalPage"
  144. layout="total, sizes, prev, pager, next, jumper">
  145. </el-pagination>
  146. <!-- 下达 -->
  147. <el-dialog title="下达维修工单" :close-on-click-modal="false" v-drag :visible.sync="modalFlag" width="570px">
  148. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  149. <el-form-item label="计划编码:">
  150. <el-input v-model="modalData.feedBackID" disabled style="width: 120px"></el-input>
  151. </el-form-item>
  152. <el-form-item label="计划描述:">
  153. <el-input v-model="modalData.feedBackDesc" disabled style="width: 120px"></el-input>
  154. </el-form-item>
  155. <el-form-item >
  156. <span slot="label" style="">设备编码</span>
  157. <el-input v-model="modalData.objectID" disabled style="width: 120px"></el-input>
  158. </el-form-item>
  159. <el-form-item label="设备名称:">
  160. <el-input v-model="modalData.objectDesc" disabled style="width: 120px"></el-input>
  161. </el-form-item>
  162. </el-form>
  163. <el-form :inline="true" label-position="top" style="margin-left: 7px;margin-top: -5px;">
  164. <el-form-item >
  165. <span slot="label" style="">故障编码</span>
  166. <el-input v-model="modalData.defectID" disabled style="width: 120px"></el-input>
  167. </el-form-item>
  168. <el-form-item label="故障原因:">
  169. <el-input v-model="modalData.defectDesc" disabled style="width: 120px"></el-input>
  170. </el-form-item>
  171. <el-form-item label="计划维修日期:">
  172. <el-date-picker
  173. style="width: 120px"
  174. v-model="modalData.planDate"
  175. type="date"
  176. value-format="yyyy-MM-dd"
  177. placeholder="必选">
  178. </el-date-picker>
  179. </el-form-item>
  180. <el-form-item >
  181. <span slot="label" style="" @click="getBaseList(201)"><a herf="#">计划执行人员</a></span>
  182. <el-input v-model="modalData.planOperator" style="width: 120px"></el-input>
  183. </el-form-item>
  184. </el-form>
  185. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  186. <el-button type="primary" @click="saveDefectOrder()">保存</el-button>
  187. <el-button type="primary" @click="modalFlag = false">关闭</el-button>
  188. </el-footer>
  189. </el-dialog>
  190. <!-- 新增 -->
  191. <el-dialog title="设备故障报备" top="25vh" :close-on-click-modal="false" v-drag :visible.sync="saveModalFlag" width="500px">
  192. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  193. <el-form-item label="反馈单号">
  194. <el-input v-model="saveModalData.feedBackID" disabled style="width: 221px"></el-input>
  195. </el-form-item>
  196. <el-form-item label="BU" prop="bu" :rules="saveRules.bu">
  197. <el-select v-model="saveModalData.bu" placeholder="请选择" :disabled="modalDisableFlag" style="width: 221px">
  198. <el-option
  199. v-for = "i in userBuList"
  200. :key = "i.buNo"
  201. :label = "i.sitename"
  202. :value = "i.buNo">
  203. <span style="float: left;width: 100px">{{ i.sitename }}</span>
  204. <span style="float: right; color: #8492a6;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; font-size: 11px;width: 60px">
  205. {{ i.buDesc }}
  206. </span>
  207. </el-option>
  208. </el-select>
  209. </el-form-item>
  210. </el-form>
  211. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  212. <el-form-item prop="objectId" :rules="saveRules.objectId">
  213. <span slot="label" @click="getBaseList(200)"><a href="#">设备编码</a></span>
  214. <el-input v-model="saveModalData.objectID" style="width: 221px"></el-input>
  215. </el-form-item>
  216. <el-form-item label="设备名称" prop="objectDesc" :rules="saveRules.objectDesc">
  217. <el-input v-model="saveModalData.objectDesc" disabled style="width: 221px"></el-input>
  218. </el-form-item>
  219. </el-form>
  220. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  221. <el-form-item prop="defectId" :rules="saveRules.defectId">
  222. <span slot="label" @click="getBaseList(1055)"><a href="#">故障编码</a></span>
  223. <el-input v-model="saveModalData.defectID" style="width: 221px"></el-input>
  224. </el-form-item>
  225. <el-form-item label="故障名称" prop="defectDesc" :rules="saveRules.defectDesc">
  226. <el-input v-model="saveModalData.defectDesc" disabled style="width: 221px"></el-input>
  227. </el-form-item>
  228. </el-form>
  229. <el-form :inline="true" label-position="top" :model="saveModalData" style="margin-left: 7px;margin-top: -5px;">
  230. <el-form-item label="故障日期">
  231. <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>
  232. </el-form-item>
  233. <el-form-item label="故障描述">
  234. <el-input v-model="saveModalData.feedBackDesc" style="width: 221px"></el-input>
  235. </el-form-item>
  236. </el-form>
  237. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  238. <el-form-item label="紧急程度" prop="urgency" :rules="saveRules.urgency">
  239. <el-select v-model="saveModalData.urgency" style="width: 221px">
  240. <el-option label="一般" value="一般"></el-option>
  241. <el-option label="紧急" value="紧急"></el-option>
  242. <el-option label="特急" value="特急"></el-option>
  243. </el-select>
  244. </el-form-item>
  245. <el-form-item :label="' '">
  246. <el-button type="primary" @click="uploadFaultImageModal()">故障图片</el-button>
  247. </el-form-item>
  248. </el-form>
  249. <el-form :inline="true" label-position="top" :model="saveModalData" :rules="saveRules" style="margin-left: 7px;margin-top: -5px;">
  250. <el-form-item label="备注">
  251. <el-input v-model="saveModalData.remark" style="width: 456px"></el-input>
  252. </el-form-item>
  253. </el-form>
  254. <el-footer style="height:40px;margin-top: 10px;text-align:center">
  255. <el-button :loading="saveLoading" type="primary" @click="saveData">保存</el-button>
  256. <el-button type="primary" @click="saveModalFlag = false">关闭</el-button>
  257. </el-footer>
  258. </el-dialog>
  259. <!-- chooseList -->
  260. <Chooselist ref="baseList" @getBaseData="getBaseData"></Chooselist>
  261. <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>
  262. </div>
  263. </template>
  264. <script>
  265. import {
  266. eamFeedBackSearch,
  267. cancelFeedBack,
  268. saveDefectOrder,
  269. saveEamGzBbData, // 新增方法
  270. getSiteAndBuByUserName,
  271. getFeedBackId, // 获得反馈单号
  272. } from "@/api/eam/eam.js"
  273. import {
  274. getTableDefaultListLanguage,
  275. getTableUserListLanguage,
  276. } from "@/api/table.js"
  277. import Chooselist from '@/views/modules/common/Chooselist_eam'
  278. import {userFavoriteList, saveUserFavorite, removeUserFavorite} from '@/api/userFavorite.js'
  279. import {uploadFileList} from '../../../api/base/baseFunction.js';
  280. import UploadFileList from "../common/uploadFileList.vue";
  281. export default {
  282. components: {
  283. Chooselist,
  284. UploadFileList
  285. },
  286. watch: {
  287. },
  288. data () {
  289. return {
  290. uploadDialog: false,
  291. uploadData: {
  292. folder: '',
  293. title: '',
  294. feedBackID: ''
  295. },
  296. fileData: {
  297. file: [],
  298. orderRef1: '',
  299. orderRef2: '',
  300. orderRef3: '',
  301. orderRef4: '',
  302. folder: ''
  303. },
  304. // 是否收藏
  305. favorite: false,
  306. // 导出 start
  307. exportData: [],
  308. exportName: "维修反馈" + this.dayjs().format('YYYYMMDDHHmmss'),
  309. exportHeader: ["维修反馈"],
  310. exportFooter: [],
  311. exportList: [],
  312. // 导出 end
  313. tagNo: '',
  314. searchData: {
  315. site: '',
  316. userName: this.$store.state.user.name,
  317. feedBackID: '',
  318. objectID: '',
  319. planOperator: '',
  320. functionType: 'C',
  321. status: '',
  322. startDate: '',
  323. defectDesc: '',
  324. endDate: '',
  325. page: 1,
  326. limit: 10,
  327. buDesc: '',
  328. urgency: '',
  329. },
  330. height: 200,
  331. pageIndex: 1,
  332. pageSize: 50,
  333. totalPage: 0,
  334. dataList: [],
  335. dataListLoading: false,
  336. dataListSelections: [],
  337. modalFlag: false,
  338. modalDisableFlag: false,
  339. saveModalFlag: false,
  340. saveModalDisableFlag: false,
  341. modalData: {
  342. site: '',
  343. bu: '',
  344. feedBackID: '',
  345. feedBackDesc: '',
  346. objectID: '',
  347. objectDesc: '',
  348. defectID: '',
  349. defectDesc: '',
  350. planDate: '',
  351. planOperator: '',
  352. userId: '',
  353. },
  354. saveModalData: {
  355. site: '',
  356. bu: '',
  357. feedBackID: '',
  358. feedBackDesc: '',
  359. objectID: '',
  360. objectDesc: '',
  361. defectID: '',
  362. defectDesc: '',
  363. defectDate: '',
  364. remark: '',
  365. urgency: '',
  366. status: '',
  367. createdBy: '',
  368. updateBy: ''
  369. },
  370. departmentList: [],
  371. // 展示列集
  372. columnList: [
  373. {
  374. userId: this.$store.state.user.name,
  375. functionId: 101004001,
  376. serialNumber: '101004001Table1FeedBackID',
  377. tableId: "101004001Table1",
  378. tableName: "维修反馈表",
  379. columnProp: 'feedBackID',
  380. headerAlign: "center",
  381. align: "center",
  382. columnLabel: '反馈单号',
  383. columnHidden: false,
  384. columnImage: false,
  385. columnSortable: false,
  386. sortLv: 0,
  387. status: true,
  388. fixed: '',
  389. columnWidth: 95,
  390. },
  391. {
  392. userId: this.$store.state.user.name,
  393. functionId: 101004001,
  394. serialNumber: '101004001Table1FeedBackDesc',
  395. tableId: "101004001Table1",
  396. tableName: "维修反馈表",
  397. columnProp: 'feedBackDesc',
  398. headerAlign: "center",
  399. align: "center",
  400. columnLabel: '反馈描述',
  401. columnHidden: false,
  402. columnImage: false,
  403. columnSortable: false,
  404. sortLv: 0,
  405. status: true,
  406. fixed: '',
  407. columnWidth: 95,
  408. },
  409. {
  410. userId: this.$store.state.user.name,
  411. functionId: 101004001,
  412. serialNumber: '101004001Table1DefectID',
  413. tableId: "101004001Table1",
  414. tableName: "维修反馈表",
  415. columnProp: 'defectID',
  416. headerAlign: "center",
  417. align: "center",
  418. columnLabel: '故障代码',
  419. columnHidden: false,
  420. columnImage: false,
  421. columnSortable: false,
  422. sortLv: 0,
  423. status: true,
  424. fixed: '',
  425. columnWidth: 95,
  426. },
  427. {
  428. userId: this.$store.state.user.name,
  429. functionId: 101004001,
  430. serialNumber: '101004001Table1DefectDesc',
  431. tableId: "101004001Table1",
  432. tableName: "维修反馈表",
  433. columnProp: 'defectDesc',
  434. headerAlign: "center",
  435. align: "center",
  436. columnLabel: '故障原因',
  437. columnHidden: false,
  438. columnImage: false,
  439. columnSortable: false,
  440. sortLv: 0,
  441. status: true,
  442. fixed: '',
  443. columnWidth: 95,
  444. },
  445. {
  446. userId: this.$store.state.user.name,
  447. functionId: 101004001,
  448. serialNumber: '101004001Table1ObjectID',
  449. tableId: "101004001Table1",
  450. tableName: "维修反馈表",
  451. columnProp: 'objectID',
  452. headerAlign: "center",
  453. align: "center",
  454. columnLabel: '设备编码',
  455. columnHidden: false,
  456. columnImage: false,
  457. columnSortable: false,
  458. sortLv: 0,
  459. status: true,
  460. fixed: '',
  461. columnWidth: 95,
  462. },
  463. {
  464. userId: this.$store.state.user.name,
  465. functionId: 101004001,
  466. serialNumber: '101004001Table1ObjectDesc',
  467. tableId: "101004001Table1",
  468. tableName: "维修反馈表",
  469. columnProp: 'objectDesc',
  470. headerAlign: "center",
  471. align: "center",
  472. columnLabel: '设备名称',
  473. columnHidden: false,
  474. columnImage: false,
  475. columnSortable: false,
  476. sortLv: 0,
  477. status: true,
  478. fixed: '',
  479. columnWidth: 95,
  480. },
  481. {
  482. userId: this.$store.state.user.name,
  483. functionId: 101004001,
  484. serialNumber: '101004001Table1Status',
  485. tableId: "101004001Table1",
  486. tableName: "维修反馈表",
  487. columnProp: 'status',
  488. headerAlign: "center",
  489. align: "center",
  490. columnLabel: '状态',
  491. columnHidden: false,
  492. columnImage: false,
  493. columnSortable: false,
  494. sortLv: 0,
  495. status: true,
  496. fixed: '',
  497. columnWidth: 95,
  498. },
  499. {
  500. userId: this.$store.state.user.name,
  501. functionId: 101004001,
  502. serialNumber: '101004001Table1PlanOperatorName',
  503. tableId: "101004001Table1",
  504. tableName: "维修反馈表",
  505. columnProp: 'planOperatorName',
  506. headerAlign: "center",
  507. align: "center",
  508. columnLabel: '计划执行人员',
  509. columnHidden: false,
  510. columnImage: false,
  511. columnSortable: false,
  512. sortLv: 0,
  513. status: true,
  514. fixed: '',
  515. columnWidth: 95,
  516. },
  517. {
  518. userId: this.$store.state.user.name,
  519. functionId: 101004001,
  520. serialNumber: '101004001Table1ActualOperatorName',
  521. tableId: "101004001Table1",
  522. tableName: "维修反馈表",
  523. columnProp: 'actualOperatorName',
  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: 95,
  534. },
  535. {
  536. userId: this.$store.state.user.name,
  537. functionId: 101004001,
  538. serialNumber: '101004001Table1DefectDate',
  539. tableId: "101004001Table1",
  540. tableName: "维修反馈表",
  541. columnProp: 'defectDate',
  542. headerAlign: "center",
  543. align: "center",
  544. columnLabel: '故障发现日期',
  545. columnHidden: false,
  546. columnImage: false,
  547. columnSortable: false,
  548. sortLv: 0,
  549. status: true,
  550. fixed: '',
  551. columnWidth: 95,
  552. },
  553. {
  554. userId: this.$store.state.user.name,
  555. functionId: 101004001,
  556. serialNumber: '101004001Table1CreatedDate',
  557. tableId: "101004001Table1",
  558. tableName: "维修反馈表",
  559. columnProp: 'createdDate',
  560. headerAlign: "center",
  561. align: "center",
  562. columnLabel: '反馈时间',
  563. columnHidden: false,
  564. columnImage: false,
  565. columnSortable: false,
  566. sortLv: 0,
  567. status: true,
  568. fixed: '',
  569. columnWidth: 95,
  570. },
  571. {
  572. userId: this.$store.state.user.name,
  573. functionId: 101004001,
  574. serialNumber: '101004001Table1FinishDate',
  575. tableId: "101004001Table1",
  576. tableName: "维修反馈表",
  577. columnProp: 'finishDate',
  578. headerAlign: "center",
  579. align: "center",
  580. columnLabel: '维修时间',
  581. columnHidden: false,
  582. columnImage: false,
  583. columnSortable: false,
  584. sortLv: 0,
  585. status: true,
  586. fixed: '',
  587. columnWidth: 95,
  588. },
  589. {
  590. userId: this.$store.state.user.name,
  591. functionId: 101004001,
  592. serialNumber: '101004001Table1CreatedBy',
  593. tableId: "101004001Table1",
  594. tableName: "维修反馈表",
  595. columnProp: 'createdBy',
  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: 95,
  606. },
  607. {
  608. userId: this.$store.state.user.name,
  609. functionId: 101004001,
  610. serialNumber: '101004001Table1FeedbackBy',
  611. tableId: "101004001Table1",
  612. tableName: "维修反馈表",
  613. columnProp: 'feedbackBy',
  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: 95,
  624. },
  625. {
  626. userId: this.$store.state.user.name,
  627. functionId: 101004001,
  628. serialNumber: '101004001Table1Remark',
  629. tableId: "101004001Table1",
  630. tableName: "维修反馈表",
  631. columnProp: 'remark',
  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: 95,
  642. },
  643. ],
  644. pickerOptions: {
  645. disabledDate(time) {
  646. let curDate = new Date().getTime()
  647. let curD = new Date()
  648. /* 获取当前月份 */
  649. let curMonth = curD.getMonth()
  650. /* 生成实际的月份: 由于curMonth会比实际月份小1, 故需加1 */
  651. curD.setMonth(curMonth + 1)
  652. /* 将日期设置为0, 这里为什么要这样设置, 我不知道原因, 这是从网上学来的 */
  653. curD.setDate(0)
  654. /* 返回当月的天数 */
  655. let days = curD.getDate()
  656. let three = days * 24 * 3600 * 1000
  657. let threeMonths = curDate - three
  658. return time.getTime() > Date.now() || time.getTime() < threeMonths
  659. },
  660. },
  661. saveRules: {
  662. objectId: [
  663. {
  664. required: true,
  665. message: ' ',
  666. trigger: 'change'
  667. }
  668. ],
  669. objectDesc: [
  670. {
  671. required: true,
  672. message: ' ',
  673. trigger: 'change'
  674. }
  675. ],
  676. defectId: [
  677. {
  678. required: true,
  679. message: ' ',
  680. trigger: 'change'
  681. }
  682. ],
  683. defectDesc: [
  684. {
  685. required: true,
  686. message: ' ',
  687. trigger: 'change'
  688. }
  689. ],
  690. urgency: [
  691. {
  692. required: true,
  693. message: ' ',
  694. trigger: 'change'
  695. }
  696. ],
  697. bu:[
  698. {
  699. required: true,
  700. message: ' ',
  701. trigger: 'change'
  702. }
  703. ]
  704. },
  705. saveLoading: false,
  706. userBuList: [],
  707. authSearch: false,
  708. authSave: false,
  709. authCancel: false,
  710. authRelease: false,
  711. menuId: this.$route.meta.menuId,
  712. }
  713. },
  714. mounted () {
  715. this.$nextTick(() => {
  716. this.height = window.innerHeight - 210
  717. })
  718. },
  719. created () {
  720. // 按钮控制
  721. this.getButtonAuthData()
  722. // 获取用户的 site 和 bu
  723. this.getSiteAndBuByUserName()
  724. // 校验用户是否收藏
  725. this.favoriteIsOk()
  726. // 动态列
  727. this.getTableUserColumn(this.$route.meta.menuId+'table1',1)
  728. if (!this.authSearch) {
  729. // 获取数据列表
  730. this.getDataList()
  731. }
  732. },
  733. methods: {
  734. // 获取用户的bu
  735. getSiteAndBuByUserName () {
  736. let tempData = {
  737. username: this.$store.state.user.name,
  738. }
  739. getSiteAndBuByUserName(tempData).then(({data}) => {
  740. if (data.code === 0) {
  741. this.userBuList = data.rows
  742. }
  743. })
  744. },
  745. // 新增模态框
  746. saveModal () {
  747. // 获取反馈单号
  748. getFeedBackId().then(({data}) => {
  749. if (data.code === 0) {
  750. this.saveModalData = {
  751. site: '',
  752. bu: this.userBuList[0].buNo,
  753. feedBackID: data.feedBackID,
  754. feedBackDesc: '',
  755. objectID: '',
  756. objectDesc: '',
  757. defectID: '',
  758. defectDesc: '',
  759. defectDate: '',
  760. remark: '',
  761. urgency: '',
  762. status: '已录入',
  763. createdBy: this.$store.state.user.name,
  764. }
  765. this.fileData = {
  766. file: [],
  767. orderRef1: '',
  768. orderRef2: '',
  769. orderRef3: '',
  770. orderRef4: '',
  771. folder: ''
  772. }
  773. this.saveModalDisableFlag = false
  774. this.saveModalFlag = true
  775. } else {
  776. this.$alert(data.msg, '错误', {
  777. confirmButtonText: '确定'
  778. })
  779. }
  780. })
  781. },
  782. // 新增/编辑方法
  783. saveData () {
  784. if (this.saveModalData.bu === '' || this.saveModalData.bu == null) {
  785. this.$message.warning('请选择BU!')
  786. return
  787. }
  788. if (this.saveModalData.objectID === '' || this.saveModalData.objectID == null) {
  789. this.$message.warning("请选择设备!")
  790. return;
  791. }
  792. if (this.saveModalData.defectID === '' || this.saveModalData.defectID == null) {
  793. this.$message.warning("请选择故障!")
  794. return;
  795. }
  796. if (this.saveModalData.urgency === '' || this.saveModalData.urgency == null) {
  797. this.$message.warning("请选择紧急程度!")
  798. return;
  799. }
  800. this.saveLoading = true
  801. this.fileData.orderRef1 = this.saveModalData.bu.split('_')[0]
  802. this.fileData.orderRef2 = this.saveModalData.feedBackID
  803. this.fileData.orderRef3 = this.uploadData.folder
  804. this.fileData.orderRef4 = this.saveModalData.bu.split('_')[1]
  805. this.fileData.folder = this.uploadData.folder
  806. saveEamGzBbData(this.saveModalData).then(({data}) => {
  807. if (data && data.code === 0) {
  808. if (this.fileData.file.length > 0) { // 上传文件
  809. let tempData = new FormData()
  810. for (let i in this.fileData) {
  811. if (i === 'file') {
  812. for (let j = 0; j < this.fileData.file.length; j++) {
  813. tempData.append("file", this.fileData.file[j].raw)
  814. }
  815. continue
  816. }
  817. tempData.append(i, this.fileData[i])
  818. }
  819. uploadFileList(tempData).then(({data}) => {
  820. if (data.code !== 0) {
  821. this.$message.warning(data.msg)
  822. }
  823. })
  824. }
  825. this.getDataList()
  826. this.saveModalFlag = false
  827. this.$message({
  828. message: '操作成功',
  829. type: 'success',
  830. duration: 1500,
  831. onClose: () => {}
  832. })
  833. } else {
  834. this.$alert(data.msg, '错误', {
  835. confirmButtonText: '确定'
  836. })
  837. }
  838. this.saveLoading = false
  839. })
  840. },
  841. // 校验用户是否收藏
  842. favoriteIsOk () {
  843. let userFavorite = {
  844. userId: this.$store.state.user.id,
  845. languageCode: this.$i18n.locale
  846. }
  847. userFavoriteList(userFavorite).then(({data}) => {
  848. for (let i = 0; i < data.list.length; i++) {
  849. if(this.$route.meta.menuId === data.list[i].menuId){
  850. this.favorite = true
  851. }
  852. }
  853. })
  854. },
  855. // 收藏 OR 取消收藏
  856. favoriteFunction () {
  857. let userFavorite = {
  858. userId: this.$store.state.user.id,
  859. functionId: this.$route.meta.menuId,
  860. }
  861. if (this.favorite) {
  862. removeUserFavorite(userFavorite).then(({data}) => {
  863. this.$message.success(data.msg)
  864. this.favorite = false
  865. })
  866. } else {
  867. // 收藏
  868. saveUserFavorite(userFavorite).then(({data}) => {
  869. this.$message.success(data.msg)
  870. this.favorite = true
  871. })
  872. }
  873. },
  874. // 获取基础数据列表S
  875. getBaseList (val,type) {
  876. this.tagNo = val
  877. this.$nextTick(() => {
  878. let strVal = ''
  879. let conSql = ''
  880. if (val === 201) {
  881. strVal = this.modalData.planOperator
  882. this.$refs.baseList.init(val, strVal)
  883. }
  884. if (val === 200) {
  885. strVal = this.saveModalData.objectID
  886. if (this.saveModalData.bu === null || this.saveModalData.bu === '') {
  887. this.$message.warning("请选择BU!")
  888. return
  889. } else {
  890. conSql = " and bu_no = '" + this.saveModalData.bu.split('_')[1] + "'"
  891. this.$refs.baseList.init(val, strVal, conSql)
  892. }
  893. }
  894. if (val === 1055) {
  895. strVal = this.saveModalData.defectID
  896. this.$refs.baseList.init(val, strVal)
  897. }
  898. })
  899. },
  900. /* 列表方法的回调 */
  901. getBaseData (val) {
  902. if (this.tagNo === 201) {
  903. this.modalData.planOperator = val.username
  904. }
  905. if (this.tagNo === 200) {
  906. this.saveModalData.objectID = val.ObjectID
  907. this.saveModalData.objectDesc = val.ObjectDesc
  908. }
  909. if (this.tagNo === 1055) {
  910. this.saveModalData.defectID = val.DefectID
  911. this.saveModalData.defectDesc = val.DefectDesc
  912. }
  913. },
  914. //导出excel
  915. async createExportData () {
  916. this.searchData.limit = -1
  917. this.searchData.page = 1
  918. await eamFeedBackSearch(this.searchData).then(({data}) => {
  919. this.exportList= data.page.list
  920. })
  921. return this.exportList
  922. },
  923. startDownload () {},
  924. finishDownload () {},
  925. fields () {
  926. let json = "{"
  927. this.columnList.forEach((item, index) => {
  928. if (index === this.columnList.length - 1) {
  929. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\""
  930. } else {
  931. json += "\"" + item.columnLabel + "\"" + ":" + "\"" + item.columnProp + "\"" + ","
  932. }
  933. })
  934. json += "}"
  935. let s = eval("(" + json + ")")
  936. return s
  937. },
  938. // 获取数据列表
  939. getDataList () {
  940. this.searchData.limit = this.pageSize
  941. this.searchData.page = this.pageIndex
  942. eamFeedBackSearch(this.searchData).then(({data}) => {
  943. if (data.code === 0) {
  944. this.dataList = data.page.list
  945. this.pageIndex = data.page.currPage
  946. this.pageSize = data.page.pageSize
  947. this.totalPage = data.page.totalCount
  948. }
  949. this.dataListLoading = false
  950. })
  951. },
  952. // 每页数
  953. sizeChangeHandle (val) {
  954. this.pageSize = val
  955. this.pageIndex = 1
  956. this.getDataList()
  957. },
  958. // 当前页
  959. currentChangeHandle (val) {
  960. this.pageIndex = val
  961. this.getDataList()
  962. },
  963. // 多选
  964. selectionChangeHandle (val) {
  965. this.dataListSelections = val
  966. },
  967. cancelFeedBack (row) {
  968. this.$confirm(`是否取消选定反馈单?`, '提示', {
  969. confirmButtonText: '确定',
  970. cancelButtonText: '取消',
  971. type: 'warning'
  972. }).then(() => {
  973. cancelFeedBack(row).then(({data}) => {
  974. if (data && data.code === 0) {
  975. this.getDataList()
  976. this.$message({
  977. message: '操作成功',
  978. type: 'success',
  979. duration: 1500,
  980. onClose: () => {}
  981. })
  982. } else {
  983. this.$alert(data.msg, '错误', {
  984. confirmButtonText: '确定'
  985. })
  986. }
  987. })
  988. }).catch(() => {
  989. })
  990. },
  991. // 下达
  992. createDefectOrderModel (row) {
  993. this.modalData = {
  994. site: row.site,
  995. buNo: row.buNo,
  996. feedBackID: row.feedBackID,
  997. feedBackDesc: row.feedBackDesc,
  998. objectID: row.objectID,
  999. objectDesc: row.objectDesc,
  1000. defectID: row.defectID,
  1001. defectDesc: row.defectDesc,
  1002. planDate: '',
  1003. planOperator: '',
  1004. userId: row.createdBy,
  1005. }
  1006. this.modalFlag = true
  1007. },
  1008. saveDefectOrder () {
  1009. if (this.modalData.planDate === '' || this.modalData.planDate == null) {
  1010. this.$message.warning('请选择计划维修日期!')
  1011. return
  1012. }
  1013. if (this.modalData.planOperator === '' || this.modalData.planOperator == null) {
  1014. this.$message.warning('请选择计划执行人员!')
  1015. return
  1016. }
  1017. saveDefectOrder(this.modalData).then(({data}) => {
  1018. if (data && data.code === 0) {
  1019. this.getDataList()
  1020. this.modalFlag = false
  1021. this.$message({
  1022. message: '操作成功',
  1023. type: 'success',
  1024. duration: 1500,
  1025. onClose: () => {}
  1026. })
  1027. } else {
  1028. this.$alert(data.msg, '错误', {
  1029. confirmButtonText: '确定'
  1030. })
  1031. }
  1032. })
  1033. },
  1034. // 动态列开始 获取 用户保存的 格式列
  1035. async getTableUserColumn(tableId, columnId) {
  1036. let queryTableUser = {
  1037. userId: this.$store.state.user.name,
  1038. functionId: this.$route.meta.menuId,
  1039. tableId: tableId,
  1040. status: true,
  1041. languageCode: this.$i18n.locale
  1042. }
  1043. await getTableUserListLanguage(queryTableUser).then(({data}) => {
  1044. if (data.rows.length > 0) {
  1045. //this.columnList1 = []
  1046. switch (columnId) {
  1047. case 1:
  1048. this.columnList = data.rows
  1049. break;
  1050. // case 2:
  1051. // this.columnDetailList = data.rows
  1052. // break;
  1053. // case 3:
  1054. // this.columnList2 = data.rows
  1055. // break;
  1056. // case 4:
  1057. // this.columnList3 = data.rows
  1058. // break;
  1059. }
  1060. } else {
  1061. this.getColumnList(tableId, columnId)
  1062. }
  1063. })
  1064. },
  1065. // 获取 tableDefault 列
  1066. async getColumnList(tableId, columnId) {
  1067. let queryTable= {
  1068. functionId: this.$route.meta.menuId,
  1069. tableId: tableId,
  1070. languageCode: this.$i18n.locale
  1071. }
  1072. await getTableDefaultListLanguage(queryTable).then(({data}) => {
  1073. if (!data.rows.length == 0) {
  1074. switch (columnId) {
  1075. case 1:
  1076. this.columnList = data.rows
  1077. break;
  1078. // case 2:
  1079. // this.columnDetailList = data.rows
  1080. // break;
  1081. // case 3:
  1082. // this.columnList2 = data.rows
  1083. // break;
  1084. // case 4:
  1085. // this.columnList3 = data.rows
  1086. // break;
  1087. }
  1088. } else {
  1089. // this.showDefault = true.
  1090. }
  1091. })
  1092. },
  1093. //获取按钮的权限数据
  1094. getButtonAuthData () {
  1095. let searchFlag = this.isAuth(this.menuId+":search")
  1096. let saveFlag = this.isAuth(this.menuId+":save")
  1097. let cancelFlag = this.isAuth(this.menuId+":cancel")
  1098. let releaseFlag = this.isAuth(this.menuId+":release")
  1099. //处理页面的权限数据
  1100. this.authSearch = !searchFlag
  1101. this.authSave = !saveFlag
  1102. this.authCancel = !cancelFlag
  1103. this.authRelease = !releaseFlag
  1104. },
  1105. // 上传保修故障图片
  1106. uploadFaultImageModal () {
  1107. this.uploadData = {
  1108. folder: 'feedBack',
  1109. title: '故障保修图片上传',
  1110. feedBackID: this.saveModalData.feedBackID
  1111. }
  1112. this.uploadDialog = true
  1113. },
  1114. }
  1115. }
  1116. </script>