index.vue 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277
  1. <template>
  2. <div class="ele-body">
  3. <el-card shadow="never" v-loading="loading">
  4. <work-search @search="reload"> </work-search>
  5. <!-- 数据表格 -->
  6. <ele-pro-table ref="table" :columns="columns" :datasource="datasource" cache-key="systemRoleTable"
  7. :pageSize="20">
  8. <!-- 表头工具栏 -->
  9. <template v-slot:toolbar>
  10. </template>
  11. <template v-slot:code="{ row }">
  12. <el-link type="primary" :underline="false" @click="goDetail(row)">
  13. {{ row.code }}
  14. </el-link>
  15. </template>
  16. <!-- 操作列 -->
  17. <template v-slot:action="{ row }">
  18. <el-link type="primary" :underline="false" @click="declarationForm(row)">
  19. 报工
  20. </el-link>
  21. <el-popconfirm class="ele-action" title="确认删除这条记录吗?" @confirm="cancel(row)">
  22. <template v-slot:reference>
  23. <el-link type="danger" :underline="false" icon="el-icon-delete">
  24. 删除
  25. </el-link>
  26. </template>
  27. </el-popconfirm>
  28. <el-dropdown @command="(command) => handleCommand(command, row)">
  29. <span class="el-dropdown-link">
  30. 操作菜单<i class="el-icon-arrow-down el-icon--right"></i>
  31. </span>
  32. <el-dropdown-menu slot="dropdown">
  33. <el-dropdown-item command="handleReceive">接收
  34. </el-dropdown-item>
  35. <el-dropdown-item command="toRedeploy">转派
  36. </el-dropdown-item>
  37. <el-dropdown-item command="addSpareItems">申请备品备件
  38. </el-dropdown-item>
  39. </el-dropdown-menu>
  40. </el-dropdown>
  41. </template>
  42. </ele-pro-table>
  43. </el-card>
  44. <!-- 详情 -->
  45. <detailDialog ref="detailDialogRef"></detailDialog>
  46. <!-- 备品备件 -->
  47. <applyForSpare @reload="reload" ref="edit" />
  48. <!-- 报工 -->
  49. <declarationDialog ref="declarationDialogRef" @reload="reload"></declarationDialog>
  50. <!-- 转派 -->
  51. <redeployOther ref="redeployOtherRef" @reload="reload" />
  52. </div>
  53. </template>
  54. <script>
  55. import workSearch from './components/work-search.vue';
  56. import detailDialog from './components/detailDialog.vue'
  57. import applyForSpare from '../components/applyForSpare.vue';
  58. import declarationDialog from './components/declarationDialog.vue';
  59. import redeployOther from './components/redeployOther2.vue';
  60. import { getSalesWorkOrder, deleteSalesWorkOrder, receiveSalesWorkOrder } from '@/api/salesServiceManagement/index';
  61. import dictMixins from '@/mixins/dictMixins';
  62. export default {
  63. mixins: [dictMixins],
  64. components: {
  65. workSearch,
  66. detailDialog,
  67. applyForSpare,
  68. declarationDialog,
  69. redeployOther
  70. },
  71. data() {
  72. return {
  73. workOrderStatus: [
  74. { code: 0, label: '待接收' },
  75. { code: 1, label: '执行中' },
  76. { code: 2, label: '已完成' },
  77. { code: 3, label: '已验收' },
  78. ],
  79. resultStatus: [
  80. { code: 5, label: '未修复' },
  81. { code: 4, label: '已修复' }
  82. ],
  83. // 表格列配置
  84. columns: [
  85. {
  86. columnKey: 'index',
  87. label: '序号',
  88. type: 'index',
  89. width: 55,
  90. align: 'center',
  91. showOverflowTooltip: true,
  92. fixed: 'left'
  93. },
  94. {
  95. prop: 'code',
  96. slot: 'code',
  97. label: '工单编号',
  98. align: 'center',
  99. showOverflowTooltip: true,
  100. minWidth: 150
  101. },
  102. {
  103. prop: 'planCode',
  104. label: '计划单号',
  105. align: 'center',
  106. showOverflowTooltip: true,
  107. minWidth: 110
  108. },
  109. {
  110. prop: 'planName',
  111. label: '计划名称',
  112. align: 'center',
  113. showOverflowTooltip: true,
  114. minWidth: 110
  115. },
  116. {
  117. prop: 'executeUserName',
  118. label: '执行人',
  119. align: 'center',
  120. showOverflowTooltip: true,
  121. minWidth: 110
  122. },
  123. // {
  124. // prop: 'assistsName',
  125. // label: '辅助人',
  126. // align: 'center',
  127. // showOverflowTooltip: true,
  128. // minWidth: 110
  129. // },
  130. {
  131. prop: 'acceptTime',
  132. label: '开始时间',
  133. align: 'center',
  134. showOverflowTooltip: true,
  135. minWidth: 110
  136. },
  137. {
  138. prop: 'finishTime',
  139. label: '结束时间',
  140. align: 'center',
  141. showOverflowTooltip: true,
  142. minWidth: 110
  143. },
  144. {
  145. prop: 'planFinishTime',
  146. label: '计划完成时间',
  147. align: 'center',
  148. showOverflowTooltip: true,
  149. minWidth: 110
  150. },
  151. {
  152. columnKey: 'inFactDuration',
  153. label: '实际售后时长(分钟)',
  154. align: 'center',
  155. resizable: false,
  156. showOverflowTooltip: true,
  157. minWidth: 120,
  158. formatter: (row) => {
  159. if (row.finishTime && row.acceptTime) {
  160. return parseInt(
  161. (new Date(row.finishTime).getTime() -
  162. new Date(row.acceptTime).getTime()) /
  163. 60000
  164. );
  165. }
  166. }
  167. },
  168. {
  169. prop: 'orderStatus',
  170. label: '状态',
  171. align: 'center',
  172. showOverflowTooltip: true,
  173. formatter: (row) => {
  174. return this.workOrderStatus.filter(
  175. (item) => item.code == row.orderStatus
  176. )[0].label;
  177. }
  178. },
  179. // {
  180. // prop: 'acceptanceStatus',
  181. // label: '执行结果',
  182. // align: 'center',
  183. // showOverflowTooltip: true,
  184. // formatter: (row) => {
  185. // return row.acceptanceStatus
  186. // ? resultStatus.filter(
  187. // (item) => item.code == row.acceptanceStatus
  188. // )[0].label
  189. // : '';
  190. // }
  191. // },
  192. {
  193. columnKey: 'action',
  194. label: '操作',
  195. width: 240,
  196. align: 'center',
  197. resizable: false,
  198. slot: 'action',
  199. showOverflowTooltip: true
  200. }
  201. ],
  202. // 加载状态
  203. loading: false,
  204. };
  205. },
  206. computed: {},
  207. created() {
  208. },
  209. methods: {
  210. /* 表格数据源 */
  211. datasource({ page, limit, where, order }) {
  212. return getSalesWorkOrder({ pageNum: page, size: limit, ...where });
  213. },
  214. /* 刷新表格 */
  215. reload(where) {
  216. this.$refs.table.reload({ page: 1, where });
  217. },
  218. async cancel(row) {
  219. const res = await deleteSalesWorkOrder([row.id]);
  220. if (res) {
  221. this.$message.success('删除成功');
  222. this.reload();
  223. }
  224. },
  225. addSpareItems(row) {
  226. let data = JSON.parse(JSON.stringify(row));
  227. this.$refs.edit.open(data, 'work');
  228. },
  229. //接收
  230. async handleReceive(row) {
  231. const res = await receiveSalesWorkOrder(row)
  232. if (!res) return
  233. this.$message.success('操作成功')
  234. this.reload()
  235. },
  236. // 转派
  237. toRedeploy(row) {
  238. this.$refs.redeployOtherRef.open(row, 'transfer');
  239. },
  240. //报工
  241. declarationForm(row) {
  242. this.$refs.declarationDialogRef.open(row)
  243. },
  244. goDetail(row) {
  245. this.$refs.declarationDialogRef.open(row,'view');
  246. },
  247. handleCommand(command, row) {
  248. if (command === 'addSpareItems') {
  249. this.addSpareItems(row);
  250. }
  251. if (command === 'handleReceive') {
  252. this.handleReceive(row);
  253. }
  254. if (command === 'toRedeploy') {
  255. this.toRedeploy(row);
  256. }
  257. }
  258. }
  259. };
  260. </script>
  261. <style lang="scss" scoped>
  262. .el-dropdown-link {
  263. cursor: pointer;
  264. color: var(--color-primary-5);
  265. }
  266. .el-icon-arrow-down {
  267. font-size: 12px;
  268. }
  269. </style>