Browse Source

报价管理新增导入

hezhanp 8 tháng trước cách đây
mục cha
commit
9f786bf90f
1 tập tin đã thay đổi với 409 bổ sung389 xóa
  1. 409 389
      src/views/saleManage/quotation/index.vue

+ 409 - 389
src/views/saleManage/quotation/index.vue

@@ -39,6 +39,14 @@
             >
               批量删除
             </el-button>
+
+            <el-button
+              type="primary"
+              size="small"
+              icon="el-icon-upload2"
+              @click="uploadFile"
+              >导入</el-button
+            >
           </template>
 
           <!-- 查看详情列 -->
@@ -147,422 +155,434 @@
       ref="processSubmitDialogRef"
       @reload="reload"
     ></process-submit-dialog>
+
+    <importDialog
+      ref="importDialogRef"
+      @success="reload"
+      :fileUrl="'/eom/quote/downLoadTemplate'"
+      :isWeb="false"
+      fileName="报价管理导入模板"
+      apiUrl="/eom/quote/importFile"
+    />
   </div>
 </template>
 
 <script>
-  import searchQuotation from './components/searchQuotation.vue';
-  import addDialog from './components/addDialog.vue';
-  import detailDialog from './components/detailDialog.vue';
-  import popModal from '@/components/pop-modal';
-  import { reviewStatus } from '@/enum/dict';
-  import addContractBookDialog from '@/views/contractManage/contractBook/components/addDialog.vue';
-  import { contactTypeTree, contactDetail } from '@/api/saleManage/contact';
-  // import fileMain from '@/components/addDoc/index.vue';
+import searchQuotation from './components/searchQuotation.vue';
+import addDialog from './components/addDialog.vue';
+import detailDialog from './components/detailDialog.vue';
+import popModal from '@/components/pop-modal';
+import { reviewStatus } from '@/enum/dict';
+import addContractBookDialog from '@/views/contractManage/contractBook/components/addDialog.vue';
+import { contactTypeTree, contactDetail } from '@/api/saleManage/contact';
+import importDialog from '@/components/upload/import-dialog.vue';
+// import fileMain from '@/components/addDoc/index.vue';
 
-  import {
-    getTableList,
-    getDetail,
-    deleteInformation,
-    submit,
-    quoteUpdateStatus
-  } from '@/api/saleManage/quotation';
+import {
+  getTableList,
+  getDetail,
+  deleteInformation,
+  submit,
+  quoteUpdateStatus
+} from '@/api/saleManage/quotation';
 
-  import dictMixins from '@/mixins/dictMixins';
-  import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
-  import tabMixins from '@/mixins/tableColumnsMixin';
+import dictMixins from '@/mixins/dictMixins';
+import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
+import tabMixins from '@/mixins/tableColumnsMixin';
 
