ソースを参照

手动入库, 调仓, 库存盘点, 申购, 采购页面 选择物品/商品方法整改

lxf 1 年間 前
コミット
5c4e5c0f12

+ 83 - 191
src/components/process/SendPurchase.vue

@@ -1,144 +1,65 @@
 <template>
   <div style="width: 100%; padding: 0px 15px">
-    <el-form
-      :model="formData.data"
-      :rules="rules"
-      ref="formDom"
-      label-position="top"
-      :disabled="judgeStatus()"
-    >
+    <el-form :model="formData.data" :rules="rules" ref="formDom" label-position="top" :disabled="judgeStatus()">
       <div class="_t">基础信息</div>
       <el-row :gutter="10">
         <el-col :span="6">
           <el-form-item label="采购部门" prop="deptName">
-            <el-input v-model="formData.data.deptName" placeholder="请输入">
-            </el-input>
+            <el-input v-model="formData.data.deptName" placeholder="请输入"> </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="6">
           <el-form-item label="采购人" prop="purchaseName">
-            <el-input v-model="formData.data.purchaseName" placeholder="请输入">
-            </el-input>
+            <el-input v-model="formData.data.purchaseName" placeholder="请输入"> </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="6">
           <el-form-item label="采购时间" prop="purchaseTime">
-            <el-date-picker
-              v-model="formData.data.purchaseTime"
-              type="datetime"
-              placeholder="请选择"
-            />
+            <el-date-picker v-model="formData.data.purchaseTime" type="datetime" placeholder="请选择" />
           </el-form-item>
         </el-col>
       </el-row>
       <el-row :gutter="10">
         <el-col :span="8">
           <el-form-item label="供应商" prop="supplyId">
-            <el-select
-              v-model="formData.data.supplyId"
-              placeholder="请选择"
-              @change="handleChangeSupplier"
-              filterable
-              style="width: 100%"
-            >
-              <el-option
-                v-for="item in supplierData"
-                :label="item.name"
-                :value="item.id"
-              >
-              </el-option>
+            <el-select v-model="formData.data.supplyId" placeholder="请选择" @change="handleChangeSupplier" filterable style="width: 100%">
+              <el-option v-for="item in supplierData" :label="item.name" :value="item.id"> </el-option>
             </el-select>
           </el-form-item>
         </el-col>
       </el-row>
       <el-form-item label="采购说明" prop="purchaseContent">
-        <el-input
-          v-model="formData.data.purchaseContent"
-          placeholder="请输入"
-          type="textarea"
-        >
-        </el-input>
+        <el-input v-model="formData.data.purchaseContent" placeholder="请输入" type="textarea"> </el-input>
       </el-form-item>
       <div class="_t">采购明细</div>
       <el-form-item>
-        <el-button
-          type="primary"
-          @click="openProduct = true"
-          style="margin: 10px 0"
-          v-if="ids.length == 0"
-        >
-          添加货品
-        </el-button>
+        <el-button type="primary" @click="openProduct = true" style="margin: 10px 0" v-if="ids.length == 0"> 添加货品 </el-button>
         <el-table :data="formData.data.purchaseDetailList">
-          <el-table-column
-            prop="goodType"
-            label="货品类型"
-            :formatter="(row) => (row.goodType == 1 ? '产品' : '物料')"
-          />
+          <el-table-column prop="goodType" label="货品类型" :formatter="(row) => (row.goodType == 1 ? '产品' : '物料')" />
           <el-table-column prop="productCode" label="货品编码" />
           <el-table-column prop="productName" label="货品名称" />
           <el-table-column prop="productSpec" label="规格型号" />
-          <el-table-column
-            prop="productUnit"
-            label="单位"
-            :formatter="(row) => dictValueLabel(row.productUnit, productUnit)"
-          />
-          <el-table-column
-            prop="subscribeCount"
-            label="申购数量"
-            v-if="ids.length > 0"
-          />
-          <el-table-column
-            prop="purchaseCount"
-            label="已采购数量"
-            v-if="ids.length > 0"
-          />
+          <el-table-column prop="productUnit" label="单位" :formatter="(row) => dictValueLabel(row.productUnit, productUnit)" />
+          <el-table-column prop="subscribeCount" label="申购数量" v-if="ids.length > 0" />
+          <el-table-column prop="purchaseCount" label="已采购数量" v-if="ids.length > 0" />
           <el-table-column prop="count" label="本次采购" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'purchaseDetailList.' + $index + '.count'"
-                :rules="rules.count"
-                :inline-message="true"
-              >
-                <el-input-number
-                  onmousewheel="return false;"
-                  v-model="row.count"
-                  :precision="4"
-                  :controls="false"
-                  :min="0"
-                  @change="handleChangeAmount"
-                />
+              <el-form-item :prop="'purchaseDetailList.' + $index + '.count'" :rules="rules.count" :inline-message="true">
+                <el-input-number onmousewheel="return false;" v-model="row.count" :precision="4" :controls="false" :min="0" @change="handleChangeAmount" />
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="price" label="单价" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'purchaseDetailList.' + $index + '.price'"
-                :rules="rules.price"
-                :inline-message="true"
-              >
-                <el-input-number
-                  onmousewheel="return false;"
-                  v-model="row.price"
-                  :precision="4"
-                  :controls="false"
-                  :min="0"
-                  @change="handleChangeAmount"
-                />
+              <el-form-item :prop="'purchaseDetailList.' + $index + '.price'" :rules="rules.price" :inline-message="true">
+                <el-input-number onmousewheel="return false;" v-model="row.price" :precision="4" :controls="false" :min="0" @change="handleChangeAmount" />
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="amount" label="金额" />
           <el-table-column prop="zip" label="操作" width="100">
             <template #default="{ $index }">
-              <el-button
-                type="primary"
-                link
-                @click="handleRemove($index, 20)"
-                :disabled="formData.data.purchaseDetailList.length === 1"
-                >删除</el-button
-              >
+              <el-button type="primary" link @click="handleRemove($index, 20)" :disabled="formData.data.purchaseDetailList.length === 1">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -146,71 +67,46 @@
       <el-row>
         <el-col :span="4">
           <el-form-item label="商品金额小计" prop="productAmount">
-            <el-input
-              v-model="formData.data.productAmount"
-              placeholder="请输入"
-              disabled
-            />
+            <el-input v-model="formData.data.productAmount" placeholder="请输入" disabled />
           </el-form-item>
         </el-col>
       </el-row>
       <div class="_t">其他收费项目</div>
       <el-form-item>
-        <el-button type="primary" style="margin: 10px 0" @click="handleAdd">
-          添加
-        </el-button>
+        <el-button type="primary" style="margin: 10px 0" @click="handleAdd"> 添加 </el-button>
         <el-table :data="formData.data.otherFeeList">
           <el-table-column prop="name" label="收费项目" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'otherFeeList.' + $index + '.name'"
