done.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. <script setup lang="ts">
  2. import { done, type FlowTask, type TaskQuery } from '@/api/modules/flow/task'
  3. import dayjs from 'dayjs'
  4. import { useCachedViewStore } from '@/stores/modules/cachedView'
  5. import StatusTag from './StatusTag'
  6. const router = useRouter()
  7. const cachedViewStore = useCachedViewStore()
  8. const list = ref<FlowTask[]>([])
  9. const error = ref(false)
  10. const loading = ref(false)
  11. const finished = ref(false)
  12. const refreshing = ref(false)
  13. const total = ref(0)
  14. const queryForm = ref<TaskQuery>({
  15. name: '',
  16. instanceName: '',
  17. startUserId: '',
  18. instanceId: '',
  19. modelCode: '',
  20. definitionId: '',
  21. startDates: [],
  22. page: 0,
  23. limit: 10
  24. })
  25. const onSearch = () => {
  26. refreshing.value = true
  27. onRefresh()
  28. }
  29. const onRefresh = () => {
  30. finished.value = false
  31. loading.value = true
  32. onLoad()
  33. }
  34. const onLoad = () => {
  35. queryForm.value.page++
  36. if (refreshing.value) {
  37. queryForm.value.page = 1
  38. list.value = []
  39. refreshing.value = false
  40. }
  41. done(queryForm.value)
  42. .then((res) => {
  43. if (res.success) {
  44. list.value.push(...res.data.rows)
  45. total.value = res.data.total
  46. }
  47. })
  48. .catch(() => {
  49. error.value = true
  50. })
  51. .finally(() => {
  52. loading.value = false
  53. finished.value = list.value.length >= total.value
  54. })
  55. }
  56. const handleTask = (task: FlowTask) => {
  57. cachedViewStore.delCachedView('HandleTask')
  58. router.push({ name: 'HandleTask', query: { id: task.id } })
  59. }
  60. </script>
  61. <template>
  62. <form action="/">
  63. <van-search
  64. v-model="queryForm.instanceName"
  65. placeholder="请输入流程名称"
  66. shape="round"
  67. @search="onSearch"
  68. >
  69. </van-search>
  70. </form>
  71. <van-pull-refresh v-model="refreshing" @refresh="onRefresh">
  72. <van-list
  73. v-model:loading="loading"
  74. v-model:error="error"
  75. error-text="请求失败,点击重新加载"
  76. :finished="finished"
  77. finished-text="没有更多了"
  78. @load="onLoad"
  79. >
  80. <van-cell-group inset mt-2 v-for="item in list" :key="item.id">
  81. <van-cell @click="handleTask(item)">
  82. <template #title>
  83. <div flex-between>
  84. <div style="width: 85%;">
  85. {{ item.instanceName }}
  86. </div>
  87. <StatusTag :status="item.status" />
  88. </div>
  89. </template>
  90. <template #label>
  91. <div flex-between>
  92. <span>
  93. <UserName :username="item.startUserId" />
  94. </span>
  95. {{ dayjs(item.startTime).format('MM-DD HH:mm') }}
  96. </div>
  97. </template>
  98. </van-cell>
  99. </van-cell-group>
  100. </van-list>
  101. </van-pull-refresh>
  102. </template>
  103. <style scoped lang="less"></style>