order-timeline.vue 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <template>
  2. <div class="demo-timeline">
  3. <div v-if="records.length" style="margin-bottom: 10px">{{ title }}</div>
  4. <el-timeline v-if="records.length">
  5. <el-timeline-item v-for="(item, index) in records" :key="index" :timestamp="item.createTime"
  6. :color="item.label">
  7. <div style="display: flex;align-items: center;flex-wrap: wrap;">
  8. <el-icon :size="14" :color="item.label">
  9. <Flag />
  10. </el-icon>
  11. <span>{{ item.createName }}:</span>
  12. <span>{{ item.remark }}</span>
  13. </div>
  14. </el-timeline-item>
  15. </el-timeline>
  16. <el-empty v-else description="暂无数据"></el-empty>
  17. </div>
  18. </template>
  19. <script setup>
  20. import { watch, ref, onMounted } from 'vue';
  21. import request from '@/utils/request';
  22. import { Flag } from '@element-plus/icons-vue';
  23. const props = defineProps({
  24. orderId: {
  25. type: String,
  26. default: ''
  27. },
  28. title: {
  29. type: String,
  30. default: ''
  31. }
  32. });
  33. const records = ref([]);
  34. const loading = ref(false);
  35. //获取备注
  36. const getRemarks = async () => {
  37. if (!props.orderId || loading.value) return;
  38. loading.value = true;
  39. try {
  40. const res = await request.get(`/order/remark/list?orderId=${props.orderId}`);
  41. records.value = res.data.data;
  42. } catch (error) {
  43. console.error('Failed to fetch remarks:', error);
  44. } finally {
  45. loading.value = false;
  46. }
  47. };
  48. watch(() => props.orderId, (newVal, oldVal) => {
  49. if (newVal && newVal !== oldVal) {
  50. records.value = [];
  51. getRemarks();
  52. }
  53. }, { immediate: true });
  54. </script>