selectCustomer.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. <template>
  2. <div>
  3. <el-form :inline="true" :model="query" class="mb12" @submit.prevent>
  4. <el-form-item label="客户编号">
  5. <el-input v-model="query.custNo" placeholder="输入客户编号" clearable style="width: 180px" />
  6. </el-form-item>
  7. <el-form-item label="客户名称">
  8. <el-input v-model="query.sortName" placeholder="输入客户名称" clearable style="width: 180px" />
  9. </el-form-item>
  10. <el-form-item>
  11. <el-button type="primary" @click="doSearch">查询</el-button>
  12. <el-button @click="reset">重置</el-button>
  13. </el-form-item>
  14. </el-form>
  15. <el-table
  16. :data="rows"
  17. v-loading="loading"
  18. border
  19. stripe
  20. style="width: 100%"
  21. height="420"
  22. @row-dblclick="onDblClick"
  23. @sort-change="onSortChange"
  24. >
  25. <el-table-column prop="cust" label="客户编号" width="200" sortable="custom" />
  26. <el-table-column prop="sortName" label="客户名称" min-width="220" show-overflow-tooltip sortable="custom" />
  27. </el-table>
  28. <div class="pager">
  29. <el-pagination
  30. v-model:current-page="query.page"
  31. v-model:page-size="query.pageSize"
  32. :total="total"
  33. :page-sizes="[10, 20, 50]"
  34. layout="total, sizes, prev, pager, next"
  35. @current-change="loadList"
  36. @size-change="loadList"
  37. />
  38. </div>
  39. </div>
  40. </template>
  41. <script setup lang="ts" name="aidopBusinessSelectCustomer">
  42. import { onMounted, reactive, ref } from 'vue';
  43. import { fetchCustomerPage, type CustomerRow } from '../api/universalSelector';
  44. const emit = defineEmits<{ (e: 'picked', v: CustomerRow): void }>();
  45. const query = reactive({
  46. custNo: '',
  47. sortName: '',
  48. page: 1,
  49. pageSize: 10,
  50. sortField: '',
  51. sortOrder: '',
  52. });
  53. const loading = ref(false);
  54. const rows = ref<CustomerRow[]>([]);
  55. const total = ref(0);
  56. async function loadList() {
  57. loading.value = true;
  58. try {
  59. const data = await fetchCustomerPage({
  60. custNo: query.custNo || undefined,
  61. sortName: query.sortName || undefined,
  62. page: query.page,
  63. pageSize: query.pageSize,
  64. sortField: query.sortField || undefined,
  65. sortOrder: query.sortOrder || undefined,
  66. });
  67. rows.value = data.list || [];
  68. total.value = data.total || 0;
  69. } finally {
  70. loading.value = false;
  71. }
  72. }
  73. function doSearch() {
  74. query.page = 1;
  75. loadList();
  76. }
  77. function reset() {
  78. query.custNo = '';
  79. query.sortName = '';
  80. query.page = 1;
  81. query.sortField = '';
  82. query.sortOrder = '';
  83. loadList();
  84. }
  85. function onSortChange({ prop, order }: { prop: string; order: string | null }) {
  86. query.sortField = prop || '';
  87. query.sortOrder = order === 'ascending' ? 'asc' : order === 'descending' ? 'desc' : '';
  88. loadList();
  89. }
  90. function onDblClick(row: CustomerRow) {
  91. emit('picked', row);
  92. }
  93. onMounted(loadList);
  94. </script>
  95. <style scoped lang="scss">
  96. .mb12 {
  97. margin-bottom: 12px;
  98. }
  99. .pager {
  100. margin-top: 10px;
  101. display: flex;
  102. justify-content: flex-end;
  103. }
  104. </style>