all.vue 9.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332
  1. <template>
  2. <div class="app-container">
  3. <el-card class="box-card">
  4. <save-form ref="listQuery" :model="listQuery" :inline="true">
  5. <WorkOrderSearch
  6. :genre="'all'"
  7. :list="listQuery"
  8. @handleSearch="handleSearch"
  9. />
  10. </save-form>
  11. <el-table
  12. v-loading="loading"
  13. border
  14. :data="ticketList"
  15. @selection-change="handleSelectionChange"
  16. >
  17. <!-- <el-table-column type="selection" width="55" align="center" /> -->
  18. <el-table-column label="ID" prop="id" width="120" />
  19. <!-- <el-table-column label="标题" prop="title" :show-overflow-tooltip="true" /> -->
  20. <el-table-column
  21. label="流程"
  22. width="150"
  23. prop="process_name"
  24. :show-overflow-tooltip="true"
  25. />
  26. <el-table-column label="当前状态" :show-overflow-tooltip="true">
  27. <template slot-scope="scope">
  28. <span>
  29. {{ scope.row.state_name }}
  30. </span>
  31. </template>
  32. </el-table-column>
  33. <el-table-column
  34. label="申请人"
  35. :show-overflow-tooltip="true"
  36. prop="creator_name"
  37. >
  38. </el-table-column>
  39. <el-table-column label="当前处理人" :show-overflow-tooltip="true">
  40. <template slot-scope="scope">
  41. <span v-if="scope.row.is_end === 0">{{
  42. scope.row.principals
  43. }}</span>
  44. </template>
  45. </el-table-column>
  46. <el-table-column label="工单结束状态">
  47. <template slot-scope="scope">
  48. <span>
  49. {{ scope.row.endType | orderStatus }}
  50. </span>
  51. </template>
  52. </el-table-column>
  53. <el-table-column
  54. label="优先级"
  55. :show-overflow-tooltip="true"
  56. width="120"
  57. align="left"
  58. >
  59. <template slot-scope="scope">
  60. <span v-if="scope.row.priority === 2">
  61. <el-tag type="warning">紧急</el-tag>
  62. </span>
  63. <span v-else-if="scope.row.priority === 3">
  64. <el-tag type="danger">非常紧急</el-tag>
  65. </span>
  66. <span v-else>
  67. <el-tag type="success">一般</el-tag>
  68. </span>
  69. </template>
  70. </el-table-column>
  71. <el-table-column
  72. label="是否结束"
  73. :show-overflow-tooltip="true"
  74. width="80"
  75. align="center"
  76. >
  77. <template slot-scope="scope">
  78. <el-tag v-if="scope.row.is_end === 0" size="mini" type="success"
  79. >否</el-tag
  80. >
  81. <el-tag v-else size="mini" type="danger">是</el-tag>
  82. </template>
  83. </el-table-column>
  84. <el-table-column
  85. label="创建时间"
  86. align="center"
  87. prop="create_time"
  88. width="180"
  89. >
  90. <template slot-scope="scope">
  91. <span>{{ parseTime(scope.row.create_time) }}</span>
  92. </template>
  93. </el-table-column>
  94. <el-table-column
  95. label="最后修改时间"
  96. align="center"
  97. prop="update_time"
  98. width="180"
  99. >
  100. <template slot-scope="scope">
  101. <span>{{ parseTime(scope.row.update_time) }}</span>
  102. </template>
  103. </el-table-column>
  104. <el-table-column
  105. label="操作"
  106. align="center"
  107. class-name="small-padding fixed-width"
  108. width="240"
  109. fixed="right"
  110. >
  111. <template slot-scope="scope">
  112. <el-button
  113. v-permisaction="['process:list:all:select']"
  114. size="mini"
  115. type="text"
  116. icon="el-icon-edit"
  117. @click="handleView(scope.row)"
  118. >查看</el-button
  119. >
  120. <el-button
  121. v-if="scope.row.is_end === 0"
  122. v-permisaction="['process:list:all:inversion']"
  123. size="mini"
  124. type="text"
  125. icon="el-icon-position"
  126. @click="handleInversion(scope.row)"
  127. >转交</el-button
  128. >
  129. <el-button
  130. v-if="scope.row.is_end === 0"
  131. v-permisaction="['process:list:all:end']"
  132. size="mini"
  133. type="text"
  134. icon="el-icon-switch-button"
  135. @click="handleUnity(scope.row)"
  136. >结单</el-button
  137. >
  138. <el-button
  139. v-if="scope.row.contract_url"
  140. size="mini"
  141. type="text"
  142. icon="el-icon-download"
  143. @click="handleLookContract(scope.row)"
  144. >下载签章</el-button
  145. >
  146. <el-button
  147. v-permisaction="['process:list:all:delete']"
  148. size="mini"
  149. type="text"
  150. icon="el-icon-delete"
  151. @click="handleDelete(scope.row)"
  152. >删除</el-button
  153. >
  154. </template>
  155. </el-table-column>
  156. </el-table>
  157. <el-dialog title="转交工单" :visible.sync="dialogVisible" width="40%">
  158. <TransferInversion
  159. v-if="dialogVisible"
  160. :selectItem="selectItem"
  161. @getList="getList"
  162. @close="dialogVisible = false"
  163. />
  164. </el-dialog>
  165. <pagination
  166. v-show="total > 0"
  167. :total="total"
  168. :page.sync="queryParams.pageIndex"
  169. :limit.sync="queryParams.pageSize"
  170. @pagination="getList"
  171. />
  172. </el-card>
  173. </div>
  174. </template>
  175. <script>
  176. import {
  177. workOrderList,
  178. unityWorkOrder,
  179. inversionWorkOrder,
  180. deleteWorkOrder
  181. } from "@/api/process/work-order";
  182. import { listUser } from "@/api/system/sysuser";
  183. import TransferInversion from "./model/transferInversion";
  184. import load from "@/utils/loading";
  185. // 搜索
  186. import WorkOrderSearch from "./components/search/index";
  187. import SaveForm from "@/components/save-form";
  188. export default {
  189. components: { WorkOrderSearch, TransferInversion, SaveForm },
  190. data() {
  191. return {
  192. users: [],
  193. nodeList: [],
  194. dialogVisible: false,
  195. queryParams: {},
  196. total: 0,
  197. loading: false,
  198. ticketList: [],
  199. listQuery: {
  200. page: 1,
  201. per_page: 10
  202. },
  203. selectItem: {
  204. work_order_id: "",
  205. node_id: null,
  206. nodeList: [],
  207. users: []
  208. }
  209. };
  210. },
  211. mounted() {
  212. this.getList();
  213. },
  214. methods: {
  215. getList() {
  216. this.loading = true;
  217. this.listQuery.page = this.queryParams.pageIndex;
  218. this.listQuery.per_page = this.queryParams.pageSize;
  219. this.listQuery.classify = 4;
  220. workOrderList(this.listQuery).then(response => {
  221. this.ticketList = response.data.data;
  222. this.queryParams.pageIndex = response.data.page;
  223. this.queryParams.pageSize = response.data.per_page;
  224. this.total = response.data.total_count;
  225. this.loading = false;
  226. });
  227. },
  228. handleSearch(val) {
  229. for (var k in val) {
  230. this.listQuery[k] = val[k];
  231. }
  232. this.$refs.listQuery.save(this.listQuery);
  233. this.$refs.listQuery.save(this.queryParams, "page");
  234. this.getList();
  235. },
  236. handleView(row) {
  237. this.$router.push({
  238. name: "ProcessListHandle",
  239. query: { workOrderId: row.id, processId: row.process }
  240. });
  241. },
  242. handleLookContract(row) {
  243. if (row.contract_url) {
  244. window.open(row.contract_url);
  245. } else {
  246. this.$message.error("当前审批暂无签章");
  247. }
  248. },
  249. handleDelete(row) {
  250. this.$confirm("此操作将删除该数据, 是否继续?", "提示", {
  251. confirmButtonText: "确定",
  252. cancelButtonText: "取消",
  253. type: "warning"
  254. })
  255. .then(() => {
  256. deleteWorkOrder(row.id).then(response => {
  257. this.$message({
  258. type: "success",
  259. message: "删除成功!"
  260. });
  261. this.getList();
  262. });
  263. })
  264. .catch(() => {
  265. this.$message({
  266. type: "info",
  267. message: "已取消"
  268. });
  269. });
  270. },
  271. handleUnity(row) {
  272. this.$confirm("此操作将会结束该工单, 是否继续?", "提示", {
  273. confirmButtonText: "确定",
  274. cancelButtonText: "取消",
  275. type: "warning"
  276. })
  277. .then(() => {
  278. unityWorkOrder({
  279. work_oroder_id: row.id
  280. }).then(response => {
  281. if (response.code === 200) {
  282. this.getList();
  283. }
  284. });
  285. })
  286. .catch(() => {
  287. this.$message({
  288. type: "info",
  289. message: "已取消"
  290. });
  291. });
  292. },
  293. async handleInversion(row) {
  294. this.selectItem.work_order_id = row.id;
  295. this.selectItem.nodeList = row.state;
  296. if (this.selectItem.nodeList.length === 1) {
  297. this.selectItem.node_id = this.selectItem.nodeList[0].id;
  298. }
  299. if (this.selectItem.users.length <= 0) {
  300. load.startLoading();
  301. await listUser({
  302. pageSize: 999999
  303. }).then(response => {
  304. this.selectItem.users = response.data.list;
  305. });
  306. load.endLoading();
  307. }
  308. this.dialogVisible = true;
  309. },
  310. handleSelectionChange() {},
  311. submitForm(formName) {
  312. this.$refs[formName].validate(valid => {
  313. if (valid) {
  314. inversionWorkOrder(this.ruleForm).then(response => {
  315. if (response.code === 200) {
  316. this.getList();
  317. this.dialogVisible = false;
  318. }
  319. });
  320. }
  321. });
  322. }
  323. }
  324. };
  325. </script>
  326. <style scoped></style>