-  export default {
-    mixins: [dictMixins, tabMixins],
-    components: {
-      processSubmitDialog,
-      searchQuotation,
-      popModal,
-      addDialog,
-      detailDialog,
-      addContractBookDialog,
-      // fileMain
-    },
-    props: {
-      contactData: {
-        default: () => {
-          return {};
-        }
-      },
-      businessOpportunityData: {
-        //商机
-        default: () => {
-          return {};
-        }
+export default {
+  mixins: [dictMixins, tabMixins],
+  components: {
+    processSubmitDialog,
+    searchQuotation,
+    popModal,
+    addDialog,
+    detailDialog,
+    importDialog,
+    addContractBookDialog
+    // fileMain
+  },
+  props: {
+    contactData: {
+      default: () => {
+        return {};
       }
     },
-    data() {
-      return {
-        selection: [], //单选中集合
-        delVisible: false, //批量删除弹框状态
-        loading: false, // 加载状态
-        processSubmitDialogFlag: false,
-        treeList: [],
-        columns: [
-          {
-            width: 45,
-            type: 'selection',
-            columnKey: 'selection',
-            align: 'center'
-          },
-          {
-            columnKey: 'index',
-            label: '序号',
-            type: 'index',
-            width: 55,
-            align: 'center',
-            showOverflowTooltip: true,
-            fixed: 'left'
-          },
-          {
-            prop: 'code',
-            label: '编码',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'contactName',
-            label: '询价方名称',
-            align: 'center',
-            slot: 'contactName',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'contactLinkName',
-            label: '询价方联系人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'contactTel',
-            label: '询价方联系电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'productNames',
-            label: '产品名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'quoteName',
-            label: '报价方名称',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'quoteLinkName',
-            label: '报价方联系人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
+    businessOpportunityData: {
+      //商机
+      default: () => {
+        return {};
+      }
+    }
+  },
+  data() {
+    return {
+      selection: [], //单选中集合
+      delVisible: false, //批量删除弹框状态
+      loading: false, // 加载状态
+      processSubmitDialogFlag: false,
+      treeList: [],
+      columns: [
+        {
+          width: 45,
+          type: 'selection',
+          columnKey: 'selection',
+          align: 'center'
+        },
+        {
+          columnKey: 'index',
+          label: '序号',
+          type: 'index',
+          width: 55,
+          align: 'center',
+          showOverflowTooltip: true,
+          fixed: 'left'
+        },
+        {
+          prop: 'code',
+          label: '编码',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'contactName',
+          label: '询价方名称',
+          align: 'center',
+          slot: 'contactName',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'contactLinkName',
+          label: '询价方联系人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'contactTel',
+          label: '询价方联系电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'productNames',
+          label: '产品名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'quoteName',
+          label: '报价方名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'quoteLinkName',
+          label: '报价方联系人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
 
-          {
-            prop: 'quoteTel',
-            label: '报价方联系电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'deliveryDate',
-            label: '交货日期',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'settlementModeName',
-            label: '付款方式',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
+        {
+          prop: 'quoteTel',
+          label: '报价方联系电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'deliveryDate',
+          label: '交货日期',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'settlementModeName',
+          label: '付款方式',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
 
-          // {
-          //   prop: 'taxRate',
-          //   label: '税率',
-          //   align: 'center',
-          //   showOverflowTooltip: true,
-          //   minWidth: 140,
-          //   formatter: (_row, _column, cellValue) => {
-          //     return _row.taxRate ? _row.taxRate + '%' : '';
-          //   }
-          // },
-          {
-            prop: 'totalPrice',
-            label: '总金额',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'askFile',
-            label: '附件',
-            align: 'center',
-            showOverflowTooltip: true,
-            slot: 'askFile',
-            minWidth: 130
-          },
+        // {
+        //   prop: 'taxRate',
+        //   label: '税率',
+        //   align: 'center',
+        //   showOverflowTooltip: true,
+        //   minWidth: 140,
+        //   formatter: (_row, _column, cellValue) => {
+        //     return _row.taxRate ? _row.taxRate + '%' : '';
+        //   }
+        // },
+        {
+          prop: 'totalPrice',
+          label: '总金额',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'askFile',
+          label: '附件',
+          align: 'center',
+          showOverflowTooltip: true,
+          slot: 'askFile',
+          minWidth: 130
+        },
 
-          {
-            prop: 'dataStatus',
-            label: '启用状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return _row.dataStatus === 1 ? '正常' : '终止';
-            }
-          },
-          {
-            prop: 'status',
-            label: '审核状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return reviewStatus[_row.status];
-            }
-          },
-          {
-            prop: 'createUserName',
-            label: '创建人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 80
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 170,
-            formatter: (_row, _column, cellValue) => {
-              return this.$util.toDateString(cellValue);
-            }
-          },
-          {
-            columnKey: 'action',
-            label: '操作',
-            width: 230,
-            align: 'center',
-            resizable: false,
-            slot: 'action',
-            showOverflowTooltip: true,
-            fixed: 'right'
+        {
+          prop: 'dataStatus',
+          label: '启用状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return _row.dataStatus === 1 ? '正常' : '终止';
           }
-        ],
-        cacheKeyUrl: 'eos-5569a1b1-saleManage-quotation'
-      };
-    },
-    computed: {},
-    created() {
-      this.requestDict('客户状态');
-      this.getTreeData();
-    },
-    methods: {
-      quoteUpdateStatus,
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        if (this.contactData.id) {
-          where['contactId'] = this.contactData.id;
-        }
-        if (this.businessOpportunityData.id) {
-          where['opportunityId'] = this.businessOpportunityData.id;
-        }
-        return getTableList({
-          pageNum: page,
-          size: limit,
-          ...where
-        });
-      },
-      //获取合同分类
-      async getTreeData() {
-        try {
-          this.treeLoading = true;
-          const res = await contactTypeTree({ id: '20' });
-          this.treeLoading = false;
-          if (res?.code === '0') {
-            this.treeList = res.data;
-
-            return this.treeList;
+        },
+        {
+          prop: 'status',
+          label: '审核状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return reviewStatus[_row.status];
+          }
+        },
+        {
+          prop: 'createUserName',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 80
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 170,
+          formatter: (_row, _column, cellValue) => {
+            return this.$util.toDateString(cellValue);
           }
-        } catch (error) {}
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 230,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ],
+      cacheKeyUrl: 'eos-5569a1b1-saleManage-quotation'
+    };
+  },
+  computed: {},
+  created() {
+    this.requestDict('客户状态');
+    this.getTreeData();
+  },
+  methods: {
+    quoteUpdateStatus,
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      if (this.contactData.id) {
+        where['contactId'] = this.contactData.id;
+      }
+      if (this.businessOpportunityData.id) {
+        where['opportunityId'] = this.businessOpportunityData.id;
+      }
+      return getTableList({
+        pageNum: page,
+        size: limit,
+        ...where
+      });
+    },
+    //获取合同分类
+    async getTreeData() {
+      try {
+        this.treeLoading = true;
+        const res = await contactTypeTree({ id: '20' });
         this.treeLoading = false;
-      },
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ page: 1, where });
-      },
-
-      //新增编辑
-      openEdit(type, row) {
-        this.$refs.addDialogRef.open(type, row, row.id);
-        this.$refs.addDialogRef.$refs.form &&
-          this.$refs.addDialogRef.$refs.form.clearValidate();
-      },
+        if (res?.code === '0') {
+          this.treeList = res.data;
 
-      //批量删除
-      allDelBtn() {
-        if (this.selection.length === 0) return;
-        let flag = this.selection.some((item) => [1, 2].includes(item.status));
-        if (flag)
-          return this.$message.warning(
-            '抱歉已审核、审核中的数据不能删除,请检查'
-          );
-        this.delVisible = true;
-      },
+          return this.treeList;
+        }
+      } catch (error) {}
+      this.treeLoading = false;
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where });
+    },
+    //导入
+    uploadFile() {
+      this.$refs.importDialogRef.open();
+    },
+    //新增编辑
+    openEdit(type, row) {
+      this.$refs.addDialogRef.open(type, row, row.id);
+      this.$refs.addDialogRef.$refs.form &&
+        this.$refs.addDialogRef.$refs.form.clearValidate();
+    },
 
-      //删除接口
-      remove(delData) {
-        deleteInformation(delData).then((res) => {
-          this.$message.success('删除成功!');
-          this.reload();
-        });
-      },
+    //批量删除
+    allDelBtn() {
+      if (this.selection.length === 0) return;
+      let flag = this.selection.some((item) => [1, 2].includes(item.status));
+      if (flag)
+        return this.$message.warning('抱歉已审核、审核中的数据不能删除,请检查');
+      this.delVisible = true;
+    },
 
-      //删除弹框确定
-      commitBtn() {
-        const dataId = this.selection.map((v) => v.id);
-        this.remove(dataId);
-      },
-      async setQuoteStatus(row) {
-        await quoteUpdateStatus({ id: row.id, status: 2 });
-        this.$message.success('操作成功!');
+    //删除接口
+    remove(delData) {
+      deleteInformation(delData).then((res) => {
+        this.$message.success('删除成功!');
         this.reload();
-      },
-      //新增合同
-      async addGenerateContract(row) {
-        //获取详情
-        const data = await getDetail(row.id);
-        const contact = await contactDetail(data.contactId);
-        let obj = {
-          contractVO: {
-            categoryId: '',
-            categoryName: '',
-            contractEndDate: '',
-            contractFile: [],
-            contractNo: '',
-            contractNumber: '',
-            contractStartDate: '',
-            createDept: '',
-            createTime: '',
-            createUsername: '',
-            discountTotalPrice: '',
-            enabled: '',
-            id: '',
-            opportunityId: '',
-            partaAddress: data.contactAddress,
-            partaEmail: data.contactEmail,
-            partaFax: data.contactFax,
-            partaId: data.contactId,
-            partaLinkId: data.contactLinkId,
-            partaLinkName: data.contactLinkName,
-            partaName: data.contactName,
-            partaTel: data.contactTel,
-            partaUnifiedSocialCreditCode: '',
-            partbAddress: data.quoteAddress,
-            partbEmail: data.quoteEmail,
-            partbFax: data.quoteFax,
-            partbId: data.quoteCompanyId,
-            partbLinkId: data.quoteLinkId,
-            partbLinkName: data.quoteLinkName,
-            partbName: data.quoteName,
-            partbTel: data.quoteTel,
-            partbUnifiedSocialCreditCode: '',
-            receiptPaymentType: '',
-            reviewerId: '',
-            reviewerName: '',
-            reviewerTime: '',
-            sourceId: row.id,
-            sourceType: 1,
-            sourceName: data.code,
-            status: '',
-            totalPrice: data.totalPrice,
-            discountTotalPrice: data.totalPrice,
-            type: '1',
-            typeName: '销售合同',
-            updateUsername: '',
-            sourceCode: row.code,
-            contractName: contact.base.simpleName,
-            settlementModeName: data.settlementModeName,
-            settlementMode: data.settlementMode
-          },
-          receiptPaymentList: [],
-          productList: data.quoteProductList
+      });
+    },
+
+    //删除弹框确定
+    commitBtn() {
+      const dataId = this.selection.map((v) => v.id);
+      this.remove(dataId);
+    },
+    async setQuoteStatus(row) {
+      await quoteUpdateStatus({ id: row.id, status: 2 });
+      this.$message.success('操作成功!');
+      this.reload();
+    },
+    //新增合同
+    async addGenerateContract(row) {
+      //获取详情
+      const data = await getDetail(row.id);
+      const contact = await contactDetail(data.contactId);
+      let obj = {
+        contractVO: {
+          categoryId: '',
+          categoryName: '',
+          contractEndDate: '',
+          contractFile: [],
+          contractNo: '',
+          contractNumber: '',
+          contractStartDate: '',
+          createDept: '',
+          createTime: '',
+          createUsername: '',
+          discountTotalPrice: '',
+          enabled: '',
+          id: '',
+          opportunityId: '',
+          partaAddress: data.contactAddress,
+          partaEmail: data.contactEmail,
+          partaFax: data.contactFax,
+          partaId: data.contactId,
+          partaLinkId: data.contactLinkId,
+          partaLinkName: data.contactLinkName,
+          partaName: data.contactName,
+          partaTel: data.contactTel,
+          partaUnifiedSocialCreditCode: '',
+          partbAddress: data.quoteAddress,
+          partbEmail: data.quoteEmail,
+          partbFax: data.quoteFax,
+          partbId: data.quoteCompanyId,
+          partbLinkId: data.quoteLinkId,
+          partbLinkName: data.quoteLinkName,
+          partbName: data.quoteName,
+          partbTel: data.quoteTel,
+          partbUnifiedSocialCreditCode: '',
+          receiptPaymentType: '',
+          reviewerId: '',
+          reviewerName: '',
+          reviewerTime: '',
+          sourceId: row.id,
+          sourceType: 1,
+          sourceName: data.code,
+          status: '',
+          totalPrice: data.totalPrice,
+          discountTotalPrice: data.totalPrice,
+          type: '1',
+          typeName: '销售合同',
+          updateUsername: '',
+          sourceCode: row.code,
+          contractName: contact.base.simpleName,
+          settlementModeName: data.settlementModeName,
+          settlementMode: data.settlementMode
+        },
+        receiptPaymentList: [],
+        productList: data.quoteProductList
+      };
+      // return;
+      this.$refs.addContractBookDialogRef.open('add', obj, true, 'quotation');
+    },
+    //查看详情
+    openDetail(row) {
+      this.$refs.contactDetailDialogRef.open(row);
+    },
+    quotationSubmit(res) {
+      this.processSubmitDialogFlag = true;
+      this.$nextTick(() => {
+        let params = {
+          businessId: res.id,
+          businessKey: 'quote_approve',
+          formCreateUserId: res.createUserId,
+          variables: {
+            businessCode: res.code,
+            businessName: res.contactName,
+            businessType: '报价单'
+          }
+          // callBackMethodType : '1',
+          // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
+          // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
+          // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
+          // miniHandle : '',
+          // miniView : '',
         };
-        // return;
-        this.$refs.addContractBookDialogRef.open('add', obj, true, 'quotation');
-      },
-      //查看详情
-      openDetail(row) {
-        this.$refs.contactDetailDialogRef.open(row);
-      },
-      quotationSubmit(res) {
-        this.processSubmitDialogFlag = true;
-        this.$nextTick(() => {
-          let params = {
-            businessId: res.id,
-            businessKey: 'quote_approve',
-            formCreateUserId: res.createUserId,
-            variables: {
-              businessCode: res.code,
-              businessName: res.contactName,
-              businessType: '报价单'
-            }
-            // callBackMethodType : '1',
-            // callBackMethod : 'proTargetPlanApproveApiImpl.updatePlanApprovalStatus',
-            // pcHandle : '/bpm/handleTask/components/project-manage/plan-manage/submit.vue',
-            // pcView : '/bpm/handleTask/components/project-manage/plan-manage/detailDialog.vue',
-            // miniHandle : '',
-            // miniView : '',
-          };
 
-          this.$refs.processSubmitDialogRef.init(params);
-        });
-        // submit({
-        //   businessId: res.id
-        // }).then((res) => {
-        //   this.$message.success('提交成功!');
-        //   this.reload();
-        // });
-      }
+        this.$refs.processSubmitDialogRef.init(params);
+      });
+      // submit({
+      //   businessId: res.id
+      // }).then((res) => {
+      //   this.$message.success('提交成功!');
+      //   this.reload();
+      // });
     }
-  };
+  }
+};
 </script>
 
 <style lang="scss" scoped>
-  :deep(.el-link--inner) {
-    margin-left: 0px !important;
-  }
+:deep(.el-link--inner) {
+  margin-left: 0px !important;
+}
 
-  .sys-organization-list {
-    height: calc(100vh - 264px);
-    box-sizing: border-box;
-    border-width: 1px;
-    border-style: solid;
-    overflow: auto;
-  }
+.sys-organization-list {
+  height: calc(100vh - 264px);
+  box-sizing: border-box;
+  border-width: 1px;
+  border-style: solid;
+  overflow: auto;
+}
 
-  .sys-organization-list :deep(.el-tree-node__content) {
-    height: 40px;
+.sys-organization-list :deep(.el-tree-node__content) {
+  height: 40px;
 
-    & > .el-tree-node__expand-icon {
-      margin-left: 10px;
-    }
+  & > .el-tree-node__expand-icon {
+    margin-left: 10px;
   }
+}
 </style>