张诺
7 小时以前 1932a62477dfc3a7e604918c29d0d0d3bfa9c9d8
src/views/salesManagement/salesLedger/index.vue
@@ -6,14 +6,10 @@
          <el-input v-model="searchForm.customerName" placeholder="请输入" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
<!--        <el-form-item label="销售合同号:">-->
<!--          <el-input v-model="searchForm.salesContractNo" placeholder="请输入" clearable prefix-icon="Search"-->
<!--            @change="handleQuery" />-->
<!--        </el-form-item>-->
<!--        <el-input v-model="form.salesContractNo" placeholder="可手动输入或自动生成" clearable :disabled="operationType === 'view'">-->
        <el-form-item label="销售订单号:">
          <el-input v-model="form.salesContractNo" placeholder="可手动输入或自动生成" clearable :disabled="operationType === 'view'" />
                  </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-date-picker v-model="searchForm.entryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
            placeholder="请选择" clearable @change="changeDaterange" />
@@ -109,10 +105,10 @@
          </template>
        </el-table-column>
        <el-table-column align="center" label="序号" type="index" width="60" />
        <el-table-column label="销售订单号" prop="salesContractNo" width="180" show-overflow-tooltip />
        <el-table-column label="订单编号" prop="salesContractNo" width="180" show-overflow-tooltip />
        <el-table-column label="客户名称" prop="customerName" width="300" show-overflow-tooltip />
        <el-table-column label="业务员" prop="salesman" width="100" show-overflow-tooltip />
        <el-table-column label="项目名称" prop="projectName" width="180" show-overflow-tooltip />
<!--        <el-table-column label="项目名称" prop="projectName" width="180" show-overflow-tooltip />-->
        <el-table-column label="付款方式" prop="paymentMethod" show-overflow-tooltip />
        <el-table-column label="合同金额(元)" prop="contractAmount" width="220" show-overflow-tooltip
          :formatter="formattedNumber" />
@@ -124,6 +120,7 @@
        <el-table-column fixed="right" label="操作" min-width="200" align="center">
          <template #default="scope">
            <el-button link type="primary" @click="openForm('edit', scope.row)" :disabled="!scope.row.isEdit || scope.row.hasProductionRecord || !canEditLedger(scope.row)">编辑</el-button>
         <el-button link type="primary" size="small" @click="exportSalesContracts(scope.row)">导出销售合同</el-button>
            <el-button link type="primary" @click="downLoadFile(scope.row)">附件</el-button>
          </template>
        </el-table-column>
@@ -135,9 +132,16 @@
      :operation-type="operationType" @close="closeDia" @confirm="submitForm" @cancel="closeDia">
      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
            <!-- 报价单导入入口:放在表单顶部,选择后反显客户/业务员等 -->
        <el-row v-if="operationType === 'add'" style="margin-bottom: 10px;">
          <el-col :span="24" style="text-align: right;">
            <el-button type="primary" plain @click="openQuotationDialog">
              从销售报价导入
            </el-button>
          </el-col>
        </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="销售订单号:" prop="salesContractNo">
            <el-form-item label="订单编号:" prop="salesContractNo">
              <el-input v-model="form.salesContractNo" placeholder="可手动输入或自动生成" clearable :disabled="operationType === 'view'" />
            </el-form-item>
          </el-col>
@@ -337,17 +341,19 @@
            <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-input v-model="productForm.productCategory" placeholder="请输入" clearable />
<!--                     <el-tree-select v-model="productForm.productCategory" placeholder="请选择" clearable filterable check-strictly-->
<!--                                     @change="getModels" :data="productOptions" :render-after-expand="false" style="width: 100%" />-->
                  </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-form-item label="规格型号:" prop="specificationModel">
              <el-input v-model="productForm.specificationModel" placeholder="请输入" clearable />
<!--                     <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-form-item>
               </el-col>
            </el-row>