-                :rules="rulesOne.name"
-                :inline-message="true"
-              >
+              <el-form-item :prop="'otherFeeList.' + $index + '.name'" :rules="rulesOne.name" :inline-message="true">
                 <el-autocomplete
                   v-model="row.name"
                   :fetch-suggestions="querySearchPerson"
                   clearable
                   class="inline-input w-50"
                   placeholder="请输入"
-                  @select="(val) => handlePerson(val, $index)"
-                >
+                  @select="(val) => handlePerson(val, $index)">
                 </el-autocomplete>
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="price" label="金额" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'otherFeeList.' + $index + '.price'"
-                :rules="rulesOne.price"
-                :inline-message="true"
-              >
-                <el-input-number
-                  v-model="row.price"
-                  :precision="4"
-                  :controls="false"
-                  @change="handleChangeAmount"
-                />
+              <el-form-item :prop="'otherFeeList.' + $index + '.price'" :rules="rulesOne.price" :inline-message="true">
+                <el-input-number v-model="row.price" :precision="4" :controls="false" @change="handleChangeAmount" />
               </el-form-item>
             </template>
           </el-table-column>
 
           <el-table-column prop="remark" label="备注" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'otherFeeList.' + $index + '.remark'"
-                :inline-message="true"
-              >
+              <el-form-item :prop="'otherFeeList.' + $index + '.remark'" :inline-message="true">
                 <el-input v-model="row.remark" placeholder="请输入" />
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="zip" label="操作" width="100">
             <template #default="{ $index }">
-              <el-button type="primary" link @click="handleRemove($index, 10)"
-                >删除</el-button
-              >
+              <el-button type="primary" link @click="handleRemove($index, 10)">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
@@ -218,11 +114,7 @@
       <el-row>
         <el-col :span="4">
           <el-form-item label="其他收费小计" prop="otherAmount">
-            <el-input
-              v-model="formData.data.otherAmount"
-              placeholder="请输入"
-              disabled
-            />
+            <el-input v-model="formData.data.otherAmount" placeholder="请输入" disabled />
           </el-form-item>
         </el-col>
       </el-row>
@@ -230,25 +122,13 @@
       <el-row>
         <el-col :span="4">
           <el-form-item label="采购总金额" prop="amount">
-            <el-input
-              v-model="formData.data.amount"
-              placeholder="请输入"
-              disabled
-            />
+            <el-input v-model="formData.data.amount" placeholder="请输入" disabled />
           </el-form-item>
         </el-col>
       </el-row>
     </el-form>
-    <el-dialog
-      v-model="openProduct"
-      title="选择货品"
-      width="70%"
-      append-to-body
-    >
-      <SelectGoods
-        @cancel="openProduct = false"
-        @pushGoods="pushGoods"
-      ></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择货品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
@@ -275,12 +155,8 @@ let formData = reactive({
 });
 let rules = ref({
   deptName: [{ required: true, message: "请输入采购部门", trigger: "blur" }],
-  purchaseName: [
-    { required: true, message: "请输入采购人名称", trigger: "blur" },
-  ],
-  purchaseTime: [
-    { required: true, message: "请选择采购时间", trigger: "change" },
-  ],
+  purchaseName: [{ required: true, message: "请输入采购人名称", trigger: "blur" }],
+  purchaseTime: [{ required: true, message: "请选择采购时间", trigger: "change" }],
   supplyId: [{ required: true, message: "请选择供应商", trigger: "change" }],
   count: [{ required: true, message: "请输入本次采购数量", trigger: "blur" }],
   price: [{ required: true, message: "请输入单价", trigger: "blur" }],
@@ -315,24 +191,39 @@ const handleAdd = () => {
 };
 
 const pushGoods = (goods) => {
-  const arr = goods.map((x) => ({
-    goodType: x.goodType,
-    productCode: x.code,
-    productName: x.name,
-    productSpec: x.spec,
-    productUnit: x.unit,
-    count: 0,
-    price: 0,
-    bussinessId: x.id,
-    amount: 0,
-  }));
-  formData.data.purchaseDetailList =
-    formData.data.purchaseDetailList.concat(arr);
-  openProduct.value = false;
-  return ElMessage({
-    message: "添加成功!",
-    type: "success",
-  });
+  if (goods && goods.length > 0) {
+    let afterFiltering = [];
+    if (formData.data.purchaseDetailList && formData.data.purchaseDetailList.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.purchaseDetailList.filter((itemProduct) => itemProduct.bussinessId === item.id);
+        if (data && data.length > 0) {
+          return false;
+        }
+        return true;
+      });
+    } else {
+      afterFiltering = goods;
+    }
+    const arr = afterFiltering.map((x) => ({
+      goodType: x.goodType,
+      productCode: x.code,
+      productName: x.name,
+      productSpec: x.spec,
+      productUnit: x.unit,
+      count: 0,
+      price: 0,
+      bussinessId: x.id,
+      amount: 0,
+    }));
+    formData.data.purchaseDetailList = formData.data.purchaseDetailList.concat(arr);
+    openProduct.value = false;
+    return ElMessage({
+      message: "添加成功!",
+      type: "success",
+    });
+  } else {
+    ElMessage("请选择至少一件物品");
+  }
 };
 // 提交方法
 const formDom = ref(null);
