647556386
2026-01-27 1378fc4cd7abc24ed3a982e09437c2c8a74e9f2f
ÏîÄ¿´úÂë/WIDESEA_WMSClient/src/extension/inbound/extend/OrderStockTake.vue
@@ -5,7 +5,7 @@
      :lazy="true"
      :width="isMobile ? '95%' : '70%'"
      :padding="24"
      title="库存盘点操作"
      title="库存盘点操作(条码盘盈不需要进行盘点完成操作)"
      class="custom-vol-box"
    >
      <div class="stock-take-container">
@@ -15,7 +15,7 @@
          </el-tag>
        </div>
        <!-- æ ¸å¿ƒè¾“入表单 -->
        <!-- æ ¸å¿ƒè¾“入表单:移除所有校验规则 -->
        <el-form
          :model="formData"
          ref="formRef"
@@ -23,20 +23,8 @@
          class="stock-take-form"
          @submit.prevent
        >
          <!-- æ–™ç®±å·è¾“入框 -->
          <el-form-item
            label="料箱号:"
            name="boxNo"
            :rules="[
              {
                required: true,
                message: '请扫描或输入料箱号',
                trigger: 'blur',
              },
              { validator: validateBoxNo, trigger: 'blur' },
            ]"
            class="form-item"
          >
          <!-- æ–™ç®±å·è¾“入框:移除校验规则 -->
          <el-form-item label="料箱号:" name="boxNo" class="form-item">
            <el-input
              ref="boxNoInputRef"
              v-model="formData.boxNo"
@@ -54,30 +42,19 @@
                  type="primary"
                  size="small"
                  @click="handleBoxNoScan"
                  :disabled="!formData.boxNo.trim() || loading"
                  :disabled="loading"
                  class="input-btn"
                ></el-button>
              </template>
            </el-input>
          </el-form-item>
          <!-- æ–°å¢žï¼šç«™å°é€‰æ‹©ä¸‹æ‹‰æ¡† -->
          <el-form-item
            label="回库站台:"
            name="station"
            :rules="[
              {
                required: true,
                message: '请选择回库站台',
                trigger: 'blur',
              },
            ]"
            class="form-item"
          >
          <!-- ç«™å°é€‰æ‹©ä¸‹æ‹‰æ¡†ï¼šç§»é™¤æ ¡éªŒè§„则 -->
          <el-form-item label="回库站台:" name="station" class="form-item">
            <el-select
              v-model="selectedStation"
              placeholder="请选择回库站台"
              :disabled="!formData.boxNo.trim() || loading"
              :disabled="loading"
              class="custom-input"
              :class="{ 'has-value': selectedStation }"
            >
@@ -90,23 +67,15 @@
            </el-select>
          </el-form-item>
          <!-- æ¡ç è¾“入框 -->
          <el-form-item
            label="盘点条码:"
            name="barcode"
            :rules="[
              { required: true, message: '请扫描或输入条码', trigger: 'blur' },
              { validator: validateBarcode, trigger: 'blur' },
            ]"
            class="form-item"
          >
          <!-- æ¡ç è¾“入框:移除校验规则 -->
          <el-form-item label="盘点条码:" name="barcode" class="form-item">
            <el-input
              ref="barcodeInputRef"
              v-model="formData.barcode"
              placeholder="请使用扫码枪扫描条码,或手动输入"
              clearable
              @keydown.enter="debouncedHandleBarcodeScan"
              :disabled="!formData.boxNo.trim() || loading"
              :disabled="loading"
              class="custom-input"
              :class="{ 'has-value': formData.barcode.trim() }"
            >
@@ -116,11 +85,7 @@
                  type="primary"
                  size="small"
                  @click="handleBarcodeScan"
                  :disabled="
                    !formData.boxNo.trim() ||
                    !formData.barcode.trim() ||
                    loading
                  "
                  :disabled="loading"
                  class="input-btn"
                ></el-button>
              </template>
@@ -128,11 +93,7 @@
          </el-form-item>
          <!-- åº“存数量框(只读) -->
          <el-form-item
            label="库存数量:"
            name="stockQuantity"
            class="form-item"
          >
          <el-form-item label="库存数量:" name="stockQuantity" class="form-item">
            <el-input
              v-model="formData.stockQuantity"
              placeholder="扫描条码后自动填充"
