redeployOther2.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. <template>
  2. <el-dialog
  3. :visible.sync="visible"
  4. title="转派工单"
  5. width="60%"
  6. :modal="false"
  7. :fullscreen="fullscreen"
  8. class="fullscreen"
  9. @close="cancel"
  10. >
  11. <template slot="title">
  12. <modalTitle
  13. title="转派工单"
  14. @setFullscreen="fullscreen = !fullscreen"
  15. ></modalTitle>
  16. </template>
  17. <div class="sparepart-apply">
  18. <el-tabs
  19. v-model="tabValue"
  20. class="demo-monitor-tabs"
  21. @tab-click="handleClickTab"
  22. >
  23. <el-tab-pane label="执行人" name="1" />
  24. <!-- 非完成报工不显示辅助人 -->
  25. <el-tab-pane
  26. v-if="entranceValue == 'transfer'"
  27. label="辅助人"
  28. name="2"
  29. />
  30. </el-tabs>
  31. <div class="select-box">
  32. <el-form label-width="80px">
  33. <el-row :gutter="24">
  34. <el-col :span="12">
  35. <el-form-item label="工单单号">
  36. <el-input v-model="row.code" disabled></el-input>
  37. </el-form-item>
  38. </el-col>
  39. <el-col :span="12">
  40. <el-form-item label="部门">
  41. <deptSelect v-model="groupId" @changeGroup="deptClick" />
  42. <!-- <selectTree
  43. ref="treeDept"
  44. class="form-input"
  45. :options="treeList"
  46. size="small"
  47. :props="{
  48. value: 'code',
  49. label: 'name',
  50. children: 'children',
  51. }"
  52. @getValue="deptClick"
  53. /> -->
  54. </el-form-item>
  55. </el-col>
  56. <el-col :span="12">
  57. <el-form-item label="" label-width="10px">
  58. <el-input v-model="name" placeholder="搜索姓名"></el-input>
  59. </el-form-item>
  60. </el-col>
  61. <el-col :span="12" style="text-align: right">
  62. <el-form-item label="" label-width="10px">
  63. <el-button @click="search" type="primary" icon="el-icon-search"
  64. >搜索</el-button
  65. >
  66. <el-button @click="reset" icon="el-icon-refresh-left"
  67. >重置</el-button
  68. >
  69. </el-form-item>
  70. </el-col>
  71. </el-row>
  72. </el-form>
  73. </div>
  74. <div class="data-tab">
  75. <ele-pro-table
  76. :page-size="defPageSize"
  77. ref="tableRef2"
  78. :pageSizes="tablePageSizes"
  79. row-key="id"
  80. :columns="columns"
  81. :datasource="datasource"
  82. @select-all="handleSelectAll"
  83. @selection-change="handleSelectionChange"
  84. cache-key="redeployOther"
  85. :header-cell-class-name="headerCellClassName"
  86. >
  87. </ele-pro-table>
  88. </div>
  89. <div slot="footer" class="footer">
  90. <el-button @click="cancel">返回</el-button>
  91. <el-button
  92. v-if="entranceValue == 'transfer'"
  93. :loading="btnLoading"
  94. type="primary"
  95. @click="submit"
  96. >提交</el-button
  97. >
  98. <el-button
  99. v-if="entranceValue == 'noFinishSubmit'"
  100. :loading="btnLoading"
  101. type="primary"
  102. @click="confirm"
  103. >确认</el-button
  104. >
  105. </div>
  106. </div>
  107. </el-dialog>
  108. </template>
  109. <script>
  110. import modalTitle from '@/components/modalTitle.vue';
  111. import deptSelect from '@/components/CommomSelect/dept-select.vue';
  112. import {
  113. workOrderRotate,
  114. addAssists
  115. } from '@/api/maintenance/patrol_maintenance';
  116. import { getUserPage } from '@/api/system/organization';
  117. export default {
  118. components: { deptSelect, modalTitle },
  119. props: {
  120. // sourceType: {
  121. // type: Number, //1,保养工单;2,维修工单
  122. // required: true
  123. // }
  124. },
  125. data() {
  126. return {
  127. fullscreen: false,
  128. btnLoading: false,
  129. visible: false,
  130. treeList: [],
  131. pages: {
  132. pageNum: 1,
  133. size: 15
  134. },
  135. total: 0,
  136. selectedRow: {},
  137. selectedRowData: [],
  138. groupId: '',
  139. executorDeptName: '',
  140. name: '',
  141. row: {},
  142. columns: [
  143. {
  144. width: 45,
  145. type: 'selection',
  146. columnKey: 'selection',
  147. align: 'center'
  148. // selectable: (row, index) => {
  149. // return row.id !== this.row.executeUserId;
  150. // }
  151. },
  152. {
  153. columnKey: 'index',
  154. label: '序号',
  155. type: 'index',
  156. width: 55,
  157. align: 'center',
  158. showOverflowTooltip: true,
  159. fixed: 'left'
  160. },
  161. {
  162. prop: 'jobNumber',
  163. label: '工号',
  164. align: 'center',
  165. showOverflowTooltip: true
  166. },
  167. {
  168. prop: 'name',
  169. label: '姓名',
  170. align: 'center',
  171. showOverflowTooltip: true
  172. },
  173. {
  174. prop: 'phone',
  175. label: '电话',
  176. align: 'center',
  177. showOverflowTooltip: true
  178. },
  179. {
  180. prop: 'groupName',
  181. label: '部门',
  182. align: 'center',
  183. showOverflowTooltip: true
  184. }
  185. ],
  186. tabValue: '',
  187. selectedRowDataId: '',
  188. tableData: [],
  189. // arry: [],
  190. entranceValue: ''
  191. };
  192. },
  193. created() {
  194. this.getList();
  195. },
  196. methods: {
  197. async getList() {
  198. const data = await getUserPage({
  199. pageNum: 1,
  200. size: -1,
  201. groupId: '',
  202. name: '',
  203. groupId: this.groupId
  204. });
  205. this.tableData = data.list;
  206. },
  207. handleClickTab(tab, event) {
  208. // this.selectedRow = {};
  209. // this.selectedRowData = [];
  210. this.tabValue = tab.name;
  211. this.$refs.tableRef2.clearSelection();
  212. console.log(this.selectedRowData, '[this.selectedRow]');
  213. console.log(tab.name);
  214. if (tab.name == 1) {
  215. this.$refs.tableRef2.setSelectedRows([this.selectedRow]);
  216. } else {
  217. this.$refs.tableRef2.setSelectedRows(this.selectedRowData);
  218. }
  219. },
  220. open(row, val) {
  221. this.entranceValue = val;
  222. this.tabValue = '1';
  223. // //非完成报工
  224. // if (val == 'noFinishSubmit') {
  225. // this.tabValue = '1';
  226. // }
  227. // // 转派
  228. // if (val == 'transfer') {
  229. // if (row.assistsName == '') {
  230. // this.tabValue = '2';
  231. // } else {
  232. // this.tabValue = '1';
  233. // }
  234. // }
  235. this.row = row;
  236. this.name = '';
  237. this.groupId = '';
  238. this.executorDeptName = '';
  239. this.visible = true;
  240. this.$refs.tableRef2.clearSelection();
  241. },
  242. // handleDone() {
  243. // console.log('handDone');
  244. // this.$nextTick(() => {
  245. // this.arry.forEach((item) => {
  246. // this.tableData.find((item2) => {
  247. // if (item == item2.id) {
  248. // console.log(item2, 'item2');
  249. // this.$refs.tableRef2.toggleRowSelection(item2, true);
  250. // }
  251. // });
  252. // });
  253. // });
  254. // },
  255. //重置
  256. reset() {
  257. this.name = '';
  258. this.search();
  259. },
  260. // 搜索
  261. search() {
  262. this.$refs.tableRef2.reload();
  263. },
  264. deptClick(data) {
  265. if (data) {
  266. this.$refs.tableRef2.reload();
  267. }
  268. },
  269. // 获取审核人列表、巡点检人员
  270. async datasource({ page, limit, where, order }) {
  271. this.selectedRow = {};
  272. // 如果传了参数就是获取巡点检人员数据
  273. return getUserPage({
  274. pageNum: page,
  275. size: limit,
  276. ...where,
  277. groupId: this.groupId,
  278. name: this.name
  279. });
  280. },
  281. handleSelectAll(selection) {
  282. this.$refs.tableRef2.clearSelection();
  283. },
  284. handleSelectionChange(row) {
  285. if (!row || !row.length) {
  286. return;
  287. }
  288. if (this.tabValue == '1') {
  289. this.selectedRow = row[row.length - 1];
  290. if (row.length > 1) {
  291. this.$refs.tableRef2.clearSelection();
  292. this.$refs.tableRef2.toggleRowSelection(row.pop());
  293. }
  294. } else {
  295. this.selectedRowData = row;
  296. let arr = row.map((item) => {
  297. return item.id;
  298. });
  299. this.selectedRowDataId = arr.toString();
  300. }
  301. },
  302. headerCellClassName({ columnIndex }) {
  303. // 如果是第一列(通常是全选框),则返回自定义的class名
  304. if (columnIndex === 0) {
  305. return 'hide-selection-checkbox';
  306. }
  307. return '';
  308. },
  309. async submit() {
  310. let paramsArr = [];
  311. // if (this.selectedRow.id) {
  312. // this.btnLoading = true;
  313. // let params = {};
  314. // await workOrderRotate(params).then(() => {
  315. // this.$message.success(`该工单成功转派给${this.selectedRow.name}`);
  316. // this.visible = false;
  317. // this.$emit('refresh');
  318. // this.btnLoading = false;
  319. // });
  320. // }
  321. console.log(this.selectedRow, 'this.selectedRow');
  322. console.log(this.selectedRow, 'this.selectedRow');
  323. if (this.selectedRow.id) {
  324. paramsArr.push(
  325. workOrderRotate({
  326. acceptUserId: this.selectedRow.id,
  327. workOrderId: this.row.id
  328. })
  329. );
  330. }
  331. if (this.selectedRowDataId) {
  332. paramsArr.push(
  333. addAssists({
  334. acceptUserId: this.selectedRowDataId,
  335. workOrderId: this.row.id
  336. })
  337. );
  338. }
  339. if (paramsArr.length) {
  340. this.btnLoading = true;
  341. Promise.all(paramsArr)
  342. .then(() => {
  343. this.$message.success('工单转派成功');
  344. this.$emit('refresh');
  345. this.cancel();
  346. })
  347. .catch((error) => {
  348. this.$message.error('工单转派失败:' + error.message);
  349. })
  350. .finally(() => {
  351. this.btnLoading = false;
  352. });
  353. } else {
  354. this.$message.warning('请选择执行人或辅助人');
  355. }
  356. // if (this.tabValue == '1') {
  357. // } else {
  358. // this.btnLoading = true;
  359. // let params = {
  360. // acceptUserId: this.selectedRowDataId,
  361. // workOrderId: this.row.id
  362. // };
  363. // addAssists(params).then(() => {
  364. // this.visible = false;
  365. // this.$emit('refresh');
  366. // this.btnLoading = false;
  367. // });
  368. // }
  369. },
  370. confirm() {
  371. this.cancel();
  372. this.$emit('confirm', this.selectedRow);
  373. },
  374. cancel() {
  375. this.tabValue = '1';
  376. this.selectedRow = {};
  377. this.selectedRowData = [];
  378. this.selectedRowDataId = '';
  379. this.visible = false;
  380. }
  381. }
  382. };
  383. </script>
  384. <style lang="scss" scoped>
  385. .sparepart-apply {
  386. min-height: 40vh;
  387. .select-box {
  388. padding: 10px 0;
  389. }
  390. .material-item + .material-item {
  391. margin-top: 10px;
  392. }
  393. }
  394. .flex-between {
  395. display: flex;
  396. justify-content: space-between;
  397. padding-right: 20%;
  398. }
  399. .list-box {
  400. max-height: 60vh;
  401. overflow-y: auto;
  402. overflow-x: hidden;
  403. }
  404. .footer {
  405. padding: 10px;
  406. text-align: right;
  407. background: #fff;
  408. display: flex;
  409. align-items: center;
  410. justify-content: center;
  411. }
  412. ::v-deep .hide-selection-checkbox .cell .el-checkbox {
  413. visibility: hidden !important;
  414. }
  415. </style>