@@ -456,11 +347,9 @@ const getDetails = () => {
 const supplierData = ref([]);
 const otherFeeListData = ref([]);
 const getSupplierList = async (req) => {
-  proxy
-    .post("/supplierInfo/page", { pageNum: 1, pageSize: 9999 })
-    .then((res) => {
-      supplierData.value = res.rows;
-    });
+  proxy.post("/supplierInfo/page", { pageNum: 1, pageSize: 9999 }).then((res) => {
+    supplierData.value = res.rows;
+  });
 };
 // 供应商改变逻辑
 const handleChangeSupplier = (val) => {
@@ -541,16 +430,12 @@ getDict();
 
 const createFilter = (queryString) => {
   return (restaurant) => {
-    return (
-      restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0
-    );
+    return restaurant.value.toLowerCase().indexOf(queryString.toLowerCase()) === 0;
   };
 };
 
 const querySearchPerson = (queryString, callback) => {
-  const results = queryString
-    ? otherFeeListData.value.filter(createFilter(queryString))
-    : otherFeeListData.value;
+  const results = queryString ? otherFeeListData.value.filter(createFilter(queryString)) : otherFeeListData.value;
   callback(results);
 };
 
@@ -563,10 +448,7 @@ const handlePerson = (item, index) => {
 watch(
   props.queryData,
   () => {
-    if (
-      props.queryData &&
-      (route.query.processType == 10 || route.query.processType == 20)
-    ) {
+    if (props.queryData && (route.query.processType == 10 || route.query.processType == 20)) {
       for (const key in props.queryData) {
         formData.data[key] = props.queryData[key];
       }
@@ -578,9 +460,7 @@ watch(
 );
 const judgeStatus = () => {
   if (props.queryData.recordList && props.queryData.recordList.length > 0) {
-    let data = props.queryData.recordList.filter(
-      (item) => item.status === 2 && item.nodeType !== 1
-    );
+    let data = props.queryData.recordList.filter((item) => item.status === 2 && item.nodeType !== 1);
     if (data && data.length > 0) {
       return true;
     }
@@ -596,6 +476,18 @@ defineExpose({
   getFormData,
   handleSubmit,
 });
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.purchaseDetailList && formData.data.purchaseDetailList.length > 0) {
+    data = formData.data.purchaseDetailList.map((item) => {
+      return {
+        id: item.bussinessId,
+        name: item.productName,
+      };
+    });
+  }
+  return data;
+};
 </script>
 
 <style lang="scss" scoped>

+ 63 - 109
src/components/process/SendSubscribe.vue

@@ -1,131 +1,67 @@
 <template>
   <div style="width: 100%; padding: 0px 15px">
-    <el-form
-      :model="formData.data"
-      :rules="rules"
-      ref="formDom"
-      label-position="top"
-      :disabled="judgeStatus()"
-    >
+    <el-form :model="formData.data" :rules="rules" ref="formDom" label-position="top" :disabled="judgeStatus()">
       <div class="_t">申购信息</div>
       <el-row :gutter="10">
         <el-col :span="6">
           <el-form-item label="申购部门" prop="deptName">
-            <el-input
-              v-model="formData.data.deptName"
-              placeholder="请输入"
-              disabled
-            >
-            </el-input>
+            <el-input v-model="formData.data.deptName" placeholder="请输入" disabled> </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="6">
           <el-form-item label="申购人" prop="subcribeName">
-            <el-input
-              v-model="formData.data.subcribeName"
-              placeholder="请输入"
-              disabled
-            >
-            </el-input>
+            <el-input v-model="formData.data.subcribeName" placeholder="请输入" disabled> </el-input>
           </el-form-item>
         </el-col>
         <el-col :span="6">
           <el-form-item label="申购时间" prop="subcribeTime">
-            <el-date-picker
-              v-model="formData.data.subcribeTime"
-              type="datetime"
-              placeholder="请选择"
-              disabled
-            />
+            <el-date-picker v-model="formData.data.subcribeTime" type="datetime" placeholder="请选择" disabled />
           </el-form-item>
         </el-col>
       </el-row>
       <el-form-item label="申购说明" prop="subcribeContent">
-        <el-input
-          v-model="formData.data.subcribeContent"
-          placeholder="请输入"
-          type="textarea"
-        >
-        </el-input>
+        <el-input v-model="formData.data.subcribeContent" placeholder="请输入" type="textarea"> </el-input>
       </el-form-item>
       <div class="_t">申购明细</div>
       <el-form-item>
-        <el-button
-          type="primary"
-          @click="openProduct = true"
-          style="margin: 10px 0"
-        >
-          添加货品
-        </el-button>
+        <el-button type="primary" @click="openProduct = true" style="margin: 10px 0"> 添加货品 </el-button>
         <el-table :data="formData.data.subscribeDetailList">
-          <el-table-column
-            prop="goodType"
-            label="货品类型"
-            :formatter="(row) => (row.goodType == 1 ? '产品' : '物料')"
-          />
+          <el-table-column prop="goodType" label="货品类型" :formatter="(row) => (row.goodType == 1 ? '产品' : '物料')" />
           <el-table-column prop="code" label="货品编码" />
           <el-table-column prop="name" label="货品名称" min-width="150" />
           <el-table-column prop="spec" label="规格型号" />
-          <el-table-column
-            prop="unit"
-            label="单位"
-            :formatter="(row) => dictValueLabel(row.unit, productUnit)"
-          />
+          <el-table-column prop="unit" label="单位" :formatter="(row) => dictValueLabel(row.unit, productUnit)" />
           <el-table-column prop="count" label="申购数量" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'subscribeDetailList.' + $index + '.count'"
-                :rules="rules.count"
-                :inline-message="true"
-              >
-                <el-input-number
-                  onmousewheel="return false;"
-                  v-model="row.count"
-                  :precision="4"
-                  :controls="false"
-                  :min="1"
-                />
+              <el-form-item :prop="'subscribeDetailList.' + $index + '.count'" :rules="rules.count" :inline-message="true">
+                <el-input-number onmousewheel="return false;" v-model="row.count" :precision="4" :controls="false" :min="1" />
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="remark" label="备注" min-width="150">
             <template #default="{ row, $index }">
-              <el-form-item
-                :prop="'subscribeDetailList.' + $index + '.remark'"
-                :rules="rules.remark"
-                :inline-message="true"
-              >
+              <el-form-item :prop="'subscribeDetailList.' + $index + '.remark'" :rules="rules.remark" :inline-message="true">
                 <el-input v-model="row.remark" placeholder="请输入" />
               </el-form-item>
             </template>
           </el-table-column>
           <el-table-column prop="zip" label="操作" width="100">
             <template #default="{ $index }">
-              <el-button type="primary" link @click="handleRemove($index)"
-                >删除</el-button
-              >
+              <el-button type="primary" link @click="handleRemove($index)">删除</el-button>
             </template>
           </el-table-column>
         </el-table>
       </el-form-item>
     </el-form>
-    <el-dialog
-      v-model="openProduct"
-      title="选择货品"
-      width="70%"
-      append-to-body
-    >
-      <SelectGoods
-        @cancel="openProduct = false"
-        @pushGoods="pushGoods"
-      ></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择货品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
 
 <script setup>
 import SelectGoods from "@/components/product/SelectGoods";
-import { ElMessage, ElMessageBox } from "element-plus";
+import { ElMessage } from "element-plus";
 import useUserStore from "@/store/modules/user";
 const route = useRoute();
 const { proxy } = getCurrentInstance();
@@ -142,12 +78,8 @@ let formData = reactive({
 });
 let rules = ref({
   deptName: [{ required: true, message: "请输入申购部门", trigger: "blur" }],
-  subcribeName: [
-    { required: true, message: "请输入申购人名称", trigger: "blur" },
-  ],
-  subcribeTime: [
-    { required: true, message: "请选择申购时间", trigger: "change" },
-  ],
+  subcribeName: [{ required: true, message: "请输入申购人名称", trigger: "blur" }],
+  subcribeTime: [{ required: true, message: "请选择申购时间", trigger: "change" }],
   // subcribeContent: [
   //   { required: true, message: "请输入申购事由", trigger: "blur" },
   // ],
@@ -166,23 +98,38 @@ const handleRemove = (index) => {
 };
 
 const pushGoods = (goods) => {
-  const arr = goods.map((x) => ({
-    goodType: x.goodType,
-    code: x.code,
-    name: x.name,
-    spec: x.spec,
-    unit: x.unit,
-    bussinessId: x.id,
-    count: "",
-    remark: "",
-  }));
-  formData.data.subscribeDetailList =
-    formData.data.subscribeDetailList.concat(arr);
-  openProduct.value = false;
-  return ElMessage({
-    message: "添加成功!",
-    type: "success",
-  });
+  if (goods && goods.length > 0) {
+    let afterFiltering = [];
+    if (formData.data.subscribeDetailList && formData.data.subscribeDetailList.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.subscribeDetailList.filter((itemProduct) => itemProduct.bussinessId === item.id);
+        if (data && data.length > 0) {
+          return false;
+        }
+        return true;
+      });
+    } else {
+      afterFiltering = goods;
+    }
+    const arr = afterFiltering.map((x) => ({
+      goodType: x.goodType,
+      code: x.code,
+      name: x.name,
+      spec: x.spec,
+      unit: x.unit,
+      bussinessId: x.id,
+      count: "",
+      remark: "",
+    }));
+    formData.data.subscribeDetailList = formData.data.subscribeDetailList.concat(arr);
+    openProduct.value = false;
+    return ElMessage({
+      message: "添加成功!",
+      type: "success",
+    });
+  } else {
+    ElMessage("请选择至少一件物品");
+  }
 };
 
 const formDom = ref(null);
@@ -214,9 +161,7 @@ onMounted(() => {
 
 const judgeStatus = () => {
   if (props.queryData.recordList && props.queryData.recordList.length > 0) {
-    let data = props.queryData.recordList.filter(
-      (item) => item.status === 2 && item.nodeType !== 1
-    );
+    let data = props.queryData.recordList.filter((item) => item.status === 2 && item.nodeType !== 1);
     if (data && data.length > 0) {
       return true;
     }
@@ -227,10 +172,7 @@ const judgeStatus = () => {
 watch(
   props.queryData,
   () => {
-    if (
-      props.queryData &&
-      (route.query.processType == 10 || route.query.processType == 20)
-    ) {
+    if (props.queryData && (route.query.processType == 10 || route.query.processType == 20)) {
       for (const key in props.queryData) {
         formData.data[key] = props.queryData[key];
       }
@@ -257,6 +199,18 @@ defineExpose({
   getFormData,
   handleSubmit,
 });
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.subscribeDetailList && formData.data.subscribeDetailList.length > 0) {
+    data = formData.data.subscribeDetailList.map((item) => {
+      return {
+        id: item.bussinessId,
+        name: item.productName,
+      };
+    });
+  }
+  return data;
+};
 </script>
 
 <style lang="scss" scoped>

+ 95 - 156
src/views/purchaseManage/supplier/supplyPrice/index.vue

@@ -19,83 +19,37 @@
             action: () => openModal('add'),
           },
         ]"
-        @get-list="getList"
-      >
+        @get-list="getList">
         <template #fileSlot="{ item }">
-          <div
-            style="cursor: pointer; color: #409eff"
-            @click="handleClickFile(item)"
-          >
+          <div style="cursor: pointer; color: #409eff" @click="handleClickFile(item)">
             {{ item.fileName }}
           </div>
         </template>
       </byTable>
     </div>
-    <el-dialog
-      :title="modalType == 'add' ? '添加供应价格' : '编辑供应价格'"
-      v-model="dialogVisible"
-      width="800"
-      v-loading="loading"
-    >
-      <byForm
-        :formConfig="formConfig"
-        :formOption="formOption"
-        v-model="formData.data"
-        :rules="rules"
-        ref="byform"
-      >
+    <el-dialog :title="modalType == 'add' ? '添加供应价格' : '编辑供应价格'" v-model="dialogVisible" width="800" v-loading="loading">
+      <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="byform">
         <template #details>
           <div style="width: 100%">
-            <el-button
-              type="primary"
-              @click="openProduct = true"
-              :disabled="modalType == 'edit'"
-            >
-              选择
-            </el-button>
+            <el-button type="primary" @click="openProduct = true" :disabled="modalType == 'edit'"> 选择 </el-button>
 
-            <el-form
-              ref="tableForm"
-              :model="formData.data"
-              :rules="rules"
-              label-width="0px"
-              style="margin-top: 15px"
-            >
+            <el-form ref="tableForm" :model="formData.data" :rules="rules" label-width="0px" style="margin-top: 15px">
               <el-table :data="formData.data.supplierPriceList">
                 <el-table-column prop="code" label="货品编码" />
                 <el-table-column prop="name" label="货品名称" min-width="150" />
                 <el-table-column prop="spec" label="规格型号" />
-                <el-table-column
-                  prop="unit"
-                  label="单位"
-                  :formatter="(row) => dictValueLabel(row.unit, productUnit)"
-                />
+                <el-table-column prop="unit" label="单位" :formatter="(row) => dictValueLabel(row.unit, productUnit)" />
                 <el-table-column prop="price" label="供应单价" min-width="150">
                   <template #default="{ row, $index }">
-                    <el-form-item
-                      :prop="'supplierPriceList.' + $index + '.price'"
-                      :rules="rules.price"
-                      :inline-message="true"
-                    >
-                      <el-input-number
-                        v-model="row.price"
-                        :precision="4"
-                        :controls="false"
-                        :min="1"
-                      />
+                    <el-form-item :prop="'supplierPriceList.' + $index + '.price'" :rules="rules.price" :inline-message="true">
+                      <el-input-number v-model="row.price" :precision="4" :controls="false" :min="1" />
                     </el-form-item>
                   </template>
                 </el-table-column>
 
                 <el-table-column prop="zip" label="操作" width="100">
                   <template #default="{ $index }">
-                    <el-button
-                      type="primary"
-                      link
-                      @click="handleRemove($index)"
-                      :disabled="modalType == 'edit'"
-                      >删除</el-button
-                    >
+                    <el-button type="primary" link @click="handleRemove($index)" :disabled="modalType == 'edit'">删除</el-button>
                   </template>
                 </el-table-column>
               </el-table>
@@ -105,31 +59,16 @@
       </byForm>
       <template #footer>
         <el-button @click="dialogVisible = false" size="large">取 消</el-button>
-        <el-button
-          type="primary"
-          @click="submitForm('byform')"
-          size="large"
-          :loading="submitLoading"
-        >
-          确 定
-        </el-button>
+        <el-button type="primary" @click="submitForm('byform')" size="large" :loading="submitLoading"> 确 定 </el-button>
       </template>
     </el-dialog>
 
-    <el-dialog
-      v-model="openProduct"
-      title="选择货品"
-      width="70%"
-      append-to-body
-    >
-      <SelectGoods
-        @cancel="openProduct = false"
-        @pushGoods="pushGoods"
-      ></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择货品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
-  
+
 <script setup>
 /* eslint-disable vue/no-unused-components */
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -159,9 +98,7 @@ let openProduct = ref(false);
 let modalType = ref("add");
 let fileList = ref([]);
 let rules = ref({
-  supplierInfoId: [
-    { required: true, message: "请选择供应商", trigger: "change" },
-  ],
+  supplierInfoId: [{ required: true, message: "请选择供应商", trigger: "change" }],
   price: [{ required: true, message: "请输入供应单价", trigger: "blur" }],
 });
 const { proxy } = getCurrentInstance();
@@ -289,15 +226,11 @@ const config = computed(() => {
             el: "button",
             click() {
               // 弹窗提示是否删除
-              ElMessageBox.confirm(
-                "此操作将永久删除该数据, 是否继续?",
-                "提示",
-                {
-                  confirmButtonText: "确定",
-                  cancelButtonText: "取消",
-                  type: "warning",
-                }
-              ).then(() => {
+              ElMessageBox.confirm("此操作将永久删除该数据, 是否继续?", "提示", {
+                confirmButtonText: "确定",
+                cancelButtonText: "取消",
+                type: "warning",
+              }).then(() => {
                 // 删除
                 proxy
                   .post("/supplierPrice/delete", {
@@ -362,16 +295,14 @@ const formConfig = reactive([
 const getList = async (req) => {
   sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
   loading.value = true;
-  proxy
-    .post("/supplierPrice/page", sourceList.value.pagination)
-    .then((message) => {
-      console.log(message);
-      sourceList.value.data = message.rows;
-      sourceList.value.pagination.total = message.total;
-      setTimeout(() => {
-        loading.value = false;
-      }, 200);
-    });
+  proxy.post("/supplierPrice/page", sourceList.value.pagination).then((message) => {
+    console.log(message);
+    sourceList.value.data = message.rows;
+    sourceList.value.pagination.total = message.total;
+    setTimeout(() => {
+      loading.value = false;
+    }, 200);
+  });
 };
 const openModal = () => {
   dialogVisible.value = true;
@@ -412,28 +343,16 @@ const submitForm = () => {
                     message: `已存在供应价格,价格为${res.existSupplierPriceList[0].price}`,
                     type: "info",
                   });
-                  ElMessageBox.confirm(
-                    "继续提交将修改已存在的单价数据, 是否继续?",
-                    "提示",
-                    {
-                      confirmButtonText: "确定",
-                      cancelButtonText: "取消",
-                      type: "warning",
-                    }
-                  )
+                  ElMessageBox.confirm("继续提交将修改已存在的单价数据, 是否继续?", "提示", {
+                    confirmButtonText: "确定",
+                    cancelButtonText: "取消",
+                    type: "warning",
+                  })
                     .then(() => {
                       const arr = [];
-                      for (
-                        let i = 0;
-                        i < formData.data.supplierPriceList.length;
-                        i++
-                      ) {
+                      for (let i = 0; i < formData.data.supplierPriceList.length; i++) {
                         const iele = formData.data.supplierPriceList[i];
-                        for (
-                          let j = 0;
-                          j < res.existSupplierPriceList.length;
-                          j++
-                        ) {
+                        for (let j = 0; j < res.existSupplierPriceList.length; j++) {
                           const jele = res.existSupplierPriceList[j];
                           if (iele.productInfoId === jele.productInfoId) {
                             jele.price = iele.price;
@@ -446,22 +365,17 @@ const submitForm = () => {
                         price: x.price,
                       }));
                       formData.data.renewWhileItExists = true;
-                      proxy
-                        .post(
-                          "/supplierPrice/" + modalType.value,
-                          formData.data
-                        )
-                        .then((res) => {
-                          if (res.addSuccess) {
-                            ElMessage({
-                              message: "修改成功",
-                              type: "success",
-                            });
-                            getList();
-                            dialogVisible.value = false;
-                            submitLoading.value = false;
-                          }
-                        });
+                      proxy.post("/supplierPrice/" + modalType.value, formData.data).then((res) => {
+                        if (res.addSuccess) {
+                          ElMessage({
+                            message: "修改成功",
+                            type: "success",
+                          });
+                          getList();
+                          dialogVisible.value = false;
+                          submitLoading.value = false;
+                        }
+                      });
                     })
                     .catch(() => {});
                 }
@@ -472,22 +386,19 @@ const submitForm = () => {
             );
           } else {
             formData.data.supplierInfoId = formData.data.supplierInfoIdCopy;
-            formData.data.productInfoId =
-              formData.data.supplierPriceList[0].productInfoId;
+            formData.data.productInfoId = formData.data.supplierPriceList[0].productInfoId;
             formData.data.price = formData.data.supplierPriceList[0].price;
             delete formData.data.supplierPriceList;
             delete formData.data.supplierInfoIdCopy;
-            proxy
-              .post("/supplierPrice/" + modalType.value, formData.data)
-              .then((res) => {
-                ElMessage({
-                  message: "修改成功",
-                  type: "success",
-                });
-                getList();
-                dialogVisible.value = false;
-                submitLoading.value = false;
+            proxy.post("/supplierPrice/" + modalType.value, formData.data).then((res) => {
+              ElMessage({
+                message: "修改成功",
+                type: "success",
               });
+              getList();
+              dialogVisible.value = false;
+              submitLoading.value = false;
+            });
           }
         }
       });
@@ -542,17 +453,33 @@ const handleRemove = (index) => {
 };
 
 const pushGoods = (goods) => {
-  const arr = goods.map((x) => ({ ...x, productInfoId: x.id, price: "" }));
-  arr.forEach((item) => {
-    if (!formData.data.supplierPriceList.some((e) => e.id === item.id)) {
-      formData.data.supplierPriceList.push(item);
+  if (goods && goods.length > 0) {
+    let afterFiltering = [];
+    if (formData.data.supplierPriceList && formData.data.supplierPriceList.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.supplierPriceList.filter((itemProduct) => itemProduct.productInfoId === item.id);
+        if (data && data.length > 0) {
+          return false;
+        }
+        return true;
+      });
+    } else {
+      afterFiltering = goods;
     }
-  });
-  openProduct.value = false;
-  return ElMessage({
-    message: "添加成功!",
-    type: "success",
-  });
+    const arr = afterFiltering.map((x) => ({ ...x, productInfoId: x.id, price: "" }));
+    arr.forEach((item) => {
+      if (!formData.data.supplierPriceList.some((e) => e.id === item.id)) {
+        formData.data.supplierPriceList.push(item);
+      }
+    });
+    openProduct.value = false;
+    return ElMessage({
+      message: "添加成功!",
+      type: "success",
+    });
+  } else {
+    ElMessage("请选择至少一件物品");
+  }
 };
 const supplierType = ref([]);
 const productUnit = ref([]);
@@ -571,10 +498,22 @@ const getDict = () => {
 };
 getDict();
 getList();
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.supplierPriceList && formData.data.supplierPriceList.length > 0) {
+    data = formData.data.supplierPriceList.map((item) => {
+      return {
+        id: item.productInfoId,
+        name: item.name,
+      };
+    });
+  }
+  return data;
+};
 </script>
-  
+
 <style lang="scss" scoped>
 .tenant {
   padding: 20px;
 }
-</style>
+</style>

+ 27 - 3
src/views/purchaseSales/outAndInWarehouse/manualWarehousing/index.vue

@@ -52,8 +52,8 @@
       </template>
     </el-dialog>
 
-    <el-dialog v-model="openProduct" title="选择商品" width="70%" append-to-body>
-      <SelectGoods @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择商品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
@@ -218,8 +218,20 @@ const openModal = () => {
 };
 const pushGoods = (goods) => {
   if (goods && goods.length > 0) {
+    let afterFiltering = [];
+    if (formData.data.list && formData.data.list.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.list.filter((itemProduct) => itemProduct.productId === item.id);
+        if (data && data.length > 0) {
+          return false;
+        }
+        return true;
+      });
+    } else {
+      afterFiltering = goods;
+    }
     formData.data.list = formData.data.list.concat(
-      goods.map((item) => {
+      afterFiltering.map((item) => {
         return {
           productCode: item.code,
           productId: item.id,
@@ -261,6 +273,18 @@ const submitForm = () => {
 const handleDelete = (index) => {
   formData.data.list.splice(index, 1);
 };
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.list && formData.data.list.length > 0) {
+    data = formData.data.list.map((item) => {
+      return {
+        id: item.productId,
+        name: item.productName,
+      };
+    });
+  }
+  return data;
+};
 </script>
 
 <style lang="scss" scoped>

+ 60 - 103
src/views/purchaseSales/outAndInWarehouse/warehouseAdjustment/index.vue

@@ -14,82 +14,32 @@
             action: () => openModal(),
           },
         ]"
-        @get-list="getList"
-      >
+        @get-list="getList">
       </byTable>
     </div>
 
-    <el-dialog
-      title="新增调仓"
-      v-if="dialogVisible"
-      v-model="dialogVisible"
-      width="1000"
-      v-loading="loadingDialog"
-    >
-      <byForm
-        :formConfig="formConfig"
-        :formOption="formOption"
-        v-model="formData.data"
-        :rules="rules"
-        ref="submit"
-      >
+    <el-dialog title="新增调仓" v-if="dialogVisible" v-model="dialogVisible" width="1000" v-loading="loadingDialog">
+      <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="submit">
         <template #details>
           <div style="width: 100%">
-            <el-button type="primary" @click="openProduct = true"
-              >添加明细</el-button
-            >
-            <el-table
-              :data="formData.data.stockTransferDetailsList"
-              style="width: 100%; margin-top: 16px"
-            >
-              <el-table-column
-                prop="productCode"
-                label="物品编码"
-                width="140"
-              />
-              <el-table-column
-                prop="productName"
-                label="物品名称"
-                min-width="220"
-              />
-              <el-table-column
-                prop="productSpec"
-                label="规格型号"
-                min-width="220"
-              />
+            <el-button type="primary" @click="openProduct = true">添加明细</el-button>
+            <el-table :data="formData.data.stockTransferDetailsList" style="width: 100%; margin-top: 16px">
+              <el-table-column prop="productCode" label="物品编码" width="140" />
+              <el-table-column prop="productName" label="物品名称" min-width="220" />
+              <el-table-column prop="productSpec" label="规格型号" min-width="220" />
               <!-- <el-table-column prop="productUnit" label="单位" width="100" /> -->
               <el-table-column label="调仓数量" width="160">
                 <template #default="{ row, $index }">
                   <div style="width: 100%">
-                    <el-form-item
-                      :prop="
-                        'stockTransferDetailsList.' + $index + '.outQuantity'
-                      "
-                      :rules="rules.outQuantity"
-                      :inline-message="true"
-                    >
-                      <el-input-number
-                        v-model="row.outQuantity"
-                        placeholder="请输入数量"
-                        style="width: 100%"
-                        :precision="0"
-                        :controls="false"
-                        :min="0"
-                      />
+                    <el-form-item :prop="'stockTransferDetailsList.' + $index + '.outQuantity'" :rules="rules.outQuantity" :inline-message="true">
+                      <el-input-number v-model="row.outQuantity" placeholder="请输入数量" style="width: 100%" :precision="0" :controls="false" :min="0" />
                     </el-form-item>
                   </div>
                 </template>
               </el-table-column>
-              <el-table-column
-                align="center"
-                label="操作"
-                width="80"
-                fixed="right"
-              >
+              <el-table-column align="center" label="操作" width="80" fixed="right">
                 <template #default="{ row, $index }">
-                  <el-button type="primary" link @click="handleDelete($index)"
-                    >删除</el-button
-                  >
+                  <el-button type="primary" link @click="handleDelete($index)">删除</el-button>
                 </template>
               </el-table-column>
             </el-table>
@@ -98,22 +48,12 @@
       </byForm>
       <template #footer>
         <el-button @click="dialogVisible = false" size="large">取 消</el-button>
-        <el-button type="primary" @click="submitForm()" size="large"
-          >确 定</el-button
-        >
+        <el-button type="primary" @click="submitForm()" size="large">确 定</el-button>
       </template>
     </el-dialog>
 
-    <el-dialog
-      v-model="openProduct"
-      title="选择商品"
-      width="70%"
-      append-to-body
-    >
-      <SelectGoods
-        @cancel="openProduct = false"
-        @pushGoods="pushGoods"
-      ></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择商品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
@@ -249,15 +189,13 @@ const getDict = () => {
 const getList = async (req) => {
   sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
   loading.value = true;
-  proxy
-    .post("stockTransferDetails/page", sourceList.value.pagination)
-    .then((res) => {
-      sourceList.value.data = res.rows;
-      sourceList.value.pagination.total = res.total;
-      setTimeout(() => {
-        loading.value = false;
-      }, 200);
-    });
+  proxy.post("stockTransferDetails/page", sourceList.value.pagination).then((res) => {
+    sourceList.value.data = res.rows;
+    sourceList.value.pagination.total = res.total;
+    setTimeout(() => {
+      loading.value = false;
+    }, 200);
+  });
 };
 getDict();
 getList();
@@ -309,12 +247,8 @@ const formConfig = computed(() => {
   ];
 });
 const rules = ref({
-  outWarehouseId: [
-    { required: true, message: "请选择调出仓库", trigger: "change" },
-  ],
-  inWarehouseId: [
-    { required: true, message: "请选择调入仓库", trigger: "change" },
-  ],
+  outWarehouseId: [{ required: true, message: "请选择调出仓库", trigger: "change" }],
+  inWarehouseId: [{ required: true, message: "请选择调入仓库", trigger: "change" }],
   outQuantity: [{ required: true, message: "请输入调仓数量", trigger: "blur" }],
 });
 const openModal = () => {
@@ -327,19 +261,30 @@ const openModal = () => {
 };
 const pushGoods = (goods) => {
   if (goods && goods.length > 0) {
-    formData.data.stockTransferDetailsList =
-      formData.data.stockTransferDetailsList.concat(
-        goods.map((item) => {
-          return {
-            productCode: item.code,
-            productId: item.id,
-            productName: item.name,
-            productSpec: item.spec,
-            productUnit: item.unit,
-            outQuantity: undefined,
-          };
-        })
-      );
+    let afterFiltering = [];
+    if (formData.data.stockTransferDetailsList && formData.data.stockTransferDetailsList.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.stockTransferDetailsList.filter((itemProduct) => itemProduct.productId === item.id);
+        if (data && data.length > 0) {
+          return false;
+        }
+        return true;
+      });
+    } else {
+      afterFiltering = goods;
+    }
+    formData.data.stockTransferDetailsList = formData.data.stockTransferDetailsList.concat(
+      afterFiltering.map((item) => {
+        return {
+          productCode: item.code,
+          productId: item.id,
+          productName: item.name,
+          productSpec: item.spec,
+          productUnit: item.unit,
+          outQuantity: undefined,
+        };
+      })
+    );
     ElMessage({
       message: "添加成功!",
       type: "success",
@@ -382,6 +327,18 @@ const submitForm = () => {
 const handleDelete = (index) => {
   formData.data.stockTransferDetailsList.splice(index, 1);
 };
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.stockTransferDetailsList && formData.data.stockTransferDetailsList.length > 0) {
+    data = formData.data.stockTransferDetailsList.map((item) => {
+      return {
+        id: item.productId,
+        name: item.productName,
+      };
+    });
+  }
+  return data;
+};
 </script>
 
 <style lang="scss" scoped>

+ 89 - 137
src/views/purchaseSales/stockManage/inventory/index.vue

@@ -19,86 +19,37 @@
             action: () => openModal('add'),
           },
         ]"
-        @get-list="getList"
-      >
+        @get-list="getList">
         <template #code="{ item }">
-          <div
-            style="cursor: pointer; color: #409eff"
-            @click="handleClickCode(item)"
-          >
+          <div style="cursor: pointer; color: #409eff" @click="handleClickCode(item)">
             {{ item.code }}
           </div>
         </template>
       </byTable>
     </div>
-    <el-dialog
-      :title="modalType == 'add' ? '发起盘点' : '盘点详情'"
-      v-model="dialogVisible"
-      width="800"
-      v-loading="loading"
-      destroy-on-close
-    >
-      <byForm
-        :formConfig="formConfig"
-        :formOption="formOption"
-        v-model="formData.data"
-        :rules="rules"
-        ref="byform"
-      >
+    <el-dialog :title="modalType == 'add' ? '发起盘点' : '盘点详情'" v-model="dialogVisible" width="800" v-loading="loading" destroy-on-close>
+      <byForm :formConfig="formConfig" :formOption="formOption" v-model="formData.data" :rules="rules" ref="byform">
         <template #products>
           <div style="width: 100%">
-            <el-button
-              type="primary"
-              @click="openProduct = true"
-              style="margin-bottom: 10px"
-              v-if="modalType == 'add'"
-              :disabled="!formData.data.warehouseId"
-            >
+            <el-button type="primary" @click="openProduct = true" style="margin-bottom: 10px" v-if="modalType == 'add'" :disabled="!formData.data.warehouseId">
               添加物品
             </el-button>
             <el-table :data="formData.data.list" :row-class-name="changeClass">
               <el-table-column prop="productCode" label="物品编码" />
               <el-table-column prop="productName" label="物品名称" />
-              <el-table-column
-                prop="productUnit"
-                label="单位"
-                :formatter="
-                  (row) => dictValueLabel(row.productUnit, productUnit)
-                "
-              />
+              <el-table-column prop="productUnit" label="单位" :formatter="(row) => dictValueLabel(row.productUnit, productUnit)" />
               <el-table-column prop="quantity" label="库存数量" />
-              <el-table-column
-                prop="checkQuantity"
-                label="盘点数量"
-                min-width="150"
-              >
+              <el-table-column prop="checkQuantity" label="盘点数量" min-width="150">
                 <template #default="{ row, $index }">
-                  <el-form-item
-                    :prop="'list.' + $index + '.checkQuantity'"
-                    :rules="rules.checkQuantity"
-                    :inline-message="true"
-                  >
-                    <el-input-number
-                      v-model="row.checkQuantity"
-                      :precision="4"
-                      :controls="false"
-                      :min="0"
-                      @change="() => handleChange($index)"
-                    />
+                  <el-form-item :prop="'list.' + $index + '.checkQuantity'" :rules="rules.checkQuantity" :inline-message="true">
+                    <el-input-number v-model="row.checkQuantity" :precision="4" :controls="false" :min="0" @change="() => handleChange($index)" />
                   </el-form-item>
                 </template>
               </el-table-column>
               <el-table-column prop="result" label="盘点结果" />
-              <el-table-column
-                prop="zip"
-                label="操作"
-                width="100"
-                v-if="modalType == 'add'"
-              >
+              <el-table-column prop="zip" label="操作" width="100" v-if="modalType == 'add'">
                 <template #default="{ $index }">
-                  <el-button type="primary" link @click="handleRemove($index)"
-                    >删除</el-button
-                  >
+                  <el-button type="primary" link @click="handleRemove($index)">删除</el-button>
                 </template>
               </el-table-column>
             </el-table>
@@ -107,30 +58,15 @@
       </byForm>
       <template #footer v-if="modalType == 'add'">
         <el-button @click="dialogVisible = false" size="large">取 消</el-button>
-        <el-button
-          type="primary"
-          @click="submitForm('byform')"
-          size="large"
-          :loading="submitLoading"
-        >
-          确 定
-        </el-button>
+        <el-button type="primary" @click="submitForm('byform')" size="large" :loading="submitLoading"> 确 定 </el-button>
       </template>
     </el-dialog>
-    <el-dialog
-      v-model="openProduct"
-      title="选择物品"
-      width="70%"
-      append-to-body
-    >
-      <SelectGoods
-        @cancel="openProduct = false"
-        @pushGoods="pushGoods"
-      ></SelectGoods>
+    <el-dialog v-if="openProduct" v-model="openProduct" title="选择物品" width="70%" append-to-body>
+      <SelectGoods :selectList="acquireSelectList()" @cancel="openProduct = false" @pushGoods="pushGoods"></SelectGoods>
     </el-dialog>
   </div>
 </template>
-  
+
 <script setup>
 /* eslint-disable vue/no-unused-components */
 import { ElMessage, ElMessageBox } from "element-plus";
@@ -156,12 +92,8 @@ let openProduct = ref(false);
 let roomDialogVisible = ref(false);
 let modalType = ref("add");
 let rules = ref({
-  checkQuantity: [
-    { required: true, message: "请输入盘点数量", trigger: "blur" },
-  ],
-  warehouseId: [
-    { required: true, message: "请选择盘点仓库", trigger: "change" },
-  ],
+  checkQuantity: [{ required: true, message: "请输入盘点数量", trigger: "blur" }],
+  warehouseId: [{ required: true, message: "请选择盘点仓库", trigger: "change" }],
 });
 const { proxy } = getCurrentInstance();
 const selectConfig = reactive([
@@ -316,16 +248,14 @@ const formConfig = reactive([
 const getList = async (req) => {
   sourceList.value.pagination = { ...sourceList.value.pagination, ...req };
   loading.value = true;
-  proxy
-    .post("/stockCheck/page", sourceList.value.pagination)
-    .then((message) => {
-      console.log(message);
-      sourceList.value.data = message.rows;
-      sourceList.value.pagination.total = message.total;
-      setTimeout(() => {
-        loading.value = false;
-      }, 200);
-    });
+  proxy.post("/stockCheck/page", sourceList.value.pagination).then((message) => {
+    console.log(message);
+    sourceList.value.data = message.rows;
+    sourceList.value.pagination.total = message.total;
+    setTimeout(() => {
+      loading.value = false;
+    }, 200);
+  });
 };
 const openModal = () => {
   dialogVisible.value = true;
@@ -406,38 +336,55 @@ const handleSelect = (row) => {
 };
 
 const pushGoods = (goods) => {
-  const arr = goods.map((x) => ({
-    productId: x.id,
-    quantity: "",
-    checkQuantity: "",
-    productName: x.name,
-    productCode: x.code,
-    productUnit: x.unit,
-  }));
-  const ids = arr.map((x) => x.productId);
-  if (formData.data.warehouseId) {
-    proxy
-      .post("/stock/pageByWarehouse", {
-        id: formData.data.warehouseId,
-        productIds: ids,
-      })
-      .then((res) => {
-        const productList = res.rows;
-        for (let i = 0; i < productList.length; i++) {
-          const e = productList[i];
-          for (let j = 0; j < arr.length; j++) {
-            const jele = arr[j];
-            if (e.productId === jele.productId) {
-              formData.data.list.push({ ...jele, quantity: e.quantity });
-            }
-          }
+  if (goods && goods.length > 0) {
+    let afterFiltering = [];
+    if (formData.data.list && formData.data.list.length > 0) {
+      afterFiltering = goods.filter((item) => {
+        let data = formData.data.list.filter((itemProduct) => itemProduct.productId === item.id);
+        if (data && data.length > 0) {
+          return false;
         }
+        return true;
       });
+    } else {
+      afterFiltering = goods;
+    }
+    const arr = afterFiltering.map((x) => ({
+      productId: x.id,
+      quantity: "",
+      checkQuantity: "",
+      productName: x.name,
+      productCode: x.code,
+      productUnit: x.unit,
+    }));
+    const ids = arr.map((x) => x.productId);
+    if (formData.data.warehouseId) {
+      proxy
+        .post("/stock/pageByWarehouse", {
+          id: formData.data.warehouseId,
+          productIds: ids,
+        })
+        .then((res) => {
+          const productList = res.rows;
+          for (let i = 0; i < productList.length; i++) {
+            const e = productList[i];
+            for (let j = 0; j < arr.length; j++) {
+              const jele = arr[j];
+              if (e.productId === jele.productId) {
+                formData.data.list.push({ ...jele, quantity: e.quantity });
+              }
+            }
+          }
+        });
+    }
+    openProduct.value = false;
+    return ElMessage({
+      message: "添加成功,已为你自动过滤库存数量为0的数据 !",
+      type: "success",
+    });
+  } else {
+    ElMessage("请选择至少一件物品");
   }
-  return ElMessage({
-    message: "添加成功,已为你自动过滤库存数量为0的数据 !",
-    type: "success",
-  });
 };
 
 const handleRemove = (index) => {
@@ -478,20 +425,13 @@ const handleRemove = (index) => {
 
 const handleChange = (index) => {
   if (!formData.data.list[index].quantity) return;
-  if (
-    formData.data.list[index].quantity > formData.data.list[index].checkQuantity
-  ) {
+  if (formData.data.list[index].quantity > formData.data.list[index].checkQuantity) {
     formData.data.list[index].result = "盘亏";
   }
-  if (
-    formData.data.list[index].quantity ==
-    formData.data.list[index].checkQuantity
-  ) {
+  if (formData.data.list[index].quantity == formData.data.list[index].checkQuantity) {
     formData.data.list[index].result = "正常";
   }
-  if (
-    formData.data.list[index].quantity < formData.data.list[index].checkQuantity
-  ) {
+  if (formData.data.list[index].quantity < formData.data.list[index].checkQuantity) {
     formData.data.list[index].result = "盘盈";
   }
 };
@@ -526,18 +466,30 @@ const handleClickCode = (row) => {
     dialogVisible.value = true;
   });
 };
+const acquireSelectList = () => {
+  let data = [];
+  if (formData.data.list && formData.data.list.length > 0) {
+    data = formData.data.list.map((item) => {
+      return {
+        id: item.productId,
+        name: item.productName,
+      };
+    });
+  }
+  return data;
+};
 </script>
-  
+
 <style lang="scss" scoped>
 .tenant {
   padding: 20px;
 }
 </style>
-<style >
+<style>
 .redClass {
   color: #f54a45 !important;
 }
 .greenClass {
   color: #39c55a !important;
 }
-</style>
+</style>