Merge branch 'dev_河南_鹤壁天沐玻璃厂' of http://114.132.189.42:9002/r/product-inventory-management into dev_河南_鹤壁天沐玻璃厂
已修改10个文件
214 ■■■■ 文件已修改
src/views/procurementManagement/paymentLedger/index.vue 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementReport/index.vue 34 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/purchaseReturnOrder/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/qualityAnalysis/components/right-top.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPayment/index.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/receiptPaymentLedger/index.vue 117 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/salesManagement/salesLedger/index.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/paymentLedger/index.vue
@@ -195,6 +195,14 @@
    const n = Number(v);
    return Number.isFinite(n) ? n : 0;
  };
  const toTime = (v) => {
    const t = new Date(v).getTime();
    return Number.isFinite(t) ? t : -Infinity;
  };
  const toId = (v) => {
    const n = Number(v);
    return Number.isFinite(n) ? n : -Infinity;
  };
  // 以当前右侧表格展示的数据为准(分页 slice 后的数据)
  const rows = originalTableDataSon.value || [];
@@ -214,6 +222,25 @@
  );
  const paymentTotal = rows.reduce((sum, r) => sum + toNum(r?.paymentAmount), 0);
  const latestRowByContract = new Map();
  for (const r of rows) {
    const contractNo = r?.purchaseContractNumber;
    if (!contractNo) continue;
    const existed = latestRowByContract.get(contractNo);
    const currentTime = toTime(r?.paymentDate);
    const existedTime = toTime(existed?.paymentDate);
    const shouldReplace =
      !existed ||
      currentTime > existedTime ||
      (currentTime === existedTime && toId(r?.id) > toId(existed?.id));
    if (shouldReplace) {
      latestRowByContract.set(contractNo, r);
    }
  }
  const payableTotal = Array.from(latestRowByContract.values()).reduce(
    (sum, r) => sum + toNum(r?.payableAmount),
    0
  );
  const columns = param?.columns || [];
  const summary = columns.map((col, idx) => {
@@ -221,13 +248,9 @@
    const prop = col?.property ?? col?.prop;
    if (prop === "invoiceAmount") return invoiceTotal.toFixed(2);
    if (prop === "paymentAmount") return paymentTotal.toFixed(2);
    if (prop === "payableAmount") return payableTotal.toFixed(2);
    return "";
  });
  if (summary.length > 0) {
    summary[summary.length - 1] =
      rows.length > 0 ? toNum(rows[rows.length - 1]?.payableAmount).toFixed(2) : "0.00";
  }
  return summary;
};
src/views/procurementManagement/procurementLedger/index.vue
@@ -108,8 +108,8 @@
                               prop="quantity" />
              <el-table-column label="可用数量"
                               prop="availableQuality" />
              <el-table-column label="退货数量"
                               prop="returnQuality" />
              <!-- <el-table-column label="退货数量"
                               prop="returnQuality" /> -->
              <el-table-column label="入库状态"
                               width="100px"
                               align="center">
