companySelect.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <template>
  2. <div class="b-select" @click="onOpen()">
  3. <div class="select-text select-placeholder">{{ resultInfo.text ? resultInfo.text : '请选择企业' }}</div>
  4. <a @click="onOpen()">选择</a>
  5. </div>
  6. <ion-modal :is-open="isOpen" @willPresent="onRest()">
  7. <ion-header class="header-theme2">
  8. <ion-toolbar>
  9. <ion-buttons slot="start">
  10. <ion-icon :icon="arrowBackOutline" @click="onClose()"></ion-icon>
  11. </ion-buttons>
  12. <ion-title>选择企业</ion-title>
  13. <ion-buttons slot="end">
  14. <ion-button fill="clear" @click="onClose()">关闭</ion-button>
  15. </ion-buttons>
  16. </ion-toolbar>
  17. </ion-header>
  18. <ion-content class="ion-padding">
  19. <ion-item class="search-item" style="--border-style: unset; --inner-padding-end: 0px;--padding-start: 0px;">
  20. <ion-input placeholder="请输入企业名称" class="custom"
  21. v-model="searchParams.companyName"
  22. @input="reload()" :clear-on-edit="true"
  23. style="border: 1px solid #f2f2f5;border-radius: 14px;height: 35px;">
  24. <ion-icon slot="start" :icon="searchOutline" aria-hidden="true" style="padding: 0 10px;"></ion-icon>
  25. </ion-input>
  26. </ion-item>
  27. <div class="bw-vue-list">
  28. <div class="list-content">
  29. <ion-list>
  30. <ion-item v-for="(record,key) in dataList" :key="key">
  31. <ion-label @click="onSelect(record)">
  32. <span v-html="formatStr(record.companyName)"></span>
  33. </ion-label>
  34. </ion-item>
  35. </ion-list>
  36. <b-empty v-if="dataList.length<=0" :loading="loading"/>
  37. </div>
  38. </div>
  39. </ion-content>
  40. </ion-modal>
  41. </template>
  42. <script lang="ts">
  43. import {computed, defineComponent, reactive, ref, watch} from 'vue';
  44. import {arrowBackOutline, searchOutline} from 'ionicons/icons';
  45. import {IonIcon, onIonViewDidEnter} from '@ionic/vue';
  46. import BEmpty from "@/components/empty.vue";
  47. import {getCompanyList} from "@/api/company";
  48. import {useUserStore} from "@/store/modules/user";
  49. export default defineComponent({
  50. name: 'companySelect',
  51. components: {IonIcon, BEmpty},
  52. props: {},
  53. setup(props, context) {
  54. const total = ref(30);
  55. const loading = ref(false);
  56. const pagination = computed(() => ({
  57. total: total,
  58. current: searchParams.pageIndex,
  59. pageSize: searchParams.pageSize
  60. }));
  61. const searchParams = reactive({
  62. pageIndex: 1,
  63. pageSize: 30,
  64. companyName: '',
  65. loginUserID: ''
  66. });
  67. const isOpen = ref(false);
  68. const dataList = ref<any>([]);
  69. const resultInfo = reactive({value: '', text: ''})
  70. const reload = () => {
  71. loading.value = true;
  72. setTimeout(() => {
  73. searchParams.pageIndex = 1;
  74. const loginUserInfo = useUserStore().getUserInfo;
  75. searchParams.loginUserID = loginUserInfo.userID || '';
  76. getCompanyList(searchParams).then(data => {
  77. dataList.value = data.list;
  78. total.value = data.total;
  79. loading.value = false;
  80. })
  81. }, 300)
  82. }
  83. const onSelect = (item: any) => {
  84. resultInfo.text = item.companyName;
  85. resultInfo.value = item.companyID;
  86. context.emit("resultInfo", resultInfo);
  87. onClose();
  88. }
  89. const onOpen = () => {
  90. isOpen.value = true;
  91. }
  92. const onClose = () => {
  93. isOpen.value = false;
  94. };
  95. const onRest = () => {
  96. dataList.value = [];
  97. searchParams.companyName = '';
  98. searchParams.pageIndex = 1;
  99. resultInfo.text = '';
  100. resultInfo.value = '';
  101. reload();
  102. }
  103. const formatStr = (str: any) => {
  104. if (!str) {
  105. return "";
  106. }
  107. return str.replace(searchParams.companyName, '<span style="color: coral">' + searchParams.companyName + '</span>');
  108. }
  109. return {
  110. searchOutline,
  111. arrowBackOutline,
  112. total,
  113. loading,
  114. isOpen,
  115. dataList,
  116. pagination,
  117. searchParams,
  118. onSelect,
  119. onOpen,
  120. onClose,
  121. reload,
  122. onRest,
  123. formatStr,
  124. resultInfo
  125. }
  126. }
  127. });
  128. </script>