|
|
@@ -454,11 +454,13 @@
|
|
|
</view>
|
|
|
</up-form-item>
|
|
|
<up-form-item :borderBottom="false" label="具体位置" prop="landLayers" id="landLayerspppp">
|
|
|
- <Go_button @click="openLaboratory" title="请选择具体位置" style="flex: 1" />
|
|
|
- <view class="w-100%" v-for="(it, indexs) in form?.landLayers" :key="indexs">
|
|
|
- <view class="">{{ it?.layers }}</view>
|
|
|
- <view class="">{{ stringifyCheckedList(it?.checkedList, Number(it?.capacityAmount || 0)) }}</view>
|
|
|
- <view class="" @click="deleteLayer(indexs)">删除</view>
|
|
|
+ <view class="d-flex flex-cln flex1">
|
|
|
+ <view class="p-rtv pd-24 b-radius mb-10" v-for="(it, indexs) in form?.landLayers" :key="indexs" style="border: 1px solid #afddbb">
|
|
|
+ <view class="c-#333 f-s-34 f-w-5">{{ it?.landName }}</view>
|
|
|
+ <view class="c-#666 f-s-24">{{ stringifyCheckedList(it?.checkedList, Number(it?.capacityAmount || 0)) }}</view>
|
|
|
+ <view class="c-#F81242 h-20 w-20" style="position: absolute; right: 4rpx; top: 4rpx" @click="deleteLayer(indexs)">x</view>
|
|
|
+ </view>
|
|
|
+ <Go_button @click="openLaboratory" title="请选择具体位置" class="w-100%" />
|
|
|
</view>
|
|
|
</up-form-item>
|
|
|
</view>
|
|
|
@@ -886,59 +888,60 @@ const handleAnimalIdCancel = () => {
|
|
|
editIndex.value = -1;
|
|
|
showAnimalIdDialog.value = false;
|
|
|
};
|
|
|
-const stringifyCheckedList = (list: any[], capacityAmount: number) => {
|
|
|
- if (!list || list.length === 0) {
|
|
|
+type CheckedPosition = {
|
|
|
+ x: number;
|
|
|
+ y: number;
|
|
|
+};
|
|
|
+
|
|
|
+const stringifyCheckedList = (list: CheckedPosition[], perLayerCount: number) => {
|
|
|
+ if (!Array.isArray(list) || !list.length) {
|
|
|
+ return '';
|
|
|
+ }
|
|
|
+ const capacity = Number(perLayerCount || 0);
|
|
|
+ if (!capacity) {
|
|
|
return '';
|
|
|
}
|
|
|
- type ParsedItem = {
|
|
|
- layer: number;
|
|
|
- capacity: number;
|
|
|
- value: string;
|
|
|
- };
|
|
|
- const parsed = list
|
|
|
- .map((value) => {
|
|
|
- const [layerText, capacityText] = String(value).split('-');
|
|
|
- const layer = Number(layerText);
|
|
|
- const capacity = Number(capacityText);
|
|
|
- if (!layer || !capacity) {
|
|
|
- return null;
|
|
|
- }
|
|
|
- return {
|
|
|
- layer,
|
|
|
- capacity,
|
|
|
- value: `${layer}-${capacity}`,
|
|
|
- };
|
|
|
- })
|
|
|
- .filter((item): item is ParsedItem => item !== null)
|
|
|
- .sort((left, right) => {
|
|
|
- if (left.layer !== right.layer) {
|
|
|
- return left.layer - right.layer;
|
|
|
- }
|
|
|
- return left.capacity - right.capacity;
|
|
|
- });
|
|
|
|
|
|
- if (!parsed.length) {
|
|
|
+ const serialMap = new Map<number, CheckedPosition>();
|
|
|
+ list.forEach((item) => {
|
|
|
+ const serial = (item.x - 1) * capacity + item.y;
|
|
|
+ if (serial > 0 && !serialMap.has(serial)) {
|
|
|
+ serialMap.set(serial, item);
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ const serials = Array.from(serialMap.keys()).sort((a, b) => a - b);
|
|
|
+ if (!serials.length) {
|
|
|
return '';
|
|
|
}
|
|
|
|
|
|
const segments: string[] = [];
|
|
|
- let startIndex = 0;
|
|
|
+ let startSerial = serials[0];
|
|
|
+ let endSerial = serials[0];
|
|
|
+
|
|
|
+ const pushSegment = (start: number, end: number) => {
|
|
|
+ const startItem = serialMap.get(start)!;
|
|
|
+ const endItem = serialMap.get(end)!;
|
|
|
+ if (start === end) {
|
|
|
+ segments.push(`${startItem.x}-${startItem.y}`);
|
|
|
+ } else {
|
|
|
+ segments.push(`${startItem.x}-${startItem.y}至${endItem.x}-${endItem.y}`);
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
- for (let index = 1; index <= parsed.length; index++) {
|
|
|
- const previous = parsed[index - 1]!;
|
|
|
- const current = parsed[index];
|
|
|
- const isSameLayerContinuous = !!current && current.layer === previous.layer && current.capacity === previous.capacity + 1;
|
|
|
- const isCrossLayerContinuous = !!current && current.layer === previous.layer + 1 && previous.capacity === capacityAmount && current.capacity === 1;
|
|
|
- const isContinuous = isSameLayerContinuous || isCrossLayerContinuous;
|
|
|
- if (isContinuous) {
|
|
|
- continue;
|
|
|
+ for (let index = 1; index < serials.length; index++) {
|
|
|
+ const current = serials[index];
|
|
|
+ if (current === endSerial + 1) {
|
|
|
+ endSerial = current;
|
|
|
+ } else {
|
|
|
+ pushSegment(startSerial, endSerial);
|
|
|
+ startSerial = current;
|
|
|
+ endSerial = current;
|
|
|
}
|
|
|
- const start = parsed[startIndex]!;
|
|
|
- segments.push(start.value === previous.value ? start.value : `${start.value}至${previous.value}`);
|
|
|
- startIndex = index;
|
|
|
}
|
|
|
+ pushSegment(startSerial, endSerial);
|
|
|
|
|
|
- return `${segments.join(',')}共${parsed.length}个位置`;
|
|
|
+ return `${segments.join(',')}共${serials.length}个位置`;
|
|
|
};
|
|
|
// 扫一扫添加个体标识
|
|
|
const handleScanAdd = () => {
|
|
|
@@ -1005,7 +1008,7 @@ const validateBreedingTime = (rule: any, value: any, callback: any) => {
|
|
|
|
|
|
// 自定义校验函数:养殖量校验
|
|
|
const validateBreedingAmount = (rule: any, value: any, callback: any) => {
|
|
|
- if (+deawerData.value?.data[0]?.landType == 3) {
|
|
|
+ if (+deawerData.value?.data?.[0]?.landType == 3) {
|
|
|
callback();
|
|
|
return;
|
|
|
}
|
|
|
@@ -1408,6 +1411,14 @@ function handleLaboratoryClose() {
|
|
|
}
|
|
|
// 处理实验室的打开
|
|
|
function openLaboratory() {
|
|
|
+ uni.$once('cultivationLocationSelected', function (data) {
|
|
|
+ console.log(data);
|
|
|
+ if (data) {
|
|
|
+ form.value.landLayers = data;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ console.log(form.value.baseId, 'form.value.baseId');
|
|
|
+
|
|
|
uni.navigateTo({
|
|
|
url: `/tools/select-cultivation-location/index`,
|
|
|
success: (res) => {
|