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.

1151 lines
38 KiB

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