已添加1个文件
已修改11个文件
1252 ■■■■■ 文件已修改
src/views/basicData/product/index.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/dispatchLog/index.vue 110 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/issueManagement/index.vue 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/receiptManagement/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/inventoryManagement/stockManagement/index.vue 133 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/components/Modal.vue 874 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/invoiceEntry/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/fileList.vue 67 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/procurementManagement/procurementLedger/index.vue 20 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/productionManagement/productionReporting/index.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/reportAnalysis/projectProfit/index.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/basicData/product/index.vue
@@ -280,7 +280,7 @@
      }
    ],
    unit: [{ required: true, message: "请输入", trigger: "blur" }],
    speculativeTradingName: [{ required: true, message: "请选择绑定机器", trigger: "change" }],
    speculativeTradingName: [{ required: false, message: "请选择绑定机器", trigger: "change" }],
  },
});
const { form, rules, modelForm, modelRules } = toRefs(data);
src/views/inventoryManagement/dispatchLog/index.vue
@@ -1,7 +1,7 @@
<template>
    <div class="app-container">
        <el-tabs v-model="activeTab" @tab-change="handleTabChange">
            <el-tab-pane label="生产出库" name="production">
            <el-tab-pane label="成品出库" name="production">
                <div class="search_form">
                    <div>
<!--                        <span class="search_title">客户名称:</span>-->
@@ -69,9 +69,9 @@
                </div>
            </el-tab-pane>
<!--            <el-tab-pane label="采购出库" name="purchase">-->
<!--                <div class="search_form">-->
<!--                    <div>-->
            <el-tab-pane label="原料出库" name="purchase">
                <div class="search_form">
                    <div>
<!--&lt;!&ndash;                        <span class="search_title">供应商名称:</span>&ndash;&gt;-->
<!--&lt;!&ndash;                        <el-input&ndash;&gt;-->
<!--&lt;!&ndash;                            v-model="searchForm.supplierName"&ndash;&gt;-->
@@ -81,63 +81,63 @@
<!--&lt;!&ndash;                            clearable&ndash;&gt;-->
<!--&lt;!&ndash;                            prefix-icon="Search"&ndash;&gt;-->
<!--&lt;!&ndash;                        />&ndash;&gt;-->
<!--                        <span class="search_title ml10">出库日期:</span>-->
<!--                        <el-date-picker-->
<!--                            v-model="searchForm.timeStr"-->
<!--                            type="date"-->
<!--                            placeholder="请选择日期"-->
<!--                            value-format="YYYY-MM-DD"-->
<!--                            format="YYYY-MM-DD"-->
<!--                            clearable-->
<!--                            @change="handleQuery"-->
<!--                        />-->
<!--                        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>-->
<!--                    </div>-->
<!--                    <div>-->
<!--                        <el-button @click="handleOut">导出</el-button>-->
<!--                        <el-button type="danger" plain @click="handleDelete">删除</el-button>-->
<!--                        <el-button type="primary" plain @click="handlePrint">打印</el-button>-->
<!--                    </div>-->
<!--                </div>-->
<!--                <div class="table_list">-->
<!--                    <el-table-->
<!--                        :data="tableData"-->
<!--                        border-->
<!--                        v-loading="tableLoading"-->
<!--                        @selection-change="handleSelectionChange"-->
<!--                        :expand-row-keys="expandedRowKeys"-->
<!--                        :row-key="(row) => row.id"-->
<!--                        show-summary-->
<!--                        style="width: 100%"-->
<!--                        :summary-method="summarizeMainTable"-->
<!--                        height="calc(100vh - 18.5em)"-->
<!--                    >-->
<!--                        <el-table-column align="center" type="selection" width="55" />-->
<!--                        <el-table-column align="center" label="序号" type="index" width="60" />-->
<!--                        <el-table-column label="出库日期" prop="createTime" min-width="120" show-overflow-tooltip />-->
                        <span class="search_title ml10">出库日期:</span>
                        <el-date-picker
                            v-model="searchForm.timeStr"
                            type="date"
                            placeholder="请选择日期"
                            value-format="YYYY-MM-DD"
                            format="YYYY-MM-DD"
                            clearable
                            @change="handleQuery"
                        />
                        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>
                    </div>
                    <div>
                        <el-button @click="handleOut">导出</el-button>
                        <el-button type="danger" plain @click="handleDelete">删除</el-button>
                        <el-button type="primary" plain @click="handlePrint">打印</el-button>
                    </div>
                </div>
                <div class="table_list">
                    <el-table
                        :data="tableData"
                        border
                        v-loading="tableLoading"
                        @selection-change="handleSelectionChange"
                        :expand-row-keys="expandedRowKeys"
                        :row-key="(row) => row.id"
                        show-summary
                        style="width: 100%"
                        :summary-method="summarizeMainTable"
                        height="calc(100vh - 18.5em)"
                    >
                        <el-table-column align="center" type="selection" width="55" />
                        <el-table-column align="center" label="序号" type="index" width="60" />
                        <el-table-column label="出库日期" prop="createTime" min-width="120" show-overflow-tooltip />
<!--&lt;!&ndash;                        <el-table-column label="供应商名称" prop="supplierName" width="250" show-overflow-tooltip />&ndash;&gt;-->
<!--                        <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />-->
<!--                        <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />-->
<!--                        <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip />-->
<!--                        <el-table-column label="出库数量" prop="inboundNum" width="100" show-overflow-tooltip />-->
                        <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
                        <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
                        <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip />
                        <el-table-column label="出库数量" prop="inboundNum" width="100" show-overflow-tooltip />
<!--&lt;!&ndash;                        <el-table-column label="含税单价(元)" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip />&ndash;&gt;-->
<!--&lt;!&ndash;                        <el-table-column label="含税总价(元)" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />&ndash;&gt;-->
<!--&lt;!&ndash;                        <el-table-column label="税率(%)" prop="taxRate" width="100" show-overflow-tooltip />&ndash;&gt;-->
<!--&lt;!&ndash;                        <el-table-column label="不含税总价(元)" prop="taxExclusiveTotalPrice" width="180" show-overflow-tooltip />&ndash;&gt;-->
<!--                        <el-table-column label="出库人" prop="createBy" width="80" show-overflow-tooltip />-->
<!--                    </el-table>-->
<!--                    <pagination-->
<!--                        v-show="total > 0"-->
<!--                        :total="total"-->
<!--                        layout="total, sizes, prev, pager, next, jumper"-->
<!--                        :page="page.current"-->
<!--                        :limit="page.size"-->
<!--                        @pagination="paginationChange"-->
<!--                    />-->
<!--                </div>-->
<!--            </el-tab-pane>-->
                        <el-table-column label="出库人" prop="createBy" width="80" show-overflow-tooltip />
                    </el-table>
                    <pagination
                        v-show="total > 0"
                        :total="total"
                        layout="total, sizes, prev, pager, next, jumper"
                        :page="page.current"
                        :limit="page.size"
                        @pagination="paginationChange"
                    />
                </div>
            </el-tab-pane>
            <el-tab-pane label="成品出库" name="manual">
            <el-tab-pane label="材料出库" name="manual">
                <div class="search_form">
                    <div>
