gongchunyi
2026-06-22 492802e4fc1b371ba21a2a490c8dcd67d7c8b29c
src/views/salesManagement/salesLedger/index.vue
@@ -717,107 +717,125 @@
    <ReverseAuditHistory v-if="activeStatusTab === 'reverseReviewed'" />
    <div v-else>
    <div class="search_form">
      <el-form :model="searchForm"
               :inline="true">
        <el-form-item label="客户名称:">
          <el-select v-model="searchForm.customerId"
                     filterable
                     placeholder="请选择客户名称"
                     clearable
                     style="width: 220px"
                     @change="handleQuery">
            <el-option v-for="item in customerOption"
                       :key="item.id"
                       :label="item.customerName"
                       :value="item.id">
              {{ item.customerName + "——" + item.taxpayerIdentificationNumber }}
            </el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="销售合同号:">
          <el-input v-model="searchForm.salesContractNo"
                    placeholder="请输入"
                    clearable
                    prefix-icon="Search"
                    @change="handleQuery" />
        </el-form-item>
        <el-form-item label="项目名称:">
          <el-input v-model="searchForm.projectName"
                    placeholder="请输入"
                    clearable
                    prefix-icon="Search"
                    @change="handleQuery" />
        </el-form-item>
        <el-form-item label="产品宽(mm):">
          <el-input v-model="searchForm.width"
                    placeholder="请输入"
                    clearable
                    prefix-icon="Search"
                    @change="handleQuery" />
        </el-form-item>
        <el-form-item label="产品高(mm):">
          <el-input v-model="searchForm.height"
                    placeholder="请输入"
                    clearable
                    prefix-icon="Search"
                    @change="handleQuery" />
        </el-form-item>
        <el-form-item label="录入日期:">
          <el-date-picker v-model="searchForm.entryDate"
                          value-format="YYYY-MM-DD"
                          format="YYYY-MM-DD"
                          type="daterange"
                          placeholder="请选择"
                          clearable
                          @change="changeDaterange" />
        </el-form-item>
        <el-form-item label="发货状态:">
          <el-select v-model="searchForm.deliveryStatus"
                     placeholder="请选择"
                     clearable
                     style="width: 140px">
            <el-option label="未发货"
                       :value="1" />
            <el-option label="审批中"
                       :value="2" />
            <el-option label="审批不通过"
                       :value="3" />
            <el-option label="审批通过"
                       :value="4" />
            <el-option label="已发货"
                       :value="5" />
            <el-option label="部分发货"
                       :value="6" />
          </el-select>
        </el-form-item>
        <el-form-item label="入库状态:">
          <el-select v-model="searchForm.stockStatus"
                     placeholder="请选择"
                     clearable
                     style="width: 140px">
            <el-option label="未入库"
                       :value="0" />
            <el-option label="部分入库"
                       :value="1" />
            <el-option label="已入库"
                       :value="2" />
          </el-select>
        </el-form-item>
        <el-form-item label="订单状态:">
          <el-select v-model="searchForm.orderStatus"
                     placeholder="请选择"
                     clearable
                     style="width: 140px">
            <el-option label="进行中"
                       :value="0" />
            <el-option label="已完成"
                       :value="1" />
          </el-select>
        </el-form-item>
        <el-form-item>
          <el-button type="primary"
                     @click="handleQuery"> 搜索 </el-button>
        </el-form-item>
      <el-form :model="searchForm" label-width="110px">
        <el-row :gutter="20">
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="客户名称:">
              <el-select v-model="searchForm.customerId"
                         filterable
                         placeholder="请选择客户名称"
                         clearable
                         style="width: 100%"
                         @change="handleQuery">
                <el-option v-for="item in customerOption"
                           :key="item.id"
                           :label="item.customerName"
                           :value="item.id">
                  {{ item.customerName + "——" + item.taxpayerIdentificationNumber }}
                </el-option>
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="销售合同号:">
              <el-input v-model="searchForm.salesContractNo"
                        placeholder="请输入"
                        clearable
                        prefix-icon="Search"
                        style="width: 100%"
                        @change="handleQuery" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="项目名称:">
              <el-input v-model="searchForm.projectName"
                        placeholder="请输入"
                        clearable
                        prefix-icon="Search"
                        style="width: 100%"
                        @change="handleQuery" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="录入日期:">
              <el-date-picker v-model="searchForm.entryDate"
                              value-format="YYYY-MM-DD"
                              format="YYYY-MM-DD"
                              type="daterange"
                              placeholder="请选择"
                              clearable
                              style="width: 100%"
                              @change="changeDaterange" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="产品宽(mm):">
              <el-input v-model="searchForm.width"
                        placeholder="请输入"
                        clearable
                        prefix-icon="Search"
                        style="width: 100%"
                        @input="val => searchForm.width = val.replace(/[^\d.]/g, '')"
                        @change="handleQuery" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="产品高(mm):">
              <el-input v-model="searchForm.height"
                        placeholder="请输入"
                        clearable
                        prefix-icon="Search"
                        style="width: 100%"
                        @input="val => searchForm.height = val.replace(/[^\d.]/g, '')"
                        @change="handleQuery" />
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="发货状态:">
              <el-select v-model="searchForm.deliveryStatus"
                         placeholder="请选择"
                         clearable
                         style="width: 100%">
                <el-option label="未发货" :value="1" />
                <el-option label="审批中" :value="2" />
                <el-option label="审批不通过" :value="3" />
                <el-option label="审批通过" :value="4" />
                <el-option label="已发货" :value="5" />
                <el-option label="部分发货" :value="6" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="入库状态:">
              <el-select v-model="searchForm.stockStatus"
                         placeholder="请选择"
                         clearable
                         style="width: 100%">
                <el-option label="未入库" :value="0" />
                <el-option label="部分入库" :value="1" />
                <el-option label="已入库" :value="2" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :xs="24" :sm="12" :md="8" :lg="8">
            <el-form-item label="订单状态:">
              <el-select v-model="searchForm.orderStatus"
                         placeholder="请选择"
                         clearable
                         style="width: 100%">
                <el-option label="进行中" :value="0" />
                <el-option label="已完成" :value="1" />
              </el-select>
            </el-form-item>
          </el-col>
          <el-col :span="24">
            <el-form-item label=" ">
              <div style="width: 100%; text-align: right;">
                <el-button type="primary" icon="Search" @click="handleQuery">搜索</el-button>
              </div>
            </el-form-item>
          </el-col>
        </el-row>
      </el-form>
    </div>
    <div class="table_list">
