index5.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. <template>
  2. <div class="work-order-platform">
  3. <!-- 搜索栏 -->
  4. <el-card class="filter-card">
  5. <el-form :model="queryParams" ref="queryRef" :inline="true" class="filter-form">
  6. <el-form-item label="工单号" prop="orderId">
  7. <el-input
  8. v-model="queryParams.orderId"
  9. placeholder="请输入工单号(如:WO2024001)"
  10. clearable
  11. @keyup.enter="handleQuery"
  12. />
  13. </el-form-item>
  14. <el-form-item label="工单类型" prop="type">
  15. <el-select
  16. v-model="queryParams.type"
  17. placeholder="请选择工单类型"
  18. style="width: 180px;"
  19. >
  20. <el-option label="全部" value="" />
  21. <el-option label="维修" value="维修" />
  22. <el-option label="清洁" value="清洁" />
  23. <el-option label="投诉" value="投诉" />
  24. </el-select>
  25. </el-form-item>
  26. <el-form-item>
  27. <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
  28. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  29. </el-form-item>
  30. </el-form>
  31. </el-card>
  32. <!-- 数据表格 -->
  33. <el-card class="device-table">
  34. <el-table v-loading="loading" :data="workOrders" border>
  35. <el-table-column label="序号" type="index" align="center" />
  36. <el-table-column label="工单号" align="center" prop="orderId" />
  37. <el-table-column label="提交人" align="center" prop="submitter" />
  38. <el-table-column label="工单类型" align="center" prop="type" />
  39. <el-table-column label="紧急程度" align="center" prop="urgency" />
  40. <el-table-column label="处理人" align="center" prop="handler" />
  41. <el-table-column label="进度" align="center" prop="status" >
  42. <template #default="scope">
  43. <el-tag :type="getStatusType(scope.row.status)">
  44. {{ scope.row.status }}
  45. </el-tag>
  46. </template>
  47. </el-table-column>
  48. <el-table-column label="耗时" align="center" prop="duration" />
  49. </el-table>
  50. <!-- 分页器 -->
  51. <pagination
  52. v-show="total > 0"
  53. :total="total"
  54. v-model:page="queryParams.pageNum"
  55. v-model:limit="queryParams.pageSize"
  56. @pagination="getList"
  57. />
  58. </el-card>
  59. </div>
  60. </template>
  61. <script setup>
  62. import { ref, reactive } from "vue";
  63. import { getEstateManagementWorkOrderDataList } from "@/api/estateManagement/estateManagement"; // 假设API路径
  64. // 查询参数(两个条件:orderId、type)
  65. const queryParams = reactive({
  66. orderId: "", // 工单号(精确查询)
  67. type: "", // 工单类型(维修/清洁/投诉)
  68. pageNum: 1,
  69. pageSize: 10,
  70. interfaceName: "工单调度平台"
  71. });
  72. // 表格数据
  73. const workOrders = ref([]);
  74. const total = ref(0);
  75. const loading = ref(false);
  76. // 获取工单列表
  77. const getList = async () => {
  78. loading.value = true;
  79. try {
  80. const response = await getEstateManagementWorkOrderDataList(queryParams);
  81. workOrders.value = [];
  82. total.value = 0;
  83. } catch (error) {
  84. console.error("获取工单数据失败", error);
  85. } finally {
  86. loading.value = false;
  87. }
  88. };
  89. // 搜索方法
  90. const handleQuery = () => {
  91. queryParams.pageNum = 1; // 重置页码
  92. getList();
  93. };
  94. // 重置方法
  95. const resetQuery = () => {
  96. queryParams.orderId = "";
  97. queryParams.type = "";
  98. handleQuery();
  99. };
  100. // 分页事件
  101. const handleSizeChange = (newSize) => {
  102. queryParams.pageSize = newSize;
  103. getList();
  104. };
  105. const handleCurrentChange = (newPage) => {
  106. queryParams.pageNum = newPage;
  107. getList();
  108. };
  109. // 状态标签类型映射
  110. const getStatusType = (status) => {
  111. if (status === "待接单") return "warning";
  112. if (status === "处理中") return "info";
  113. if (status === "完成") return "success";
  114. return "info";
  115. };
  116. // 初始化加载
  117. getList();
  118. </script>
  119. <style scoped>
  120. .filter-card {
  121. margin-bottom: 20px;
  122. }
  123. .el-table .cell {
  124. white-space: nowrap;
  125. }
  126. .pagination {
  127. margin-top: 20px;
  128. display: flex;
  129. justify-content: flex-end;
  130. }
  131. </style>