<template> 
 | 
  <div class="app-container"> 
 | 
    <div class="search_form"> 
 | 
      <div> 
 | 
        <span class="search_title">供应商名称:</span> 
 | 
        <el-input v-model="searchForm.supplierName" style="width: 240px" placeholder="请输入" @change="handleQuery" 
 | 
          clearable prefix-icon="Search" /> 
 | 
        <el-button type="primary" @click="handleQuery" style="margin-left: 10px">搜索</el-button> 
 | 
      </div> 
 | 
      <div> 
 | 
        <!-- <el-button type="primary" @click="openForm('add')">新增</el-button> --> 
 | 
        <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%" 
 | 
        :summary-method="summarizeMainTable" height="calc(100vh - 18.5em)" stripe> 
 | 
        <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="createTime" width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="供应商名称" prop="supplierName" width="240" show-overflow-tooltip /> 
 | 
        <el-table-column label="产品大类" prop="productCategory" width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="规格型号" prop="specificationModel" width="200" show-overflow-tooltip /> 
 | 
        <el-table-column label="单位" prop="unit" width="80" show-overflow-tooltip /> 
 | 
        <el-table-column label="库存数量" prop="inboundNum0" width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="含税单价" prop="taxInclusiveUnitPrice" width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="含税总价" prop="taxInclusiveTotalPrice" width="100" show-overflow-tooltip /> 
 | 
        <el-table-column label="税率(%)" prop="taxRate" width="100" 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 fixed="right" label="操作" min-width="60" align="center"> 
 | 
          <template #default="scope"> 
 | 
            <el-button link type="primary" size="small" @click="openForm('edit', scope.row);" :disabled="scope.row.createUser !== userStore.id">编辑</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-dialog v-model="dialogFormVisible" :title="operationType === 'add' ? '新增库存' : '编辑库存'" width="70%" 
 | 
      @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-form-item label="供应商名称:" prop="supplierName"> 
 | 
              <el-input disabled v-model="form.supplierName" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="产品大类:" prop="productId"> 
 | 
              <el-select disabled v-model="form.productCategory" placeholder="请选择" clearable filterable @change="handleProductChange"> 
 | 
                <el-option v-for="item in productList" :key="item.id" :label="item.productName" 
 | 
                           :value="item.productName" /> 
 | 
              </el-select> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
        </el-row> 
 | 
        <el-row :gutter="30"> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="规格型号:" prop="productManageId"> 
 | 
              <el-select disabled v-model="form.specificationModel" placeholder="请先选择产品大类" clearable filterable :disabled="!form.productCategory" 
 | 
                         @change="handleModelChange"> 
 | 
                <el-option v-for="item in productModelList" :key="item.id" :label="item.model" 
 | 
                           :value="item.id" /> 
 | 
              </el-select> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item  label="单位:" prop="customerId"> 
 | 
              <el-input disabled v-model="form.unit" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
        </el-row> 
 | 
        <el-row :gutter="30"> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="库存时间:" prop="projectName"> 
 | 
              <el-date-picker style="width: 100%" v-model="form.updateTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" 
 | 
                type="date" placeholder="请选择" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="入库时间:" prop="projectName"> 
 | 
              <el-date-picker style="width: 100%" v-model="form.createTime" value-format="YYYY-MM-DD" format="YYYY-MM-DD" 
 | 
                type="date" placeholder="请选择" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
        </el-row> 
 | 
        <el-row :gutter="30"> 
 | 
  
 | 
          <el-col :span="12"> 
 | 
            <el-form-item  label="含税单价:" prop="customerId"> 
 | 
              <el-input disabled v-model="form.taxInclusiveUnitPrice" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item  label="含税总价:" prop="customerContractNo"> 
 | 
              <el-input disabled v-model="form.taxInclusiveTotalPrice" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
        </el-row> 
 | 
        <el-row :gutter="30"> 
 | 
  
 | 
          <el-col :span="12"> 
 | 
            <el-form-item  label="税率:" prop="customerId"> 
 | 
              <el-input disabled v-model="form.taxRate" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="不含税总价:" prop="entryDate"> 
 | 
              <el-input disabled v-model="form.taxExclusiveTotalPrice" placeholder="请输入" clearable /> 
 | 
            </el-form-item> 
 | 
          </el-col> 
 | 
        </el-row> 
 | 
        <el-row :gutter="30"> 
 | 
  
 | 
          <el-col :span="12"> 
 | 
            <el-form-item label="出库人:" prop="entryPerson"> 
 | 
              <el-select v-model="form.createUser" 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> 
 | 
        </el-row> 
 | 
      </el-form> 
 | 
      <template #footer> 
 | 
        <div class="dialog-footer"> 
 | 
          <el-button type="primary" @click="submitForm">确认</el-button> 
 | 
          <el-button @click="closeDia">取消</el-button> 
 | 
        </div> 
 | 
      </template> 
 | 
    </el-dialog> 
 | 
  </div> 
 | 