@@ -588,50 +594,6 @@
                  </el-form-item>
               </el-col>
            </el-row>
        <!-- 审批人选择(仿协同审批里的审批人节点选择) -->
        <el-row>
          <el-col :span="24">
            <el-form-item>
              <template #label>
                <span>审批人选择:</span>
                <el-button type="primary" @click="addApproverNode" style="margin-left: 8px;">新增节点</el-button>
              </template>
              <div style="display: flex; align-items: flex-end; flex-wrap: wrap;">
                <div
                  v-for="(node, index) in approverNodes"
                  :key="node.id"
                  style="margin-right: 20px; text-align: center; margin-bottom: 10px;"
                >
                  <div>
                    <span>审批人</span>
                    →
                  </div>
                  <el-select
                    v-model="node.userId"
                    placeholder="选择人员"
                    filterable
                    style="width: 140px; margin-bottom: 8px;"
                  >
                    <el-option
                      v-for="user in userList"
                      :key="user.userId"
                      :label="user.nickName"
                      :value="user.userId"
                    />
                  </el-select>
                  <div>
                    <el-button
                      type="danger"
                      @click="removeApproverNode(index)"
                      v-if="approverNodes.length > 1"
                    >删除</el-button>
                  </div>
                </div>
              </div>
            </el-form-item>
          </el-col>
        </el-row>
         </el-form>
         <template #footer>
            <div class="dialog-footer">
@@ -806,22 +768,12 @@
});
const { deliveryForm, deliveryRules } = toRefs(deliveryFormData);
// 发货审批人节点(仿协同审批 infoFormDia.vue)
const approverNodes = ref([{ id: 1, userId: null }]);
let nextApproverId = 2;
const addApproverNode = () => {
  approverNodes.value.push({ id: nextApproverId++, userId: null });
};
const removeApproverNode = (index) => {
  approverNodes.value.splice(index, 1);
};
// 导入相关
const importUploadRef = ref(null);
const importUpload = reactive({
   title: "导入销售台账",
   open: false,
   url: import.meta.env.VITE_APP_BASE_API + "/sales/ledger/import",
   url: import.meta.env.VITE_APP_BASE_API + "/sales/ledger/importSalsesLedger",
   headers: { Authorization: "Bearer " + getToken() },
   isUploading: false,
   beforeUpload: (file) => {
@@ -878,11 +830,7 @@
// 查询列表
/** 搜索按钮操作 */
const handleQuery = () => {
   // 只有在点击搜索按钮时才重置页码到第一页
   // 避免表单字段change事件干扰分页
   if (arguments.length === 0) {
      page.current = 1;
   }
   page.current = 1;
   expandedRowKeys.value = [];
   getList();
};
@@ -893,10 +841,9 @@
};
const getList = () => {
   tableLoading.value = true;
   const { entryDate, ...rest } = searchForm;
   // 将范围日期字段传递给后端
   const params = { ...rest, ...page };
   // 移除录入日期的默认值设置,只保留范围日期字段
   // 组装查询参数,移除日期范围控件本体字段,仅传开始/结束日期
   const params = { ...searchForm, ...page };
   delete params.entryDate;
   return ledgerListPage(params)
      .then((res) => {
@@ -1324,7 +1271,7 @@
   productOperationType.value = type;
   productForm.value = {
      taxRate: 0,
      invoiceType: "增普票"
      invoiceType: ""
   };
   proxy.resetForm("productFormRef");
   if (type === "edit") {
@@ -2223,9 +2170,6 @@
  deliveryForm.value = {
    type: "货车",
  };
  // 重置审批人节点(默认一个空节点)
  approverNodes.value = [{ id: 1, userId: null }];
  nextApproverId = 2;
   deliveryFormVisible.value = true;
};
@@ -2233,13 +2177,6 @@
const submitDelivery = () => {
  proxy.$refs["deliveryFormRef"].validate((valid) => {
    if (valid) {
      // 审批人必填校验(所有节点都要选人)
      const hasEmptyApprover = approverNodes.value.some(node => !node.userId);
      if (hasEmptyApprover) {
        proxy.$modal.msgError("请为所有审批节点选择审批人!");
        return;
      }
      const approveUserIds = approverNodes.value.map(node => node.userId).join(",");
      // 保存当前展开的行ID,以便发货后重新加载子表格数据
      const currentExpandedKeys = [...expandedRowKeys.value];
      const salesLedgerId = currentDeliveryRow.value.salesLedgerId;
@@ -2247,7 +2184,6 @@
        salesLedgerId: salesLedgerId,
        salesLedgerProductId: currentDeliveryRow.value.id,
        type: deliveryForm.value.type,
            approveUserIds,
      })
        .then(() => {
          proxy.$modal.msgSuccess("发货成功");