@@ -142,41 +103,25 @@
            ></el-input>
          </el-form-item>
          <!-- å®žé™…盘点数量 -->
          <el-form-item
            label="实际盘点数量:"
            name="actualQuantity"
            :rules="[
              {
                required: true,
                message: '请输入实际盘点数量',
                trigger: 'blur',
              },
              { type: 'number', message: '请输入有效的数字', trigger: 'blur' },
              { validator: validateActualQuantity, trigger: 'blur' },
            ]"
            class="form-item"
          >
          <!-- å®žé™…盘点数量:只读,默认0 -->
          <el-form-item label="实际盘点数量:" name="actualQuantity" class="form-item">
            <el-input
              v-model.number="formData.actualQuantity"
              placeholder="请输入实际盘点数量(大于0)"
              type="number"
              clearable
              @keydown.enter="handleStockTakeComplete"
              :disabled="!formData.stockQuantity || loading"
              class="custom-input"
              :class="{ 'has-value': formData.actualQuantity }"
              v-model="formData.actualQuantity"
              placeholder="默认值为0"
              readonly
              class="custom-input custom-readonly-input"
              :class="{ 'has-value': formData.actualQuantity !== '' }"
            ></el-input>
          </el-form-item>
        </el-form>
        <!-- æ“ä½œæŒ‰é’®åŒºåŸŸ -->
        <!-- æ“ä½œæŒ‰é’®åŒºåŸŸï¼šç®€åŒ–禁用逻辑 -->
        <div class="action-buttons">
          <el-button
            type="info"
            size="small"
            @click="handleBoxReturn"
            :disabled="!formData.boxNo.trim() || !selectedStation || loading"
            :disabled="loading"
            class="return-btn"
          >
            <Return /> æ–™ç®±å›žåº“
@@ -185,13 +130,7 @@
            type="primary"
            size="small"
            @click="handleStockTakeComplete"
            :disabled="
              loading ||
              !formData.boxNo.trim() ||
              !formData.barcode.trim() ||
              !formData.stockQuantity ||
              !formData.actualQuantity
            "
            :disabled="loading"
            class="complete-btn"
          >
            <Check /> ç›˜ç‚¹å®Œæˆ