</template> 
 | 
  
 | 
<script setup> 
 | 
import pagination from '@/components/PIMTable/Pagination.vue' 
 | 
import { ref } from 'vue' 
 | 
import { ElMessageBox } from "element-plus"; 
 | 
import useUserStore from '@/store/modules/user' 
 | 
import { userListNoPageByTenantId } from "@/api/system/user.js"; 
 | 
import { productTreeList,modelList } from "@/api/basicData/product.js" 
 | 
import { 
 | 
  getStockManagePage , 
 | 
  updateStockManage, 
 | 
  delStockManage, 
 | 
  exportStockManage 
 | 
} from "@/api/inventoryManagement/stockManage.js"; 
 | 
import { 
 | 
  updateManagement 
 | 
} from "@/api/inventoryManagement/stockIn.js"; 
 | 
const userStore = useUserStore() 
 | 
const { proxy } = getCurrentInstance() 
 | 
const tableData = ref([]) 
 | 
const productData = ref([]) 
 | 
const selectedRows = ref([]) 
 | 
const userList = ref([]) 
 | 
const productList = ref([]) 
 | 
const productModelList = ref([]) 
 | 
// const customerOption = ref([]) 
 | 
const tableLoading = ref(false) 
 | 
const page = reactive({ 
 | 
  current: 1, 
 | 
  size: 100, 
 | 
}) 
 | 
const total = ref(0) 
 | 
const fileList = ref([]) 
 | 
  
 | 
// 用户信息表单弹框数据 
 | 
const operationType = ref('') 
 | 
const dialogFormVisible = ref(false) 
 | 
const data = reactive({ 
 | 
  searchForm: { 
 | 
    supplierName: '', 
 | 
  }, 
 | 
  form: { 
 | 
    supplierId: null, 
 | 
    supplierName: '', 
 | 
    productId: null, 
 | 
    productName: '', 
 | 
    userId: userStore.userId, 
 | 
    nickName: '', 
 | 
    productModelId: null, 
 | 
    model: '', 
 | 
    unit: '', 
 | 
    productrecordId: null, 
 | 
    taxInclusiveUnitPrice: '', 
 | 
    taxInclusiveTotalPrice: '', 
 | 
    taxRate: '', 
 | 
    taxExclusiveTotalPrice: '', 
 | 
    inboundTime: '', 
 | 
    inboundBatch: '', 
 | 
    stockQuantity: '', 
 | 
    boundTime: '', 
 | 
  }, 
 | 
  rules: { 
 | 
    supplierName: [{ required: true, message: '请输入供应商名称', trigger: 'blur' }], 
 | 
    productCategory: [{ required: true, message: '请选择产品大类', trigger: 'change' }], 
 | 
    specificationModel: [{ required: true, message: '请输入规格型号', trigger: 'blur' }], 
 | 
    unit: [{ required: true, message: '请输入单位', trigger: 'blur' }], 
 | 
    stockQuantity: [{ required: true, message: '请输入出库数量', trigger: 'blur' }], 
 | 
    taxInclusiveUnitPrice: [{ required: true, message: '请输入含税单价', trigger: 'blur' }], 
 | 
    taxInclusiveTotalPrice: [{ required: true, message: '请输入含税总价', trigger: 'blur' }], 
 | 
    taxRate: [{ required: true, message: '请输入税率', trigger: 'blur' }], 
 | 
    taxExclusiveTotalPrice: [{ required: true, message: '请输入不含税总价', trigger: 'blur' }], 
 | 
    boundTime: [{ required: true, message: '请选择库存时间', trigger: 'change' }], 
 | 
    inboundTime: [{ required: true, message: '请选择入库时间', trigger: 'change' }], 
 | 
    inboundPerson: [{ required: true, message: '请选择出库人', trigger: 'change' }] 
 | 
  } 
 | 
}) 
 | 
