UserTask.vue 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div style="margin-top: 16px">
  3. <!-- <el-form-item label="处理用户">-->
  4. <!-- <el-select v-model="userTaskForm.assignee" @change="updateElementTask('assignee')">-->
  5. <!-- <el-option v-for="ak in mockData" :key="'ass-' + ak" :label="`用户${ak}`" :value="`user${ak}`" />-->
  6. <!-- </el-select>-->
  7. <!-- </el-form-item>-->
  8. <!-- <el-form-item label="候选用户">-->
  9. <!-- <el-select v-model="userTaskForm.candidateUsers" multiple collapse-tags @change="updateElementTask('candidateUsers')">-->
  10. <!-- <el-option v-for="uk in mockData" :key="'user-' + uk" :label="`用户${uk}`" :value="`user${uk}`" />-->
  11. <!-- </el-select>-->
  12. <!-- </el-form-item>-->
  13. <!-- <el-form-item label="候选分组">-->
  14. <!-- <el-select v-model="userTaskForm.candidateGroups" multiple collapse-tags @change="updateElementTask('candidateGroups')">-->
  15. <!-- <el-option v-for="gk in mockData" :key="'ass-' + gk" :label="`分组${gk}`" :value="`group${gk}`" />-->
  16. <!-- </el-select>-->
  17. <!-- </el-form-item>-->
  18. <el-form-item label="到期时间">
  19. <el-input v-model="userTaskForm.dueDate" clearable @change="updateElementTask('dueDate')" />
  20. </el-form-item>
  21. <el-form-item label="跟踪时间">
  22. <el-input
  23. v-model="userTaskForm.followUpDate"
  24. clearable
  25. @change="updateElementTask('followUpDate')"
  26. />
  27. </el-form-item>
  28. <el-form-item label="优先级">
  29. <el-input v-model="userTaskForm.priority" clearable @change="updateElementTask('priority')" />
  30. </el-form-item>
  31. 友情提示:任务的分配规则,使用
  32. <router-link target="_blank" :to="{ path: '/bpm/manager/model' }"
  33. ><el-link type="danger">流程模型</el-link>
  34. </router-link>
  35. 下的【分配规则】替代,提供指定角色、部门负责人、部门成员、岗位、工作组、自定义脚本等 7
  36. 种维护的任务分配维度,更加灵活!
  37. </div>
  38. </template>
  39. <script setup lang="ts" name="UserTask">
  40. import { ref, watch, nextTick, onBeforeUnmount, toRaw } from 'vue'
  41. import { ElLink, ElFormItem, ElInput } from 'element-plus'
  42. const props = defineProps({
  43. id: String,
  44. type: String
  45. })
  46. const defaultTaskForm = ref({
  47. assignee: '',
  48. candidateUsers: [],
  49. candidateGroups: [],
  50. dueDate: '',
  51. followUpDate: '',
  52. priority: ''
  53. })
  54. const userTaskForm = ref({})
  55. // const mockData=ref([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
  56. const bpmnElement = ref()
  57. const resetTaskForm = () => {
  58. for (let key in defaultTaskForm.value) {
  59. let value
  60. if (key === 'candidateUsers' || key === 'candidateGroups') {
  61. value = bpmnElement.value?.businessObject[key]
  62. ? bpmnElement.value.businessObject[key].split(',')
  63. : []
  64. } else {
  65. value = bpmnElement.value?.businessObject[key] || defaultTaskForm.value[key]
  66. }
  67. userTaskForm.value[key] = value
  68. }
  69. }
  70. const updateElementTask = (key) => {
  71. const taskAttr = Object.create(null)
  72. if (key === 'candidateUsers' || key === 'candidateGroups') {
  73. taskAttr[key] =
  74. userTaskForm.value[key] && userTaskForm.value[key].length
  75. ? userTaskForm.value[key].join()
  76. : null
  77. } else {
  78. taskAttr[key] = userTaskForm.value[key] || null
  79. }
  80. window.bpmnInstances.modeling.updateProperties(toRaw(bpmnElement.value), taskAttr)
  81. }
  82. watch(
  83. () => props.id,
  84. () => {
  85. bpmnElement.value = window.bpmnInstances.bpmnElement
  86. nextTick(() => {
  87. resetTaskForm()
  88. })
  89. },
  90. { immediate: true }
  91. )
  92. onBeforeUnmount(() => {
  93. bpmnElement.value = null
  94. })
  95. </script>