company-select.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. import { ref, computed, onMounted } from 'vue';
  2. import { listTenant } from '../../api/tenant';
  3. export default {
  4. setup() {
  5. const searchQuery = ref('');
  6. const companyData = ref([]);
  7. const filteredList = computed(() => {
  8. if (!searchQuery.value) return companyData.value;
  9. return companyData.value.filter(item => item.name.includes(searchQuery.value));
  10. });
  11. onMounted(async () => {
  12. try {
  13. uni.showLoading({ title: '加载公司列表...' });
  14. const res = await listTenant({ pageNum: 1, pageSize: 500 });
  15. if (res.code === 200) {
  16. const tenants = res.rows || res.data || [];
  17. const mapped = tenants
  18. .filter(t => String(t.tenantId) !== '000000')
  19. .map(t => ({ name: t.companyName, selected: false }));
  20. companyData.value = mapped;
  21. const selectedStr = uni.getStorageSync('selected_companies');
  22. if (selectedStr) {
  23. const selectedList = JSON.parse(selectedStr);
  24. companyData.value.forEach(company => {
  25. if (selectedList.includes(company.name)) {
  26. company.selected = true;
  27. }
  28. });
  29. }
  30. }
  31. } catch (e) {
  32. console.error(e);
  33. } finally {
  34. uni.hideLoading();
  35. }
  36. });
  37. const toggleSelect = (item) => {
  38. item.selected = !item.selected;
  39. };
  40. const confirmSelection = () => {
  41. const selected = companyData.value.filter(v => v.selected).map(v => ({ name: v.name }));
  42. uni.$emit('submit_companies', selected);
  43. uni.navigateBack();
  44. };
  45. return {
  46. searchQuery,
  47. filteredList,
  48. toggleSelect,
  49. confirmSelection
  50. };
  51. }
  52. }