<!--                        <span class="search_title">供应商名称:</span>-->
src/views/inventoryManagement/issueManagement/index.vue
@@ -1,7 +1,7 @@
<template>
  <div class="app-container">
    <el-tabs v-model="activeTab" @tab-change="handleTabChange">
      <el-tab-pane label="生产出库" name="production">
      <el-tab-pane label="成品出库" name="production">
        <div class="search_form">
          <div>
<!--            <span class="search_title">客户名称:</span>-->
@@ -29,7 +29,7 @@
            :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
            <el-table-column align="center" label="序号" type="index" width="60" />
            <el-table-column label="入库时间" prop="createTime" width="100" show-overflow-tooltip />
            <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip />
            <!-- <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip /> -->
<!--            <el-table-column label="客户名称" prop="customerName" width="240" show-overflow-tooltip />-->
            <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
            <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
@@ -39,7 +39,7 @@
<!--            <el-table-column label="含税总价" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />-->
<!--            <el-table-column label="税率(%)" prop="taxRate" width="80" show-overflow-tooltip />-->
<!--            <el-table-column label="不含税总价" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />-->
            <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip />
            <!-- <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip /> -->
            <el-table-column fixed="right" label="操作" min-width="60" align="center">
              <template #default="scope">
                <el-button link type="primary" size="small" @click="openForm(scope.row);">领用</el-button>
@@ -80,7 +80,7 @@
           <el-table-column align="center" type="selection" width="55" />
           <el-table-column align="center" label="序号" type="index" width="60" />
           <el-table-column label="入库时间" prop="createTime" width="100" show-overflow-tooltip />
           <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip />
           <!-- <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip /> -->
<!-- &lt;!&ndash;            <el-table-column label="供应商名称" prop="supplierName" width="240" show-overflow-tooltip />&ndash;&gt; -->
           <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
           <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
@@ -90,7 +90,7 @@
&lt;!&ndash;            <el-table-column label="含税总价" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />&ndash;&gt;
&lt;!&ndash;            <el-table-column label="税率(%)" prop="taxRate" width="80" show-overflow-tooltip />&ndash;&gt;
&lt;!&ndash;            <el-table-column label="不含税总价" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />&ndash;&gt; -->
           <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip />
           <!-- <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip /> -->
           <el-table-column fixed="right" label="操作" min-width="60" align="center">
             <template #default="scope">
               <el-button link type="primary" size="small" @click="openForm(scope.row);">领用</el-button>
@@ -131,7 +131,7 @@
            <el-table-column align="center" type="selection" width="55" />
            <el-table-column align="center" label="序号" type="index" width="60" />
            <el-table-column label="入库时间" prop="inboundDate" width="100" show-overflow-tooltip />
            <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip />
            <!-- <el-table-column label="入库批次" prop="inboundBatches" width="160" show-overflow-tooltip /> -->
            <!-- <el-table-column label="供应商名称" prop="supplierName" width="240" show-overflow-tooltip /> -->
            <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
            <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
@@ -142,7 +142,7 @@
<!--            <el-table-column label="含税总价" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip />-->
<!--            <el-table-column label="税率(%)" prop="taxRate" width="80" show-overflow-tooltip />-->
<!--            <el-table-column label="不含税总价" prop="taxExclusiveTotalPrice" width="100" show-overflow-tooltip />-->
            <el-table-column label="入库人" prop="createBy" show-overflow-tooltip />
            <!-- <el-table-column label="入库人" prop="createBy" show-overflow-tooltip /> -->
            <el-table-column fixed="right" label="操作" width="100" align="center">
              <template #default="scope">
                <el-button link type="primary" size="small" @click="openForm(scope.row);">领用</el-button>
src/views/inventoryManagement/receiptManagement/index.vue
@@ -1,7 +1,7 @@
<template>
  <div class="app-container">
    <el-tabs v-model="activeTab" @tab-change="handleTabChange">
      <el-tab-pane label="生产入库" name="production">
      <el-tab-pane label="成品入库" name="production">
        <div class="search_form">
          <div>
<!--            <span class="search_title">客户名称:</span>-->
@@ -46,7 +46,7 @@
        </div>
      </el-tab-pane>
      
     <el-tab-pane label="采购入库" name="purchase">
     <el-tab-pane label="原料入库" name="purchase">
       <div class="search_form">
         <div>
<!--&lt;!&ndash;            <span class="search_title">供应商名称:</span>&ndash;&gt;-->
src/views/inventoryManagement/stockManagement/index.vue
@@ -1,7 +1,7 @@
<template>
  <div class="app-container">
    <el-tabs v-model="activeTab" @tab-change="handleTabChange">
      <el-tab-pane label="生产入库" name="production">
      <el-tab-pane label="成品库存" name="production">
        <div class="search_form">
          <div>
<!--            <span class="search_title">客户名称:</span>-->
@@ -55,54 +55,54 @@
        </div>
      </el-tab-pane>
