processruns.vue 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327
  1. <template>
  2. <div class="container">
  3. <div class="mod-role" style="height:100%;overflow:auto;">
  4. <el-form :inline="true" @submit.native.prevent @keyup.enter.native="loadProcessDefList(1)" style="margin:20px 0px 0px 10px">
  5. <el-form-item>
  6. <el-input v-model="form.procdefkey" placeholder="流程定义key" clearable></el-input>
  7. </el-form-item>
  8. <el-form-item>
  9. <el-input v-model="form.processInstanceId" placeholder="实例ID" clearable></el-input>
  10. </el-form-item>
  11. <el-form-item>
  12. <el-button icon="el-icon-search" type="search" @click="loadProcessDefList(1)">查询</el-button>
  13. </el-form-item>
  14. <el-form-item>
  15. <el-button icon="el-icon-position" type="search" @click="doView()">重发待办</el-button>
  16. </el-form-item>
  17. <el-form-item>
  18. <el-button icon="el-icon-refresh-left" type="search" @click="doRecall()">召回</el-button>
  19. </el-form-item>
  20. </el-form>
  21. <el-table :data="list" border v-loading="loading" style="width: 100%">
  22. <!-- <el-table-column align="center" label="选择" :selectable="chkstu" width="80" type="selection"></el-table-column> -->
  23. <el-table-column type="expand">
  24. <template slot-scope="props">
  25. <el-table @selection-change="checkedChange" @select="select" ref="multipleTable" @select-all="selectAll" :data="props.row.taskList" :header-cell-style="{ background: '#e0f3ff', color: '#5f95b7' }" border stripe highlight-current-row="true" style="width: 100%">
  26. <!-- :selectable="chkstu" 禁止选用-->
  27. <el-table-column align="center" label="选择" width="80" type="selection"></el-table-column>
  28. <el-table-column align="center" prop="taskId" label="任务id"></el-table-column>
  29. <el-table-column align="center" prop="taskName" label="名称"></el-table-column>
  30. <el-table-column align="center" prop="userName" label="任务处理人"></el-table-column>
  31. <el-table-column align="center" prop="assignee" label="任务处理人id"></el-table-column>
  32. </el-table>
  33. </template>
  34. </el-table-column>
  35. <el-table-column align="center" prop="processInstanceId" label="实例ID"></el-table-column>
  36. <el-table-column align="center" prop="processDefinitionKey" label="流程定义key"></el-table-column>
  37. <el-table-column align="center" prop="processDefinitionId" label="流程定义id"></el-table-column>
  38. <el-table-column align="center" prop="processDefinitionName" label="流程名称"></el-table-column>
  39. </el-table>
  40. <el-pagination style="margin:10px 10px 0px 10px;float:right" @current-change="loadProcessDefList" :page-size="form.rows" layout="total, prev, pager, next, jumper" :total="total"></el-pagination>
  41. <so-distribution v-if="soDistributionVisible" ref="soDistribution" @select="onGotoDialogSelect"></so-distribution>
  42. <el-dialog title="重发代办" v-if="editFormVisible" :visible.sync="editFormVisible" width="40%" @close="closeEliminateData" style="text-align:left">
  43. <div style="padding:20px">
  44. <el-form label-position="left" label-width="80px" :inline="true" @submit.native.prevent @keyup.enter.native="doSearch(1)">
  45. <el-row>
  46. <el-col :span="24">
  47. <el-form-item label="处理节点:">
  48. {{ taskname }}
  49. </el-form-item>
  50. </el-col>
  51. <el-col :span="24">
  52. <el-form-item label="审核角色:">
  53. <el-select v-model="userRole" @change="changeUser" placeholder="请选择...">
  54. <el-option v-for="item in userArr" :key="item.id" :label="item.name" :value="item.id"> </el-option>
  55. </el-select>
  56. </el-form-item>
  57. </el-col>
  58. <el-col :span="24">
  59. <el-form-item label="审核人:">
  60. <el-select v-model="userMan" @change="userIdchange" placeholder="请选择...">
  61. <el-option v-for="item in userArr1" :key="item.id" :label="item.name" :value="item.id"> </el-option>
  62. </el-select>
  63. </el-form-item>
  64. </el-col>
  65. </el-row>
  66. </el-form>
  67. </div>
  68. <span slot="footer" class="dialog-footer">
  69. <el-button type="primary" @click="addSend">确 定</el-button>
  70. </span>
  71. </el-dialog>
  72. </div>
  73. </div>
  74. </template>
  75. <script>
  76. // import UserOpenDialog from '@/page/components/userOpenDialog'
  77. import WfActivitySelect from './wfActivitySelect'
  78. import SoDistribution from './doDistribution'
  79. import { processDefinitionKey as getService } from '@/components/components/approvalDialog/index-mixins.js'
  80. export default {
  81. data() {
  82. return {
  83. loading:false,
  84. editFormVisible: false,
  85. soDistributionVisible: false,
  86. checkededRows: [],
  87. list: null,
  88. viewImg: null,
  89. processDefinationlist: [{}, {}],
  90. startDateRange: null,
  91. total: 0,
  92. form: {
  93. page: 1,
  94. rows: 10,
  95. procdefkey: '',
  96. processInstanceId: ''
  97. },
  98. tableData3: [],
  99. userId: '',
  100. userArr: [],
  101. userArr1: [],
  102. userRole: '', //审核角色
  103. userMan: '',
  104. taskname: '',
  105. taskId: '',
  106. userId: '',
  107. // 上一个选中的表格组件
  108. previousTableCom: null
  109. // activeti.getUsersByRoleIds
  110. }
  111. },
  112. components: {
  113. SoDistribution,
  114. WfActivitySelect
  115. },
  116. mounted() {
  117. this.loadProcessDefList(1)
  118. },
  119. methods: {
  120. loadProcessDefList(value) {
  121. let self = this
  122. this.form.page = value
  123. var obj = {
  124. url: this.$url.workflowdef.getruns,
  125. data: this.form,
  126. type: 'post'
  127. }
  128. this.common.httpPost(obj, success)
  129. function success(data) {
  130. data.data.rows.forEach(el => {
  131. el.taskList.forEach(element => {
  132. element.processDefinitionKey = el.processDefinitionKey
  133. })
  134. })
  135. self.list = data.data.rows
  136. self.list.forEach(el => {
  137. el.taskList.map(item => {
  138. item.processInstanceId = el.processInstanceId
  139. item.processDefinitionKey = el.processDefinitionKey
  140. })
  141. })
  142. self.total = data.data.total
  143. }
  144. },
  145. onStartDateRangeChanged(val) {
  146. this.form.startDateBegin = val[0]
  147. this.form.startDateEnd = val[1]
  148. },
  149. chkstu(row, index) {
  150. return row.assignee ? false : true
  151. },
  152. // 禁用全选按钮
  153. selectAll() {
  154. this.$refs.multipleTable.clearSelection()
  155. },
  156. async addSend() {
  157. // console.log(this.userId)
  158. // console.log(this.taskId)
  159. if (!(this.userId && this.taskId)) return this.$message.error('请选择审核角色或审核人!')
  160. var obj = {
  161. url: this.$url.processinst.setPermission1,
  162. data: {
  163. userId: this.userId + '',
  164. taskId: this.taskId
  165. }
  166. }
  167. const { data: res } = await this.common.postRequest(obj)
  168. // console.log(res)
  169. if (res.code !== 1) return this.$message.error(res.message)
  170. this.$message.success(res.message)
  171. this.editFormVisible = false
  172. this.loadProcessDefList(1)
  173. },
  174. // 召回
  175. doRecall() {
  176. if (!(this.deleteList && this.deleteList.length > 0)) return this.$message.error('选择要召回的待办!')
  177. this.$confirm('此操作将把待办召回, 是否继续?', '提示', {
  178. confirmButtonText: '确定',
  179. cancelButtonText: '取消',
  180. type: 'warning'
  181. })
  182. .then(async () => {
  183. console.log( this.deleteList[0]);
  184. let { businessKey, processInstanceId } = this.deleteList[0]
  185. let service = getService(this.deleteList[0].processDefinitionKey, true)
  186. let url = eval('`' + this.$url.activeti.recallProcess + '`')
  187. console.log(this.deleteList[0])
  188. let obj = {
  189. url,
  190. data: {
  191. id: businessKey,
  192. processInstanceId
  193. }
  194. }
  195. const res = await this.common.postRequest(obj)
  196. if (res.code !== '1') return this.$message.error('召回失败!')
  197. this.$message.success('召回成功!')
  198. this.loadProcessDefList(1)
  199. })
  200. .catch(err => {
  201. this.$message({
  202. type: 'info',
  203. message: '已取消召回!'
  204. })
  205. })
  206. },
  207. // 只能选择一个
  208. select(selection, row) {
  209. // console.log(this.$refs.multipleTable)
  210. // console.log('---------------')
  211. // if (this.previousTableCom) {
  212. // this.previousTableCom.clearSelection()
  213. // }
  214. // this.previousTableCom = this.$refs.multipleTable
  215. // console.log('当用户手动勾选数据行的 Checkbox 时触发的事件', selection, row)
  216. // 选择项大于1时
  217. if (selection.length > 1) {
  218. let del_row = selection.shift()
  219. // console.log('把数组的第一个元素从其中删除后', selection);
  220. this.$refs.multipleTable.toggleRowSelection(del_row, false) // 用于多选表格,切换某一行的选中状态,如果使用了第二个参数,则是设置这一行选中与否(selected 为 true 则选中)
  221. }
  222. },
  223. userIdchange(value) {
  224. this.userId = value
  225. // console.log(this.taskId)
  226. // console.log(this.userId)
  227. },
  228. // 关闭事件
  229. closeEliminateData() {
  230. // this.taskId = ''
  231. this.userArr = []
  232. this.userArr1 = []
  233. this.userRole = ''
  234. this.userMan = ''
  235. this.userId = ''
  236. this.taskname = ''
  237. },
  238. doTask(key, row) {
  239. if (row.taskAssignee != null && row.taskAssignee.length > 0) {
  240. //办理
  241. this.$router.push({
  242. path: row.taskFormUrl
  243. })
  244. return
  245. } else if (row.taskCandidate != null && row.taskCandidate.length > 0) {
  246. } else {
  247. }
  248. },
  249. doDistribution(row) {
  250. this.soDistributionVisible = true
  251. this.$nextTick(() => {
  252. this.$refs.soDistribution.init(row.key, row.id)
  253. })
  254. },
  255. async doView() {
  256. // this.userArr = []
  257. // this.userArr1 = []
  258. // this.userId = ''
  259. if (!(this.deleteList && this.deleteList.length > 0)) return this.$message.error('选择要发起的流程!')
  260. this.editFormVisible = true
  261. var obj = {
  262. url: this.$url.processinst.getUserTask,
  263. data: {
  264. procdefkey: this.deleteList[0].processDefinitionKey,
  265. taskdefkey: this.deleteList[0].taskDefinitionKey
  266. }
  267. }
  268. const { data: res } = await this.common.postRequest(obj)
  269. if (res.code !== 1) return this.$message.error(res.message)
  270. this.taskname = res.data[0].taskname
  271. let arrTemp = res.data[0].usergroup ? res.data[0].usergroup.split(',') : []
  272. if (arrTemp.length > 0) {
  273. arrTemp.forEach(id => {
  274. this.getuser_info(id)
  275. })
  276. }
  277. },
  278. async getuser_info(id) {
  279. var obj = {
  280. url: this.$url.roleManag.getById,
  281. data: {
  282. id
  283. }
  284. }
  285. const { data: res } = await this.common.postRequest(obj)
  286. this.userArr.push(res)
  287. },
  288. checkedChange(value) {
  289. console.log(value)
  290. if (value.length > 0) {
  291. this.taskId = value[0].taskId
  292. this.deleteList = value
  293. } else {
  294. this.deleteList = value
  295. }
  296. },
  297. // 选择角色事件
  298. async changeUser(value) {
  299. var obj = {
  300. url: this.$url.activeti.getUsersByRoleIds,
  301. data: {
  302. excludeMeWhenSelectNextHandler: this.common.excludeMeWhenSelectNextHandler,
  303. excludeFormerHanlder: this.common.excludeMeWhenSelectNextHandler,
  304. roleId: value + ''
  305. }
  306. }
  307. const { data: res } = await this.common.postRequest(obj)
  308. this.userArr1 = res
  309. }
  310. }
  311. }
  312. </script>