@@ -865,15 +883,7 @@
                       @click="handleBulkDelivery"
                       :disabled="isBatchButtonDisabled('delivery')">发货</el-button>
            <el-button @click="handleOut">导出</el-button>
            <el-date-picker v-model="processRouteExportDateRange"
                            type="datetimerange"
                            range-separator="至"
                            start-placeholder="开始时间"
                            end-placeholder="结束时间"
                            value-format="YYYY-MM-DD HH:mm:ss"
                            format="YYYY-MM-DD HH:mm:ss"
                            clearable
                            style="width: 340px;" />
            <el-button @click="handleExportProcessRoute"
                       :disabled="isBatchButtonDisabled('export')">导出工艺路线</el-button>
          </el-space>
@@ -918,6 +928,8 @@
          <el-space v-else-if="activeStatusTab === 'all'"
                    wrap
                    class="sales-ledger-toolbar-group">
            <el-button type="primary"
                       @click="openForm('add')">新增台账</el-button>
            <el-button @click="handleOut">导出</el-button>
          </el-space>
          <el-space wrap class="sales-ledger-toolbar-group sales-ledger-toolbar-group--muted">
@@ -968,8 +980,8 @@
                :row-class-name="tableRowClassName"
                show-summary
                style="width: 100%"
                :summary-method="summarizeMainTable"
                height="calc(100vh - 22em)">
                height="calc(100vh - 23em)"
                :summary-method="summarizeMainTable">
        <el-table-column align="center"
                         type="selection"
                         width="55"
