gaoluyang
2026-08-06 377c0a70c094d024aeb0bb94f4b791c6d5530c1e
src/views/salesManagement/deliveryLedger/index.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,962 @@
<template>
  <div class="app-container">
    <div class="search_form">
      <el-form :model="searchForm" :inline="true">
        <el-form-item label="订单号号:">
          <el-input
            v-model="searchForm.salesContractNo"
            placeholder="请输入"
            clearable
            prefix-icon="Search"
            style="width: 200px"
            @change="handleQuery"
          />
        </el-form-item>
        <el-form-item label="车牌号:">
          <el-input
            v-model="searchForm.shippingCarNumber"
            placeholder="请输入"
            clearable
            prefix-icon="Search"
            style="width: 200px"
            @change="handleQuery"
          />
        </el-form-item>
        <el-form-item label="快递单号:">
          <el-input
            v-model="searchForm.expressNumber"
            placeholder="请输入"
            clearable
            prefix-icon="Search"
            style="width: 200px"
            @change="handleQuery"
          />
        </el-form-item>
        <el-form-item>
          <el-button type="primary" @click="handleQuery"> æœç´¢</el-button>
        </el-form-item>
      </el-form>
    </div>
    <div class="table_list">
      <div class="actions">
        <div></div>
        <div>
          <el-button @click="handleOut">导出</el-button>
          <el-button type="danger" plain @click="handleDelete" v-hasPermi="['salesManagement:deliveryLedger:remove']">删除</el-button>
        </div>
      </div>
      <el-table
        :data="tableData"
        border
        v-loading="tableLoading"
        @selection-change="handleSelectionChange"
        :row-key="(row) => row.id"
        style="width: 100%"
        height="calc(100vh - 21.5em)"
      >
        <el-table-column align="center" type="selection" width="55" />
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column
          label="订单号"
          prop="salesContractNo"
          show-overflow-tooltip
        />
        <el-table-column
          label="销售总合同号"
          prop="masterContractNo"
          show-overflow-tooltip
        />
        <el-table-column
          label="发货订单号"
          prop="shippingNo"
          show-overflow-tooltip
        />
        <el-table-column
          label="客户名称"
          prop="customerName"
          show-overflow-tooltip
        />
        <el-table-column
          label="产品名称"
          prop="productName"
          show-overflow-tooltip
        />
        <el-table-column
          label="规格型号"
          prop="specificationModel"
          show-overflow-tooltip
        />
        <el-table-column
          label="出库批次"
          prop="outboundBatches"
          show-overflow-tooltip
        />
        <el-table-column
          label="发货时间"
          prop="shippingDate"
          show-overflow-tooltip
        />
        <el-table-column
          label="发货数量"
          prop="totalQuantity"
          show-overflow-tooltip
        />
        <el-table-column
          label="发货车牌号"
          prop="shippingCarNumber"
          show-overflow-tooltip
        />
