gongchunyi
9 天以前 394a5fc7f6d3987be8af2e28e84aa94dcf96e596
src/views/salesManagement/salesLedger/index.vue
@@ -24,6 +24,18 @@
                    prefix-icon="Search"
                    @change="handleQuery" />
        </el-form-item>
        <el-form-item label="发货状态:">
          <el-select v-model="searchForm.shippingStatus"
                     placeholder="请选择"
                     clearable
                     style="width: 160px"
                     @change="handleQuery">
            <el-option label="未发货"
                       value="未发货" />
            <el-option label="已发货"
                       value="已发货" />
          </el-select>
        </el-form-item>
        <el-form-item label="录入日期:">
          <el-date-picker v-model="searchForm.entryDate"
                          value-format="YYYY-MM-DD"
@@ -129,8 +141,7 @@
                               show-overflow-tooltip />
              <el-table-column label="发货车牌"
                               minWidth="100px"
                               align="center"
                               v-if="false">
                               align="center">
                <template #default="scope">
                  <div>
                    <el-tag type="success"
@@ -249,8 +260,8 @@
            </el-button>
            <el-button link
                       type="primary"
                       @click="downloadOrder(scope.row.id)">下载
            </el-button>
                       @click="openFileDialog(scope.row)">附件
            </el-button> <!--downloadOrder(scope.row.id) 下载-->
          </template>
        </el-table-column>
      </el-table>
@@ -330,7 +341,7 @@
                           :label="item.customerName"
                           :value="item.id">
                  {{
                    item.customerName + "——" + item.taxpayerIdentificationNumber
                    item.taxpayerIdentificationNumber ? item.customerName + "——" + item.taxpayerIdentificationNumber : item.customerName
                  }}
                </el-option>
              </el-select>
@@ -605,35 +616,22 @@
               :rules="productRules"
               ref="productFormRef">
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="产品大类:"
                          prop="productCategory">
              <el-tree-select v-model="productForm.productCategory"
                              placeholder="请选择"
                              clearable
                              filterable
                              check-strictly
                              @change="getModels"
                              :data="productOptions"
                              :render-after-expand="false"
                              style="width: 100%" />
          <el-col :span="12">
            <el-form-item label="产品大类:" prop="productCategory">
              <el-input v-model="productForm.productCategory"
                        placeholder="点击选择"
                        readonly
                        @click="showProductSelectDialog = true"
                        style="cursor:pointer" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="24">
            <el-form-item label="规格型号:"
                          prop="productModelId">
              <el-select v-model="productForm.productModelId"
                         placeholder="请选择"
                         clearable
                         @change="getProductModel"
                         filterable>
                <el-option v-for="item in modelOptions"
                           :key="item.id"
                           :label="item.model"
                           :value="item.id" />
              </el-select>
          <el-col :span="12">
            <el-form-item label="规格型号:" prop="productModelId">
              <el-input v-model="productForm.specificationModel"
                        placeholder="点击选择"
                        readonly
                        @click="showProductSelectDialog = true"
                        style="cursor:pointer" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -727,12 +725,12 @@
            <el-form-item label="是否生产:"
                          prop="isProduction">
              <div style="display: flex; align-items: center; width: 100%;">
                <el-radio-group v-model="productForm.isProduction">
                  <el-radio label="是"
                            :value="true" />
                  <el-radio label="否"
                            :value="false" />
                </el-radio-group>
              <el-radio-group v-model="productForm.isProduction">
                <el-radio label="是"
                          :value="true" />
                <el-radio label="否"
                          :value="false" />
              </el-radio-group>
                <div 
                  v-if="currentStock !== null" 
                  :style="{
@@ -758,6 +756,9 @@
        </el-row>
      </el-form>
    </FormDialog>
    <ProductSelectDialog v-model="showProductSelectDialog"
                         @confirm="handleProductSelect"
                         single />
    <!-- 导入弹窗 -->
    <FormDialog v-model="importUpload.open"
                :title="importUpload.title"
