gaoluyang
2026-05-11 bdc5539eca6e1126960efdd70b8b561c484fbf8f
src/views/salesManagement/salesLedger/index.vue
@@ -14,6 +14,18 @@
          <el-input v-model="searchForm.projectName" placeholder="请输入" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="订单类型:">
          <el-input v-model="searchForm.orderType" placeholder="请输入" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="订单行:">
          <el-input v-model="searchForm.orderLine" placeholder="请输入" clearable prefix-icon="Search"
            @change="handleQuery" />
        </el-form-item>
        <el-form-item label="需求日期:">
          <el-date-picker v-model="searchForm.demandDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD" type="daterange"
            placeholder="请选择" clearable @change="(val) => changeDaterange(val, 'demandDate')" />
        </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" />
@@ -46,8 +58,14 @@
              <el-table-column align="center" label="序号" type="index"/>
              <el-table-column label="产品大类" prop="productCategory" />
              <el-table-column label="图纸编号" prop="specificationModel" />
                     <el-table-column label="物料号" prop="material" />
              <el-table-column label="物料号" prop="materialNo" width="120" show-overflow-tooltip />
              <el-table-column label="单位" prop="unit" />
              <el-table-column label="是否喷砂" prop="isSpray" width="100" align="center">
                <template #default="scope">
                  <el-tag v-if="scope.row.isSpray" type="warning">是</el-tag>
                  <el-tag v-else type="info">否</el-tag>
                </template>
              </el-table-column>
                     <el-table-column label="产品状态"
                                              width="100px"
                                              align="center">
@@ -68,10 +86,10 @@
              <el-table-column label="已发货数量" prop="shippingNum" align="center" />
              <el-table-column label="已退货数量" prop="returnNum" align="center" />
              <el-table-column label="数量" prop="quantity" />
              <el-table-column label="税率(%)" prop="taxRate" />
              <el-table-column label="含税单价(元)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
              <el-table-column label="含税总价(元)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
              <el-table-column label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
              <el-table-column v-if="isSalesDepartment" label="税率(%)" prop="taxRate" />
              <el-table-column v-if="isSalesDepartment" label="含税单价(元)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
              <el-table-column v-if="isSalesDepartment" label="含税总价(元)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
              <el-table-column v-if="isSalesDepartment" label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
            <!--操作-->
              <el-table-column width="150" label="操作" align="center" fixed="right">
                <template #default="scope">
@@ -102,7 +120,7 @@
        <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="paymentMethod" show-overflow-tooltip />
        <el-table-column label="合同金额(元)" prop="contractAmount" width="220" show-overflow-tooltip
        <el-table-column v-if="isSalesDepartment" label="合同金额(元)" prop="contractAmount" width="220" show-overflow-tooltip
          :formatter="formattedNumber" />
        <el-table-column label="录入人" prop="entryPersonName" width="100" show-overflow-tooltip />
        <el-table-column label="录入日期" prop="entryDate" width="120" show-overflow-tooltip />
@@ -167,7 +185,7 @@
               <el-col :span="12">
                  <el-form-item label="签订日期:" prop="executionDate">
                     <el-date-picker style="width: 100%" v-model="form.executionDate" value-format="YYYY-MM-DD"
                                             format="YYYY-MM-DD" type="date" placeholder="请选择" clearable :disabled="operationType === 'view'" />
                                                format="YYYY-MM-DD" type="date" placeholder="请选择" clearable :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
@@ -175,6 +193,32 @@
                     <el-input v-model="form.paymentMethod" placeholder="请输入" clearable :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12">
                  <el-form-item label="订单类型:" prop="orderType">
                     <el-input v-model="form.orderType" placeholder="请输入" clearable :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="订单行:" prop="orderLine">
                     <el-input v-model="form.orderLine" placeholder="请输入" clearable :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12">
                  <el-form-item label="需求日期:" prop="demandDate">
                     <el-date-picker style="width: 100%" v-model="form.demandDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
                                                type="date" placeholder="请选择" clearable :disabled="operationType === 'view'" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
            <el-form-item label="交货日期:" prop="entryDate">
              <el-date-picker style="width: 100%" v-model="form.deliveryDate" 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="12">