@@ -980,7 +992,7 @@
                         width="60" />
        <el-table-column label="订单号"
                         prop="salesContractNo"
                         width="180"
                         min-width="160"
                         show-overflow-tooltip>
          <template #default="scope">
            <el-button link
@@ -990,27 +1002,27 @@
        </el-table-column>
        <el-table-column label="客户名称"
                         prop="customerName"
                         width="300"
                         min-width="200"
                         show-overflow-tooltip />
        <el-table-column label="业务员"
                         prop="salesman"
                         width="100"
                         min-width="80"
                         show-overflow-tooltip />
        <el-table-column label="合同金额(元)"
                         prop="contractAmount"
                         width="220"
                         min-width="120"
                         show-overflow-tooltip
                         :formatter="formattedNumber" />
        <el-table-column label="面积"
                         prop="productTotalArea"
                         width="120"
                         min-width="80"
                         show-overflow-tooltip />
        <el-table-column label="数量"
                         prop="productTotalQuantity"
                         width="120"
                         min-width="80"
                         show-overflow-tooltip />
        <el-table-column label="发货状态"
                         width="140"
                         min-width="100"
                         align="center">
          <template #default="scope">
            <el-tag v-if="Number(scope.row.deliveryStatus) === 1"
@@ -1030,19 +1042,21 @@
          </template>
        </el-table-column>
        <el-table-column label="审核状态"
                         width="120"
                         min-width="90"
                         align="center">
          <template #default="scope">
            <el-tag v-if="Number(scope.row.reviewStatus) === 0"
                    type="warning">待审核</el-tag>
            <el-tag v-else-if="Number(scope.row.reviewStatus) === 1"
                    type="success">已审核</el-tag>
            <el-tag v-else-if="Number(scope.row.reviewStatus) === 2"
                    type="danger">已反审</el-tag>
            <el-tag v-else
                    type="info">待审核</el-tag>
          </template>
        </el-table-column>
        <el-table-column label="入库状态"
                         width="120"
                         min-width="90"
                         align="center">
          <template #default="scope">
            <el-tag v-if="Number(scope.row.stockStatus) === 0"
@@ -1058,7 +1072,7 @@
          </template>
        </el-table-column>
        <el-table-column label="订单状态"
                         width="120"
                         min-width="90"
                         align="center">
          <template #default="scope">
            <el-tag v-if="Number(scope.row.orderStatus) === 1"
@@ -1068,14 +1082,14 @@
          </template>
        </el-table-column>
        <el-table-column label="标签打印"
                         width="90"
                         min-width="90"
                         align="center">
          <template #default="scope">
            <span>{{ scope.row.labelPrintCount ?? 0 }}</span>
          </template>
        </el-table-column>
        <el-table-column label="单据打印"
                         width="90"
                         min-width="90"
                         align="center">
          <template #default="scope">
            <span>{{ scope.row.documentPrintCount ?? 0 }}</span>
@@ -1083,27 +1097,27 @@
        </el-table-column>
        <el-table-column label="录入人"
                         prop="entryPersonName"
                         width="100"
                         min-width="80"
                         show-overflow-tooltip />
        <el-table-column label="录入日期"
                         prop="entryDate"
                         width="120"
                         min-width="110"
                         show-overflow-tooltip />
        <el-table-column label="交付日期"
                         prop="deliveryDate"
                         width="120"
                         min-width="110"
                         show-overflow-tooltip />
        <el-table-column label="备注"
                         prop="remarks"
                         width="200"
                         min-width="120"
                         show-overflow-tooltip />
        <el-table-column label="客户备注"
                         prop="customerRemarks"
                         width="200"
                         min-width="120"
                         show-overflow-tooltip />
        <el-table-column fixed="right"
                         label="操作"
                         width="280"
                         width="250"
                         align="center">
          <template #default="scope">
            <el-button link