@@ -833,7 +834,7 @@
                    <span class="label">发货日期:</span>
                    <span class="value">{{ formatDate(item.createTime) }}</span>
                  </div>
                  <div v-if="false">
                  <div>
                    <span class="label">发货车牌号:</span>
                    <span class="value">{{ item.shippingCarNumber }}</span>
                  </div>
@@ -921,7 +922,7 @@
    <!-- 发货弹框 -->
    <el-dialog v-model="deliveryFormVisible"
               title="发货信息"
               width="40%"
               width="960px"
               @close="closeDeliveryDia">
      <el-form :model="deliveryForm"
               label-width="120px"
@@ -936,11 +937,10 @@
                         placeholder="请选择发货类型"
                         style="width: 100%"
                         @change="handleDeliveryTypeChange">
                <el-option label="货车"
                           value="货车" />
                <el-option label="快递"
                           value="快递" />
                <el-option v-if="false"
                           label="货车"
                           value="货车" />
              </el-select>
            </el-form-item>
          </el-col>
@@ -962,7 +962,7 @@
            </el-form-item>
          </el-col>
          <el-col :span="24"
                  v-else-if="false">
                  v-else>
            <el-form-item label="快递公司:"
                          prop="expressCompany">
              <el-input v-model="deliveryForm.expressCompany"
@@ -972,7 +972,7 @@
          </el-col>
        </el-row>
        <el-row :gutter="30"
                >
                v-if="deliveryForm.type === '快递'">
          <el-col :span="24">
            <el-form-item label="快递单号:"
                          prop="expressNumber">
@@ -1002,6 +1002,13 @@
                <el-table-column label="批号"
                                 prop="batchNo"
                                 min-width="180" />
                <el-table-column label="销售订单号"
                                 min-width="180"
                                 show-overflow-tooltip>
                  <template #default="scope">
                    {{ formatDeliveryBatchSalesOrderNo(scope.row) }}
                  </template>
                </el-table-column>
                <el-table-column label="产品大类"
                                 prop="productName"
                                 min-width="100" />
@@ -1025,8 +1032,6 @@
                    <el-input-number v-model="scope.row.deliveryQuantity"
                                     :min="0"
                                     :max="getDeliveryBatchDeliveryMax(scope.row)"
                                     :precision="2"
                                     :step="0.01"
                                     controls-position="right"
                                     @change="handleDeliveryBatchQuantityChange(scope.row)"
                                     style="width: 100%;" />
@@ -1085,6 +1090,7 @@
    buildAmountSummaryFormat,
  } from "@/utils/numberFormat";
  import ImageUpload from "@/components/AttachmentUpload/image/index.vue";
  import ProductSelectDialog from "@/views/basicData/product/ProductSelectDialog.vue";
  import { getCurrentDate } from "@/utils/index.js";
  import { listCustomer } from "@/api/basicData/customer.js";
@@ -1113,6 +1119,7 @@
  const total = ref(0);
  const fileList = ref([]);
  const deliveryFileList = ref([]);
  const showProductSelectDialog = ref(false);
  // 用户信息表单弹框数据
  const operationType = ref("");