<!--      <el-tab-pane label="采购入库" name="purchase">-->
<!--        <div class="search_form">-->
<!--          <div>-->
<!--            <span class="search_title ml10">入库日期:</span>-->
<!--            <el-date-picker-->
<!--              v-model="searchForm.timeStr"-->
<!--              type="date"-->
<!--              placeholder="请选择日期"-->
<!--              value-format="YYYY-MM-DD"-->
<!--              format="YYYY-MM-DD"-->
<!--              clearable-->
<!--              @change="handleQuery"-->
<!--            />-->
<!--            <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>-->
<!--          </div>-->
<!--          <div>-->
<!--            <el-button @click="handleOut">导出</el-button>-->
<!--            <el-button type="danger" plain @click="handleDelete">删除</el-button>-->
<!--          </div>-->
<!--        </div>-->
<!--        <div class="table_list">-->
<!--          <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"-->
<!--            :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"-->
<!--            :row-class-name="tableRowClassName"-->
<!--            :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">-->
<!--            <el-table-column align="center" type="selection" width="55" />-->
<!--            <el-table-column align="center" label="序号" type="index" width="60" />-->
<!--            <el-table-column label="入库日期" prop="createTime" width="100" show-overflow-tooltip />-->
<!--            <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />-->
<!--            <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />-->
<!--            <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip />-->
<!--                        <el-table-column label="库存数量" prop="inboundNum" width="100" show-overflow-tooltip />-->
<!--                        <el-table-column label="已出库数量" prop="totalInboundNum" show-overflow-tooltip />-->
<!--                        <el-table-column label="待出库数量" prop="inboundNum0" show-overflow-tooltip />-->
<!--            <el-table-column label="库存预警数量" prop="warnNum" width="130" show-overflow-tooltip />-->
<!--            <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip />-->
<!--            <el-table-column fixed="right" label="操作" min-width="60" align="center">-->
<!--              <template #default="scope">-->
<!--                <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">编辑</el-button>-->
<!--              </template>-->
<!--            </el-table-column>-->
<!--          </el-table>-->
<!--          <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"-->
<!--            :page="page.current" :limit="page.size" @pagination="paginationChange" />-->
<!--        </div>-->
<!--      </el-tab-pane>-->
     <el-tab-pane label="原料库存" name="purchase">
       <div class="search_form">
         <div>
           <span class="search_title ml10">入库日期:</span>
           <el-date-picker
             v-model="searchForm.timeStr"
             type="date"
             placeholder="请选择日期"
             value-format="YYYY-MM-DD"
             format="YYYY-MM-DD"
             clearable
             @change="handleQuery"
           />
           <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button>
         </div>
         <div>
           <el-button @click="handleOut">导出</el-button>
           <el-button type="danger" plain @click="handleDelete">删除</el-button>
         </div>
       </div>
       <div class="table_list">
         <el-table :data="tableData" border v-loading="tableLoading" @selection-change="handleSelectionChange"
           :expand-row-keys="expandedRowKeys" :row-key="row => row.id" show-summary style="width: 100%"
           :row-class-name="tableRowClassName"
           :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)">
           <el-table-column align="center" type="selection" width="55" />
           <el-table-column align="center" label="序号" type="index" width="60" />
           <el-table-column label="入库日期" prop="createTime" width="100" show-overflow-tooltip />
           <el-table-column label="产品大类" prop="productCategory" show-overflow-tooltip />
           <el-table-column label="规格型号" prop="specificationModel" show-overflow-tooltip />
           <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip />
                        <el-table-column label="库存数量" prop="inboundNum" width="100" show-overflow-tooltip />
                        <el-table-column label="已出库数量" prop="totalInboundNum" show-overflow-tooltip />
                        <el-table-column label="待出库数量" prop="inboundNum0" show-overflow-tooltip />
           <!-- <el-table-column label="库存预警数量" prop="warnNum" width="130" show-overflow-tooltip />
           <el-table-column label="入库人" prop="createBy" width="80" show-overflow-tooltip /> -->
           <el-table-column fixed="right" label="操作" min-width="60" align="center">
             <template #default="scope">
               <el-button link type="primary" size="small" @click="openForm('edit', scope.row);">编辑</el-button>
             </template>
           </el-table-column>
         </el-table>
         <pagination v-show="total > 0" :total="total" layout="total, sizes, prev, pager, next, jumper"
           :page="page.current" :limit="page.size" @pagination="paginationChange" />
       </div>
     </el-tab-pane>
      <el-tab-pane label="成品入库" name="manual">
      <el-tab-pane label="材料库存" name="manual">
        <div class="search_form">
          <div>
<!--            <span class="search_title">供应商名称:</span>-->
@@ -161,16 +161,25 @@
      @close="closeDia">
      <el-form :model="form" label-width="140px" label-position="top" :rules="rules" ref="formRef">
        <el-row :gutter="30">
          <el-col :span="12">
          <!-- <el-col :span="12">
            <el-form-item label="供应商名称:" prop="supplierName">
              <el-input disabled v-model="form.supplierName" placeholder="请输入" clearable />
            </el-form-item>
          </el-col>
          </el-col> -->
          <el-col :span="12">
            <el-form-item label="产品大类:" prop="productId">
              <el-select disabled v-model="form.productCategory" placeholder="请选择" clearable filterable>
                <el-option v-for="item in productList" :key="item.id" :label="item.productName"
                           :value="item.productName" />
              </el-select>
            </el-form-item>
          </el-col>
           <el-col :span="12">
            <el-form-item label="出库人:" prop="entryPerson">
              <el-select v-model="form.createUser"                 filterable
                         default-first-option
                         :reserve-keyword="false" placeholder="请选择" clearable>
                <el-option v-for="item in userList" :key="item.userId" :label="item.nickName" :value="item.userId" />
              </el-select>
            </el-form-item>
          </el-col>
@@ -230,7 +239,7 @@
            </el-form-item>
          </el-col>
        </el-row>
        <el-row :gutter="30">
        <!-- <el-row :gutter="30">
          <el-col :span="12">
            <el-form-item label="出库人:" prop="entryPerson">
              <el-select v-model="form.createUser"                 filterable
@@ -240,12 +249,12 @@
              </el-select>
            </el-form-item>
          </el-col>
<!--          <el-col :span="12">-->
<!--          <el-form-item label="库存预警数量:" prop="warnNum">-->
<!--            <el-input v-model="form.warnNum" placeholder="请输入最低库存" clearable />-->
<!--          </el-form-item>-->
<!--        </el-col>-->
        </el-row>
         <el-col :span="12">
            <el-form-item label="库存预警数量:" prop="warnNum">
              <el-input v-model="form.warnNum" placeholder="请输入最低库存" clearable />
            </el-form-item>
          </el-col>
        </el-row> -->
      </el-form>
      <template #footer>
        <div class="dialog-footer">