@@ -194,14 +238,6 @@
                  </el-form-item>
               </el-col>
            </el-row>
        <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="交货日期:" prop="entryDate">
              <el-date-picker style="width: 100%" v-model="form.deliveryDate" value-format="YYYY-MM-DD" format="YYYY-MM-DD"
                              type="date" placeholder="请选择" clearable />
            </el-form-item>
          </el-col>
        </el-row>
            <el-row>
               <el-form-item label="产品信息:" prop="entryDate">
                  <el-button v-if="operationType !== 'view'" type="primary" @click="openProductForm('add')">添加</el-button>
@@ -215,13 +251,23 @@
               <el-table-column align="center" label="序号" type="index" width="60" />
               <el-table-column label="产品大类" prop="productCategory" />
               <el-table-column label="图纸编号" prop="specificationModel" />
               <el-table-column label="物料号" prop="material" />
               <el-table-column label="物料号" prop="materialNo" width="120" show-overflow-tooltip />
               <el-table-column label="单位" prop="unit" />
               <el-table-column label="数量" prop="quantity" />
               <el-table-column label="税率(%)" prop="taxRate" />
               <el-table-column label="含税单价(元)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
               <el-table-column label="含税总价(元)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
               <el-table-column label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
               <el-table-column label="交货数量" prop="deliveryQuantity" />
               <el-table-column label="剩余数量" prop="remainingQuantity" />
               <el-table-column label="子库存" prop="subInventory" width="120" show-overflow-tooltip />
               <el-table-column label="货位" prop="location" width="120" show-overflow-tooltip />
               <el-table-column label="是否喷砂" prop="isSpray" width="100" align="center">
                  <template #default="scope">
                     <el-tag v-if="scope.row.isSpray" type="warning">是</el-tag>
                     <el-tag v-else type="info">否</el-tag>
                  </template>
               </el-table-column>
               <el-table-column v-if="isSalesDepartment" label="税率(%)" prop="taxRate" />
               <el-table-column v-if="isSalesDepartment" label="含税单价(元)" prop="taxInclusiveUnitPrice" :formatter="formattedNumber" />
               <el-table-column v-if="isSalesDepartment" label="含税总价(元)" prop="taxInclusiveTotalPrice" :formatter="formattedNumber" />
               <el-table-column v-if="isSalesDepartment" label="不含税总价(元)" prop="taxExclusiveTotalPrice" :formatter="formattedNumber" />
               <el-table-column fixed="right" label="操作" min-width="60" align="center" v-if="operationType !== 'view'">
                  <template #default="scope">
                     <el-button link type="primary" size="small" 
@@ -345,8 +391,8 @@
            </el-row>
            <el-row :gutter="30">
               <el-col :span="24">
                  <el-form-item label="物料号:" prop="material">
                     <el-input v-model="productForm.material" placeholder="请输入物料号" clearable />
                  <el-form-item label="物料号:" prop="materialNo">
                     <el-input v-model="productForm.materialNo" placeholder="请输入物料号" clearable />
                  </el-form-item>
               </el-col>
            </el-row>
@@ -356,9 +402,10 @@
                     <el-input v-model="productForm.unit" placeholder="请输入" clearable />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
               <el-col :span="12" v-if="isSalesDepartment">
                  <el-form-item label="税率(%):" prop="taxRate">
                     <el-select v-model="productForm.taxRate" placeholder="请选择" clearable @change="calculateFromTaxRate">
                        <el-option label="0" value="0" />
                        <el-option label="1" value="1" />
                        <el-option label="6" value="6" />
                        <el-option label="13" value="13" />