<!--        <el-table-column-->
<!--          label="快递公司"-->
<!--          prop="expressCompany"-->
<!--          show-overflow-tooltip-->
<!--        />-->
<!--        <el-table-column-->
<!--          label="快递单号"-->
<!--          prop="expressNumber"-->
<!--          show-overflow-tooltip-->
<!--        />-->
        <el-table-column
          label="审核状态"
          prop="status"
          align="center"
          width="100"
        >
          <template #default="scope">
            <el-tag :type="getApprovalStatusType(scope.row.status)">
              {{ getApprovalStatusText(scope.row.status) }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="退货状态"
          prop="returnStatus"
          align="center"
          width="100"
        >
          <template #default="scope">
            <el-tag
              :type="getReturnStatusType(scope.row.returnStatus)"
              size="small"
            >
              {{ scope.row.returnStatus || '无退货' }}
            </el-tag>
          </template>
        </el-table-column>
        <el-table-column
          label="已退货数量"
          prop="returnedQuantity"
          align="center"
          width="100"
        >
          <template #default="scope">
            {{ scope.row.returnedQuantity || 0 }}
          </template>
        </el-table-column>
        <el-table-column
          label="出库单号"
          prop="outboundBatches"
          show-overflow-tooltip
          width="130"
        />
        <el-table-column fixed="right" label="操作" width="220" align="center">
          <template #default="scope">
            <!--            <el-button-->
            <!--                link-->
            <!--                type="primary"-->
            <!--                :disabled="!isApproved(scope.row.status)"-->
            <!--                @click="openForm('edit', scope.row)">发货-->
            <!--            </el-button>-->
            <el-button
              link
              type="primary"
              style="color: #67c23a"
              @click="openDetail(scope.row)"
              >详情
            </el-button>
            <el-button
              link
              type="danger"
              :disabled="isApproving(scope.row.status)"
              @click="handleDeleteSingle(scope.row)"
               v-hasPermi="['salesManagement:deliveryLedger:remove']">删除
            </el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        v-show="total > 0"
        :total="total"
        layout="total, sizes, prev, pager, next, jumper"
        :page="page.current"
        :limit="page.size"
        @pagination="paginationChange"
      />
    </div>
    <el-dialog
      v-model="dialogFormVisible"
      :title="operationType === 'add' ? '新增发货台账' : '编辑发货台账'"
      width="40%"
      @close="closeDia"
    >
      <el-form
        :model="form"
        label-width="120px"
        label-position="top"
        :rules="rules"
        ref="formRef"
      >
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="发货类型:" prop="type">
              <el-select
                v-model="form.type"
                placeholder="请选择发货类型"
                style="width: 100%"
                @change="handleShippingTypeChange"
              >
                <el-option label="货车" value="货车" />
                <el-option label="快递" value="快递" />
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="发货日期:" prop="shippingDate">
              <el-date-picker
                style="width: 100%"
                v-model="form.shippingDate"
                value-format="YYYY-MM-DD"
                format="YYYY-MM-DD"
                type="date"
                placeholder="请选择发货日期"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24" v-if="form.type === '货车'">
            <el-form-item label="发货车牌号:" prop="shippingCarNumber">
              <el-input
                v-model="form.shippingCarNumber"
                placeholder="请输入发货车牌号"
                clearable
              />
            </el-form-item>
          </el-col>
          <el-col :span="24" v-else>
            <el-form-item label="快递公司:" prop="expressCompany">
              <el-input
                v-model="form.expressCompany"
                placeholder="请输入快递公司"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30" v-if="form.type === '快递'">
          <el-col :span="24">
            <el-form-item label="快递单号:" prop="expressNumber">
              <el-input
                v-model="form.expressNumber"
                placeholder="请输入快递单号"
                clearable
              />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="发货图片:">
              <ImageUpload v-model:file-list="deliveryFileList" :limit="9" />
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
      <template #footer>
        <div class="dialog-footer">
          <el-button type="primary" @click="submitForm">确认</el-button>
          <el-button @click="closeDia">取消</el-button>
        </div>
      </template>
    </el-dialog>
    <!-- è¯¦æƒ…弹框 -->
    <el-dialog
      v-model="detailDialogVisible"
      title="发货台账详情"
      width="55%"
      @close="closeDetail"
    >
      <div v-if="detailRow" class="detail-wrapper">
        <el-descriptions :column="2" border>
          <el-descriptions-item label="订单号">{{
            detailRow.salesContractNo || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="发货订单号">{{
            detailRow.shippingNo || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="客户名称">{{
            detailRow.customerName || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="产品名称">{{
            detailRow.productName || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="规格型号">{{
            detailRow.specificationModel || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="发货类型">{{
            detailRow.type || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="发货日期">{{
            detailRow.shippingDate || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="审核状态">{{
            getApprovalStatusText(detailRow.status)
          }}</el-descriptions-item>
          <el-descriptions-item label="发货车牌号">{{
            detailRow.shippingCarNumber || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="快递公司">{{
            detailRow.expressCompany || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="快递单号" :span="2">{{
            detailRow.expressNumber || "--"
          }}</el-descriptions-item>
          <el-descriptions-item label="出库单号" :span="2">{{
            detailRow.outboundBatches || "--"
          }}</el-descriptions-item>
        </el-descriptions>
        <el-table
          :data="getDeliveryProductInfoList()"
          border
          size="small"
          class="delivery-product-table"
          style="width: 100%; margin-top: 16px"
        >
          <el-table-column
            label="批号"
            prop="batchNo"
            min-width="160"
            show-overflow-tooltip
          />
          <el-table-column
            label="产品名称"
            prop="productName"
            min-width="160"
            show-overflow-tooltip
          />
          <el-table-column
            label="规格型号"
            prop="specificationModel"
            min-width="160"
            show-overflow-tooltip
          />
          <el-table-column
            label="发货数量"
            prop="deliveryQuantity"
            min-width="120"
            align="center"
          />
        </el-table>
        <ImagePreview :file-list="detailRow.storageBlobVOs || []" />
      </div>
      <template #footer>
        <div class="dialog-footer">
          <el-button @click="closeDetail">关闭</el-button>
        </div>
      </template>
    </el-dialog>
  </div>
</template>
<script setup>
import pagination from "@/components/PIMTable/Pagination.vue";
import { onMounted, ref, reactive, toRefs, getCurrentInstance } from "vue";
import { ElMessageBox } from "element-plus";
import { getCurrentDate } from "@/utils/index.js";
import {
  deliveryLedgerListPage,
  delDeliveryLedger,
  deductStock,
  getDeliveryDetail,
} from "@/api/salesManagement/deliveryLedger.js";
import { delLedgerFile } from "@/api/salesManagement/salesLedger.js";
import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
import ImagePreview from "@/components/AttachmentPreview/image/index.vue";
const { proxy } = getCurrentInstance();
const tableData = ref([]);
const selectedRows = ref([]);
const tableLoading = ref(false);
const salesOrderOptions = ref([]);
const page = reactive({
  current: 1,
  size: 100,
});
const total = ref(0);
const deliveryFileList = ref([]);
// è¯¦æƒ…弹框
const detailDialogVisible = ref(false);
const detailRow = ref(null);
const detailProductList = ref([]);
// ç”¨æˆ·ä¿¡æ¯è¡¨å•弹框数据
const operationType = ref("");
const dialogFormVisible = ref(false);
const data = reactive({
  searchForm: {
    salesContractNo: "", // è®¢å•号号
    shippingCarNumber: "", // è½¦ç‰Œå·
    expressNumber: "", // å¿«é€’单号
  },
  form: {
    id: null,
    salesContractNo: "",
    customerName: "",
    specificationModel: "",
    productName: "",
    type: "货车", // è´§è½¦, å¿«é€’
    shippingDate: "",
    shippingCarNumber: "",
    expressCompany: "",
    expressNumber: "", // å¿«é€’单号
  },
  rules: {
    salesContractNo: [
      { required: true, message: "请选择订单号", trigger: "change" },
    ],
    customerName: [
      { required: true, message: "请输入客户名称", trigger: "blur" },
    ],
    type: [{ required: true, message: "请选择发货类型", trigger: "change" }],
    shippingDate: [
      { required: true, message: "请选择发货时间", trigger: "change" },
    ],
    shippingCarNumber: [
      {
        validator: (_, value, callback) =>
          validateShippingCarNumber(value, callback),
        trigger: "blur",
      },
    ],
    expressCompany: [
      {
        validator: (_, value, callback) =>
          validateExpressCompany(value, callback),
        trigger: "blur",
      },
    ],
  },
});
const { form, rules } = toRefs(data);
const { searchForm } = toRefs(data);
// æŸ¥è¯¢åˆ—表
const handleQuery = () => {
  page.current = 1;
  getList();
};
const paginationChange = (obj) => {
  page.current = obj.page;
  page.size = obj.limit;
  getList();
};
const getList = () => {
  tableLoading.value = true;
  deliveryLedgerListPage({ ...searchForm.value, ...page })
    .then((res) => {
      tableLoading.value = false;
      tableData.value = res.data.records || [];
      total.value = res.data.total || 0;
    })
    .catch(() => {
      tableLoading.value = false;
    });
};
// è®¢å•号变化时自动填充客户名称
const handleSalesOrderChange = (value) => {
  const selectedOrder = salesOrderOptions.value.find(
    (item) => item.salesContractNo === value
  );
  if (selectedOrder) {
    form.value.customerName = selectedOrder.customerName;
  }
};
// è¡¨æ ¼é€‰æ‹©æ•°æ®
const handleSelectionChange = (selection) => {
  selectedRows.value = selection;
};
// æ‰“开弹框
const openForm = async (type, row) => {
  // å‘货:仅“审核通过”允许编辑
  if (type === "edit" && row && !isApproved(row.status)) {
    proxy.$modal.msgWarning("只有审核通过的数据才可以发货");
    return;
  }
  operationType.value = type;
  if (type === "edit" && row) {
    form.value = {
      id: row.id ?? null,
      salesContractNo: row.salesContractNo ?? "",
      customerName: row.customerName ?? "",
      type: row.type || "货车",
      shippingDate: row.shippingDate || getCurrentDate(),
      shippingCarNumber: row.shippingCarNumber ?? "",
      expressCompany: row.expressCompany ?? "",
      expressNumber: row.expressNumber ?? "",
    };
    deliveryFileList.value = row.storageBlobVOs || [];
  }
  dialogFormVisible.value = true;
};
// æ‰“开详情弹框
const openDetail = async (row) => {
  detailRow.value = row || null;
  detailProductList.value = [];
  detailDialogVisible.value = true;
  if (!row?.id) return;
  try {
    const res = await getDeliveryDetail(row.id);
    const detailData = res?.data;
    detailRow.value = {
      ...row,
      ...(Array.isArray(detailData) ? {} : detailData || {}),
    };
    detailProductList.value = resolveDeliveryDetailList(detailData);
  } catch (error) {
    proxy.$modal.msgError("加载发货台账详情失败");
  }
};
const resolveDeliveryDetailList = (data) => {
  if (Array.isArray(data)) return data;
  if (!data || typeof data !== "object") return [];
  return (
    [
      data.batchNoDetailList,
      data.batchNoList,
      data.shippingBatchList,
      data.shippingInfoDetailList,
      data.detailList,
      data.batchDetailList,
      data.rows,
      data.records,
      data.list,
      data.data,
    ].find((value) => Array.isArray(value) && value.length) || []
  );
};
const getDeliveryProductInfoList = () => {
  const row = detailRow.value;
  if (!row) return [];
  const normalizeBatchNoList = (value) => {
    if (Array.isArray(value)) return value;
    if (typeof value === "string" && value.includes(",")) {
      return value
        .split(",")
        .map((item) => item.trim())
        .filter(Boolean);
    }
    return value ? [value] : [];
  };
  const detailList = detailProductList.value.length
    ? detailProductList.value
    : [
        row.batchNoDetailList,
        row.batchNoList,
        row.shippingBatchList,
        row.shippingInfoDetailList,
        row.detailList,
        row.batchDetailList,
      ].find((value) => Array.isArray(value) && value.length);
  const batchNoList = normalizeBatchNoList(row.batchNo);
  const toTableRow = (item = {}) => ({
    batchNo:
      typeof item === "string" || typeof item === "number"
        ? item
        : item.batchNo ?? item.batchNumber ?? row.batchNo ?? "--",
    productName: item.productName ?? row.productName ?? "--",
    specificationModel:
      item.specificationModel ?? item.model ?? row.specificationModel ?? "--",
    deliveryQuantity:
      item.deliveryQuantity ??
      item.quantity ??
      item.shippingQuantity ??
      row.deliveryQuantity ??
      row.quantity ??
      "--",
  });
  if (detailList?.length) {
    return detailList.map(toTableRow);
  }
  if (batchNoList.length) {
    return batchNoList.map((batchNo) => toTableRow({ batchNo }));
  }
  return [toTableRow()];
};
const closeDetail = () => {
  detailDialogVisible.value = false;
  detailRow.value = null;
  detailProductList.value = [];
};
// æäº¤è¡¨å•
const submitForm = () => {
  proxy.$refs["formRef"].validate((valid) => {
    if (valid) {
      const payload = {
        id: form.value.id,
        type: form.value.type,
        shippingDate: form.value.shippingDate,
        shippingCarNumber:
          form.value.type === "货车" ? form.value.shippingCarNumber : "",
        expressCompany:
          form.value.type === "快递" ? form.value.expressCompany : "",
        expressNumber:
          form.value.type === "快递" ? form.value.expressNumber : "",
        storageBlobDTOs: deliveryFileList.value || [],
      };
      deductStock(payload).then((res) => {
        proxy.$modal.msgSuccess("操作成功");
        closeDia();
        getList();
      });
    }
  });
};
// å…³é—­å¼¹æ¡†
const closeDia = () => {
  proxy.resetForm("formRef");
  deliveryFileList.value = []; // æ¸…空文件列表
  dialogFormVisible.value = false;
};
// å¯¼å‡º
const handleOut = () => {
  ElMessageBox.confirm("选中的内容将被导出,是否确认导出?", "导出", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      proxy.download("/shippingInfo/export", {}, "发货台账.xlsx");
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
// æ‰¹é‡åˆ é™¤
const handleDelete = () => {
  if (selectedRows.value.length === 0) {
    proxy.$modal.msgWarning("请选择数据");
    return;
  }
  // æ£€æŸ¥é€‰ä¸­çš„行是否有"审核中"状态
  const approvingRows = selectedRows.value.filter((row) =>
    isApproving(row.status)
  );
  if (approvingRows.length > 0) {
    proxy.$modal.msgWarning("审核中的数据不能删除");
    return;
  }
  const ids = selectedRows.value.map((item) => item.id);
  ElMessageBox.confirm("选中的内容将被删除,是否确认删除?", "删除", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      delDeliveryLedger(ids).then((res) => {
        proxy.$modal.msgSuccess("删除成功");
        getList();
      });
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
// å•个删除
const handleDeleteSingle = (row) => {
  // æ£€æŸ¥æ˜¯å¦ä¸º"审核中"状态
  if (isApproving(row.status)) {
    proxy.$modal.msgWarning("审核中的数据不能删除");
    return;
  }
  ElMessageBox.confirm("此操作将删除该记录,是否确认?", "删除", {
    confirmButtonText: "确认",
    cancelButtonText: "取消",
    type: "warning",
  })
    .then(() => {
      delDeliveryLedger([row.id]).then((res) => {
        proxy.$modal.msgSuccess("删除成功");
        getList();
      });
    })
    .catch(() => {
      proxy.$modal.msg("已取消");
    });
};
// å‘货类型校验:货车时要求车牌,快递时要求快递公司
const validateShippingCarNumber = (value, callback) => {
  if (form.value.type === "货车") {
    if (!value) return callback(new Error("请输入发货车牌号"));
  }
  callback();
};
const validateExpressCompany = (value, callback) => {
  if (form.value.type === "快递") {
    if (!value) return callback(new Error("请输入快递公司"));
  }
  callback();
};
// å‘货图片上传前校检
function handleDeliveryBeforeUpload(file) {
  // æ ¡æ£€æ–‡ä»¶ç±»åž‹
  const isImage =
    file.type === "image/png" ||
    file.type === "image/jpeg" ||
    file.type === "image/jpg";
  if (!isImage) {
    proxy.$modal.msgError("只能上传 jpg、jpeg、png æ ¼å¼çš„图片!");
    return false;
  }
  // æ ¡æ£€æ–‡ä»¶å¤§å°
  const isLt10M = file.size / 1024 / 1024 < 10;
  if (!isLt10M) {
    proxy.$modal.msgError("上传图片大小不能超过 10MB!");
    return false;
  }
  proxy.$modal.loading("正在上传图片,请稍候...");
  return true;
}
// å‘货图片上传失败
function handleDeliveryUploadError(err) {
  proxy.$modal.msgError("上传图片失败");
  proxy.$modal.closeLoading();
}
// å‘货图片上传成功回调
function handleDeliveryUploadSuccess(res, file, uploadFiles) {
  proxy.$modal.closeLoading();
  if (res.code === 200) {
    file.tempId = res.data.tempId;
    proxy.$modal.msgSuccess("上传成功");
  } else {
    proxy.$modal.msgError(res.msg);
    proxy.$refs.deliveryFileUpload.handleRemove(file);
  }
}
// ç§»é™¤å‘货图片
function handleDeliveryRemove(file) {
  console.log("file--", file);
  // å¦‚果是编辑模式且文件有 id,需要调用接口删除
  if (operationType.value === "edit") {
    let ids = [];
    ids.push(file.uid);
    delLedgerFile(ids)
      .then((res) => {
        proxy.$modal.msgSuccess("删除成功");
        // ä»Žæ–‡ä»¶åˆ—表中移除
        const index = deliveryFileList.value.findIndex(
          (item) => item.uid === file.uid
        );
        if (index > -1) {
          deliveryFileList.value.splice(index, 1);
        }
      })
      .catch(() => {
        proxy.$modal.msgError("删除失败");
      });
  } else {
    // æ–°å¢žæ¨¡å¼æˆ–没有 id çš„æ–‡ä»¶ï¼Œç›´æŽ¥ä»Žåˆ—表中移除
    const index = deliveryFileList.value.findIndex(
      (item) => item.uid === file.uid
    );
    if (index > -1) {
      deliveryFileList.value.splice(index, 1);
    }
  }
}
// å‘货类型切换时清空对应字段
const handleShippingTypeChange = (val) => {
  if (val === "货车") {
    form.value.expressCompany = "";
    form.value.expressNumber = "";
  } else {
    form.value.shippingCarNumber = "";
  }
};
// èŽ·å–å®¡æ ¸çŠ¶æ€æ–‡æœ¬
const getApprovalStatusText = (status) => {
  if (status === null || status === undefined || status === "") {
    return "待审核";
  }
  // å¦‚果是数字
  if (typeof status === "number") {
    const statusMap = {
      0: "待审核",
      1: "审核中",
      2: "审核拒绝",
      3: "审核通过",
    };
    return statusMap[status] || "待审核";
  }
  // å¦‚果是字符串,直接返回或映射
  const statusStr = String(status).trim();
  const statusTextMap = {
    å¾…审核: "待审核",
    å®¡æ ¸ä¸­: "审核中",
    å®¡æ ¸æ‹’绝: "审核拒绝",
    å®¡æ ¸é€šè¿‡: "审核通过",
    å·²å‘è´§: "已发货",
    0: "待审核",
    1: "审核中",
    2: "审核拒绝",
    3: "审核通过",
  };
  return statusTextMap[statusStr] || statusStr || "待审核";
};
// èŽ·å–å®¡æ ¸çŠ¶æ€æ ‡ç­¾ç±»åž‹ï¼ˆé¢œè‰²ï¼‰
const getApprovalStatusType = (status) => {
  if (status === null || status === undefined || status === "") {
    return "info";
  }
  // å¦‚果是数字
  if (typeof status === "number") {
    const typeMap = {
      0: "info", // å¾…审核 - ç°è‰²
      1: "warning", // å®¡æ ¸ä¸­ - é»„色
      2: "danger", // å®¡æ ¸æ‹’绝 - çº¢è‰²
      3: "success", // å®¡æ ¸é€šè¿‡ - ç»¿è‰²
    };
    return typeMap[status] || "info";
  }
  // å¦‚果是字符串
  const statusStr = String(status).trim();
  const typeTextMap = {
    å¾…审核: "info",
    å®¡æ ¸ä¸­: "warning",
    å®¡æ ¸æ‹’绝: "danger",
    å®¡æ ¸é€šè¿‡: "success",
    å·²å‘è´§: "success",
    0: "info",
    1: "warning",
    2: "danger",
    3: "success",
  };
  return typeTextMap[statusStr] || "info";
};
// æ£€æŸ¥å®¡æ ¸çŠ¶æ€æ˜¯å¦ä¸º"审核通过"
const isApproved = (status) => {
  if (status === null || status === undefined || status === "") {
    return false;
  }
  // å¦‚果是数字,3 è¡¨ç¤ºå®¡æ ¸é€šè¿‡
  if (typeof status === "number") {
    return status === 3;
  }
  // å¦‚果是字符串
  const statusStr = String(status).trim();
  return statusStr === "审核通过" || statusStr === "3";
};
// æ£€æŸ¥å®¡æ ¸çŠ¶æ€æ˜¯å¦ä¸º"审核中"
const isApproving = (status) => {
  if (status === null || status === undefined || status === "") {
    return false;
  }
  // å¦‚果是数字,1 è¡¨ç¤ºå®¡æ ¸ä¸­
  if (typeof status === "number") {
    return status === 1;
  }
  // å¦‚果是字符串
  const statusStr = String(status).trim();
  return statusStr === "审核中" || statusStr === "1";
};
// èŽ·å–é€€è´§çŠ¶æ€æ ‡ç­¾ç±»åž‹
const getReturnStatusType = (returnStatus) => {
  const statusMap = {
    '无退货': 'success',
    '部分退货': 'warning',
    '全部退货': 'danger',
  };
  return statusMap[returnStatus] || 'info';
};
onMounted(() => {
  getList();
});
</script>
<style scoped lang="scss">
.table_list {
  margin-top: unset;
}
.actions {
  display: flex;
  justify-content: space-between;
  margin-bottom: 10px;
}
// éšè—å›¾ç‰‡ä¸Šä¼ ç»„件的预览按钮(放大镜)
:deep(.el-upload-list--picture-card .el-upload-list__item-actions) {
  .el-upload-list__item-preview {
    display: none;
  }
}
.detail-wrapper {
  padding: 8px 0;
}
.detail-images {
  margin-top: 16px;
}
.detail-images-title {
  font-weight: 600;
  margin-bottom: 10px;
  color: #303133;
}
.detail-image {
  width: 120px;
  height: 120px;
  margin-right: 10px;
  margin-bottom: 10px;
  border-radius: 6px;
}
.detail-images-empty {
  margin-top: 16px;
  color: #909399;
}
</style>