gaoluyang
2 天以前 35d6ace96aac27cb6c81bc361503378f6acbd24f
1.库存管理页面联调
已修改1个文件
已添加1个文件
311 ■■■■ 文件已修改
src/api/warehouseManagement/index.js 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/warehouseManagement/index.vue 268 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/api/warehouseManagement/index.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
// åº“存管理
import request from '@/utils/request'
// æŸ¥è¯¢å¾…入库管理列表
export function pendingInventoryList(query) {
    return request({
        url: '/pendingInventory/list',
        method: 'get',
        params: query
    })
}
// æŸ¥è¯¢æ­£å¼å…¥åº“管理列表
export function officialInventoryList(query) {
    return request({
        url: '/officialInventory/list',
        method: 'get',
        params: query
    })
}
// All煤质方案查询
export function coalPlanList(query) {
    return request({
        url: '/coalPlan/coalPlanList',
        method: 'get',
        params: query
    })
}
// All煤质维护字段查询
export function coalFieldList(query) {
    return request({
        url: '/coalField/coalFieldList',
        method: 'get',
        params: query
    })
}
// å®¡æ ¸å…¥åº“
export function addOrEditCoalValue(query) {
    return request({
        url: '/basic/coalValue/addOrEditCoalValue',
        method: 'post',
        data: query
    })
}
src/views/warehouseManagement/index.vue
@@ -1,14 +1,6 @@
<template>
  <div class="app-container">
    <el-form :inline="true" :model="queryParams" class="search-form">
      <el-form-item label="搜索">
        <el-input
            v-model="queryParams.searchText"
            placeholder="请输入关键词"
            clearable
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="供应商名称">
        <el-input
            v-model="queryParams.supplierName"
@@ -17,17 +9,9 @@
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="统一人识别号">
      <el-form-item label="煤种">
        <el-input
            v-model="queryParams.identifyNumber"
            placeholder="请输入"
            clearable
            :style="{ width: '100%' }"
        />
      </el-form-item>
      <el-form-item label="经营地址">
        <el-input
            v-model="queryParams.address"
            v-model="queryParams.coal"
            placeholder="请输入"
            clearable
            :style="{ width: '100%' }"
@@ -62,18 +46,18 @@
        <el-table :data="tableData" border @selection-change="selectionChange" style="width: 100%">
          <el-table-column type="selection" width="55" align="center" />
          <el-table-column label="序号" type="index" width="60" align="center" />
          <el-table-column prop="name" label="供货商名称" width="180" sortable/>
          <el-table-column prop="type" label="煤种" sortable/>
          <el-table-column prop="supplierName" label="供货商名称" width="180" sortable/>
          <el-table-column prop="coal" label="煤种" sortable/>
          <el-table-column prop="unit" label="单位" width="70"/>
          <el-table-column prop="number" label="库存数量" sortable min-width="110"/>
          <el-table-column prop="money" label="单价(含税)" sortable width="130"/>
          <el-table-column prop="money1" label="总价(含税)" width="130" />
          <el-table-column prop="money2" label="成本单价" />
          <el-table-column prop="inventoryQuantity" label="库存数量" sortable min-width="110"/>
          <el-table-column prop="priceIncludingTax" label="单价(含税)" sortable width="130"/>
          <el-table-column prop="totalPriceIncludingTax" label="总价(含税)" width="130" />
          <el-table-column prop="costPerUnit" label="成本单价" />
          <el-table-column label="煤质" align="center" v-if="activeTab=== 'officialInventory'" width="600">
            <el-table-column v-for="col in columnTitle" :key="col.prop" :prop="col.prop" :label="col.label" align="center" sortable min-width="200"/>
          </el-table-column>
          <el-table-column prop="createUser" label="登记人" width="180"/>
          <el-table-column prop="createTime" label="登记日期" width="180"/>
          <el-table-column prop="registrant" label="登记人" width="180"/>
          <el-table-column prop="registrationTime" label="登记日期" width="180"/>
          <el-table-column fixed="right" label="操作" min-width="60" align="center" v-if="activeTab !== 'officialInventory'">
            <template #default="scope">
              <el-button link type="primary" size="small" @click="reviewDia(scope.row)">审核</el-button>
