瀏覽代碼

无客户订单

2213980799@qq.com 1 年之前
父節點
當前提交
3300a30e7b
共有 2 個文件被更改,包括 383 次插入369 次删除
  1. 379 368
      src/BIZComponents/product-list.vue
  2. 4 1
      src/views/saleManage/saleOrder/components/addDialog.vue

+ 379 - 368
src/BIZComponents/product-list.vue

@@ -40,6 +40,8 @@
             @done="tableDone"
             :row-class-name="tableRowClassName"
             :initLoad="!isFirstRefreshTable"
+            @columns-change="handleColumnChange"
+            :cache-key="'product-list-cache-key'"
           >
             <!-- 表头工具栏 -->
             <template v-slot:action="{ row }">
@@ -72,404 +74,413 @@
 </template>
 
 <script>
-  import { getProductList,queryLastContractProductList } from '@/api/saleManage/quotation';
-  import searchProduct from './searchProduct.vue';
-  import productTree from '@/components/productTree';
-  import { getInventoryTotalAPI } from '@/api/wms';
-  import cBomList from './cBom-list.vue';
-  import { getByCode } from '@/api/system/dictionary-data';
-  import { contactQueryByCategoryIdsAPI } from '@/api/saleManage/contact';
-  import { lbjtList } from '@/enum/dict.js';
+import {
+  getProductList,
+  queryLastContractProductList
+} from '@/api/saleManage/quotation';
+import searchProduct from './searchProduct.vue';
+import productTree from '@/components/productTree';
+import { getInventoryTotalAPI } from '@/api/wms';
+import cBomList from './cBom-list.vue';
+import { getByCode } from '@/api/system/dictionary-data';
+import { contactQueryByCategoryIdsAPI } from '@/api/saleManage/contact';
+import { lbjtList } from '@/enum/dict.js';
+import tabMixins from '@/mixins/tableColumnsMixin';
 
