Report-detail.vue 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <template>
  2. <el-dialog v-model="state.dialogVisible" draggable title="新增志愿者" destroy-on-close append-to-body @close="close">
  3. <template #header>
  4. <el-tabs v-model="state.activeName" @tab-change="handleClick">
  5. <el-tab-pane :name="item.name" v-for="item in state.tabPaneList" :key="item.name" :label="item.label"></el-tab-pane>
  6. </el-tabs>
  7. </template>
  8. <el-form :model="state.ruleForm" label-width="100px" ref="ruleFormRef" class="show-info-form" v-show="state.activeName === '0'">
  9. <el-row :gutter="10">
  10. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  11. <el-form-item label="作业类型">{{ state.ruleForm.jobType }}</el-form-item>
  12. </el-col>
  13. <!-- <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  14. <el-form-item label="施工人员姓名">{{ state.ruleForm.name }}</el-form-item>
  15. </el-col>-->
  16. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  17. <el-form-item label="联系电话">{{ state.ruleForm.phoneNumber }}</el-form-item>
  18. </el-col>
  19. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  20. <el-form-item label="施工地点">{{ state.ruleForm.fullAddress }}</el-form-item>
  21. </el-col>
  22. <el-col :xs="24" :sm="12" :md="12" :lg="12" :xl="12">
  23. <el-form-item label="上报时间">{{ formatDate(state.ruleForm.creationTime, 'YYYY-mm-dd HH:MM:SS') }}</el-form-item>
  24. </el-col>
  25. <!-- <el-col>
  26. <el-form-item label="作业描述">{{ state.ruleForm.jobType }}</el-form-item>
  27. </el-col>-->
  28. </el-row>
  29. </el-form>
  30. <div v-show="state.activeName === '1'">
  31. <vxe-table
  32. border
  33. :loading="state.loading"
  34. :data="state.tableData"
  35. :column-config="{ resizable: true }"
  36. :row-config="{ isCurrent: true, isHover: true, height: 30, useKey: true }"
  37. ref="tableRef"
  38. auto-resize
  39. show-overflow
  40. :scrollY="{ enabled: true, gt: 100 }"
  41. max-height="500px"
  42. id="orderAcceptHistory"
  43. >
  44. <vxe-column field="currentStepName" title="当前节点" width="100"></vxe-column>
  45. <vxe-column field="no" title="工单编码" width="140"></vxe-column>
  46. <vxe-column field="title" title="工单标题" min-width="150">
  47. <template #default="{ row }">
  48. <order-detail :order="row" @updateList="searchHistory">{{ row.title }}</order-detail>
  49. </template>
  50. </vxe-column>
  51. </vxe-table>
  52. <pagination
  53. @pagination="searchHistory"
  54. :total="state.total"
  55. v-model:current-page="state.queryParams.PageIndex"
  56. v-model:page-size="state.queryParams.PageSize"
  57. />
  58. </div>
  59. <template #footer>
  60. <span class="dialog-footer">
  61. <el-button @click="closeDialog" class="default-button">关 闭</el-button>
  62. </span>
  63. </template>
  64. </el-dialog>
  65. </template>
  66. <script setup lang="ts">
  67. import { defineAsyncComponent, reactive, ref } from 'vue';
  68. import { historyOrder } from '@/api/business/order';
  69. import { formatDate } from '@/utils/formatTime';
  70. const pagination = defineAsyncComponent(() => import('@/components/ProTable/components/Pagination.vue')); // 分页
  71. const OrderDetail = defineAsyncComponent(() => import('@/components/OrderDetail/index.vue')); // 工单详情
  72. // 定义子组件向父组件传值/事件
  73. const emit = defineEmits(['updateList']);
  74. // 定义变量内容
  75. const state = reactive<any>({
  76. dialogVisible: false,
  77. ruleForm: {
  78. name: null, // 姓名
  79. phoneNumber: null, // 联系方式
  80. },
  81. queryParams: {
  82. PageIndex: 1, // 当前页
  83. PageSize: 10, // 每页条数
  84. },
  85. total: 0,
  86. activeName: '0',
  87. tabPaneList: [
  88. {
  89. label: '基础信息',
  90. name: '0',
  91. },
  92. {
  93. label: '关联工单',
  94. name: '1',
  95. },
  96. ],
  97. });
  98. // 打开弹窗
  99. const openDialog = async (row: any) => {
  100. try {
  101. state.dialogVisible = true;
  102. state.ruleForm = row;
  103. } catch (error) {
  104. console.log(error);
  105. }
  106. };
  107. // 切换tab 查询列表
  108. const handleClick = (val: string) => {
  109. switch (val) {
  110. case '0': //工单详情
  111. break;
  112. case '1': // 历史工单
  113. searchHistory();
  114. break;
  115. }
  116. };
  117. // 查询历史工单
  118. const searchHistory = async () => {
  119. state.loading = true;
  120. let request = {
  121. PhoneNo: state.ruleForm.phoneNumber,
  122. };
  123. try {
  124. const response = await historyOrder(request);
  125. state.tableData = response?.result.items ?? [];
  126. state.total = response?.result.total;
  127. state.loading = false;
  128. } catch (error) {
  129. state.loading = false;
  130. }
  131. };
  132. // 关闭弹窗
  133. const closeDialog = () => {
  134. state.dialogVisible = false;
  135. };
  136. const close = () => {
  137. state.activeName = '0';
  138. };
  139. // 暴露变量
  140. defineExpose({
  141. openDialog,
  142. closeDialog,
  143. });
  144. </script>