From c425a8afba0a76eb62d5650cc9c98c42d8339f06 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期四, 12 三月 2026 13:01:23 +0800
Subject: [PATCH] perf: 1.优化储丝柜单柜卷包产量计算方式,支持未出料结束计算统计   2.新增储丝柜单柜卷包产量桑基图

---
 ruoyi-plus-soybean/src/views/analy/store-silk/modules/store-silk-search.vue |  111 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 74 insertions(+), 37 deletions(-)

diff --git a/ruoyi-plus-soybean/src/views/analy/store-silk/modules/store-silk-search.vue b/ruoyi-plus-soybean/src/views/analy/store-silk/modules/store-silk-search.vue
index ce8a1d2..ffb40b6 100644
--- a/ruoyi-plus-soybean/src/views/analy/store-silk/modules/store-silk-search.vue
+++ b/ruoyi-plus-soybean/src/views/analy/store-silk/modules/store-silk-search.vue
@@ -34,51 +34,78 @@
 
 const dateRange = ref<[string, string] | null>(null);
 
-onMounted(() => {
-  if (model.value.params?.beginTime && model.value.params?.endTime) {
-    dateRange.value = [model.value.params.beginTime as string, model.value.params.endTime as string];
+function onDateRangeUpdate(value: [string, string] | null) {
+  if (!model.value.params) {
+    model.value.params = {};
+  }
+
+  const beginTime = value?.[0] ? String(value[0]).trim() : '';
+  const endTime = value?.[1] ? String(value[1]).trim() : '';
+
+  if (beginTime && endTime) {
+    model.value.params.beginTime = beginTime;
+    model.value.params.endTime = endTime;
   } else {
-    dateRange.value = getDefaultRange();
-    if (!model.value.params) {
-      model.value.params = {};
-    }
-    model.value.params.beginTime = dateRange.value[0];
-    model.value.params.endTime = dateRange.value[1];
+    delete model.value.params.beginTime;
+    delete model.value.params.endTime;
+  }
+}
+
+function setDefaultRange() {
+  const range = getDefaultRange();
+  dateRange.value = range;
+  onDateRangeUpdate(range);
+}
+
+onMounted(() => {
+  if (!model.value.params) {
+    model.value.params = {};
+  }
+
+  const beginTime = model.value.params.beginTime ? String(model.value.params.beginTime).trim() : '';
+  const endTime = model.value.params.endTime ? String(model.value.params.endTime).trim() : '';
+
+  if (beginTime && endTime) {
+    dateRange.value = [beginTime, endTime];
+  } else {
+    setDefaultRange();
   }
 });
-
-watch(
-  dateRange,
-  val => {
-    if (!model.value.params) {
-      model.value.params = {};
-    }
-    if (val && val[0] && val[1]) {
-      model.value.params.beginTime = val[0];
-      model.value.params.endTime = val[1];
-    } else {
-      model.value.params.beginTime = null;
-      model.value.params.endTime = null;
-    }
-  },
-  { deep: true }
-);
 
 async function reset() {
   await restoreValidation();
   resetModel();
-  dateRange.value = getDefaultRange();
-  if (!model.value.params) {
-    model.value.params = {};
-  }
-  model.value.params.beginTime = dateRange.value[0];
-  model.value.params.endTime = dateRange.value[1];
+  setDefaultRange();
   emit('search');
 }
 
 async function search() {
   await validate();
   emit('search');
+}
+
+const siloOptions = Array.from({ length: 12 }, (_, i) => ({
+  label: `${i + 1}鍙峰偍涓濇煖`,
+  value: String(i + 1)
+}));
+
+const selectedSilos = ref<string[]>([]);
+
+watch(
+  () => model.value.siloid,
+  val => {
+    if (val) {
+      selectedSilos.value = (val as string).split(',');
+    } else {
+      selectedSilos.value = [];
+    }
+  },
+  { immediate: true }
+);
+
+function handleSiloChange(val: string[]) {
+  selectedSilos.value = val;
+  model.value.siloid = val.join(',');
 }
 </script>
 
@@ -95,10 +122,10 @@
               path="materialname"
               class="pr-24px"
             >
-              <NInput v-model:value="model.materialname" placeholder="璇疯緭鍏ョ墝鍙�" />
+              <NInput v-model:value="model.materialname" clearable placeholder="璇疯緭鍏ョ墝鍙�" />
             </NFormItemGi>
             <NFormItemGi span="24 s:12 m:8 l:8 xl:8" label="鎵规鍙�" label-width="auto" path="batchcode" class="pr-24px">
-              <NInput v-model:value="model.batchcode" placeholder="璇疯緭鍏ユ壒娆″彿" />
+              <NInput v-model:value="model.batchcode" clearable placeholder="璇疯緭鍏ユ壒娆″彿" />
             </NFormItemGi>
             <NFormItemGi
               span="24 s:12 m:8 l:8 xl:8"
@@ -109,9 +136,10 @@
             >
               <NDatePicker
                 v-model:formatted-value="model.actualstarttime"
-                type="datetime"
-                value-format="yyyy-MM-dd HH:mm:ss"
+                type="date"
+                value-format="yyyy-MM-dd"
                 clearable
+                class="w-full"
               />
             </NFormItemGi>
             <NFormItemGi
@@ -127,6 +155,8 @@
                 :default-time="['00:00:00', '23:59:59']"
                 value-format="yyyy-MM-dd HH:mm:ss"
                 clearable
+                class="w-full"
+                @update:formatted-value="onDateRangeUpdate"
               />
             </NFormItemGi>
             <NFormItemGi
@@ -136,7 +166,14 @@
               path="siloid"
               class="pr-24px"
             >
-              <NInput v-model:value="model.siloid" placeholder="璇疯緭鍏ユ煖瀛愬彿(鏈綅)" />
+              <NSelect
+                v-model:value="selectedSilos"
+                multiple
+                clearable
+                :options="siloOptions"
+                placeholder="璇烽�夋嫨鏌滃瓙鍙�"
+                @update:value="handleSiloChange"
+              />
             </NFormItemGi>
             <NFormItemGi :show-feedback="false" span="24" class="pr-24px">
               <NSpace class="w-full" justify="end">

--
Gitblit v1.9.3