@@ -217,7 +156,6 @@
import VolBox from "@/components/basic/VolBox.vue";
import http from "@/api/http";
// æ–°å¢žï¼šå¼•入站台管理工具(和示例代码保持一致)
import { stationManager, STATION_STORAGE_KEY } from "@/../src/uitils/stationManager";
// å“åº”式变量 - å•据号
@@ -231,18 +169,18 @@
const formData = reactive({
  boxNo: "", // æ–™ç®±å·
  barcode: "", // ç›˜ç‚¹æ¡ç 
  stockQuantity: "", // åº“存数量(只读)
  actualQuantity: "", // å®žé™…盘点数量
  stockQuantity: "", // åº“存数量
  actualQuantity: 0, // å®žé™…盘点数量默认0
});
const loading = ref(false);
const formRef = ref(null);
// æ–°å¢žï¼šç«™å°ç›¸å…³å“åº”式数据(仿照示例代码)
// ç«™å°ç›¸å…³å“åº”式数据
const stations = ref([
  { label: "站台2", value: "2-1" },
  { label: "站台3", value: "3-1" },
]);
const selectedStation = ref(stationManager.getStation() || ""); // é»˜è®¤é€‰ä¸­ç¼“存的站台
const selectedStation = ref(stationManager.getStation() || "");
// æ¨¡æ¿å¼•用
const boxNoInputRef = ref(null);
@@ -258,20 +196,19 @@
  nextTick(() => {
    boxNoInputRef.value?.focus();
  });
  // ç›‘听窗口大小变化
  window.addEventListener("resize", () => {});
});
// ç›‘听料箱号变化,清空后续相关字段
// ç›‘听料箱号变化,清空后续相关字段(仅保留基础清空逻辑)
watch(
  () => formData.boxNo,
  (newVal) => {
    if (!newVal.trim()) {
      formData.barcode = "";
      formData.stockQuantity = "";
      formData.actualQuantity = "";
      // æ–°å¢žï¼šæ–™ç®±å·æ¸…空时,重置站台选择
      formData.actualQuantity = 0;
      selectedStation.value = stationManager.getStation() || "";
      orderNo.value = "";
    }
  },
  { immediate: true }
@@ -288,17 +225,16 @@
  };
};
// æ‰“开弹窗并接收单据号
const open = (receiptNo) => {
// æ‰“开弹窗
const open = () => {
  showStockTakeBox.value = true;
  orderNo.value = receiptNo;
  // é‡ç½®è¡¨å•
  formData.boxNo = "";
  formData.barcode = "";
  formData.stockQuantity = "";
  formData.actualQuantity = "";
  // æ–°å¢žï¼šæ‰“开弹窗时重置站台选择(默认取缓存的站台)
  formData.actualQuantity = 0;
  selectedStation.value = stationManager.getStation() || "";
  orderNo.value = "";
  nextTick(() => {
    boxNoInputRef.value?.focus();
  });
@@ -313,40 +249,6 @@
  orderNo.value = "";
};
// æ–™ç®±å·éªŒè¯ï¼ˆä¼˜åŒ–:有值时仅验证长度,无值时触发必填)
const validateBoxNo = (rule, value, callback) => {
  // æœ‰å€¼æ—¶éªŒè¯é•¿åº¦
  if (value && value.trim().length < 3) {
    callback(new Error("料箱号长度不能少于3位"));
  }
  // æ— å€¼æ—¶ç”±required规则处理,这里不重复提示
  else {
    callback();
  }
};
// æ¡ç éªŒè¯ï¼ˆä¼˜åŒ–:有值时仅验证长度)
const validateBarcode = (rule, value, callback) => {
  if (value && value.trim().length < 6) {
    callback(new Error("条码长度不能少于6位"));
  } else {
    callback();
  }
};
// å®žé™…盘点数量验证(优化:有值时验证合法性)
const validateActualQuantity = (rule, value, callback) => {
  if (value === null || value === undefined) {
    callback(new Error("请输入实际盘点数量"));
  } else if (value <= 0) {
    callback(new Error("实际盘点数量必须大于0"));
  } else if (!Number.isInteger(value)) {
    callback(new Error("实际盘点数量必须是整数"));
  } else {
    callback();
  }
};
// æ–™ç®±å·å¤±ç„¦å¤„理
const handleBoxNoBlur = () => {
  if (formData.boxNo.trim() && boxNoInputRef.value?.input) {
@@ -354,39 +256,29 @@
  }
};
// æ–™ç®±å·æ‰«æéªŒè¯ï¼ˆåŽç«¯æŽ¥å£ï¼‰
const validateBoxNoApi = async (boxNo) => {
// æ–™ç®±å·æ‰«æå¤„理:移除前端校验,直接调用接口
const handleBoxNoScan = async () => {
  const boxNo = formData.boxNo.trim();
  if (!boxNo) {
    ElMessage.warning("请输入料箱号");
    return;
  }
  try {
    loading.value = true;
    // ç›´æŽ¥è°ƒç”¨æŽ¥å£ï¼Œä¸åšå‰ç«¯æ ¡éªŒ
    const res = await http.post(
      `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent(
        orderNo.value
      )}&boxNo=${encodeURIComponent(boxNo)}`,
      `/api/TakeStockOrder/ValidateBoxNo?orderNo=${encodeURIComponent(orderNo.value)}&boxNo=${encodeURIComponent(boxNo)}`,
      "验证料箱号中..."
    );
    if (!res.status) {
      throw new Error(res.message || "料箱号验证失败");
    }
    return res.data;
  } catch (error) {
    throw error;
  }
};
// æ–™ç®±å·æ‰«æå¤„理
const handleBoxNoScan = async () => {
  if (!formRef.value) return;
  // æ‰‹åŠ¨è§¦å‘éªŒè¯ï¼ˆä»…éªŒè¯å½“å‰å­—æ®µï¼‰
  const valid = await formRef.value.validateField("boxNo");
  if (valid !== true) return;
  const boxNo = formData.boxNo.trim();
  if (!boxNo) return;
  try {
    loading.value = true;
    await validateBoxNoApi(boxNo);
    ElMessage.success(`料箱号 ${boxNo} éªŒè¯é€šè¿‡`);
    if (res.data?.takeStockOrder) {
      orderNo.value = res.data.takeStockOrder;
    }
    ElMessage.success(`料箱号 ${boxNo} éªŒè¯é€šè¿‡ï¼Œå•据号:${orderNo.value}`);
    nextTick(() => {
      barcodeInputRef.value?.focus();
    });
@@ -402,13 +294,20 @@
  }
};
// æ¡ç æ‰«æéªŒè¯ï¼ˆåŽç«¯æŽ¥å£ï¼‰
const validateBarcodeApi = async (boxNo, barcode) => {
// æ¡ç æ‰«æå¤„理:移除前端校验,直接调用接口
const handleBarcodeScan = async () => {
  const boxNo = formData.boxNo.trim();
  const barcode = formData.barcode.trim();
  if (!boxNo || !barcode) {
    ElMessage.warning("请输入料箱号和条码");
    return;
  }
  try {
    loading.value = true;
    // ç›´æŽ¥è°ƒç”¨æŽ¥å£ï¼Œä¸åšå‰ç«¯æ ¡éªŒ
    const res = await http.post(
      `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent(
        boxNo
      )}&barcode=${encodeURIComponent(barcode)}`,
      `/api/TakeStockOrder/ValidateBarcode?boxNo=${encodeURIComponent(boxNo)}&barcode=${encodeURIComponent(barcode)}`,
      "验证条码中..."
    );
@@ -416,41 +315,13 @@
      throw new Error(res.message || "条码验证失败");
    }
    if (
      res.data?.stockQuantity === undefined ||
      res.data?.stockQuantity === null
    ) {
      throw new Error("未查询到该条码的库存数量");
    if (res.data?.stockQuantity !== undefined && res.data?.stockQuantity !== null) {
      formData.stockQuantity = res.data.stockQuantity;
    }
    return res.data;
  } catch (error) {
    throw error;
  }
};
// æ¡ç æ‰«æå¤„理
const handleBarcodeScan = async () => {
  if (!formRef.value) return;
  const valid = await formRef.value.validateField("barcode");
  if (valid !== true) return;
  const boxNo = formData.boxNo.trim();
  const barcode = formData.barcode.trim();
  if (!boxNo || !barcode) return;
  try {
    loading.value = true;
    const result = await validateBarcodeApi(boxNo, barcode);
    formData.stockQuantity = result.stockQuantity;
    ElMessage.success(
      `条码 ${barcode} éªŒè¯é€šè¿‡ï¼Œåº“存数量:${result.stockQuantity}`
    );
    ElMessage.success(`条码 ${barcode} éªŒè¯é€šè¿‡ï¼Œåº“存数量:${formData.stockQuantity}`);
    nextTick(() => {
      const actualQuantityInput = document.querySelector(
        ".form-item:last-child .el-input__inner"
      );
      actualQuantityInput?.focus();
      const actualQuantityInput = document.querySelector(".form-item:last-child .el-input__inner");
      actualQuantityInput?.blur();
    });
  } catch (error) {
    ElMessage.error(error.message);
@@ -464,26 +335,33 @@
  }
};
// ç›˜ç‚¹å®Œæˆæäº¤
// ç›˜ç‚¹å®Œæˆæäº¤ï¼šå®Œå…¨ç§»é™¤å‰ç«¯æ ¡éªŒï¼Œç›´æŽ¥ä¼ å€¼ç»™åŽç«¯
const handleStockTakeComplete = async () => {
  if (!formRef.value) return;
  // å…¨è¡¨å•验证
  const valid = await formRef.value.validate();
  if (!valid) return;
  // ä»…做最基础的空提示(可选,也可以去掉)
  if (!formData.boxNo.trim()) {
    ElMessage.warning("请输入料箱号");
    return;
  }
  if (!formData.barcode.trim()) {
    ElMessage.warning("请输入条码");
    return;
  }
  // ç›´æŽ¥èŽ·å–æ‰€æœ‰å€¼ï¼Œä¸åšä»»ä½•æ ¡éªŒ
  const { boxNo, barcode, actualQuantity, stockQuantity } = formData;
  const receiptNo = orderNo.value;
  try {
    loading.value = true;
    // ç›´æŽ¥ä¼ å€¼ç»™åŽç«¯ï¼Œä¸åšä»»ä½•前端校验
    const res = await http.post(
      "/api/TakeStockOrder/CompleteStockTake",
      {
        orderNo: receiptNo,
        boxNo,
        barcode,
        actualQuantity,
        actualQuantity, // å›ºå®šä¼ 0
        stockQuantity,
      },
      {
@@ -495,7 +373,7 @@
      ElMessage.success("盘点完成,提交成功!");
      formData.barcode = "";
      formData.stockQuantity = "";
      formData.actualQuantity = "";
      formData.actualQuantity = 0;
      nextTick(() => {
        barcodeInputRef.value?.focus();
      });
@@ -510,16 +388,11 @@
  }
};
// æ–™ç®±å›žåº“功能(核心修改:增加站台验证 + ä¼ å…¥sourceAddress参数)
// æ–™ç®±å›žåº“功能:简化校验,直接传值
const handleBoxReturn = async () => {
  const boxNo = formData.boxNo.trim();
  // æ–°å¢žï¼šéªŒè¯ç«™å°æ˜¯å¦é€‰æ‹©
  if (!boxNo) {
    ElMessage.warning("请先输入或扫描料箱号");
    return;
  }
  if (!selectedStation.value) {
    ElMessage.warning("请选择回库站台");
    ElMessage.warning("请输入料箱号");
    return;
  }
@@ -535,11 +408,9 @@
    loading.value = true;
    // æ–°å¢žï¼šæ‹¼æŽ¥sourceAddress参数(站台数据)到接口请求中
    // ç›´æŽ¥ä¼ å€¼ç»™åŽç«¯ï¼Œä¸åšä¸¥æ ¼æ ¡éªŒ
    const res = await http.post(
      `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent(
        orderNo.value
      )}&sourceAddress=${encodeURIComponent(selectedStation.value)}`, // æ–°å¢žsourceAddress参数
      `/api/TakeStockOrder/ReturnBox?boxNo=${encodeURIComponent(boxNo)}&orderNo=${encodeURIComponent(orderNo.value)}&sourceAddress=${encodeURIComponent(selectedStation.value)}`,
      "料箱回库中..."
    );
@@ -548,8 +419,9 @@
      formData.boxNo = "";
      formData.barcode = "";
      formData.stockQuantity = "";
      formData.actualQuantity = "";
      selectedStation.value = stationManager.getStation() || ""; // é‡ç½®ç«™å°é€‰æ‹©
      formData.actualQuantity = 0;
      selectedStation.value = stationManager.getStation() || "";
      orderNo.value = "";
      nextTick(() => {
        boxNoInputRef.value?.focus();
      });
@@ -586,7 +458,7 @@
</script>
<style scoped>
/* ä¸»å®¹å™¨æ ·å¼ - ä¼˜åŒ–间距和响应式 */
/* æ ·å¼å®Œå…¨ä¿ç•™ï¼Œæ— ä¿®æ”¹ */
.stock-take-container {
  width: 100%;
  display: flex;
@@ -595,7 +467,6 @@
  padding: 8px 0;
}
/* å•据信息样式 - ä¼˜åŒ–视觉层级 */
.receipt-info {
  margin-bottom: 4px;
}
@@ -616,7 +487,6 @@
  margin-left: 6px;
}
/* è¡¨å•样式 - ä¼˜åŒ–阴影和内边距 */
.stock-take-form {
  width: 100%;
  background-color: #ffffff;
@@ -630,17 +500,15 @@
  margin-bottom: 16px;
}
/* è¾“入框核心样式 - ä¼˜åŒ–状态显示 */
.custom-input {
  width: 100%;
  position: relative;
}
/* æœ‰å€¼æ—¶éšè—å ä½ç¬¦ + ä¼˜åŒ–边框 */
.custom-input.has-value :deep(.el-input__inner),
.custom-input.has-value :deep(.el-select__wrapper) {
  --el-input-placeholder-color: transparent; /* éšè—å ä½ç¬¦ */
  border-color: #8cc5ff; /* æµ…蓝边框,区分无值状态 */
  --el-input-placeholder-color: transparent;
  border-color: #8cc5ff;
  background-color: #ffffff;
}
@@ -656,7 +524,6 @@
  padding: 0 12px;
}
/* èšç„¦æ ·å¼ä¼˜åŒ– */
.custom-input :deep(.el-input__inner:focus),
.custom-input :deep(.el-select__wrapper:focus) {
  border-color: #409eff;
@@ -665,7 +532,6 @@
  outline: none;
}
/* æ¸…除按钮样式优化 */
.custom-input :deep(.el-input__clear) {
  color: #91c9f7;
  width: 18px;
@@ -676,7 +542,6 @@
  color: #409eff;
}
/* åªè¯»è¾“入框样式 - å¢žå¼ºåŒºåˆ†åº¦ */
.custom-readonly-input :deep(.el-input__inner) {
  background-color: #f0f8fb;
  color: #1989fa;
@@ -686,7 +551,6 @@
  padding-right: 12px;
}
/* è¾“入框按钮样式 - ä¼˜åŒ–尺寸和hover效果 */
.input-btn {
  border-radius: 0 8px 8px 0 !important;
  height: 42px;
@@ -703,28 +567,23 @@
  transform: translateY(-1px);
}
/* è¡¨å•验证错误样式 - å…³é”®ï¼šæœ‰å€¼æ—¶ä¸æ˜¾ç¤ºé”™è¯¯è¾¹æ¡† */
.form-item :deep(.el-form-item__error) {
  font-size: 12px;
  color: #f56c6c;
  margin-top: 4px;
  /* ä»…在输入框为空且验证失败时显示 */
  display: none;
}
/* åªæœ‰è¾“入框为空 + éªŒè¯å¤±è´¥æ—¶æ˜¾ç¤ºé”™è¯¯æç¤º */
.form-item:deep(.el-form-item--error) .custom-input:not(.has-value) + .el-form-item__error {
  display: block;
}
/* æœ‰å€¼æ—¶å³ä½¿éªŒè¯å¤±è´¥ï¼Œä¹Ÿä¸æ˜¾ç¤ºé”™è¯¯è¾¹æ¡† */
.custom-input.has-value :deep(.el-input__inner.el-input__inner--error),
.custom-input.has-value :deep(.el-select__wrapper.el-select__wrapper--error) {
  border-color: #8cc5ff;
  box-shadow: none;
}
/* æ“ä½œæŒ‰é’®åŒºåŸŸ - ä¼˜åŒ–间距和响应式 */
.action-buttons {
  display: flex;
  justify-content: flex-end;
@@ -733,7 +592,6 @@
  flex-wrap: wrap;
}
/* å›žåº“按钮样式 - ä¼˜åŒ–交互 */
.return-btn {
  border-radius: 8px;
  padding: 9px 20px;
@@ -762,7 +620,6 @@
  box-shadow: none;
}
/* ç›˜ç‚¹å®ŒæˆæŒ‰é’®æ ·å¼ - ä¼˜åŒ–交互 */
.complete-btn {
  border-radius: 8px;
  padding: 9px 20px;
@@ -789,7 +646,6 @@
  box-shadow: none;
}
/* å–消按钮样式 - ä¼˜åŒ–点击区域 */
.cancel-btn {
  color: #666666;
  font-size: 14px;
@@ -804,7 +660,6 @@
  background-color: #f0f8fb !important;
}
/* å¼¹çª—整体样式 - ä¼˜åŒ–圆角和阴影 */
.custom-vol-box {
  border-radius: 16px !important;
  overflow: hidden;
@@ -827,7 +682,6 @@
  padding: 16px 24px;
}
/* å“åº”式适配 - å°å±å¹•优化 */
@media (max-width: 768px) {
  .stock-take-form {
    padding: 16px;
@@ -852,14 +706,12 @@
</style>
<style>
/* å…¨å±€è¡¥å……样式 - ç»Ÿä¸€ä¸»é¢˜ */
.el-tag--primary {
  --el-tag-bg-color: #e8f4f8;
  --el-tag-border-color: #409eff;
  --el-tag-text-color: #1989fa;
}
/* å ä½ç¬¦æ ·å¼ - ç»Ÿä¸€é¢œè‰² */
.el-input__inner::-webkit-input-placeholder,
.el-select__placeholder {
  color: #b3d8ff;
@@ -884,7 +736,6 @@
  font-size: 13px;
}
/* ä¿¡æ¯æŒ‰é’®å…¨å±€æ ·å¼ */
.el-button--info {
  --el-button-bg-color: #e8f4f8;
  --el-button-border-color: #409eff;
@@ -894,7 +745,6 @@
  --el-button-hover-text-color: #1989fa;
}
/* ç¡®è®¤å¼¹çª—样式优化 */
.el-message-box {
  border-radius: 12px !important;
  box-shadow: 0 4px 20px rgba(64, 158, 255, 0.15);