@@ -299,13 +308,13 @@
const activeTab = ref('production')
const data = reactive({
  searchForm: {
    supplierName: '',
    // supplierName: '',
    customerName: '',
    timeStr: getCurrentDate(),
  },
  form: {
    supplierId: null,
    supplierName: '',
    // supplierName: '',
    productId: null,
    productName: '',
    userId: userStore.userId,
@@ -326,7 +335,7 @@
    salesLedgerProductId: null,
  },
  rules: {
    supplierName: [{ required: true, message: '请输入供应商名称', trigger: 'blur' }],
    // supplierName: [{ required: true, message: '请输入供应商名称', trigger: 'blur' }],
    productCategory: [{ required: true, message: '请选择产品大类', trigger: 'change' }],
    specificationModel: [{ required: true, message: '请输入规格型号', trigger: 'blur' }],
    unit: [{ required: true, message: '请输入单位', trigger: 'blur' }],
@@ -362,7 +371,7 @@
  if (activeTab.value === 'production') {
    params.customerName = searchForm.value.customerName
  } else {
    params.supplierName = searchForm.value.supplierName
    // params.supplierName = searchForm.value.supplierName
  }
  return params
}
@@ -392,7 +401,7 @@
// åˆ‡æ¢ tab
const handleTabChange = () => {
  page.current = 1
  searchForm.value.supplierName = ''
  // searchForm.value.supplierName = ''
  searchForm.value.customerName = ''
  searchForm.value.timeStr = ''
  selectedRows.value = []
src/views/procurementManagement/invoiceEntry/components/Modal.vue
@@ -1,91 +1,100 @@
<template>
  <el-dialog :title="modalOptions.title" v-model="visible" width="70%">
    <el-form
      ref="formRef"
      :model="form"
      :rules="rules"
      label-width="120px"
      label-position="top"
    >
      <el-row :gutter="30">
        <el-col :span="12">
          <el-form-item label="采购合同号:" prop="purchaseLedgerNo">
            <el-input v-model="form.purchaseLedgerNo" disabled />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="销售合同号:" prop="salesContractNo">
            <el-input
              v-model="form.salesContractNo"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="供应商名称:" prop="supplierName">
            <el-input
              v-model="form.supplierName"
              placeholder="自动填充"
              clearable
              disabled
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票号:" prop="invoiceNumber">
            <el-input
              v-model="form.invoiceNumber"
              placeholder="请输入"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="发票金额(元):" prop="invoiceAmount">
            <el-input-number :step="0.01" :min="0" style="width: 100%"
              v-model="form.invoiceAmount"
              placeholder="自动填充"
              clearable
              :disabled="true"
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="录入人:" prop="issUer">
            <el-input
              v-model="form.issUer"
              placeholder="请输入"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="开票日期:" prop="entryDate">
            <el-date-picker
              style="width: 100%"
              v-model="form.entryDate"
              type="date"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              clearable
            />
          </el-form-item>
        </el-col>
        <el-col :span="12">
          <el-form-item label="录入日期:" prop="enterDate">
            <el-date-picker
              style="width: 100%"
              v-model="form.enterDate"
              type="date"
              value-format="YYYY-MM-DD"
              format="YYYY-MM-DD"
              clearable
            />
          </el-form-item>
        </el-col>
    <el-dialog :title="modalOptions.title" v-model="visible" width="70%">
        <el-form
            ref="formRef"
            :model="form"
            :rules="rules"
            label-width="120px"
            label-position="top"
        >
            <el-row :gutter="30">
                <el-col :span="12">
                    <el-form-item label="采购合同号:" prop="purchaseLedgerNo">
                        <el-input v-model="form.purchaseLedgerNo" disabled placeholder="多合同批量处理(具体合同号见产品列表)" />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="销售合同号:" prop="salesContractNo">
                        <el-input
                            v-model="form.salesContractNo"
                            placeholder="自动填充"
                            clearable
                            disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="供应商名称:" prop="supplierName">
                        <el-input
                            v-model="form.supplierName"
                            placeholder="自动填充"
                            clearable
                            disabled
                        />
                    </el-form-item>
                </el-col>
<!--                <el-col :span="12">-->
<!--                    <el-form-item label="项目名称:" prop="projectName">-->
<!--                        <el-input-->
<!--                            v-model="form.projectName"-->
<!--                            placeholder="自动填充"-->
<!--                            clearable-->
<!--                            disabled-->
<!--                        />-->
<!--                    </el-form-item>-->
<!--                </el-col>-->
                <el-col :span="12">
                    <el-form-item label="发票号:" prop="invoiceNumber">
                        <el-input
                            v-model="form.invoiceNumber"
                            placeholder="请输入"
                            clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="发票金额(元):" prop="invoiceAmount">
                        <el-input-number :step="0.01" :min="0" style="width: 100%"
                                                         v-model="form.invoiceAmount"
                                                         placeholder="请输入发票金额"
                                                         clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="录入人:" prop="issUer">
                        <el-input
                            v-model="form.issUer"
                            placeholder="请输入"
                            clearable
                            disabled
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="开票日期:" prop="entryDate">
                        <el-date-picker
                            style="width: 100%"
                            v-model="form.entryDate"
                            type="date"
                            value-format="YYYY-MM-DD"
                            format="YYYY-MM-DD"
                            clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="录入日期:" prop="enterDate">
                        <el-date-picker
                            style="width: 100%"
                            v-model="form.enterDate"
                            type="date"
                            value-format="YYYY-MM-DD"
                            format="YYYY-MM-DD"
                            clearable
                        />
                    </el-form-item>
                </el-col>
                <el-col :span="12">
                    <el-form-item label="上传附件">
                        <FileUpload
@@ -102,49 +111,92 @@
                        />
                    </el-form-item>
                </el-col>
      </el-row>
      <el-form-item label="产品信息:"> </el-form-item>
      <PIMTable
        rowKey="id"
        :column="columns"
        :tableData="form.productData"
                :summaryMethod="summarizeChildrenTable"
                :isShowSummary="true"
        height="auto"
      >
        <template #ticketsNumRef="{ row }">
          <el-input-number
            v-model="row.ticketsNum"
            placeholder="请输入"
            :min="0"
            :step="0.1"
                        :precision="2"
            clearable
            style="width: 100%"
            @change="invoiceNumBlur(row)"
          />
        </template>
        <template #ticketsAmountRef="{ row }">
          <el-input-number
            v-model="row.ticketsAmount"
            placeholder="请输入"
            :min="0"
                        :precision="2"
            :step="0.1"
            clearable
            style="width: 100%"
            @change="invoiceAmountBlur(row)"
          />
        </template>
      </PIMTable>
    </el-form>
    <template #footer>
            </el-row>
            <el-form-item label="产品信息:"> </el-form-item>
            <el-table
                :data="form.productData"
                border
                show-summary
                :summary-method="summarizeChildrenTable"
            >
                <el-table-column align="center" label="序号" type="index" width="60" />
                <el-table-column label="所属合同" prop="purchaseLedgerNo" width="200">
                    <template #default="{ row }">
                        <el-tag type="primary">{{ row.purchaseLedgerNo }}</el-tag>
                    </template>
                </el-table-column>
                <el-table-column label="产品大类" prop="productCategory" />
                <el-table-column label="规格型号" prop="specificationModel" width="150" />
                <el-table-column label="单位" prop="unit" width="70" />
                <el-table-column label="数量" prop="quantity" width="70" />
                <el-table-column label="税率(%)" prop="taxRate" width="80" />
                <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="ticketsNum" width="180">
                    <template #default="scope">
                        <el-input-number :step="0.1" :min="0" style="width: 100%"
                                                         :precision="2"
                                                         v-model="scope.row.ticketsNum"
                                                         @change="invoiceNumBlur(scope.row)"
                        />
                    </template>
                </el-table-column>
                <el-table-column
                    label="本次开票金额(元)"
                    prop="ticketsAmount"
                    width="180"
                >
                    <template #default="scope">
                        <el-input-number :step="0.01" :min="0" style="width: 100%"
                                                         :precision="2"
                                                         v-model="scope.row.ticketsAmount"
                                                         @change="invoiceAmountBlur(scope.row)"
                        />
                    </template>
                </el-table-column>
                <el-table-column
                    label="未来票数"
                    prop="futureTickets"
                    :formatter="formattedNumber"
                />
                <el-table-column
                    label="本次来票金额(元)"
                    prop="ticketsAmount"
                    :formatter="formattedNumber"
                />
                <el-table-column
                    label="未来票数"
                    prop="futureTickets"
                    :formatter="formattedNumber"
                />
                <el-table-column
                    label="未来票金额(元)"
                    prop="futureTicketsAmount"
                    :formatter="formattedNumber"
                />
            </el-table>
        </el-form>
        <template #footer>
            <el-button type="primary" :loading="modalLoading" @click="submitForm">
                {{ modalOptions.confirmText }}
                ç¡®è®¤
            </el-button>
      <el-button @click="closeModal">{{ modalOptions.cancelText }}</el-button>
    </template>
  </el-dialog>
            <el-button @click="closeModal">取消</el-button>
        </template>
    </el-dialog>
</template>
<script setup>
@@ -154,9 +206,9 @@
import useFormData from "@/hooks/useFormData";
import FileUpload from "@/components/Upload/FileUpload.vue";
import {
  getPurchaseNoById,
  getInfo,
  addOrUpdateRegistration,
    getPurchaseNoById,
    getInfo,
    addOrUpdateRegistration,
} from "@/api/procurementManagement/invoiceEntry.js";
import { getPurchaseById } from "@/api/procurementManagement/procurementLedger.js";
import { getToken } from "@/utils/auth";
@@ -164,7 +216,7 @@
import dayjs from "dayjs";
defineOptions({
  name: "来票登记模态框",
    name: "来票登记模态框",
});
const userStore = useUserStore();
@@ -172,152 +224,218 @@
const formRef = ref();
const { proxy } = getCurrentInstance();
const { form } = useFormData({
  purchaseLedgerNo: undefined, // é‡‡è´­åˆåŒå·
  salesContractNo: undefined, // é”€å”®åˆåŒå·
  supplierName: undefined, // ä¾›åº”商名称
  invoiceNumber: undefined, // å‘票号
  invoiceAmount: undefined, // å‘票金额(元)
  issUerId: userStore.id, // å½•入人
  issUer: userStore.nickName, // å½•入人
  entryDate: undefined, // å¼€ç¥¨æ—¥æœŸ
  salesContractNoId: undefined, // å¼€ç¥¨æ—¥æœŸ
  enterDate: dayjs().format("YYYY-MM-DD"),
  productData: [], // è¡¨æ ¼
  tempFileIds: [], // æ–‡ä»¶
    purchaseLedgerNo: undefined, // é‡‡è´­åˆåŒå·
    salesContractNo: undefined, // é”€å”®åˆåŒå·
    supplierName: undefined, // ä¾›åº”商名称
    projectName: undefined, // é¡¹ç›®åç§°
    invoiceNumber: undefined, // å‘票号
    invoiceAmount: undefined, // å‘票金额(元)
    issUerId: userStore.id, // å½•入人
    issUer: userStore.nickName, // å½•入人
    entryDate: undefined, // å¼€ç¥¨æ—¥æœŸ
    salesContractNoId: undefined, // å¼€ç¥¨æ—¥æœŸ
    enterDate: dayjs().format("YYYY-MM-DD"),
    productData: [], // è¡¨æ ¼
    tempFileIds: [], // æ–‡ä»¶
});
const selectedContracts = ref([]); // å­˜å‚¨é€‰ä¸­çš„合同数据
const rules = ref({
  invoiceNumber: [
    { required: true, message: "请输入发票号", trigger: "blur" },
    { type: "string" },
  ],
  invoiceAmount: [
    { required: true, message: "请输入发票金额", trigger: "blur" },
  ],
  entryDate: [{ required: true, message: "请选择开票日期", trigger: "change" }],
  enterDate: [{ required: true, message: "请选择录入日期", trigger: "change" }],
    invoiceNumber: [
        { required: true, message: "请输入发票号", trigger: "blur" },
        { type: "string" },
    ],
    invoiceAmount: [
        { required: true, message: "请输入发票金额", trigger: "blur" },
    ],
    entryDate: [{ required: true, message: "请选择开票日期", trigger: "change" }],
    enterDate: [{ required: true, message: "请选择录入日期", trigger: "change" }],
});
const {
  id,
  visible,
  loading: modalLoading,
  openModal,
  modalOptions,
  handleConfirm,
  closeModal,
    id,
    visible,
    loading: modalLoading,
    openModal,
    modalOptions,
    handleConfirm,
    closeModal,
} = useModal({
  title: "来票登记",
    title: "来票登记",
});
const emit = defineEmits(['refreshList']);
const columns = [
  {
    label: "产品大类",
    prop: "productCategory",
    {
        label: "产品大类",
        prop: "productCategory",
        width: 120,
  },
  {
    label: "规格型号",
    prop: "specificationModel",
    },
    {
        label: "规格型号",
        prop: "specificationModel",
        width: 120,
  },
  {
    label: "单位",
    prop: "unit",
    width: 80,
  },
  {
    label: "数量",
    prop: "quantity",
    width: 80,
  },
  {
    label: "税率(%)",
    prop: "taxRate",
    width: 80,
  },
  {
    label: "录入日期",
    prop: "registerDate",
    width: 120,
  },
  {
    label: "含税单价(元)",
    prop: "taxInclusiveUnitPrice",
    width: 150,
    formatData: (val) => {
      return val ? parseFloat(val).toFixed(2) : 0;
    },
  },
  {
    label: "含税总价(元)",
    prop: "taxInclusiveTotalPrice",
    width: 150,
    formatData: (val) => {
      return parseFloat(val).toFixed(2) ?? 0;
    },
  },
  {
    label: "不含税总价(元)",
    prop: "taxExclusiveTotalPrice",
    width: 150,
    formatData: (val) => {
      return parseFloat(val).toFixed(2) ?? 0;
    },
  },
  {
    label: "本次来票数",
    prop: "ticketsNum",
    dataType: "slot",
    slot: "ticketsNumRef",
    width: 180,
    align: "center",
  },
  {
    label: "本次来票金额(元)",
    prop: "ticketsAmount",
    dataType: "slot",
    slot: "ticketsAmountRef",
    width: 180,
    align: "center",
  },
  {
    label: "未来票数",
    prop: "futureTickets",
    },
    {
        label: "单位",
        prop: "unit",
        width: 80,
    },
    {
        label: "数量",
        prop: "quantity",
        width: 80,
    },
    {
        label: "税率(%)",
        prop: "taxRate",
        width: 80,
    },
    {
        label: "录入日期",
        prop: "registerDate",
        width: 120,
    },
    {
        label: "含税单价(元)",
        prop: "taxInclusiveUnitPrice",
        width: 150,
        formatData: (val) => {
            return val ? parseFloat(val).toFixed(2) : 0;
        },
    },
    {
        label: "含税总价(元)",
        prop: "taxInclusiveTotalPrice",
        width: 150,
        formatData: (val) => {
            return parseFloat(val).toFixed(2) ?? 0;
        },
    },
    {
        label: "不含税总价(元)",
        prop: "taxExclusiveTotalPrice",
        width: 150,
        formatData: (val) => {
            return parseFloat(val).toFixed(2) ?? 0;
        },
    },
    {
        label: "本次来票数",
        prop: "ticketsNum",
        dataType: "slot",
        slot: "ticketsNumRef",
        width: 180,
        align: "center",
    },
    {
        label: "本次来票金额(元)",
        prop: "ticketsAmount",
        dataType: "slot",
        slot: "ticketsAmountRef",
        width: 180,
        align: "center",
    },
    {
        label: "未来票数",
        prop: "futureTickets",
        width: 100,
  },
  {
    label: "未来票金额(元)",
    prop: "futureTicketsAmount",
    },
    {
        label: "未来票金额(元)",
        prop: "futureTicketsAmount",
        width: 200,
  },
    },
];
const getTableData = async (type, id) => {
  if (type == "add") {
    const { data } = await getPurchaseNoById({ id });
    form.purchaseLedgerNo = data.purchaseContractNumber;
    form.invoiceAmount = data.invoiceAmount;
    form.invoiceNumber = data.invoiceNumber;
    form.entryDate = data.entryDate;
    form.salesContractNoId = data.salesContractNoId;
    const { data: infoData } = await getInfo({ id });
    form.salesContractNo = infoData.salesContractNo;
    form.supplierName = infoData.supplierName;
    form.productData = infoData.productData;
  } else if (type == "edit") {
    const data = await getPurchaseById({ id, type: 2 });
    form.purchaseLedgerNo = data.purchaseContractNumber;
    form.invoiceAmount = data.invoiceAmount;
    form.invoiceNumber = data.invoiceNumber;
    form.salesContractNo = data.salesContractNo;
    form.supplierName = data.supplierName;
    form.entryDate = data.entryDate;
    form.productData = data.productData;
  }
const formattedNumber = (row, column, cellValue) => {
    if (cellValue == 0) {
        return parseFloat(cellValue).toFixed(2);
    }
    if (cellValue) {
        return parseFloat(cellValue).toFixed(2);
    } else {
        return cellValue;
    }
};
const getTableData = async (type, selectedRows) => {
    if (type == "add") {
        // æ£€æŸ¥æ‰€æœ‰é€‰æ‹©çš„合同是否具有相同的供应商名称
        const firstRow = selectedRows[0];
        const isSameSupplier = selectedRows.every(row =>
            row.supplierName === firstRow.supplierName
        );
        if (!isSameSupplier) {
            proxy.$modal.msgError("请选择相同供应商名称的合同");
            return;
        }
        // å…è®¸ä¸åŒçš„采购合同号批量处理,无需检查重复
        // æ¸…空表单数据
        Object.keys(form).forEach(key => {
            if (key !== 'productData') {
                form[key] = undefined;
            }
        });
        form.productData = [];
        // åŠ è½½æ‰€æœ‰é€‰ä¸­åˆåŒçš„äº§å“æ•°æ®
        const promises = selectedRows.map(row =>
            getInfo({ id: row.id })
        );
        Promise.all(promises).then(results => {
            // åˆå¹¶æ‰€æœ‰åˆåŒçš„产品数据,并为每个产品添加对应的合同信息
            const allProductData = [];
            results.forEach((result, index) => {
                const contract = selectedRows[index];
                const contractId = contract.id;
                if (result.data && result.data.productData) {
                    result.data.productData.forEach(item => {
                        allProductData.push({
                            ...item,
                            id: contractId, // æ˜Žç¡®è®¾ç½®åˆåŒID
                            purchaseLedgerNo: contract.purchaseContractNumber, // æ·»åŠ é‡‡è´­åˆåŒå·
                            supplierName: contract.supplierName, // æ·»åŠ ä¾›åº”å•†åç§°
                            projectName: contract.projectName // æ·»åŠ é¡¹ç›®åç§°
                        });
                    });
                }
            });
            // è®¾ç½®è¡¨å•数据(使用第一个合同的基本信息,采购合同号留空)
            form.purchaseLedgerNo = ""; // é‡‡è´­åˆåŒå·ç•™ç©ºï¼Œå› ä¸ºä¼šåœ¨äº§å“è¡¨æ ¼ä¸­åˆ†åˆ«æ˜¾ç¤º
            form.invoiceAmount = 0;
            form.invoiceNumber = "";
            form.entryDate = dayjs().format("YYYY-MM-DD");
            form.enterDate = dayjs().format("YYYY-MM-DD");
            form.salesContractNo = results[0].data.salesContractNo;
            form.projectName = results[0].data.projectName;
            form.supplierName = results[0].data.supplierName;
            // ä¿ç•™å½•入人信息
            form.issUerId = userStore.id;
            form.issUer = userStore.nickName;
            form.productData = allProductData;
            // å­˜å‚¨é€‰ä¸­çš„合同数据
            selectedContracts.value = selectedRows;
        });
    } else if (type == "edit") {
        const id = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows;
        const data = await getPurchaseById({ id, type: 2 });
        form.purchaseLedgerNo = data.purchaseContractNumber;
        form.invoiceAmount = data.invoiceAmount;
        form.invoiceNumber = data.invoiceNumber;
        form.salesContractNo = data.salesContractNo;
        form.projectName = data.projectName;
        form.supplierName = data.supplierName;
        form.entryDate = data.entryDate;
        form.productData = data.productData;
    }
};
// å­è¡¨åˆè®¡æ–¹æ³•
const summarizeChildrenTable = (param) => {
@@ -334,108 +452,186 @@
};
//本次来票数失焦操作
const invoiceNumBlur = (row) => {
  if (!row.ticketsNum || row.ticketsNum === "") {
    row.ticketsNum = 0;
  }
  if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
    proxy.$modal.msgWarning("本次开票数不得大于未开票数");
    row.ticketsNum = 0;
    return;
  }
  // è®¡ç®—本次来票金额
  row.ticketsAmount = (row.ticketsNum * row.taxInclusiveUnitPrice).toFixed(2)
  // è®¡ç®—未来票数
  row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2)
  // è®¡ç®—未来票金额
  row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2)
  calculateinvoiceAmount();
    if (!row.ticketsNum || row.ticketsNum === "") {
        row.ticketsNum = 0;
    }
    if (Number(row.ticketsNum) > Number(row.tempFutureTickets)) {
        proxy.$modal.msgWarning("本次开票数不得大于未开票数");
        row.ticketsNum = 0;
        return;
    }
    // è®¡ç®—本次来票金额
    row.ticketsAmount = (row.ticketsNum * row.taxInclusiveUnitPrice).toFixed(2)
    // è®¡ç®—未来票数
    row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2)
    // è®¡ç®—未来票金额
    row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2)
    calculateinvoiceAmount();
};
// æœ¬æ¬¡æ¥ç¥¨é‡‘额失焦操作
const invoiceAmountBlur = (row) => {
  if (!row.ticketsAmount) {
    row.ticketsAmount = 0;
  }
  // è®¡ç®—是否超过来票总金额
  if (row.ticketsAmount > row.tempFutureTicketsAmount) {
    proxy.$modal.msgWarning("本次来票金额不得大于未来票金额");
    row.ticketsAmount = 0;
  }
  // è®¡ç®—本次来票数
  row.ticketsNum = Number(
    (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
  );
  // è®¡ç®—未来票数
  row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2)
  // è®¡ç®—未来票金额
  row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2)
  calculateinvoiceAmount();
    if (!row.ticketsAmount) {
        row.ticketsAmount = 0;
    }
    // è®¡ç®—是否超过来票总金额
    if (row.ticketsAmount > row.tempFutureTicketsAmount) {
        proxy.$modal.msgWarning("本次来票金额不得大于未来票金额");
        row.ticketsAmount = 0;
    }
    // è®¡ç®—本次来票数
    row.ticketsNum = Number(
        (row.ticketsAmount / row.taxInclusiveUnitPrice).toFixed(2)
    );
    // è®¡ç®—未来票数
    row.futureTickets = (row.tempFutureTickets - row.ticketsNum).toFixed(2)
    // è®¡ç®—未来票金额
    row.futureTicketsAmount = (row.tempFutureTicketsAmount - row.ticketsAmount).toFixed(2)
    calculateinvoiceAmount();
};
const calculateinvoiceAmount = () => {
  let invoiceAmountTotal = 0;
  form.productData.forEach((item) => {
    if (item.ticketsAmount) {
      invoiceAmountTotal += Number(item.ticketsAmount);
    }
  });
  form.invoiceAmount = invoiceAmountTotal.toFixed(2);
    let invoiceAmountTotal = 0;
    form.productData.forEach((item) => {
        if (item.ticketsAmount) {
            invoiceAmountTotal += Number(item.ticketsAmount);
        }
    });
    form.invoiceAmount = invoiceAmountTotal.toFixed(2);
};
const open = (type, eid) => {
  openModal();
  getTableData(type, eid);
  id.value = eid;
const open = async (type, selectedRows) => {
    visible.value = true;
    // å¦‚果是批量操作,设置标题
    if (Array.isArray(selectedRows) && selectedRows.length > 1) {
        modalOptions.title = `批量新增 (${selectedRows.length}条)`;
    } else {
        modalOptions.title = type == "add" ? "新增" : "编辑";
    }
    // å¦‚果是单个操作,获取id
    if (!Array.isArray(selectedRows) || selectedRows.length === 1) {
        const idValue = Array.isArray(selectedRows) ? selectedRows[0].id : selectedRows;
        id.value = idValue;
    }
    await getTableData(type, selectedRows);
};
const uploadSuccess = (response) => {
  form.tempFileIds.push(response.data.tempId);
  console.log(form);
    form.tempFileIds.push(response.data.tempId);
    console.log(form);
};
const removeFile = (file) => {
  const { tempId } = file.response.data;
  form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
    const { tempId } = file.response.data;
    form.tempFileIds = form.tempFileIds.filter((item) => item !== tempId);
};
const closeAndRefresh = () => {
  closeModal();
  emit('refreshList');
    closeModal();
    emit('refreshList');
};
const submitForm = () => {
  formRef.value.validate(async (valid, fields) => {
    if (valid) {
      // modalLoading.value = true;
      const { code } = await addOrUpdateRegistration({
        purchaseLedgerId: id.value,
        purchaseContractNumber: form.purchaseLedgerNo,
        invoiceNumber: form.invoiceNumber,
        invoiceAmount: form.invoiceAmount,
        salesContractNo: form.salesContractNo,
        productData: form.productData,
        issueDate: form.entryDate,
        issUerId: form.issUerId, // å½•入人id
        issUer: form.issUer, // å½•入人
        salesContractNoId: form.salesContractNoId,
        supplierName: form.supplierName,
        tempFileIds: form.tempFileIds,
        enterDate: form.enterDate,
        type: 4,
      });
      modalLoading.value = false;
      if (code == 200) {
        closeAndRefresh();
      }
    } else {
      modalLoading.value = false;
    }
  });
    proxy.$refs["formRef"].validate((valid) => {
        if (valid) {
            // å¦‚果是批量操作,将所有合同的数据放在一个数组里,只调用一次接口
            if (selectedContracts.value.length > 1) {
                // åˆ›å»ºåŒ…含所有合同数据的数组
                const batchData = selectedContracts.value.map(contract => {
                    // ç­›é€‰å‡ºå±žäºŽå½“前合同的产品数据
                    const contractProductData = form.productData.filter(item =>
                        item.id === contract.id
                    );
                    // ä¸ºæ¯ä¸ªé‡‡è´­åˆåŒåˆ›å»ºç‹¬ç«‹çš„对象
                    return {
                        // åŸºç¡€è¡¨å•数据
                        invoiceNumber: form.invoiceNumber,
                        invoiceAmount: form.invoiceAmount,
                        entryDate: form.entryDate,
                        enterDate: form.enterDate,
                        issUerId: form.issUerId, // å½•入人id
                        issUer: form.issUer, // å½•入人
                        tempFileIds: form.tempFileIds,
                        // åˆåŒå®žé™…信息
                        purchaseLedgerId: contract.id, // ä½¿ç”¨id作为字段名,值为purchaseLedgerId
                        purchaseContractNumber: contract.purchaseContractNumber, // ä½¿ç”¨å®žé™…的采购合同号
                        salesContractNo: contract.salesContractNo, // ä½¿ç”¨å®žé™…的销售合同号
                        supplierName: contract.supplierName, // ä½¿ç”¨å®žé™…的供应商名称
                        projectName: contract.projectName, // ä½¿ç”¨å®žé™…的项目名称
                        // äº§å“æ•°æ®
                        productData: proxy.HaveJson(contractProductData),
                        // æ‰¹é‡æ ‡è¯†
                        isBatch: true,
                        type: 4
                    };
                });
                // åªè°ƒç”¨ä¸€æ¬¡æŽ¥å£ï¼Œä¼ é€’包含所有合同数据的数组
                modalLoading.value = true;
                addOrUpdateRegistration(batchData).then((res) => {
                    modalLoading.value = false;
                    if (res.code === 200) {
                        proxy.$modal.msgSuccess("批量登记成功");
                        closeAndRefresh();
                    }
                }).catch(() => {
                    modalLoading.value = false;
                    proxy.$modal.msgError("批量登记失败");
                });
            } else {
                // å•个合同提交逻辑
                const singleContract = selectedContracts.value[0];
                const singleForm = {
                    // åŸºç¡€è¡¨å•数据
                    invoiceNumber: form.invoiceNumber,
                    invoiceAmount: form.invoiceAmount,
                    entryDate: form.entryDate,
                    enterDate: form.enterDate,
                    issUerId: form.issUerId, // å½•入人id
                    issUer: form.issUer, // å½•入人
                    tempFileIds: form.tempFileIds,
                    // åˆåŒå®žé™…信息
                    purchaseLedgerId: singleContract.id, // ä½¿ç”¨id作为字段名,值为purchaseLedgerId
                    purchaseContractNumber: singleContract.purchaseContractNumber, // ä½¿ç”¨å®žé™…的采购合同号
                    salesContractNo: singleContract.salesContractNo, // ä½¿ç”¨å®žé™…的销售合同号
                    supplierName: singleContract.supplierName, // ä½¿ç”¨å®žé™…的供应商名称
                    projectName: singleContract.projectName, // ä½¿ç”¨å®žé™…的项目名称
                    // äº§å“æ•°æ®
                    productData: proxy.HaveJson(form.productData),
                    // æ‰¹é‡æ ‡è¯†
                    isBatch: false,
                    type: 4
                };
                modalLoading.value = true;
                addOrUpdateRegistration(singleForm).then((res) => {
                    modalLoading.value = false;
                    if (res.code === 200) {
                        proxy.$modal.msgSuccess("登记成功");
                        closeAndRefresh();
                    }
                }).catch(() => {
                    modalLoading.value = false;
                    proxy.$modal.msgError("登记失败");
                });
            }
        }
    });
};
defineExpose({
  open,
  closeAndRefresh,
    open,
    closeAndRefresh,
});
</script>
src/views/procurementManagement/invoiceEntry/index.vue
@@ -186,11 +186,11 @@
};
const handleAdd = (type) => {
  if (selectedRows.value.length !== 1) {
    proxy.$modal.msgWarning("请先选中一条数据");
    return;
  }
  modalRef.value.open(type, selectedRows.value[0].id);
    if (selectedRows.value.length < 1) {
        proxy.$modal.msgWarning("请至少选中一条数据");
        return;
    }
    modalRef.value.open(type, selectedRows.value);
};
const handleEdit = (type, id) => {
src/views/procurementManagement/procurementInvoiceLedger/Form/EditForm.vue
@@ -23,7 +23,7 @@
      </el-col>
      <el-col :span="12">
        <el-form-item label="发票号:">
          <el-input disabled v-model="form.invoiceNumber" />
          <el-input v-model="form.invoiceNumber" />
        </el-form-item>
      </el-col>
      <el-col :span="12">
@@ -63,6 +63,7 @@
  ticketsNum: undefined, // æ¥ç¥¨æ•°
  ticketsAmount: undefined, // æ¥ç¥¨é‡‘额
    taxInclusiveUnitPrice: undefined, // å«ç¨Žå•ä»·
    ticketRegistrationId: undefined, // å«ç¨Žå•ä»·
});
const load = async (id) => {
@@ -78,6 +79,7 @@
    form.taxInclusiveUnitPrice = data.taxInclusiveUnitPrice;
    form.futureTickets = data.futureTickets;
    temFutureTickets.value = data.futureTickets;
        form.ticketRegistrationId = data.ticketRegistrationId;
  }
};
src/views/procurementManagement/procurementLedger/fileList.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,67 @@
<template>
  <el-dialog v-model="dialogVisible" title="附件" width="40%" :before-close="handleClose">
    <el-table :data="tableData" border height="40vh">
      <el-table-column label="附件名称" prop="name" min-width="400" show-overflow-tooltip />
      <el-table-column fixed="right" label="操作" width="150" align="center">
        <template #default="scope">
          <el-button link type="primary" size="small" @click="downLoadFile(scope.row)">下载</el-button>
          <el-button link type="primary" size="small" @click="lookFile(scope.row)">预览</el-button>
          <el-button link type="danger" size="small" @click="handleDelete(scope.row)">删除</el-button>
        </template>
      </el-table-column>
    </el-table>
  </el-dialog>
  <filePreview ref="filePreviewRef" />