@@ -1132,6 +1146,31 @@
                  @pagination="paginationChange" />
    </div>
    </div>
    <!-- 导出工艺路线 弹窗 -->
    <el-dialog title="选择导出时间范围"
               v-model="exportProcessRouteDialogVisible"
               width="450px"
               append-to-body>
      <el-form>
        <el-form-item label="完成时间:">
          <el-date-picker v-model="processRouteExportDateRange"
                          type="datetimerange"
                          range-separator="至"
                          start-placeholder="开始时间"
                          end-placeholder="结束时间"
                          value-format="YYYY-MM-DD HH:mm:ss"
                          format="YYYY-MM-DD HH:mm:ss"
                          clearable
                          style="width: 100%;" />
        </el-form-item>
      </el-form>
      <template #footer>
        <div style="text-align: right">
          <el-button @click="exportProcessRouteDialogVisible = false">取消</el-button>
          <el-button type="primary" @click="confirmExportProcessRoute">确认导出</el-button>
        </div>
      </template>
    </el-dialog>
    </template>
    <FormDialog v-if="!isFormPageMode"
                v-model="dialogFormVisible"
@@ -2554,6 +2593,7 @@
  import { ElMessageBox, ElMessage } from "element-plus";
  import { ArrowDown, WarningFilled } from "@element-plus/icons-vue";
  import useUserStore from "@/store/modules/user";
  import useAppStore from "@/store/modules/app";
  import { approveUserList } from "@/api/collaborativeApproval/approvalProcess.js";
  import { userListNoPage } from "@/api/system/user.js";
  import FileListDialog from "@/components/Dialog/FileListDialog.vue";
@@ -2661,6 +2701,28 @@
      ? "编辑完成后将自动返回销售台账列表"
      : "新增完成后将自动返回销售台账列表"
  );
  const appStore = useAppStore();
  watch(isFormPageMode, (val) => {
    if (val) {
      appStore.closeSideBar({ withoutAnimation: false });
    } else {
      if (!appStore.sidebar.opened) {
        appStore.toggleSideBar(false);
      }
    }
  });
  onMounted(() => {
    if (isFormPageMode.value) {
      appStore.closeSideBar({ withoutAnimation: false });
    }
  });
  import { onUnmounted } from "vue";
  onUnmounted(() => {
    if (!appStore.sidebar.opened) {
      appStore.toggleSideBar(false);
    }
  });
  const sanitizeLedgerQrFilename = s =>
    String(s)
@@ -5337,6 +5399,8 @@
    proxy.download("/sales/ledger/exportWithProducts", params, "销售台账.xlsx");
  };
  const exportProcessRouteDialogVisible = ref(false);
  const handleExportProcessRoute = () => {
    if (selectedRows.value.length === 0) {
      proxy?.$modal?.msgWarning?.("请选择要导出的销售台账");
@@ -5349,6 +5413,13 @@
      proxy?.$modal?.msgWarning?.("请选择要导出的销售台账");
      return;
    }
    exportProcessRouteDialogVisible.value = true;
  };
  const confirmExportProcessRoute = () => {
    const salesLedgerIds = selectedRows.value
      .map(item => item.id)
      .filter(id => id !== null && id !== undefined && id !== "");
    const params = {
      salesLedgerIds: salesLedgerIds.join(","),
@@ -5366,6 +5437,7 @@
      params,
      "销售台账工艺路线导出.xlsx"
    );
    exportProcessRouteDialogVisible.value = false;
  };
  /** 判断单个产品是否已发货(根据shippingStatus判断,已发货或审核通过不可编辑和删除) */
  const isProductShipped = product => {