فهرست منبع

维多利亚bug解决

cz 2 سال پیش
والد
کامیت
a30de5476e

+ 373 - 0
src/components/WDLY/product/SelectGoods.vue

@@ -0,0 +1,373 @@
+<template>
+  <div>
+    <byTable
+      ref="table"
+      :source="sourceList.data"
+      :pagination="sourceList.pagination"
+      :config="config"
+      :loading="loading"
+      highlight-current-row
+      :selectConfig="selectConfig"
+      :table-events="{
+        //element talbe事件都能传
+        select: select,
+      }"
+      :action-list="[]"
+      @get-list="getList"
+    >
+    </byTable>
+    <div>
+      <div>已选择货品</div>
+      <div style="margin: 10px 0px">
+        <el-tag
+          style="margin-right: 10px"
+          type="info"
+          closable
+          v-for="(good, index) in goodList"
+          :key="good.id"
+          @close="handleRemove(index)"
+          >{{ good.name }}</el-tag
+        >
+      </div>
+      <div style="text-align: center">
+        <el-button @click="handleCancel">取消</el-button>
+        <el-button type="primary" @click="handleSubmit"> 确 定 </el-button>
+      </div>
+    </div>
+  </div>
+</template>
+  
+<script setup>
+/* eslint-disable vue/no-unused-components */
+import { ElMessage, ElMessageBox } from "element-plus";
+import byTable from "@/components/byTable/index";
+import byForm from "@/components/byForm/index";
+import treeList from "@/components/product/treeList";
+import { computed, defineComponent, ref, watch } from "vue";
+const loading = ref(false);
+const submitLoading = ref(false);
+const sourceList = ref({
+  data: [],
+  pagination: {
+    total: 3,
+    pageNum: 1,
+    pageSize: 10,
+    type: "",
+    productClassifyId: "",
+    keyword: "",
+    definition: "1",
+  },
+});
+let dialogVisible = ref(false);
+let openExcelDialog = ref(false);
+
+let modalType = ref("add");
+let rules = ref({
+  productClassifyId: [
+    { required: true, message: "请选择产品分类", trigger: "change" },
+  ],
+  type: [{ required: true, message: "请选择产品类型", trigger: "change" }],
+  name: [{ required: true, message: "请输入产品名称", trigger: "blur" }],
+  unit: [{ required: true, message: "请选择单位", trigger: "change" }],
+});
+const { proxy } = getCurrentInstance();
+const selectConfig = reactive([
+  {
+    label: "物品类型",
+    prop: "definition",
+    isShowAll: false, //不显示全部搜索
+    data: [
+      {
+        label: "产品",
+        value: "1",
+      },
+      {
+        label: "物料",
+        value: "2",
+      },
+    ],
+  },
+  {
+    label: "所属分类",
+    prop: "productClassifyId",
+    data: [],
+  },
+]);
+const config = computed(() => {
+  return [
+    {
+      attrs: {
+        label: "货品类型",
+        prop: "type",
+      },
+      render(type) {
+        return sourceList.value.pagination.definition == 1 ? "产品" : "物料";
+      },
+    },
+    {
+      attrs: {
+        label: "所属分类",
+        prop: "classifyName",
+      },
+    },
+    {
+      attrs: {
+        label: "货品编码",
+        prop: "code",
+      },
+    },
+    {
+      attrs: {
+        label: "货品名称",
+        prop: "name",
+      },
+    },
+
+    {
+      attrs: {
+        label: "规格型号",
+        prop: "spec",
+      },
+    },
+    {
+      attrs: {
+        label: "单位",
+        prop: "unit",
+      },
+    },
+    {
+      attrs: {
+        label: "操作",
+        width: "100",
+        align: "right",
+      },
+      // 渲染 el-button,一般用在最后一列。
+      renderHTML(row) {
+        return [
+          {
+            attrs: {
+              label: "选择",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              handleSelect(row);
+            },
+          },
+        ];
+      },
+    },
+  ];
+});
+
+let formData = reactive({
+  data: {},
+});
+const formOption = reactive({
+  inline: true,
+  labelWidth: 100,
+  itemWidth: 100,
+  rules: [],
+});
+const byform = ref(null);
+const treeListData = ref([]);
+const formConfig = computed(() => {
+  return [
+    {
+      type: "treeSelect",
+      prop: "productClassifyId",
+      label: "产品分类",
+      data: [],
+    },
+    {
+      type: "select",
+      prop: "type",
+      label: "产品类型",
+      required: true,
+      data: [
+        {
+          label: "成品",
+          id: "1",
+        },
+        {
+          label: "半成品",
+          id: "2",
+        },
+      ],
+    },
+    {
+      type: "input",
+      prop: "name",
+      label: "产品名称",
+    },
+    {
+      type: "input",
+      prop: "spec",
+      label: "规格型号",
+    },
+    {
+      type: "select",
+      prop: "unit",
+      label: "单位",
+      required: true,
+      data: [
+        {
+          label: "个",
+          id: "个",
+        },
+        {
+          label: "双",
+          id: "双",
+        },
+      ],
+    },
+    {
+      type: "slot",
+      slotName: "productPic",
+      prop: "fileList",
+      label: "产品图片",
+    },
+    {
+      type: "input",
+      prop: "remark",
+      label: "备注",
+      itemType: "textarea",
+    },
+  ];
+});
+
+const lastDefinition = ref("");
+const getList = async (req = {}) => {
+  for (const key in req) {
+    sourceList.value.pagination[key] = req[key];
+    if (key === "definition") {
+      if (lastDefinition.value !== req[key]) {
+        getTreeList();
+        lastDefinition.value = req[key];
+        // 如果选择的物品分类不一致,则分类默认选中全部
+        return table.value.searchItemSelct("all", selectConfig[1]);
+      }
+    }
+  }
+  sourceList.value.pagination = {
+    ...sourceList.value.pagination,
+    ...req,
+  };
+  loading.value = true;
+  proxy
+    .post("/productInfo/page", sourceList.value.pagination)
+    .then((message) => {
+      sourceList.value.data = message.rows.map((x) => ({ ...x, fileList: [] }));
+      sourceList.value.pagination.total = message.total;
+      setTimeout(() => {
+        loading.value = false;
+      }, 200);
+
+      const productIdList = message.rows.map((x) => x.id);
+      // 请求文件数据并回显
+      if (productIdList.length > 0) {
+        proxy
+          .post("/fileInfo/getList", { businessIdList: productIdList })
+          .then((fileObj) => {
+            for (let i = 0; i < sourceList.value.data.length; i++) {
+              const e = sourceList.value.data[i];
+              for (const key in fileObj) {
+                if (e.id === key) {
+                  e.fileList = fileObj[key];
+                }
+              }
+            }
+          });
+      }
+    });
+};
+
+const getTreeList = () => {
+  proxy
+    .post("/productClassify/tree", {
+      parentId: "",
+      name: "",
+      definition: sourceList.value.pagination.definition,
+    })
+    .then((message) => {
+      selectConfig[1].data = message.map((x) => ({
+        label: x.label,
+        value: x.id,
+      }));
+    });
+};
+
+const goodList = ref([]);
+const handleSelect = (row) => {
+  const flag = goodList.value.some((x) => x.id === row.id);
+  if (flag)
+    return ElMessage({
+      message: "该产品已选择",
+      type: "info",
+    });
+  goodList.value.push({
+    ...row,
+    goodType: sourceList.value.pagination.definition,
+  });
+  return ElMessage({
+    message: "选择成功",
+    type: "success",
+  });
+};
+
+const handleRemove = (index) => {
+  goodList.value.splice(index, 1);
+  return ElMessage({
+    message: "删除成功",
+    type: "success",
+  });
+};
+
+const handleSubmit = () => {
+  if (!goodList.value.length > 0)
+    return ElMessage({
+      message: "请添加货品",
+      type: "info",
+    });
+  proxy.$emit("pushGoods", goodList.value);
+  goodList.value = [];
+};
+
+const handleCancel = () => {
+  goodList.value = [];
+  proxy.$emit("cancel");
+};
+
+const table = ref(null);
+
+const searchItemSelct = () => {
+  // 默认选中的方法
+  table.value.searchItemSelct(selectConfig[0].data[0], selectConfig[0]);
+};
+
+onMounted(() => {
+  searchItemSelct();
+});
+</script>
+  
+<style lang="scss" scoped>
+.user {
+  padding: 20px;
+  display: flex;
+  justify-content: space-between;
+  .tree {
+    width: 300px;
+  }
+  .content {
+    width: calc(100% - 320px);
+  }
+}
+.pic {
+  object-fit: contain;
+  width: 50px;
+  height: 50px;
+  cursor: pointer;
+  vertical-align: middle;
+}
+</style>