@@ -368,10 +415,43 @@
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12">
                  <el-form-item label="交货数量:" prop="deliveryQuantity">
                     <el-input-number :step="0.1" :min="0" v-model="productForm.deliveryQuantity" placeholder="请输入" clearable
                        :precision="2" style="width: 100%" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="剩余数量:" prop="remainingQuantity">
                     <el-input-number :step="0.1" :min="0" v-model="productForm.remainingQuantity" placeholder="请输入" clearable
                        :precision="2" style="width: 100%" />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12">
                  <el-form-item label="子库存:" prop="subInventory">
                     <el-input v-model="productForm.subInventory" placeholder="请输入" clearable />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
                  <el-form-item label="货位:" prop="location">
                     <el-input v-model="productForm.location" placeholder="请输入" clearable />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12">
                  <el-form-item label="是否喷砂:" prop="isSpray">
                     <el-switch v-model="productForm.isSpray" active-text="是" inactive-text="否" />
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
               <el-col :span="12" v-if="isSalesDepartment">
                  <el-form-item label="含税单价(元):" prop="taxInclusiveUnitPrice">
                     <el-input-number :step="0.01" :min="0" v-model="productForm.taxInclusiveUnitPrice" style="width: 100%"
                                              :precision="2"
                                              placeholder="请输入" clearable @change="calculateFromUnitPrice" />
                                                 :precision="2"
                                                 placeholder="请输入" clearable @change="calculateFromUnitPrice" />
                  </el-form-item>
               </el-col>
               <el-col :span="12">
@@ -382,7 +462,7 @@
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
            <el-row :gutter="30" v-if="isSalesDepartment">
               <el-col :span="12">
                  <el-form-item label="含税总价(元):" prop="taxInclusiveTotalPrice">
                     <el-input v-model="productForm.taxInclusiveTotalPrice" placeholder="请输入" clearable @change="calculateFromTotalPrice" />
@@ -394,7 +474,7 @@
                  </el-form-item>
               </el-col>
            </el-row>
            <el-row :gutter="30">
            <el-row :gutter="30" v-if="isSalesDepartment">
               <el-col :span="12">
                  <el-form-item label="发票类型:" prop="invoiceType">
                     <el-select v-model="productForm.invoiceType" placeholder="请选择" clearable>
@@ -631,6 +711,12 @@
const userStore = useUserStore();
const { proxy } = getCurrentInstance();
// 是否是销售部(控制价格字段显示/隐藏)
const isSalesDepartment = computed(() => {
   return currentFactoryName.value === '销售部';
});
const tableData = ref([]);
const productData = ref([]);
const selectedRows = ref([]);
@@ -654,6 +740,12 @@
   searchForm: {
      customerName: "", // 客户名称
      salesContractNo: "", // 销售合同编号
      projectName: "", // 项目名称
      orderType: "", // 订单类型
      orderLine: "", // 订单行
      demandDate: null, // 需求日期
      demandDateStart: undefined,
      demandDateEnd: undefined,
      entryDate: null, // 录入日期
      entryDateStart: undefined,
      entryDateEnd: undefined,
@@ -662,12 +754,16 @@
      salesContractNo: "",
      salesman: "",
      customerId: "",
      projectName: "",
      entryPerson: "",
      entryDate: "",
    deliveryDate: "",
      maintenanceTime: "",
      productData: [],
      executionDate: "",
      orderType: "",
      orderLine: "",
      demandDate: "",
   },
   rules: {
      salesman: [{ required: true, message: "请选择", trigger: "change" }],
@@ -690,10 +786,15 @@
      productId: "",
      productModelId: "",
      productCategory: "",
      material: "",
      materialNo: "",
      specificationModel: "",
      unit: "",
      quantity: "",
      deliveryQuantity: 0,
      remainingQuantity: 0,
      subInventory: "",
      location: "",
      isSpray: false,
      taxInclusiveUnitPrice: "",
      taxRate: "",
      taxInclusiveTotalPrice: "",
@@ -801,13 +902,23 @@
   },
});
const changeDaterange = (value) => {
const changeDaterange = (value, type = 'entryDate') => {
   if (value) {
      searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
      searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
      if (type === 'demandDate') {
         searchForm.demandDateStart = dayjs(value[0]).format("YYYY-MM-DD");
         searchForm.demandDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
      } else {
         searchForm.entryDateStart = dayjs(value[0]).format("YYYY-MM-DD");
         searchForm.entryDateEnd = dayjs(value[1]).format("YYYY-MM-DD");
      }
   } else {
      searchForm.entryDateStart = undefined;
      searchForm.entryDateEnd = undefined;
      if (type === 'demandDate') {
         searchForm.demandDateStart = undefined;
         searchForm.demandDateEnd = undefined;
      } else {
         searchForm.entryDateStart = undefined;
         searchForm.entryDateEnd = undefined;
      }
   }
   handleQuery();
};