@@ -92,77 +76,67 @@
    </el-card>
    <!-- å®¡æ ¸å¾…入库弹框 -->
    <el-dialog title="审核入库" v-model="reviewVisible" width="1000px">
      <el-form :model="form" :rules="rules" ref="userRef" label-width="180px">
      <el-form :model="form" :rules="rules" ref="formRef" label-width="180px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="供货商名称" prop="userName">
              <el-input v-model="form.name" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="供货商名称" prop="supplierName">
              <el-input v-model="form.supplierName" placeholder="请输入供货商名称" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="煤种" prop="nickName">
              <el-input v-model="form.type" placeholder="请输入姓名" maxlength="30" />
            <el-form-item label="煤种" prop="coal">
              <el-input v-model="form.coal" placeholder="请输入煤种" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="单位" prop="userName">
              <el-input v-model="form.unit" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="单位" prop="unit">
              <el-input v-model="form.unit" placeholder="请输入单位" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="库存数量" prop="nickName">
              <el-input v-model="form.num" placeholder="请输入姓名" maxlength="30" />
            <el-form-item label="库存数量" prop="inventoryQuantity">
              <el-input v-model="form.inventoryQuantity" placeholder="请输入库存数量" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="单价(含税)" prop="userName">
              <el-input v-model="form.priceOne" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="单价(含税)" prop="priceIncludingTax">
              <el-input v-model="form.priceIncludingTax" placeholder="请输入单价(含税)" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="总价(含税)" prop="nickName">
              <el-input v-model="form.priceAll" placeholder="请输入姓名" maxlength="30" />
            <el-form-item label="总价(含税)" prop="totalPriceIncludingTax">
              <el-input v-model="form.totalPriceIncludingTax" placeholder="请输入总价(含税)" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="成本单价" prop="userName">
              <el-input v-model="form.price" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="成本单价" prop="costPerUnit">
              <el-input v-model="form.costPerUnit" placeholder="请输入成本单价" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="煤质" prop="userName">
              <el-input v-model="form.type2" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="煤质方案" prop="qualityPlan">
              <el-select v-model="form.qualityPlan" placeholder="请选择" @change="coalFieldListOption" clearable>
                <el-option
                    v-for="dict in qualityPlanOption"
                    :key="dict.id"
                    :label="dict.plan"
                    :value="dict.id"
                ></el-option>
              </el-select>
            </el-form-item>
          </el-col>
        </el-row>
        <el-divider></el-divider>
        <el-row>
          <el-col :span="12">
            <el-form-item label="全水含量百分比 (%)" prop="userName">
              <el-input v-model="form.value1" placeholder="请输入手机号码" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="固定碳百分比 (%)" prop="nickName">
              <el-input v-model="form.value2" placeholder="请输入姓名" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="低位发热量(单位:千卡/千克)" prop="userName">
              <el-input v-model="form.value3" placeholder="请输入手机号码" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="灰分百分比 (%)" prop="nickName">
              <el-input v-model="form.value4" placeholder="请输入姓名" maxlength="30" />
          <el-col :span="12" v-for="item in filteredList" :key="item.id">
            <el-form-item :label="item.fieldName">
              <el-input v-model="form[item.fields]" />
            </el-form-item>
          </el-col>
        </el-row>
@@ -179,29 +153,34 @@
      <el-form :model="form" :rules="rules" ref="userRef" label-width="100px">
        <el-row>
          <el-col :span="12">
            <el-form-item label="供货商名称" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="供货商名称" prop="supplierName">
              <el-input v-model="form.supplierName" placeholder="请输入手机号码" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="煤种" prop="nickName">
              <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
            <el-form-item label="煤种" prop="coal">
              <el-input v-model="form.coal" placeholder="请输入姓名" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="单价(含税)" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入手机号码" maxlength="30" />
            <el-form-item label="单价(含税)" prop="priceIncludingTax">
              <el-input v-model="form.priceIncludingTax" placeholder="请输入手机号码" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="成本单价" prop="nickName">
              <el-input v-model="form.nickName" placeholder="请输入姓名" maxlength="30" />
            <el-form-item label="总价(含税)" prop="totalPriceIncludingTax">
              <el-input v-model="form.totalPriceIncludingTax" placeholder="请输入手机号码" maxlength="30" />
            </el-form-item>
          </el-col>
        </el-row>
        <el-row>
          <el-col :span="12">
            <el-form-item label="成本单价" prop="costPerUnit">
              <el-input v-model="form.costPerUnit" placeholder="请输入姓名" maxlength="30" />
            </el-form-item>
          </el-col>
          <el-col :span="12">
            <el-form-item label="煤质" prop="userName">
              <el-input v-model="form.userName" placeholder="请输入手机号码" maxlength="30" />