@@ -1121,6 +1128,8 @@
    searchForm: {
      customerName: "", // 客户名称
      salesContractNo: "", // 销售合同编号
      projectName: "", // 项目名称
      shippingStatus: "", // 发货状态(未发货/已发货)
      entryDate: null, // 录入日期
      entryDateStart: undefined,
      entryDateEnd: undefined,
@@ -1155,7 +1164,9 @@
  const currentId = ref("");
  const productFormData = reactive({
    productForm: {
      productId: "",
      productCategory: "",
      productModelId: "",
      specificationModel: "",
      unit: "",
      quantity: "",
@@ -1167,11 +1178,8 @@
      isProduction: false,
    },
    productRules: {
      productCategory: [{ required: true, message: "请选择", trigger: "change" }],
      productModelId: [{ required: true, message: "请选择", trigger: "change" }],
      specificationModel: [
        { required: true, message: "请选择", trigger: "change" },
      ],
      productCategory: [{ required: true, message: "请选择产品大类", trigger: "change" }],
      productModelId: [{ required: true, message: "请选择规格型号", trigger: "change" }],
      unit: [{ required: true, message: "请输入", trigger: "blur" }],
      quantity: [{ required: true, message: "请输入", trigger: "blur" }],
      taxInclusiveUnitPrice: [
@@ -1225,6 +1233,8 @@
      item?.stockQuantity;
    return quantity ?? 0;
  };
  const formatDeliveryBatchSalesOrderNo = item =>
    item?.salesContractNo || "--";
  const currentStock = ref(null);
  const fetchCurrentStock = async (productModelId) => {
    if (!productModelId) {
@@ -1232,7 +1242,7 @@
      return;
    }
    try {
      const res = await getStockInventoryByModelId(productModelId);
      const res = await getStockInventoryByModelId(productModelId, currentId.value);
      const rawList = Array.isArray(res?.data)
        ? res.data
        : res?.data?.records || res?.data?.rows || [];
@@ -1294,9 +1304,9 @@
      item => Number(item?.deliveryQuantity || 0) > 0
    );
  };
  const getDeliveryBatchNoList = async productModelId => {
  const getDeliveryBatchNoList = async (productModelId, salesLedgerId) => {
    if (!productModelId) return [];
    const res = await getStockInventoryByModelId(productModelId);
    const res = await getStockInventoryByModelId(productModelId, salesLedgerId);
    const rawList = Array.isArray(res?.data)
      ? res.data
      : res?.data?.records || res?.data?.rows || [];
@@ -1331,7 +1341,7 @@
      shippingCarNumber: "",
      expressCompany: "",
      expressNumber: "",
      type: "快递", // 货车, 快递
      type: "货车", // 货车, 快递
    },
    deliveryRules: {
      shippingCarNumber: [
@@ -1503,6 +1513,18 @@
    }
    return formattedNumber(row, column, cellValue);
  };
  // ProductSelectDialog 选中回调
  const handleProductSelect = (products) => {
    if (!products || !products.length) return;
    const p = products[0];
    productForm.value.productId = p.productId;
    productForm.value.productCategory = p.productName || '';
    productForm.value.productModelId = p.id;
    productForm.value.specificationModel = p.model || '';
    productForm.value.unit = p.unit || '';
    fetchCurrentStock(productForm.value.productModelId);
    showProductSelectDialog.value = false;
  };
  // 获取tree子数据
  const getModels = value => {
    productForm.value.productCategory = findNodeById(productOptions.value, value);
@@ -1619,9 +1641,9 @@
      param,
      ["contractAmount", "taxInclusiveTotalPrice", "taxExclusiveTotalPrice"],
      buildAmountSummaryFormat([
        "contractAmount",
        "taxInclusiveTotalPrice",
        "taxExclusiveTotalPrice",
      "contractAmount",
      "taxInclusiveTotalPrice",
      "taxExclusiveTotalPrice",
      ])
    );
  };
@@ -1648,9 +1670,9 @@
    return proxy.summarizeTable(
      param,
      [
        "taxInclusiveUnitPrice",
        "taxInclusiveTotalPrice",
        "taxExclusiveTotalPrice",
      "taxInclusiveUnitPrice",
      "taxInclusiveTotalPrice",
      "taxExclusiveTotalPrice",
      ],
      buildAmountSummaryFormat([
        "taxInclusiveUnitPrice",
@@ -2101,7 +2123,7 @@
        const data = res.data || res;
        companyName = data.companyName || companyName;
        orders.push(data.ledger);
      }
        }
      printSalesMulti(companyName, orders);
    } catch (e) {
      console.error('打印失败:', e);
@@ -2475,13 +2497,14 @@
    currentDeliveryRow.value = row;
    const batchNoList = await getDeliveryBatchNoList(
      row.productModelId || row.modelId
      row.productModelId || row.modelId,
      row.salesLedgerId
    );
    deliveryForm.value = {
      shippingCarNumber: "",
      expressCompany: "",
      expressNumber: "",
      type: "快递",
      type: "货车",
      batchNo: [],
      batchNoList,
    };
@@ -2806,4 +2829,4 @@
      page-break-after: avoid;
    }
  }
</style>
</style>