+ 1 - 0
src/views/WDLY/basic/product/index.vue

@@ -948,6 +948,7 @@ const getDict = () => {
   proxy.getDict(["unit", "product_type"]).then((res) => {
     productUnit.value = res["unit"];
     productType.value = res["product_type"];
+    console.log(res, "wqasd");
     formConfig.value[1].data = productType.value.map((x) => ({
       label: x.dictValue,
       value: x.dictKey,

+ 1 - 1
src/views/WDLY/outInBound/logistics/index.vue

@@ -574,7 +574,7 @@ const handleArrival = (row) => {
         productUnit: x.unit,
         productType: x.type,
         productCode: x.code,
-        bussinessId: x.id,
+        bussinessId: x.productId,
         purchaseDetailId: x.purchaseDetailId,
         deliverGoodsDetailsId: x.deliverGoodsId,
         transitQuantity: x.transitQuantity,

+ 71 - 4
src/views/WDLY/outInBound/transfer/index.vue

@@ -54,7 +54,7 @@
           <div style="width: 100%">
             <el-button
               type="primary"
-              @click="openProduct = true"
+              @click="clickAdd()"
               style="margin-bottom: 10px"
               v-if="modalType == 'add'"
             >
@@ -159,12 +159,19 @@
       width="70%"
       append-to-body
     >
-      <SelectProduct @handleSelect="handleSelect"></SelectProduct>
-      <template #footer>
+      <InventoryInquiry
+        :selectStatus="true"
+        :warehouseId="formData.data.outWarehouseId"
+        @cancel="openProduct = false"
+        @select="select"
+        :key="formData.data.outWarehouseId"
+      ></InventoryInquiry>
+
+      <!-- <template #footer>
         <span class="dialog-footer">
           <el-button @click="openProduct = false">取消</el-button>
         </span>
-      </template>
+      </template> -->
     </el-dialog>
   </div>
 </template>
@@ -177,6 +184,8 @@ import byForm from "@/components/byForm/index";
 import { computed, defineComponent, ref, watch } from "vue";
 import useUserStore from "@/store/modules/user";
 import SelectProduct from "@/components/WDLY/product/SelectProduct";
+import SelectGoods from "@/components/WDLY/product/SelectGoods";
+import InventoryInquiry from "@/views/purchaseSales/outAndInWarehouse/inventoryInquiry/index";
 
 const loading = ref(false);
 const submitLoading = ref(false);
@@ -524,6 +533,26 @@ const handleSelect = (row) => {
   });
 };
 
+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.stockTransferDetailsList =
+    formData.data.stockTransferDetailsList.concat(arr);
+  return ElMessage({
+    message: "添加成功!",
+    type: "success",
+  });
+};
+
 const handleRemove = (index) => {
   formData.data.stockTransferDetailsList.splice(index, 1);
   return ElMessage({
@@ -531,6 +560,44 @@ const handleRemove = (index) => {
     type: "success",
   });
 };
+
+const clickAdd = () => {
+  if (formData.data.outWarehouseId) {
+    openProduct.value = true;
+  } else {
+    ElMessage("请先选择仓库");
+  }
+};
+
+const select = (x) => {
+  console.log(x, "ass");
+  if (
+    formData.data.stockTransferDetailsList &&
+    formData.data.stockTransferDetailsList.length > 0
+  ) {
+    let data = formData.data.stockTransferDetailsList.filter(
+      (row) => row.bussinessId === x.productId
+    );
+    if (data && data.length > 0) {
+      return ElMessage("请勿重复添加");
+    }
+  }
+  formData.data.stockTransferDetailsList.push({
+    goodType: x.goodType,
+    productCode: x.productCode,
+    productName: x.productName,
+    productSpec: x.productSpec,
+    productUnit: x.productUnit,
+    count: 0,
+    price: 0,
+    bussinessId: x.productId,
+    amount: 0,
+  });
+  ElMessage({
+    message: "添加成功!",
+    type: "success",
+  });
+};
 </script>
   
 <style lang="scss" scoped>

+ 37 - 40
src/views/WDLY/purchaseManage/alreadyPurchase/index.vue

@@ -297,19 +297,20 @@ const config = computed(() => {
       },
       renderHTML(row) {
         return [
-          row.purchaseStatus == 20 && row.arrivalStatus != 2
-            ? {
-                attrs: {
-                  label: "发货登记",
-                  type: "primary",
-                  text: true,
-                },
-                el: "button",
-                click() {
-                  handleArrival(row, "add");
-                },
-              }
-            : {},
+          //  (row.purchaseStatus == 20 || row.purchaseStatus == 30) &&
+          // row.arrivalStatus != 2
+          //   ?
+          {
+            attrs: {
+              label: "发货登记",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              handleArrival(row, "add");
+            },
+          },
           {
             attrs: {
               label: "到货通知",
@@ -321,32 +322,28 @@ const config = computed(() => {
               handleArrival(row, "edit");
             },
           },
-          row.purchaseStatus == 20 && row.arrivalStatus == 0
-            ? {
-                attrs: {
-                  label: "作废",
-                  type: "primary",
-                  text: true,
-                },
-                el: "button",
-                click() {
-                  handleEdit(row, 88);
-                },
-              }
-            : {},
-          row.purchaseStatus == 20 && row.arrivalStatus == 1
-            ? {
-                attrs: {
-                  label: "终止",
-                  type: "primary",
-                  text: true,
-                },
-                el: "button",
-                click() {
-                  handleEdit(row, 99);
-                },
-              }
-            : {},
+          {
+            attrs: {
+              label: "作废",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              handleEdit(row, 88);
+            },
+          },
+          {
+            attrs: {
+              label: "终止",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              handleEdit(row, 99);
+            },
+          },
         ];
       },
     },
@@ -654,7 +651,7 @@ watch(
           productUnit: x.unit,
           productType: x.type,
           productCode: x.code,
-          bussinessId: x.id,
+          bussinessId: x.productId,
           purchaseDetailId: x.purchaseDetailId,
           deliverGoodsDetailsId: x.deliverGoodsId,
           transitQuantity: x.transitQuantity,

+ 1 - 1
src/views/WDLY/purchaseManage/purchase/index.vue

@@ -155,7 +155,7 @@ const sourceList = ref({
     total: 3,
     pageNum: 1,
     pageSize: 10,
-    status: "15",
+    status: "",
   },
 });
 let dialogVisible = ref(false);

+ 134 - 20
src/views/WDLY/stockManage/query/index.vue

@@ -87,7 +87,7 @@ let rules = ref({
   quantity: [{ required: true, message: "请输入数量", trigger: "blur" }],
 });
 const { proxy } = getCurrentInstance();
-const selectConfig = reactive([
+const selectConfig = ref([
   {
     label: "仓库名称",
     prop: "id",
@@ -109,6 +109,46 @@ const selectConfig = reactive([
   },
 ]);
 
+const selectConfigData = [
+  [
+    {
+      label: "仓库名称",
+      prop: "type",
+      data: [],
+    },
+    {
+      label: "物品类型",
+      prop: "definition",
+      data: [
+        {
+          label: "产品",
+          value: "1",
+        },
+        {
+          label: "物料",
+          value: "2",
+        },
+      ],
+    },
+  ],
+  [
+    {
+      label: "物品类型",
+      prop: "definition",
+      data: [
+        {
+          label: "产品",
+          value: "1",
+        },
+        {
+          label: "物料",
+          value: "2",
+        },
+      ],
+    },
+  ],
+];
+
 const config = ref([]);
 
 const configData = [
@@ -205,6 +245,90 @@ const configData = [
   [
     {
       attrs: {
+        label: "所属分类",
+        prop: "productClassifyName",
+      },
+    },
+    {
+      attrs: {
+        label: "物品编码",
+        prop: "productCode",
+      },
+    },
+    {
+      attrs: {
+        label: "物品名称",
+        prop: "productName",
+      },
+    },
+    {
+      attrs: {
+        label: "规格",
+        prop: "productSpec",
+      },
+    },
+    {
+      attrs: {
+        label: "单位",
+        prop: "productUnit",
+      },
+    },
+    {
+      attrs: {
+        label: "可用库存",
+        prop: "quantity",
+      },
+    },
+    {
+      attrs: {
+        label: "冻结库存",
+        prop: "frozenQuantity",
+      },
+    },
+    {
+      attrs: {
+        label: "次品库存",
+        prop: "defectiveQuantity",
+      },
+    },
+    {
+      attrs: {
+        label: "操作",
+        width: "200",
+        align: "right",
+      },
+      // 渲染 el-button,一般用在最后一列。
+      renderHTML(row) {
+        return [
+          {
+            attrs: {
+              label: "良转次",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              getDtl(row, "add");
+            },
+          },
+          {
+            attrs: {
+              label: "次转良",
+              type: "primary",
+              text: true,
+            },
+            el: "button",
+            click() {
+              getDtl(row, "edit");
+            },
+          },
+        ];
+      },
+    },
+  ],
+  [
+    {
+      attrs: {
         label: "spu编码",
         prop: "warehouseName",
       },
@@ -324,30 +448,20 @@ const handleChange = () => {
   sourceList.value.pagination.pageNum = 1;
   if (activeName.value === "first") {
     requestUrl = "/stock/pageByWarehouse";
+    selectConfig.value = selectConfigData[0];
+    selectConfig.value[0].data = warehouseList.value.map((x) => ({
+      label: x.name,
+      value: x.id,
+    }));
     config.value = configData[0];
-    config.value.unshift({
-      attrs: {
-        label: "仓库名称",
-        prop: "warehouseName",
-      },
-    });
-    selectConfig.unshift({
-      label: "仓库名称",
-      prop: "type",
-      data: warehouseList.value.map((x) => ({
-        label: x.name,
-        value: x.id,
-      })),
-    });
   } else if (activeName.value === "second") {
     requestUrl = "/stock/pageByProduct";
-    config.value = configData[0];
-    if (selectConfig.length > 1) selectConfig.shift();
-    config.value.shift();
+    selectConfig.value = selectConfigData[1];
+    config.value = configData[1];
   } else {
     requestUrl = "/stock/pageByProduct";
-    config.value = configData[1];
-    if (selectConfig.length > 1) selectConfig.shift();
+    selectConfig.value = selectConfigData[1];
+    config.value = configData[2];
   }
   getList();
 };

+ 20 - 4
src/views/purchaseSales/outAndInWarehouse/inventoryInquiry/index.vue

@@ -16,11 +16,20 @@
                 action: () => deriveExcel(),
               },
         ]"
-        @get-list="getList">
+        @get-list="getList"
+      >
         <template #btn="{ item }">
           <div style="width: 100%; text-align: center">
-            <el-button type="primary" @click="checkTheFlow(item)" v-if="!selectStatus" text>查看流水</el-button>
-            <el-button type="primary" @click="clickSelect(item)" v-else text>选择</el-button>
+            <el-button
+              type="primary"
+              @click="checkTheFlow(item)"
+              v-if="!selectStatus"
+              text
+              >查看流水</el-button
+            >
+            <el-button type="primary" @click="clickSelect(item)" v-else text
+              >选择</el-button
+            >
           </div>
         </template>
       </byTable>
@@ -49,6 +58,7 @@ const sourceList = ref({
     id: "",
   },
 });
+const productUnit = ref([]);
 const definition = ref([
   {
     label: "产品",
@@ -87,7 +97,7 @@ const config = computed(() => {
     {
       attrs: {
         label: "物品类型",
-        prop: "definition",
+        prop: "productDefinition",
         width: 140,
       },
       render(type) {
@@ -128,6 +138,9 @@ const config = computed(() => {
         prop: "productUnit",
         width: 120,
       },
+      render(unit) {
+        return proxy.dictDataEcho(unit, productUnit.value);
+      },
     },
     {
       attrs: {
@@ -158,6 +171,9 @@ const getDict = () => {
       });
     }
   });
+  proxy.getDict(["unit"]).then((res) => {
+    productUnit.value = res["unit"];
+  });
   // proxy
   //   .post("/dictTenantData/page", {
   //     pageNum: 1,