task-modal.vue 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. <template>
  2. <hc-new-dialog is-table widths="400px" :show="isShow" title="审批流程" :padding="false" :footer="false" @close="addModalClose">
  3. <div class="hc-task-time">
  4. <hc-body class="hc-task-body-card" padding="10px" scrollbar>
  5. <el-timeline v-if="rowInfo.fixedFlowId == null" class="hc-time-line">
  6. <template v-for="(item, index) in flowList" :key="index">
  7. <el-timeline-item :class="item.status === '2' ? 'success' : 'primary'" size="large">
  8. <div class="timeline-item-icon">
  9. <hc-icon v-if="item.status === '2'" class="check-icon" name="check" />
  10. </div>
  11. <div class="reply-name">{{ item.name }}</div>
  12. <div class="reply-time">{{ item.date }}</div>
  13. <div class="reply-content" v-html="item.flowValue" />
  14. </el-timeline-item>
  15. </template>
  16. </el-timeline>
  17. <el-timeline v-else class="hc-time-line">
  18. <template v-for="(item, index) in flowListTask" :key="index">
  19. <el-timeline-item :class="item.status == '2' ? 'success' : 'primary'" size="large">
  20. <div class="timeline-item-icon">
  21. <hc-icon v-if="item.status == '2'" class="check-icon" name="check" />
  22. </div>
  23. <div v-if="!item.isTask" class="reply-name">{{ item.name }}</div>
  24. <div v-if="item.isTask">
  25. <div class="reply-name">
  26. {{ item.name }}
  27. <hc-icon v-if="item.type == 2" name="links" class="ml-2" />
  28. <hc-icon v-if="item.type == 1" name="exchange-2" class="ml-2" />
  29. <br>
  30. <el-tooltip placement="right" effect="light" :visible="item.taskDetailvisible">
  31. <template #content>
  32. <el-timeline class="hc-time-line">
  33. <template v-for="(item1, index1) in item.userList" :key="index1">
  34. <el-timeline-item :class="item1.status === '2' ? 'success' : 'primary'" size="large">
  35. <div class="timeline-item-icon">
  36. <hc-icon v-if="item1.status === '2'" class="check-icon" name="check" />
  37. </div>
  38. <div class="reply-name">{{ item1.name }}</div>
  39. <div class="reply-time">{{ item1.date }}</div>
  40. <div class="reply-content" v-html="item1.flowValue" />
  41. </el-timeline-item>
  42. </template>
  43. </el-timeline>
  44. </template>
  45. <el-link @click="getTaskDetail" @mouseenter="item.taskDetailvisible = true" @mouseleave="item.taskDetailvisible = false">点击查看详情</el-link>
  46. </el-tooltip>
  47. </div>
  48. </div>
  49. <div class="reply-time">{{ item.date }}</div>
  50. <div class="reply-content" v-html="item.flowValue" />
  51. </el-timeline-item>
  52. </template>
  53. </el-timeline>
  54. </hc-body>
  55. </div>
  56. </hc-new-dialog>
  57. </template>
  58. <script setup>
  59. import { ref, watch } from 'vue'
  60. const props = defineProps({
  61. data: {
  62. type: Object,
  63. default: () => ({}),
  64. },
  65. })
  66. //事件
  67. const emit = defineEmits(['close'])
  68. //双向绑定
  69. // eslint-disable-next-line no-undef
  70. const isShow = defineModel('modelValue', {
  71. default: false,
  72. })
  73. //监听
  74. const dataInfo = ref(props.data)
  75. watch(() => props.data, (data) => {
  76. dataInfo.value = data
  77. }, { immediate: true, deep:true })
  78. //监听
  79. watch(isShow, (val) => {
  80. if (val) getDataApi()
  81. })
  82. const rowInfo = ref({})
  83. const flowList = ref([])
  84. const flowListTask = ref([])
  85. const getDataApi = async () => {
  86. }
  87. //查看详情
  88. const getTaskDetail = () => {
  89. }
  90. //关闭弹窗
  91. const addModalClose = () => {
  92. isShow.value = false
  93. emit('close')
  94. }
  95. </script>
  96. <style scoped lang="scss">
  97. .hc-task-time {
  98. position: relative;
  99. height: 100%;
  100. }
  101. </style>
  102. <style lang="scss">
  103. .hc-task-body-card {
  104. background: #f7f7f7;
  105. .el-scrollbar__bar.is-vertical {
  106. right: -8px;
  107. }
  108. .hc-task-body-table {
  109. position: relative;
  110. height: calc(100% - 30px);
  111. .hc-task-body-table-form {
  112. position: relative;
  113. height: 100%;
  114. overflow: auto;
  115. .title {
  116. position: relative;
  117. display: flex;
  118. align-items: center;
  119. justify-content: center;
  120. font-size: 18px;
  121. border: 1px solid #e5e6ea;
  122. height: 50px;
  123. }
  124. .name {
  125. position: relative;
  126. display: flex;
  127. align-items: center;
  128. font-size: 13px;
  129. border: 1px solid #e5e6ea;
  130. padding: 10px;
  131. border-top: 0;
  132. }
  133. .input {
  134. position: relative;
  135. border: 1px solid #e5e6ea;
  136. padding: 6px;
  137. border-top: 0;
  138. }
  139. .input-box {
  140. position: relative;
  141. display: flex;
  142. .box {
  143. position: relative;
  144. width: 50%;
  145. }
  146. .no-b {
  147. border-left: 0;
  148. }
  149. }
  150. }
  151. }
  152. .hc-task-body-tip {
  153. color: red;
  154. }
  155. }
  156. </style>