DialogCustomerChoice.vue 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. <template>
  2. <el-dialog v-model="visible" width="680px" append-to-body draggable :close-on-click-modal = "false">
  3. <template #header>
  4. <div class="dialog-title-container">
  5. <span class="title-label" style="color: #fff"
  6. ><i class="el-icon-document" /> 客户选择</span
  7. >
  8. <i class="el-icon-close" @click="close" />
  9. </div>
  10. </template>
  11. <el-form
  12. class="list-search-container"
  13. size="small"
  14. :model="query"
  15. ref="queryRef"
  16. :inline="true"
  17. label-width="68px"
  18. >
  19. <el-form-item label="客户名称:" prop="keyword">
  20. <el-input
  21. v-model="query.keyword"
  22. placeholder="请输入客户名称"
  23. clearable
  24. @keyup.enter="handleQuery"
  25. />
  26. </el-form-item>
  27. <el-form-item>
  28. <el-button type="primary" icon="Search" @click="handleQuery"
  29. >搜索</el-button
  30. >
  31. <el-button icon="Refresh" @click="resetQuery">重置</el-button>
  32. </el-form-item>
  33. </el-form>
  34. <!-- 功能按钮 -->
  35. <div v-if="multiple" class="form-btns-container">
  36. <el-button type="success" size="small" @click="handleMultipleSelected"
  37. ><i class="fa fa-floppy-o" aria-hidden="true" /> 确定选择</el-button
  38. >
  39. </div>
  40. <div class="dialog-list-container">
  41. <el-table
  42. :data="list"
  43. size=""
  44. border
  45. height="400px"
  46. header-row-class-name="list-header-row"
  47. row-class-name="list-row"
  48. @selection-change="handleSelectionChange"
  49. >
  50. <el-table-column
  51. v-if="multiple"
  52. type="selection"
  53. width="40"
  54. align="center"
  55. />
  56. <el-table-column type="index" label="序号" width="60" align="center" />
  57. <el-table-column label="客户名称" prop="name" align="center" />
  58. <el-table-column label="备注" prop="remark" header-align="center" />
  59. <el-table-column
  60. v-if="!multiple"
  61. label="操作"
  62. width="60"
  63. align="center"
  64. >
  65. <template #default="scope">
  66. <el-button
  67. link
  68. type="success"
  69. size="small"
  70. @click="handleSimpleSelected(scope.row)"
  71. >选择</el-button
  72. >
  73. </template>
  74. </el-table-column>
  75. </el-table>
  76. </div>
  77. <!-- <div class="pagination-container"> -->
  78. <pagination
  79. v-show="query.total > 0"
  80. :total="query.total"
  81. v-model:page="query.pageNum"
  82. v-model:limit="query.pageSize"
  83. @pagination="getList"
  84. style="background-color: rgba(0, 0, 0, 0)"
  85. />
  86. <!-- </div> -->
  87. </el-dialog>
  88. </template>
  89. <script setup>
  90. import { toRef } from "vue";
  91. import { listCompany } from "@/api/business/crm/company";
  92. const props = defineProps({
  93. width: {
  94. type: String,
  95. default: "800px",
  96. },
  97. multiple: {
  98. type: Boolean,
  99. default: () => false,
  100. },
  101. });
  102. const emit = defineEmits(["choice"]);
  103. const { width, multiple } = toRefs(props);
  104. const data = reactive({
  105. visible: false,
  106. query: {
  107. pn: 1,
  108. size: 15,
  109. total: 0,
  110. },
  111. list: [],
  112. selections: [],
  113. });
  114. const { visible, query, list, selections } = toRefs(data);
  115. function open() {
  116. visible.value = true;
  117. getList();
  118. }
  119. function close() {
  120. visible.value = false;
  121. }
  122. const handlePageChange = (val) => {
  123. query.value.pn = val;
  124. getList();
  125. };
  126. const handlesizeChange = (val) => {
  127. query.value.size = val;
  128. getList();
  129. };
  130. const getList = () => {
  131. listCompany(query.value)
  132. .then((res) => {
  133. query.value.total = res.total;
  134. list.value = res.rows;
  135. })
  136. .catch((err) => {
  137. console.log(err);
  138. });
  139. };
  140. const handleMultipleSelected = () => {
  141. emit("choice", selections.value);
  142. close();
  143. };
  144. const handleSimpleSelected = (row) => {
  145. emit("choice", row);
  146. close();
  147. };
  148. const handleSelectionChange = (choiceSelections) => {
  149. selections.value = choiceSelections;
  150. };
  151. const resetQuery = () => {
  152. query.value = {
  153. pn: 1,
  154. size: 15,
  155. total: 0,
  156. };
  157. getList();
  158. };
  159. const handleQuery = () => {
  160. query.value.pageNum = 1;
  161. getList();
  162. };
  163. // getList()
  164. defineExpose({
  165. open,
  166. close,
  167. });
  168. </script>