const { searchForm, form, rules } = toRefs(data) 
 | 
  
 | 
// 查询列表 
 | 
/** 搜索按钮操作 */ 
 | 
const handleQuery = () => { 
 | 
  page.current = 1 
 | 
  getList() 
 | 
} 
 | 
const paginationChange = (obj) => { 
 | 
  page.current = obj.page; 
 | 
  page.size = obj.limit; 
 | 
  getList() 
 | 
} 
 | 
const getList = () => { 
 | 
  tableLoading.value = true 
 | 
  getStockManagePage({ ...searchForm.value, ...page }).then(res => { 
 | 
    tableLoading.value = false 
 | 
    tableData.value = res.data.records 
 | 
    console.log('res', res) 
 | 
    // tableData.value.map(item => { 
 | 
    //   item.children = [] 
 | 
    // }) 
 | 
    total.value = res.data.total 
 | 
  }).catch(() => { 
 | 
    tableLoading.value = false 
 | 
  }) 
 | 
} 
 | 
  
 | 
// 表格选择数据 
 | 
const handleSelectionChange = (selection) => { 
 | 
  
 | 
  // 过滤掉子数据 
 | 
  selectedRows.value = selection.filter(item => item.id); 
 | 
  console.log('selection', selectedRows.value) 
 | 
} 
 | 
const expandedRowKeys = ref([]) 
 | 
  
 | 
// 主表合计方法 
 | 
const summarizeMainTable = (param) => { 
 | 
  return proxy.summarizeTable(param, ['contractAmount', 'taxInclusiveTotalPrice', 'taxExclusiveTotalPrice']); 
 | 
}; 
 | 
  
 | 
// 打开弹框 
 | 
const openForm = async (type, row) => { 
 | 
  operationType.value = type 
 | 
  form.value = {} 
 | 
  productData.value = [] 
 | 
  let userLists = await userListNoPageByTenantId() 
 | 
  userList.value = userLists.data 
 | 
  // customerList().then(res => { 
 | 
  //   customerOption.value = res 
 | 
  // }) 
 | 
  // console.log('userStore.id', userStore.id) 
 | 
  // form.value.entryPerson = userStore.id 
 | 
  if (type === 'edit') { 
 | 
    form.value = { ...row } 
 | 
    productTreeList().then(res =>{ 
 | 
      productList.value = res 
 | 
      productList.value.forEach(i =>{ 
 | 
        if (i.label === row.productCategory) { 
 | 
          modelList({ id: i.id }).then((res) => { 
 | 
            productModelList.value = res; 
 | 
          }); 
 | 
        } 
 | 
      }) 
 | 
    }) 
 | 
  
 | 
  
 | 
    // getSalesLedgerWithProducts({ id: row.id, type: 1 }).then(res => { 
 | 
  
 | 
    //   form.value.entryPerson = Number(res.entryPerson) 
 | 
    //   productData.value = form.value.productData 
 | 
    //   fileList.value = form.value.salesLedgerFiles 
 | 
    // }) 
 | 
  } 
 | 
  form.value.entryDate = getCurrentDate() // 设置默认录入日期为当前日期 
 | 
  dialogFormVisible.value = true 
 | 
} 
 | 
  
 | 