src/views/procurementManagement/procurementReport/index.vue
@@ -127,24 +127,24 @@
      return val ? parseFloat(val).toLocaleString() : '0'
    }
  },
  // {
  //   label: '退货数量',
  //   prop: 'returnQuantity',
  //   width: 120,
  //   formatData: (val) => {
  //     return val ? parseFloat(val).toLocaleString() : '0'
  //   }
  // },
  // {
  //   label: '退货金额',
  //   prop: 'returnAmount',
  //   width: 120,
  //   formatData: (val) => {
  //     return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '¥0.00'
  //   }
  // },
  {
    label: '退货数量',
    prop: 'returnQuantity',
    width: 120,
    formatData: (val) => {
      return val ? parseFloat(val).toLocaleString() : '0'
    }
  },
  {
    label: '退货金额',
    prop: 'returnAmount',
    width: 120,
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '¥0.00'
    }
  },
  {
    label: '退款储量',
    label: '购买金额',
    prop: 'purchaseAmount',
    formatData: (val) => {
      return val ? `¥${parseFloat(val).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}` : '¥0.00'
src/views/procurementManagement/purchaseReturnOrder/index.vue
@@ -82,7 +82,7 @@
          <el-table-column label="规格型号" prop="specificationModel" min-width="140" show-overflow-tooltip />
          <el-table-column label="单位" prop="unit" width="80" />
          <el-table-column label="数量" prop="quantity" width="80" />
          <el-table-column label="退货数量" prop="returnQuantity" width="100" />
          <!-- <el-table-column label="退货数量" prop="returnQuantity" width="100" /> -->
          <el-table-column label="库存预警数量" prop="warnNum" width="120" />
          <el-table-column label="税率(%)" prop="taxRate" width="90" />
          <el-table-column label="含税单价(元)" prop="taxInclusiveUnitPrice" width="130">
src/views/reportAnalysis/dataDashboard/components/basic/center-top.vue
@@ -21,12 +21,12 @@
        <div class="card-content">
          <span class="card-label">客户总数</span>
          <span class="card-value">{{ totalCustomers }}</span>
          <div class="card-compare"
          <!-- <div class="card-compare"
               :class="compareClass(customersYoY)">
            <span>同比</span>
            <span class="compare-value">{{ formatPercent(customersYoY) }}</span>
            <span class="compare-icon">{{ customersYoY >= 0 ? '↑' : '↓' }}</span>
          </div>
          </div> -->
        </div>
      </div>
      <div class="stat-card">
@@ -36,12 +36,12 @@
        <div class="card-content">
          <span class="card-label">供应商总数</span>
          <span class="card-value">{{ totalSuppliers }}</span>
          <div class="card-compare"
          <!-- <div class="card-compare"
               :class="compareClass(suppliersYoY)">
            <span>同比</span>
            <span class="compare-value">{{ formatPercent(suppliersYoY) }}</span>
            <span class="compare-icon">{{ suppliersYoY >= 0 ? '↑' : '↓' }}</span>
          </div>
          </div> -->
        </div>
      </div>
    </div>
src/views/reportAnalysis/dataDashboard/components/basic/left-bottom.vue
@@ -163,7 +163,7 @@
const fetchCustomerOptions = async () => {
  try {
    const params = { pageNum: 1, pageSize: 200 }
    const params = { current: -1, size: -1 }
    const res = await listCustomer(params)
    const records = res?.records || res?.data?.records || res?.rows || []
    customerOptions.value = records.map((r) => ({
src/views/reportAnalysis/qualityAnalysis/components/right-top.vue
@@ -1,6 +1,6 @@
<template>
  <div>
    <PanelHeader title="不合格产品排名" />
    <PanelHeader title="合格产品排名" />
    <div class="main-panel panel-item-customers">
      <div class="main-panel-container">
        <div style="color: white" class="main-panel-box" v-for="(item, index) in panelList" :key="index">
src/views/salesManagement/receiptPayment/index.vue
@@ -204,6 +204,8 @@
        border
        style="width: 100%"
        size="small"
        show-summary
        :summary-method="summarizeFormTable"
      >
        <el-table-column type="index" label="序号" width="50" align="center"/>
        <el-table-column label="销售合同号" prop="salesContractNo" show-overflow-tooltip />
@@ -403,7 +405,7 @@
const summarizeMainTable = (param) => {
  return proxy.summarizeTable(
    param,
    ["receiptPaymentAmountTotal", "noReceiptAmount"],
    ["invoiceTotal", "pendingInvoiceTotal"],
    {
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
@@ -414,6 +416,10 @@
const summarizeChildrenTable = (param) => {
  return proxy.summarizeTable(param, ["receiptPaymentAmount"]);
};
// 新增回款弹窗表合计方法
const summarizeFormTable = (param) => {
  return proxy.summarizeTable(param, ["pendingInvoiceTotal", "receiptPaymentAmount"]);
};
// 打开弹框
const openForm = () => {
  if (selectedRows.value.length === 0) {
src/views/salesManagement/receiptPaymentLedger/index.vue
@@ -16,7 +16,7 @@
        >
      </div>
    </div>
    <div style="display: flex">
    <div class="ledger-content">
      <div class="table_list">
        <el-table
          :data="tableData"
@@ -27,38 +27,39 @@
          :summary-method="summarizeMainTable"
          @row-click="rowClickMethod"
          height="calc(100vh - 18.5em)"
          style="width: 100%"
        >
          <el-table-column
            align="center"
            label="序号"
            type="index"
            width="60"
            min-width="60"
          />
          <el-table-column
            label="客户名称"
            prop="customerName"
            show-overflow-tooltip
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="合同金额(元)"
            prop="invoiceTotal"
            show-overflow-tooltip
            :formatter="formattedNumber"
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="回款金额(元)"
            prop="receiptPaymentAmount"
            show-overflow-tooltip
            :formatter="formattedNumber"
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="应收金额(元)"
            prop="unReceiptPaymentAmount"
            show-overflow-tooltip
                        width="200"
                        min-width="200"
          >
            <template #default="{ row, column }">
              <el-text type="danger">
@@ -84,44 +85,45 @@
          show-summary
          :summary-method="summarizeMainTable1"
          height="calc(100vh - 18.5em)"
          style="width: 100%"
        >
          <el-table-column
            align="center"
            label="序号"
            type="index"
            width="60"
            min-width="60"
          />
          <el-table-column
            label="发生日期"
            prop="receiptPaymentDate"
            show-overflow-tooltip
                        width="110"
                        min-width="110"
          />
          <el-table-column
            label="销售合同号"
            prop="salesContractNo"
            show-overflow-tooltip
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="合同金额(元)"
            prop="invoiceTotal"
            show-overflow-tooltip
            :formatter="formattedNumber"
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="回款金额(元)"
            prop="receiptPaymentAmount"
            show-overflow-tooltip
            :formatter="formattedNumber"
                        width="200"
                        min-width="200"
          />
          <el-table-column
            label="应收金额(元)"
            prop="unReceiptPaymentAmount"
            show-overflow-tooltip
                        width="200"
                        min-width="200"
          >
            <template #default="{ row, column }">
              <el-text type="danger">
@@ -188,7 +190,8 @@
  });
};
const formattedNumber = (row, column, cellValue) => {
  return parseFloat(cellValue).toFixed(2);
  const num = Number(cellValue);
  return Number.isFinite(num) ? num.toFixed(2) : "0.00";
};
// 主表合计方法
const summarizeMainTable = (param) => {
@@ -203,25 +206,71 @@
};
// 子表合计方法
const summarizeMainTable1 = (param) => {
  var summarizeTable = proxy.summarizeTable(
    param,
    ["invoiceAmount", "receiptAmount", "unReceiptAmount"],
    {
      ticketsNum: { noDecimal: true }, // 不保留小数
      futureTickets: { noDecimal: true }, // 不保留小数
  const toNum = (v) => {
    const n = Number(v);
    return Number.isFinite(n) ? n : 0;
  };
  const toTime = (v) => {
    const t = new Date(v).getTime();
    return Number.isFinite(t) ? t : -Infinity;
  };
  const toId = (v) => {
    const n = Number(v);
    return Number.isFinite(n) ? n : -Infinity;
  };
  // 以右侧当前展示数据为准
  const rows = receiptRecord.value || [];
  // 合同金额按销售合同号去重
  const invoiceByContract = new Map();
  for (const row of rows) {
    const contractNo = row?.salesContractNo;
    if (!contractNo) continue;
    if (!invoiceByContract.has(contractNo)) {
      invoiceByContract.set(contractNo, toNum(row?.invoiceTotal));
    }
  );
  // 取最后一行数据;
  if (receiptRecord.value?.length > 0) {
    const index = tableData.value.findIndex(
      (item) => item.id == customerId.value
    );
    summarizeTable[summarizeTable.length - 1] =
      tableData.value[index].unReceiptPaymentAmount.toFixed(2);
  } else {
    summarizeTable[summarizeTable.length - 1] = 0.0;
  }
  return summarizeTable;
  const invoiceTotal = Array.from(invoiceByContract.values()).reduce(
    (sum, val) => sum + val,
    0
  );
  // 回款金额正常求和
  const receiptTotal = rows.reduce(
    (sum, row) => sum + toNum(row?.receiptPaymentAmount),
    0
  );
  const latestRowByContract = new Map();
  for (const row of rows) {
    const contractNo = row?.salesContractNo;
    if (!contractNo) continue;
    const existed = latestRowByContract.get(contractNo);
    const currentTime = toTime(row?.receiptPaymentDate);
    const existedTime = toTime(existed?.receiptPaymentDate);
    const shouldReplace =
      !existed ||
      currentTime > existedTime ||
      (currentTime === existedTime && toId(row?.id) > toId(existed?.id));
    if (shouldReplace) {
      latestRowByContract.set(contractNo, row);
    }
  }
  const unReceiptTotal = Array.from(latestRowByContract.values()).reduce(
    (sum, row) => sum + toNum(row?.unReceiptPaymentAmount),
    0
  );
  const columns = param?.columns || [];
  return columns.map((column, index) => {
    if (index === 0) return "合计";
    const prop = column?.property ?? column?.prop;
    if (prop === "invoiceTotal") return invoiceTotal.toFixed(2);
    if (prop === "receiptPaymentAmount") return receiptTotal.toFixed(2);
    if (prop === "unReceiptPaymentAmount") return unReceiptTotal.toFixed(2);
    return "";
  });
};
const receiptPaymentList = (id) => {
@@ -262,7 +311,13 @@
</script>
<style scoped lang="scss">
.ledger-content {
  display: flex;
  gap: 12px;
}
.table_list {
  width: 50%;
  flex: 1;
  min-width: 0;
}
</style>
src/views/salesManagement/salesLedger/index.vue
@@ -66,8 +66,10 @@
                       :value="2" />
            <el-option label="审批失败"
                       :value="3" />
            <el-option label="已发货"
            <el-option label="审批通过"
                       :value="4" />
            <el-option label="已发货"
                       :value="5" />
          </el-select>
        </el-form-item>
        <el-form-item label="入库状态:">