</template>
<script setup>
import { ref } from 'vue'
import { ElMessageBox, ElMessage } from 'element-plus'
import filePreview from '@/components/filePreview/index.vue'
import { delCommonFile } from '@/api/publicApi/commonFile.js'
const dialogVisible = ref(false)
const tableData = ref([])
const { proxy } = getCurrentInstance();
const filePreviewRef = ref()
const handleClose = () => {
  dialogVisible.value = false
}
const open = (list) => {
  dialogVisible.value = true
  tableData.value = list
}
const downLoadFile = (row) => {
  proxy.$download.name(row.url);
}
const lookFile = (row) => {
  filePreviewRef.value.open(row.url)
}
// åˆ é™¤é™„ä»¶
const handleDelete = (row) => {
  ElMessageBox.confirm(`确认删除附件"${row.name}"吗?`, '删除确认', {
    confirmButtonText: '确认',
    cancelButtonText: '取消',
    type: 'warning',
  }).then(() => {
    delCommonFile([row.id]).then(() => {
      ElMessage.success('删除成功')
      // ä»Žåˆ—表中移除已删除的附件
      const index = tableData.value.findIndex(item => item.id === row.id)
      if (index !== -1) {
        tableData.value.splice(index, 1)
      }
    }).catch(() => {
      ElMessage.error('删除失败')
    })
  }).catch(() => {
    proxy.$modal.msg('已取消删除')
  })
}
defineExpose({
  open
})
</script>
<style></style>
src/views/procurementManagement/procurementLedger/index.vue
@@ -99,12 +99,10 @@
        <el-table-column
          label="销售合同号"
          prop="salesContractNo"
          width="200"
          show-overflow-tooltip
        />
        <el-table-column
          label="供应商名称"
          width="240"
          prop="supplierName"
          show-overflow-tooltip
        />