-  export default {
-    components: {
-      productTree,
-      searchProduct,
-      cBomList
+export default {
+  mixins: [tabMixins],
+
+  components: {
+    productTree,
+    searchProduct,
+    cBomList
+  },
+  props: {
+    /*是否需要获取仓库产品数量*/
+    isGetInventoryTotal: {
+      type: Boolean,
+      default: false
     },
-    props: {
-      /*是否需要获取仓库产品数量*/
-      isGetInventoryTotal: {
-        type: Boolean,
-        default: false
-      },
-      /*已选择的产品*/
-      data: {
-        type: Array,
-        default: () => []
-      },
-      /*是否需要cBom*/
-      isShowCBom: {
-        type: Boolean,
-        default: false
-      },
-      /*是否需要供应商*/
-      isSupplier: {
-        type: Boolean,
-        default: false
-      },
-      //获取上一次销售记录  1销售合同 2采购合同
-      isSalesRecord: {
-        default: '' 
-      },
-      typeIds:{
-        type: Array,
-        default: () => []
-      },
-      isFirstRefreshTable: {
-        type: Boolean,
-        default: false
-      },
-      ids:{
-        type: Array,
-        default: () => []
-      }
+    /*已选择的产品*/
+    data: {
+      type: Array,
+      default: () => []
     },
-
-    data() {
-      return {
-        visible: false,
-        currentIndex: null,
-        radio: null,
-        cBomListDialogFlag: null,
-        dictList: {},
-        selection: [],
-        ids:[]
-      };
+    /*是否需要cBom*/
+    isShowCBom: {
+      type: Boolean,
+      default: false
     },
-    watch: {},
-    computed: {
-      columns() {
-        return [
-          {
-            action: 'action',
-            slot: 'action',
-            align: 'center',
-            label: '选择',
-            reserveSelection: true,
-            show: this.currentIndex != -1
-          },
-          {
-            label: '选择',
-            show: this.currentIndex == -1,
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center',
-            reserveSelection: true
-          },
-          {
-            columnKey: 'index',
-            type: 'index',
-            width: 50,
-            align: 'center',
-            showOverflowTooltip: true,
-            label: '序号'
-          },
-          {
-            prop: 'code',
-            label: '编码',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'name',
-            label: '名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'imgCode',
-            align: 'center',
-            label: '图号/件号',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'componentAttribute',
-            align: 'center',
-            label: '属性类型',
-            showOverflowTooltip: true,
-            formatter: (row, column) => {
-              if(row.produceType){
-                return row.produceType.map(item=>{
-                  return lbjtList[item]
-                }).toString()
-              }
-          
-            },
-            minWidth: 110
-          },
-          // {
-          //   prop: 'extField.approvalNumber',
-          //   align: 'center',
-          //   label: '批准文号',
-          //   showOverflowTooltip: true,
-          //   minWidth: 110
-          // },
-          {
-            prop: 'extField.packingSpecification',
-            align: 'center',
-            label: '包装规格',
-            showOverflowTooltip: true,
-            minWidth: 110
-          },
-          {
-            prop: 'brandNum',
-            align: 'center',
-            label: '牌号',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'modelType',
-            label: '型号',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'specification',
-            label: '规格',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'measuringUnit',
-            label: '计量单位',
-            showOverflowTooltip: true,
-            align: 'center',
-            minWidth: 90
-          },
+    /*是否需要供应商*/
+    isSupplier: {
+      type: Boolean,
+      default: false
+    },
+    //获取上一次销售记录  1销售合同 2采购合同
+    isSalesRecord: {
+      default: ''
+    },
+    typeIds: {
+      type: Array,
+      default: () => []
+    },
+    isFirstRefreshTable: {
+      type: Boolean,
+      default: false
+    },
+    ids: {
+      type: Array,
+      default: () => []
+    }
+  },
 
-          {
-            prop: 'weightUnit',
-            label: '重量单位',
-            showOverflowTooltip: true,
-            align: 'center',
-            minWidth: 90
-          },
+  data() {
+    return {
+      visible: false,
+      currentIndex: null,
+      radio: null,
+      cBomListDialogFlag: null,
+      dictList: {},
+      selection: [],
+      ids: []
+    };
+  },
+  watch: {},
+  computed: {
+    columns() {
+      let data = null;
+      if (this.currentIndex != -1) {
+        data = {
+          action: 'action',
+          slot: 'action',
+          align: 'center',
+          label: '选择',
+          reserveSelection: true
+        };
+      }
+      if (this.currentIndex == -1) {
+        data = {
+          label: '选择',
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center',
+          reserveSelection: true
+        };
+      }
 
-          {
-            prop: 'roughWeight',
-            label: '毛重',
-            showOverflowTooltip: true,
-            align: 'center',
-            minWidth: 90
+      return [
+        data,
+        {
+          columnKey: 'index',
+          type: 'index',
+          width: 50,
+          align: 'center',
+          showOverflowTooltip: true,
+          label: '序号'
+        },
+        {
+          prop: 'code',
+          label: '编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'name',
+          label: '名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'imgCode',
+          align: 'center',
+          label: '图号/件号',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'componentAttribute',
+          align: 'center',
+          label: '属性类型',
+          showOverflowTooltip: true,
+          formatter: (row, column) => {
+            if (row.produceType) {
+              return row.produceType
+                .map((item) => {
+                  return lbjtList[item];
+                })
+                .toString();
+            }
           },
+          minWidth: 110
+        },
+        // {
+        //   prop: 'extField.approvalNumber',
+        //   align: 'center',
+        //   label: '批准文号',
+        //   showOverflowTooltip: true,
+        //   minWidth: 110
+        // },
+        {
+          prop: 'extField.packingSpecification',
+          align: 'center',
+          label: '包装规格',
+          showOverflowTooltip: true,
+          minWidth: 110
+        },
+        {
+          prop: 'brandNum',
+          align: 'center',
+          label: '牌号',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'modelType',
+          label: '型号',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'specification',
+          label: '规格',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'measuringUnit',
+          label: '计量单位',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 90
+        },
 
-          {
-            prop: 'netWeight',
-            label: '净重',
-            showOverflowTooltip: true,
-            align: 'center',
-            minWidth: 90
-          },
+        {
+          prop: 'weightUnit',
+          label: '重量单位',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 90
+        },
 
-          {
-            prop: 'packingUnit',
-            align: 'center',
-            label: '包装单位',
-            showOverflowTooltip: true
-          },
-          {
-            prop: 'categoryLevelPath',
-            label: '分类',
-            align: 'center',
-            showOverflowTooltip: true
-          },
-          {
-            slot: 'cz',
-            align: 'center',
-            minWidth: 90,
-            fixed: 'right',
-            label: '操作',
-            show: this.isShowCBom
-          }
-        ];
+        {
+          prop: 'roughWeight',
+          label: '毛重',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 90
+        },
+
+        {
+          prop: 'netWeight',
+          label: '净重',
+          showOverflowTooltip: true,
+          align: 'center',
+          minWidth: 90
+        },
+
+        {
+          prop: 'packingUnit',
+          align: 'center',
+          label: '包装单位',
+          showOverflowTooltip: true
+        },
+        {
+          prop: 'categoryLevelPath',
+          label: '分类',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          slot: 'cz',
+          align: 'center',
+          minWidth: 90,
+          fixed: 'right',
+          label: '操作',
+          show: this.isShowCBom
+        }
+      ];
+    }
+  },
+  methods: {
+    getDictV(code, val) {
+      if (!this.dictList[code]) return '';
+      return this.dictList[code].find((item) => item.value == val)?.label;
+    },
+    async getDictList(code) {
+      let { data: res } = await getByCode(code);
+      this.dictList[code] = res.map((item) => {
+        let values = Object.keys(item);
+        return {
+          value: values[0],
+          label: item[values[0]]
+        };
+      });
+    },
+    open(item, currentIndex) {
+      this.currentIndex = currentIndex;
+      this.visible = true;
+      this.getDictList('productionType');
+    },
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return getProductList({
+        pageNum: page,
+        size: limit,
+        ...where
+      });
+    },
+    async tableDone() {
+      if (this.isSalesRecord == 1 || this.isSalesRecord == 2) {
+        this.ids = await queryLastContractProductList(this.isSalesRecord);
       }
     },
-    methods: {
-      getDictV(code, val) {
-        if (!this.dictList[code]) return '';
-        return this.dictList[code].find((item) => item.value == val)?.label;
-      },
-      async getDictList(code) {
-        let { data: res } = await getByCode(code);
-        this.dictList[code] = res.map((item) => {
-          let values = Object.keys(item);
-          return {
-            value: values[0],
-            label: item[values[0]]
-          };
-        });
-      },
-      open(item, currentIndex) {
-        this.currentIndex = currentIndex;
-        this.visible = true;
-        this.getDictList('productionType');
-      },
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        return getProductList({
-          pageNum: page,
-          size: limit,
-          ...where
-        });
-      },
-      async tableDone(){
-        if(this.isSalesRecord==1||this.isSalesRecord==2){
-         this.ids= await queryLastContractProductList(this.isSalesRecord)
-        }
-      },
-      //上次销售记录 改变背景色
-      tableRowClassName({row}){
-        if (this.ids?.includes(row?.id)) {
-          return 'success-row';
-        }
-        return ''
-      },
+    //上次销售记录 改变背景色
+    tableRowClassName({ row }) {
+      if (this.ids?.includes(row?.id)) {
+        return 'success-row';
+      }
+      return '';
+    },
 
-      /* 刷新表格 */
-      reload(where) {
-        where.categoryLevelId = this.curNodeData?.id;
+    /* 刷新表格 */
+    reload(where) {
+      where.categoryLevelId = this.curNodeData?.id;
 
-        this.$refs.table.reload({ pageNum: 1, where: where });
-      },
+      this.$refs.table.reload({ pageNum: 1, where: where });
+    },
 
-      handleNodeClick(data, node) {
-        this.curNodeData = data;
-        this.$nextTick(()=>{
-          this.reload({ categoryLevelId: data.id });
-        })
-      },
+    handleNodeClick(data, node) {
+      this.curNodeData = data;
+      this.$nextTick(() => {
+        this.reload({ categoryLevelId: data.id });
+      });
+    },
 
-      // 单击获取id
-      cellClick(row) {
-        if (this.currentIndex == -1) return;
-        this.current = row;
-        this.radio = row.id;
-      },
-      handleDoubleClick(row) {
-        if (!this.isShowCBom) return;
-        this.cBomListDialogFlag = true;
-        this.current = row;
-        this.$nextTick(() => {
-          this.$refs.cBomRef.open(row);
-        });
-      },
-      getSelectionCbom(rows = []) {
-        this.$emit('getSelectionCbom', rows);
-        this.handleClose();
-      },
-      handleClose() {
-        this.visible = false;
-        this.current = null;
-        this.selection = [];
-        this.$refs.table.clearSelection();
-        this.radio = '';
-      },
-      async getSupplierObj(productList, queryName) {
-        try {
-          let categoryIds = productList
-            .filter((item) => item.id)
-            .map((item) => item.id);
-          if (categoryIds.length > 0) {
-            return await contactQueryByCategoryIdsAPI({
-              categoryIds,
-              isQueryEE: 1
-            });
-          } else {
-            return Promise.resolve({});
-          }
-        } catch (e) {
+    // 单击获取id
+    cellClick(row) {
+      if (this.currentIndex == -1) return;
+      this.current = row;
+      this.radio = row.id;
+    },
+    handleDoubleClick(row) {
+      if (!this.isShowCBom) return;
+      this.cBomListDialogFlag = true;
+      this.current = row;
+      this.$nextTick(() => {
+        this.$refs.cBomRef.open(row);
+      });
+    },
+    getSelectionCbom(rows = []) {
+      this.$emit('getSelectionCbom', rows);
+      this.handleClose();
+    },
+    handleClose() {
+      this.visible = false;
+      this.current = null;
+      this.selection = [];
+      this.$refs.table.clearSelection();
+      this.radio = '';
+    },
+    async getSupplierObj(productList, queryName) {
+      try {
+        let categoryIds = productList
+          .filter((item) => item.id)
+          .map((item) => item.id);
+        if (categoryIds.length > 0) {
+          return await contactQueryByCategoryIdsAPI({
+            categoryIds,
+            isQueryEE: 1
+          });
+        } else {
           return Promise.resolve({});
         }
-      },
-      async selected() {
-        if (!this.current && !this.selection.length) {
-          return this.$message.warning('请至少选择一条数据');
+      } catch (e) {
+        return Promise.resolve({});
+      }
+    },
+    async selected() {
+      if (!this.current && !this.selection.length) {
+        return this.$message.warning('请至少选择一条数据');
+      }
+      if (this.currentIndex != -1) {
+        if (
+          this.data.map((item) => item.productCode).includes(this.current.code)
+        ) {
+          return this.$message.error('选择的物品已经存在列表了');
         }
-        if (this.currentIndex != -1) {
-          if (
-            this.data
-              .map((item) => item.productCode)
-              .includes(this.current.code)
-          ) {
-            return this.$message.error('选择的物品已经存在列表了');
-          }
-        } else {
-          if (
-            this.selection.some((item) =>
-              this.data.some((i) => i.productCode == item.code)
-            )
-          ) {
-            return this.$message.error('选择的物品已经存在列表了');
-          }
+      } else {
+        if (
+          this.selection.some((item) =>
+            this.data.some((i) => i.productCode == item.code)
+          )
+        ) {
+          return this.$message.error('选择的物品已经存在列表了');
         }
+      }
 
-        let codeList = [];
-        let list = this.currentIndex == -1 ? this.selection : [this.current];
-        //获取仓库库存
-        if (this.isGetInventoryTotal) {
-          codeList = list.map((item) => item.code);
-          let inventoryTotalList = await getInventoryTotalAPI(codeList);
-          list.forEach((item) => {
-            let find =
-              inventoryTotalList.find((key) => key.code == item.code) || {};
-            item.availableCountBase = find.availableCountBase;
-          });
-        }
-        //获取供应商
-        if (this.isSupplier) {
-          let supplierList = await this.getSupplierObj(list);
-          list.forEach((item) => {
-            item['entrustedEnterpriseIdList'] = supplierList[item.id];
-            if (supplierList[item.id]?.length === 1) {
-              item['entrustedEnterpriseId'] =
-                supplierList[item.id][0].id;
-            }
-          });
-        }
-        console.log(list,'list')
-        this.$emit('changeParent', list, this.currentIndex);
-        this.handleClose();
+      let codeList = [];
+      let list = this.currentIndex == -1 ? this.selection : [this.current];
+      //获取仓库库存
+      if (this.isGetInventoryTotal) {
+        codeList = list.map((item) => item.code);
+        let inventoryTotalList = await getInventoryTotalAPI(codeList);
+        list.forEach((item) => {
+          let find =
+            inventoryTotalList.find((key) => key.code == item.code) || {};
+          item.availableCountBase = find.availableCountBase;
+        });
+      }
+      //获取供应商
+      if (this.isSupplier) {
+        let supplierList = await this.getSupplierObj(list);
+        list.forEach((item) => {
+          item['entrustedEnterpriseIdList'] = supplierList[item.id];
+          if (supplierList[item.id]?.length === 1) {
+            item['entrustedEnterpriseId'] = supplierList[item.id][0].id;
+          }
+        });
       }
+      console.log(list, 'list');
+      this.$emit('changeParent', list, this.currentIndex);
+      this.handleClose();
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
 :deep(.success-row) {
-    background: #f0f9eb;
-  }
-    .tree_col {
-    border: 1px solid #eee;
-    padding: 10px 0;
-    box-sizing: border-box;
-    height: 500px;
-    overflow: auto;
-  }
+  background: #f0f9eb;
+}
+.tree_col {
+  border: 1px solid #eee;
+  padding: 10px 0;
+  box-sizing: border-box;
+  height: 500px;
+  overflow: auto;
+}
 
-  .table_col {
-    padding-left: 10px;
+.table_col {
+  padding-left: 10px;
 
-    ::v-deep .el-table th.el-table__cell {
-      background: #f2f2f2;
-    }
+  ::v-deep .el-table th.el-table__cell {
+    background: #f2f2f2;
   }
+}
 
-  .pagination {
-    text-align: right;
-    padding: 10px 0;
-  }
+.pagination {
+  text-align: right;
+  padding: 10px 0;
+}
 
-  .btns {
-    text-align: center;
-    padding: 10px 0;
-  }
+.btns {
+  text-align: center;
+  padding: 10px 0;
+}
 
-  .topsearch {
-    margin-bottom: 15px;
-  }
+.topsearch {
+  margin-bottom: 15px;
+}
 </style>

+ 4 - 1
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -685,7 +685,10 @@
         const data = await getSaleOrderDetail(id);
         this.loading = false;
         this.form = data;
-        await this.changeParent({ id: data.partaId }, true);
+        if(data.partaId){
+          await this.changeParent({ id: data.partaId }, true);
+
+        }
 
         if (data) {
           data.saleType = +data.saleType;