index.vue 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. <template>
  2. <z-paging ref="paging" v-model="list" paging-class="paging-btm-shadow" bgColor="#f7f7f7" safe-area-inset-bottom>
  3. <template #top>
  4. <ut-navbar title="选择个体选择" :fixed="false"></ut-navbar>
  5. </template>
  6. <view class="startline-title pl-24 ml-24 mb-16">请选择个体选择</view>
  7. <view class="pd-24">
  8. <ut-search ref="searchRef" v-model="keyword" @search="changeSeach" margin="0" :border="false" placeholder="搜索标识号名称" bgColor="#fff" height="86rpx" borderRadius="10rpx"></ut-search>
  9. <view class="pd-10"></view>
  10. <up-checkbox-group v-model="checkboxValue">
  11. <template v-if="filteredLands.length > 0">
  12. <view class="d-flex w-100% j-sb b-radius bg-#fff mb-20 pd-24" v-for="(item, index) in filteredLands" :key="index" :name="item">
  13. <view class="flex1 ov-hd">
  14. <view class="ov-hd tx-ov d-flex a-c">
  15. <view class="c-primary f-s-24 f-w-5 bg-#EBF6EE pd4-4-12-4-6 b-radius" style="font-style: italic">{{ Number(index) + 1 < 10 ? '0' + (Number(index) + 1) : Number(index) + 1 }}</view>
  16. <view class="w-10"></view>
  17. <view class="c-#333 f-w-5 f-s-34 tx-ov ov-hd">{{ variety }}</view>
  18. </view>
  19. <view class="d-flex a-c pt-10">
  20. <text class="c-#666 f-s-24 tx-ov ov-hd">{{ item }}</text>
  21. </view>
  22. </view>
  23. <view class="d-flex j-c a-c">
  24. <view class="">
  25. <up-checkbox activeColor="#37A954" label="" :name="item" shape="circle"></up-checkbox>
  26. </view>
  27. </view>
  28. </view>
  29. </template>
  30. <template v-else>
  31. <view class="d-flex j-c a-c pd-40">
  32. <ut-empty :show="true" text="暂无搜索结果" />
  33. </view>
  34. </template>
  35. </up-checkbox-group>
  36. </view>
  37. <template #bottom>
  38. <view class="pd-24 bg-#fff">
  39. <view class="b-radius bg-#fff d-flex a-c j-sb">
  40. <view class="d-flex c-primary f-s-26">
  41. <text>已选择:</text>
  42. <text>{{ checkboxValue.length }}</text>
  43. <text>个地块</text>
  44. </view>
  45. <view class="d-flex a-c">
  46. <view class="c-#333 f-s-28 mr-10">全选</view>
  47. <up-checkbox usedAlone activeColor="#37A954" :checked="isAllSelected" @change="handleSelectAll" shape="circle"></up-checkbox>
  48. </view>
  49. </view>
  50. <view class="d-flex gap-20">
  51. <up-button @click="cancel()">取消</up-button>
  52. <up-button type="primary" @click="save()">确认选择</up-button>
  53. </view>
  54. </view>
  55. </template>
  56. </z-paging>
  57. </template>
  58. <script lang="ts" setup>
  59. import { ref, computed } from 'vue';
  60. import { useClientRequest } from '@/utils/request';
  61. const paging = ref();
  62. const list = ref([]);
  63. //基地信息
  64. const modeValue = ref();
  65. const keyword = ref('');
  66. // 品种信息
  67. const variety = ref();
  68. //地块信息
  69. const lands = ref<any>([]);
  70. // 过滤后的地块信息
  71. const filteredLands = computed(() => {
  72. if (!keyword.value) return lands.value;
  73. checkboxValue.value = [];
  74. return lands.value.filter((item: any) => item && item.toString().toLowerCase().includes(keyword.value.toLowerCase()));
  75. });
  76. const changeSeach = async () => {
  77. // 搜索时清空选中状态
  78. checkboxValue.value = [];
  79. };
  80. const checkboxValue = ref<string[]>([]);
  81. const handleSelectAll = () => {
  82. if (isAllSelected.value) {
  83. checkboxValue.value = []; // 全选状态下点击 → 清空
  84. } else {
  85. checkboxValue.value = filteredLands.value.map((item: any) => item); // 非全选状态下点击 → 全选
  86. }
  87. };
  88. const isAllSelected = computed(() => {
  89. return filteredLands.value.length > 0 && checkboxValue.value.length === filteredLands.value.length;
  90. });
  91. onLoad(async (options: any) => {
  92. const res = await useClientRequest.get(`/plt-api/app/plantationTask/getInfo/${options?.taskId}`);
  93. lands.value = res?.data?.animalIds;
  94. variety.value = res?.data?.variety;
  95. // 初始选中状态为空
  96. checkboxValue.value = [];
  97. });
  98. const cancel = () => {
  99. uni.navigateBack({
  100. delta: 1,
  101. });
  102. };
  103. // 确认选择
  104. const save = () => {
  105. if (checkboxValue.value.length === 0) {
  106. return uni.showToast({
  107. title: '请选择个体',
  108. icon: 'none',
  109. });
  110. }
  111. // 我希望这个能返回 data: { medicineName: string; swyqMedicineName: string; checkBox: any[]; data: any[]; aloneChecked: boolean; baseName: string; area?: string; gapFlag: number; swyqRes: number; areaUnit: string; adcodeName: string; address: string })
  112. uni.$emit('updateIndividual', {
  113. variety: variety.value,
  114. aloneChecked: isAllSelected.value,
  115. checkBox: checkboxValue.value,
  116. });
  117. uni.navigateBack({
  118. delta: 1,
  119. });
  120. };
  121. onUnload(() => {
  122. uni.$off('updateIndividual');
  123. });
  124. </script>