select-seed-source-list.vue 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. <template>
  2. <z-paging ref="paging" v-model="list" bgColor="#f7f7f7" bottom-bg-color="#fff" safe-area-inset-bottom paging-class="paging-btm-shadow" @query="query">
  3. <view class="pd3-24-24-0">
  4. <view class="d-flex a-c">
  5. <view class="min-w-230 flex1">
  6. <ut-action-sheet v-model="form.instoreType" :tabs="[{ label: '全部', value: '' }, ...pt_seed_instore_type]" mode="custom" @change="onRefresh" title="选择入库类型">
  7. <view class="d-flex search-select-item a-c">
  8. <view class="flex1 ov-hd f-s-28 c-333 text-center f-w-5 w-s-no">{{ selectDictLabel(pt_seed_instore_type, form.instoreType) || '全部' }} </view>
  9. <up-icon size="24rpx" color="#333" name="arrow-down-fill" class="mr-5"></up-icon>
  10. </view>
  11. </ut-action-sheet>
  12. </view>
  13. <view class="h-86 pl-20 w-100%">
  14. <ut-search ref="searchRef" v-model="form.keyword" @search="changeSeach" margin="0" :border="false" placeholder="搜名称、批号、库房、供应商" bgColor="#fff" height="86rpx" borderRadius="10rpx"></ut-search>
  15. </view>
  16. </view>
  17. <view></view>
  18. </view>
  19. <view class="pd-24 bg-#f7f7f7">
  20. <template v-for="(item, index) in list" :key="index">
  21. <view class="b-radius bg-#fff pd-20 p-rtv mb-20 select-item-list" :class="{ 'active': item.id + '-' + item.storageType === checkedId }" @click="emit('clickItem', item)">
  22. <view class="d-flex j-sb a-c li-item-head mb-16">
  23. <view class="li-left-tag" :class="{ [`bg-instore-${item?.instoreType}`]: true }">{{ selectDictLabel(pt_seed_instore_type, item?.instoreType) }}</view>
  24. <view class="f-s-22 c-#666">{{ item?.instoreBizInfo?.instoreDate }}</view>
  25. </view>
  26. <view class="d-flex flex1 mb-10">
  27. <view class="flex1">
  28. <span class="f-s-34 c-#333 f-w-500 mr-10">{{ item?.variety }}</span>
  29. <span class="f-s-24 c-#666">{{ item?.seedLevel }}{{ selectDictLabel(pt_seed_type, item?.seedType) }}</span>
  30. </view>
  31. <view>
  32. <view v-if="item?.examinReport?.length" class="tag-span c-primary bg-#EBF6EE">已检验</view>
  33. <view v-else class="tag-span c-danger bg-#F9ECEA">未检验</view>
  34. </view>
  35. </view>
  36. <template v-if="item?.instoreType == '2'">
  37. <view class="pd2-4-0 f-s-28">
  38. <span class="c-#666">入库批号:</span>
  39. <span class="c-#333 f-w-500">{{ item?.batchCode }}</span>
  40. </view>
  41. <!-- <view class="pd2-4-0 f-s-28">
  42. <span class="c-#666">溯源批号:</span>
  43. <span class="c-#333 f-w-500">暂无</span>
  44. </view> -->
  45. <view v-if="['A3', 'A4'].includes(item?.seedType)" class="pd2-4-0 f-s-28">
  46. <span class="c-#666">菌种/菌株编号:</span>
  47. <span class="c-#333 f-w-500">{{ selectDictLabel(pt_fungus_code_type, item?.fungusCodeType) }}/{{ item?.fungusCode }}</span>
  48. </view>
  49. <view v-if="item?.supplierId" class="pd2-4-0 f-s-28">
  50. <span class="c-#666">供应商:</span>
  51. <span class="c-#333 f-w-500">{{ item?.supplierInfo?.cusName || '-' }}</span>
  52. </view>
  53. <view v-if="item?.warehouses?.length" class="pd2-4-0 f-s-28">
  54. <span class="c-#666">存放库房:</span>
  55. <span class="c-#333 f-w-500">{{ getStorageRoomNames(item?.warehouses) || '-' }}</span>
  56. </view>
  57. </template>
  58. <template v-if="item?.instoreType == '3'">
  59. <view class="pd2-4-0 f-s-28">
  60. <span class="c-#666">采收批号:</span>
  61. <span class="c-#333 f-w-500">{{ item?.harvestInfo?.harvestCode || '-' }}</span>
  62. </view>
  63. <view class="pd2-4-0 f-s-28">
  64. <span class="c-#666">采收基地:</span>
  65. <span class="c-#333 f-w-500">
  66. {{ item?.harvestInfo?.baseInfo?.baseName || '-' }}
  67. </span>
  68. </view>
  69. <view v-if="['A3', 'A4'].includes(item?.seedType)" class="pd2-4-0 f-s-28">
  70. <span class="c-#666">菌种/菌株编号:</span>
  71. <span class="c-#333 f-w-500">{{ selectDictLabel(pt_fungus_code_type, item?.fungusCodeType) }}/{{ item?.fungusCode }}</span>
  72. </view>
  73. <view v-if="item?.warehouses?.length" class="pd2-4-0 f-s-28">
  74. <span class="c-#666">存放库房:</span>
  75. <span class="c-#333 f-w-500">{{ getStorageRoomNames(item?.warehouses) || '-' }}</span>
  76. </view>
  77. </template>
  78. <view class="pd2-4-0 f-s-28">
  79. <span class="c-#666">入库量:</span>
  80. <span class="c-#333 f-w-500">{{ item?.capacity }}{{ item?.unit }}</span>
  81. </view>
  82. <view class="d-flex">
  83. <view v-if="item?.inputAmount" class="pd2-4-0 f-s-28 flex1">
  84. <span class="c-#666">出库量:</span>
  85. <span class="c-#333 f-w-500">{{ item?.inputAmount || '0' }}{{ item?.unit }}</span>
  86. </view>
  87. <view v-if="item?.restAmount" class="pd2-4-0 f-s-28 flex1">
  88. <span class="c-danger">剩余量:</span>
  89. <span class="c-danger f-w-500">{{ item?.restAmount || '0' }}{{ item?.unit }}</span>
  90. </view>
  91. </view>
  92. <image v-if="item.id + '-' + item.storageType === checkedId" class="w-40 h-40 checked-icon" src="/static/images/common/btn_checked_icon.png" mode="widthFix" />
  93. </view>
  94. </template>
  95. </view>
  96. <template #empty>
  97. <view class="d-flex flex-cln a-c" style="margin-top: -200rpx">
  98. <ut-empty class="mg-at" color="#ccc" size="28rpx">暂无种源信息,点击下方+号新增吧</ut-empty>
  99. </view>
  100. </template>
  101. <template #bottom>
  102. <view class="pd-24">
  103. <up-button @click="emit('confirm')" type="primary">确认选择</up-button>
  104. </view>
  105. </template>
  106. </z-paging>
  107. </template>
  108. <script setup lang="ts">
  109. import { useClientRequest } from '@/utils/request';
  110. import { getStorageRoomNames } from '@/utils/common';
  111. const { proxy } = getCurrentInstance() as ComponentInternalInstance;
  112. const { pt_seed_instore_type, pt_seed_type, pt_fungus_code_type } = toRefs<any>(proxy?.useDict('pt_seed_instore_type', 'pt_seed_type', 'pt_fungus_code_type'));
  113. const props = defineProps({
  114. checkedId: {
  115. type: String,
  116. default: '',
  117. },
  118. });
  119. const emit = defineEmits(['clickItem', 'confirm']);
  120. const list = ref<any[]>();
  121. const form = ref({ keyword: '', restFlag: '1', instoreType: '' });
  122. const paging = ref();
  123. const changeSeach = () => {
  124. paging.value.reload();
  125. };
  126. const query = async (pageNum: number, pageSize: number) => {
  127. const params = {
  128. pageNum,
  129. pageSize,
  130. ...form.value,
  131. };
  132. const res = await useClientRequest.get('/plt-api/app/storageSeed/page', params);
  133. if (res) {
  134. const { rows } = res;
  135. paging.value.complete(rows);
  136. }
  137. };
  138. const onRefresh = () => {
  139. paging.value.reload();
  140. };
  141. onMounted(() => {
  142. uni.$on('refreshStorageRoomList', () => {
  143. onRefresh();
  144. });
  145. });
  146. </script>
  147. <style lang="scss" scoped>
  148. .search-select-item {
  149. height: 86rpx;
  150. background-color: #fff;
  151. border-radius: 10rpx;
  152. box-sizing: border-box;
  153. padding: 12rpx;
  154. }
  155. .tag-span {
  156. padding: 4rpx 12rpx;
  157. font-size: 20rpx;
  158. border-radius: 18rpx;
  159. }
  160. .li-item-head {
  161. margin-left: -24rpx;
  162. margin-top: -24rpx;
  163. }
  164. .li-left-tag {
  165. padding: 6rpx 16rpx;
  166. color: #fff;
  167. border-radius: 16rpx 0 16rpx 0;
  168. font-size: 20rpx;
  169. font-weight: 500;
  170. }
  171. .select-item-list {
  172. border: 1rpx solid #fff;
  173. &.active {
  174. background-color: #ebf6ee;
  175. border: 1rpx solid $u-primary;
  176. }
  177. .checked-icon {
  178. position: absolute;
  179. right: 0rpx;
  180. bottom: 0rpx;
  181. }
  182. }
  183. </style>