@@ -124,7 +122,7 @@
        <el-table-column
          label="录入人"
          prop="recorderName"
           width="100"
           width="120"
          show-overflow-tooltip
        />
        <el-table-column
@@ -136,7 +134,7 @@
        <el-table-column
          fixed="right"
          label="操作"
          min-width="150"
          width="180"
          align="center"
        >
          <template #default="scope">
@@ -153,6 +151,13 @@
              size="small"
              @click="showQRCode(scope.row)"
              >生成二维码</el-button
            >
            <el-button
              link
              type="primary"
              size="small"
              @click="downLoadFile(scope.row)"
              >附件</el-button
            >
          </template>
@@ -757,6 +762,7 @@
        </div>
      </template>
    </el-dialog>
        <FileList ref="fileListRef" />
  </div>
</template>
@@ -767,6 +773,7 @@
import { Search } from "@element-plus/icons-vue";
import { ElMessageBox } from "element-plus";
import { userListNoPage } from "@/api/system/user.js";
import FileList from "./fileList.vue";
import {
  getSalesLedgerWithProducts,
  addOrUpdateSalesLedgerProduct,
@@ -1384,6 +1391,11 @@
  }
};
const fileListRef = ref(null)
const downLoadFile = (row) => {
    fileListRef.value.open(row.salesLedgerFiles)
}
// æ˜¾ç¤ºäºŒç»´ç 
const showQRCode = async (row) => {
  try {
src/views/productionManagement/productionReporting/index.vue
@@ -199,6 +199,10 @@
        prop: "schedulingUserName",
    },
    {
        label: "产线",
        prop: "productionLine",
    },
    {
        label: "合同号",
        prop: "salesContractNo",
        width: 200,
src/views/reportAnalysis/projectProfit/index.vue
@@ -64,11 +64,11 @@
      align: "center",
      prop: "customerName",
    },
    {
      label: "项目名称",
      align: "center",
      prop: "projectName",
    },
    // {
    //   label: "项目名称",
    //   align: "center",
    //   prop: "projectName",
    // },
    {
      label: "合同金额",
      align: "center",