// 提交表单 
 | 
const submitForm = () => { 
 | 
  console.log(form.value) 
 | 
  proxy.$refs["formRef"].validate(valid => { 
 | 
    if (valid) { 
 | 
      // if (productData.value.length > 0) { 
 | 
      //   form.value.productData = proxy.HaveJson(productData.value) 
 | 
      // } else { 
 | 
      //   proxy.$modal.msgWarning('请添加产品信息') 
 | 
      //   return 
 | 
      // } 
 | 
      // let tempFileIds = [] 
 | 
      // if (fileList.value.length > 0) { 
 | 
      //   tempFileIds = fileList.value.map(item => item.tempId) 
 | 
      // } 
 | 
      // form.value.tempFileIds = tempFileIds 
 | 
      // form.value.type = 1 
 | 
      updateManagement(form.value).then(res => { 
 | 
        proxy.$modal.msgSuccess("提交成功") 
 | 
        closeDia() 
 | 
        getList() 
 | 
      }) 
 | 
    } 
 | 
  }) 
 | 
} 
 | 
// 关闭弹框 
 | 
const closeDia = () => { 
 | 
  proxy.resetForm("formRef") 
 | 
  dialogFormVisible.value = false 
 | 
} 
 | 
  
 | 
// 导出 
 | 
const handleOut = () => { 
 | 
  ElMessageBox.confirm( 
 | 
    '是否确认导出?', 
 | 
    '导出', { 
 | 
    confirmButtonText: '确认', 
 | 
    cancelButtonText: '取消', 
 | 
    type: 'warning', 
 | 
  } 
 | 
  ).then(() => { 
 | 
    proxy.download("/stockin/exportCopy", {}, '库存信息.xlsx') 
 | 
  }).catch(() => { 
 | 
    proxy.$modal.msg("已取消") 
 | 
  }) 
 | 
} 
 | 
// 删除 
 | 
const handleDelete = () => { 
 | 
  let ids = [] 
 | 
  if (selectedRows.value.length > 0) { 
 | 
        // 检查是否有他人维护的数据 
 | 
        const unauthorizedData = selectedRows.value.filter(item => item.createUser !== userStore.id); 
 | 
        if (unauthorizedData.length > 0) { 
 | 
            proxy.$modal.msgWarning("不可删除他人维护的数据"); 
 | 
            return; 
 | 
        } 
 | 
    ids = selectedRows.value.map(item => item.id); 
 | 
  } else { 
 | 
    proxy.$modal.msgWarning('请选择数据') 
 | 
    return 
 | 
  } 
 | 
  ElMessageBox.confirm( 
 | 
    '选中的内容将被删除,是否确认删除?', 
 | 
    '导出', { 
 | 
    confirmButtonText: '确认', 
 | 
    cancelButtonText: '取消', 
 | 
    type: 'warning', 
 | 
  } 
 | 
  ).then(() => { 
 | 
    delStockManage({ids:ids}).then(res => { 
 | 
      proxy.$modal.msgSuccess("删除成功") 
 | 
      getList() 
 | 
    }) 
 | 
  }).catch(() => { 
 | 
    proxy.$modal.msg("已取消") 
 | 
  }) 
 | 
} 
 | 
// 获取当前日期并格式化为 YYYY-MM-DD 
 | 
function getCurrentDate() { 
 | 
  const today = new Date(); 
 | 
  const year = today.getFullYear(); 
 | 
  const month = String(today.getMonth() + 1).padStart(2, '0'); // 月份从0开始 
 | 
  const day = String(today.getDate()).padStart(2, '0'); 
 | 
  return `${year}-${month}-${day}`; 
 | 
} 
 | 
onMounted(() => { 
 | 
  getList() 
 | 
}) 
 | 
</script> 
 | 
  
 | 
<style scoped lang="scss"></style> 
 |