@@ -221,13 +200,22 @@
<script setup>
import {onMounted, ref} from "vue";
import {Delete, Download, Plus, Refresh} from "@element-plus/icons-vue";
import {Delete, Download, Refresh} from "@element-plus/icons-vue";
import Pagination from "@/components/Pagination/index.vue";
import {
  addOrEditCoalValue,
  coalFieldList,
  coalPlanList, officialInventoryList,
  pendingInventoryList
} from "@/api/warehouseManagement/index.js";
const { proxy } = getCurrentInstance()
const tableData = ref([])
const selectedRows = ref([])
const columns = ref([])
const qualityPlanOption = ref([])
const filteredList = ref([])
const tableLoading = ref(false);
const total = ref(0);
const pageNum = ref(1);
@@ -237,13 +225,22 @@
// åˆå¹¶å¼¹æ¡†
const mergeVisible = ref(false)
const data = reactive({
  form: {},
  form: {
    supplierName: '',
    coal: '',
    unit: '',
    inventoryQuantity: '',
    priceIncludingTax: '',
    totalPriceIncludingTax: '',
    costPerUnit: '',
    qualityPlan: '',
    planId: '',
  },
  rules: {
    // userName: [{ required: true, message: "登录账号不能为空", trigger: "blur" }],
    // nickName: [{ required: true, message: "用户姓名不能为空", trigger: "blur" }],
    // roleIds: [{ required: true, message: "角色不能为空", trigger: "change" }],
    // deptId: [{ required: true, message: "部门不能为空", trigger: "change" }],
    // password: [{ required: true, message: "用户密码不能为空", trigger: "blur" }],
    supplierName: [{ required: true, message: "请输入供应商名称", trigger: "blur" }],
    coal: [{ required: true, message: "请输入煤种", trigger: "blur" }],
    unit: [{ required: true, message: "请输入单位", trigger: "blur" }],
    qualityPlan: [{ required: true, message: "请选择", trigger: "change" }],
  }
})
@@ -258,10 +255,8 @@
]);
// æŸ¥è¯¢å‚æ•°
const queryParams = reactive({
  searchText: "",
  supplierName: "",
  identifyNumber: "",
  address: "",
  coal: "",
})
const columnTitle = ref([])
onMounted(() => {
@@ -269,29 +264,15 @@
});
// æ ‡ç­¾é¡µç‚¹å‡»
const handleTabClick = (tab) => {
  getList();
  tableLoading.value = true;
  tabName.value = tab.props.name;
  tableData.value = [];
  getList();
  // switch (tabName.value) {
  //   case "pendingInbound":
  //     columns.value = pendingColumns;
  //     break;
  //   case "officialInventory":
  //     columns.value = officialColumns;
  //     break;
  // }
  setTimeout(() => {
    tableLoading.value = false;
  }, 500);
};
// ç‚¹å‡»æŸ¥è¯¢
const handleQuery = () => {
  tableLoading.value = true;
  setTimeout(() => {
    tableLoading.value = false;
  }, 500);
  pageNum.value = 1
  pageSize.value = 10
  getList()
}
const getList = () => {
  tableLoading.value = true;
@@ -301,18 +282,19 @@
    {prop: 'value2', label: '百分比2'},
    {prop: 'value3', label: '百分比3'},
  ]
  setTimeout(() => {
    // æš‚时引入测试数据
    tableData.value = [
      { name: "供应商A", type: "动力煤", unit: "吨", number: 120, money: 500, money1: 200, money2: 200, money3: 300, money4: '高位', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 23, value3: 14 },
      { name: "供应商A", type: "动力煤", unit: "吨", number: 100, money: 600, money1: 300, money2: 300, money3: 300, money4: '低位', createUser: 'admin', createTime: '2025-06-01', value1: 14, value2: 23, value3: 14 },
      { name: "供应商B", type: "焦煤", unit: "吨", number: 300, money: 789,money1: 400, money2: 400, money3: 400, money4: '高位', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 13, value3: 23  },
      { name: "供应商B", type: "焦煤", unit: "吨", number: 256, money: 800, money1: 420, money2: 420, money3: 420, money4: '低位', createUser: 'admin', createTime: '2025-06-01', value1: 14, value2: 23, value3: 14  },
      { name: "供应商C", type: "无烟煤", unit: "吨", number: 256, money: 700, money1: 300, money2: 300, money3: 300, money4: '高位', createUser: 'admin', createTime: '2025-06-01', value1: 12, value2: 13, value3: 32  }
    ];
    total.value = tableData.value.length;
    tableLoading.value = false;
  }, 500);
  if (tabName.value === "pendingInbound") {
    pendingInventoryList({ ...queryParams }).then(res => {
      tableLoading.value = false;
      tableData.value = res.data.records;
      total.value = res.data.total;
    })
  } else {
    officialInventoryList({ ...queryParams }).then(res => {
      tableLoading.value = false;
      tableData.value = res.data.records;
      total.value = res.data.total;
    })
  }
};
// é‡ç½®æŸ¥è¯¢
const resetQuery = () => {
@@ -323,36 +305,6 @@
  });
  handleQuery();
};
// åˆå¹¶ç›¸åŒè¡Œçš„æ–¹æ³•
const mergeSameRows = ({ row, column, rowIndex, columnIndex }) => {
  const fieldsToMerge = ['number', 'money', 'money1', 'money2', 'money3', 'money4', 'type', 'unit', 'name'];
  if (fieldsToMerge.includes(column.property)) {
    const prevRow = tableData.value[rowIndex - 1]
    const nextRow = tableData.value[rowIndex + 1]
    // åˆ¤æ–­å½“前行和下一行是否相等
    if (
        (!prevRow || prevRow[column.property] !== row[column.property]) &&
        (!nextRow || nextRow[column.property] === row[column.property])
    ) {
      let count = 1
      while (
          tableData.value[rowIndex + count] &&
          tableData.value[rowIndex + count][column.property] === row[column.property]
          ) {
        count++
      }
      return { rowspan: count, colspan: 1 }
    } else if (prevRow && prevRow[column.property] === row[column.property]) {
      // éšè—è¢«åˆå¹¶çš„单元格
      return { rowspan: 0, colspan: 0 }
    }
    return { rowspan: 1, colspan: 1 }
  }
  // å…¶ä»–列不合并
  return { rowspan: 1, colspan: 1 }
}
// è¡¨æ ¼é€‰æ‹©æ•°æ®
const selectionChange = (rows) => {
  selectedRows.value = rows
@@ -360,6 +312,24 @@
// æ‰“开审核弹框
const reviewDia = (row) => {
  reviewVisible.value = true
  form.value = {...row}
  form.value.planId = form.value.id
  coalPlanListOptions()
}
// æŸ¥è¯¢ç…¤è´¨æ–¹æ¡ˆä¸‹æ‹‰æ¡†
const coalPlanListOptions = () => {
  coalPlanList().then(res => {
    qualityPlanOption.value = res.data
  })
}
// æŸ¥è¯¢ç…¤è´¨æ–¹æ¡ˆå­—段
const coalFieldListOption = (id) => {
  coalFieldList({id: id}).then(res => {
    filteredList.value = res.data
    if (!id) {
      filteredList.value = []
    }
  })
}
// åˆå¹¶åº“存数据方法
const mergeRows = () => {
@@ -379,10 +349,26 @@
}
// æäº¤å®¡æ ¸è¡¨å•
const submitReviewForm = () => {
  proxy.$refs.formRef.validate((valid) => {
    if (valid) {
      delete form.value.registrationTime
      delete form.value.createTime
      delete form.value.updateTime
      delete form.value.id
      form.value.fieldValue = filteredList.value.map(item => ({
        [item.fields]: form.value[item.fields]
      }))
      addOrEditCoalValue(form.value).then(() => {
        cancelReview()
        proxy.$modal.msgSuccess('提交成功')
        handleQuery()
      })
    }
  })
}
// å…³é—­å®¡æ ¸å¼¹æ¡†
const cancelReview = () => {
  proxy.$refs.formRef.resetFields()
  reviewVisible.value = false
}
</script>