Răsfoiți Sursa

销售订单来源

yusheng 9 luni în urmă
părinte
comite
623774451b

+ 273 - 249
src/views/contractManage/contractBook/components/quotationList.vue

@@ -31,278 +31,302 @@
       </ele-pro-table>
     </div>
     <div slot="footer" class="dialog-footer">
-      <el-button type="primary" size="small" @click="selected"
+      <el-button
+        type="primary"
+        size="small"
+        @click="selected"
+        v-if="isContractBook"
         >生成合同
       </el-button>
+      <el-button
+        type="primary"
+        size="small"
+        @click="selected"
+        v-if="!isContractBook"
+        >选择
+      </el-button>
       <el-button size="small" @click="handleClose">关闭</el-button>
     </div>
   </el-dialog>
 </template>
 
 <script>
-import searchQuotation from '@/views/saleManage/quotation/components/searchQuotation.vue';
+  import searchQuotation from '@/views/saleManage/quotation/components/searchQuotation.vue';
 
-import {
-  getTableList,
-  getDetail,
-  isHasGeneratedContractAPI
-} from '@/api/saleManage/quotation';
-import dictMixins from '@/mixins/dictMixins';
+  import {
+    getTableList,
+    getDetail,
+    isHasGeneratedContractAPI
+  } from '@/api/saleManage/quotation';
+  import dictMixins from '@/mixins/dictMixins';
 
-export default {
-  mixins: [dictMixins],
-  components: {
-    searchQuotation
-  },
-  //客户管理数据
-  props: {
-    contactData: {
-      type: Object,
-      default: () => {
-        return {};
-      }
+  export default {
+    mixins: [dictMixins],
+    components: {
+      searchQuotation
     },
-    businessOpportunityData: {
-      type: Object,
-      default: () => {
-        return {};
+    //客户管理数据
+    props: {
+      contactData: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      businessOpportunityData: {
+        type: Object,
+        default: () => {
+          return {};
+        }
+      },
+      isContractBook: {
+        type: Boolean,
+        default: true
       }
-    }
-    
-  },
-  data() {
-    return {
-      radio: null,
-      visible: false,
-      loading: false,
-      columns: [
-        {
-          action: 'action',
-          slot: 'action',
-          align: 'center',
-          label: '选择'
-        },
-        {
-          columnKey: 'index',
-          label: '序号',
-          type: 'index',
-          width: 55,
-          align: 'center',
-          showOverflowTooltip: true,
-          fixed: 'left'
-        },
-        {
-          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: 'quoteName',
-          label: '报价方名称',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 200
-        },
-        {
-          prop: 'quoteLinkName',
-          label: '报价方联系人',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 140
-        },
+    },
+    data() {
+      return {
+        radio: null,
+        visible: false,
+        loading: false,
+        columns: [
+          {
+            action: 'action',
+            slot: 'action',
+            align: 'center',
+            label: '选择'
+          },
+          {
+            columnKey: 'index',
+            label: '序号',
+            type: 'index',
+            width: 55,
+            align: 'center',
+            showOverflowTooltip: true,
+            fixed: 'left'
+          },
+          {
+            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: '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 + '%';
-        //   }
-        // },
-        {
-          prop: 'totalPrice',
-          label: '总金额',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 100
-        },
-        {
-          prop: 'createTime',
-          label: '创建时间',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 170,
-          formatter: (_row, _column, cellValue) => {
-            return this.$util.toDateString(cellValue);
+          // {
+          //   prop: 'taxRate',
+          //   label: '税率',
+          //   align: 'center',
+          //   showOverflowTooltip: true,
+          //   minWidth: 140,
+          //   formatter: (_row, _column, cellValue) => {
+          //     return _row.taxRate + '%';
+          //   }
+          // },
+          {
+            prop: 'totalPrice',
+            label: '总金额',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 100
+          },
+          {
+            prop: 'createTime',
+            label: '创建时间',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 170,
+            formatter: (_row, _column, cellValue) => {
+              return this.$util.toDateString(cellValue);
+            }
           }
-        }
-      ]
-    };
-  },
-  computed: {},
-  created() {},
-  methods: {
-    open() {
-      this.visible = true;
+        ]
+      };
     },
+    computed: {},
+    created() {},
+    methods: {
+      open() {
+        this.visible = true;
+      },
 
-    /* 表格数据源 */
-    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,
-        status: 2,
-        dataStatus: 1
-      });
-    },
-    /* 刷新表格 */
-    reload(where) {
-      this.$refs.table.reload({ page: 1, where });
-    },
-    // 单击获取id
-    cellClick(row) {
-      this.current = row;
-      this.radio = row.id;
-    },
-    handleClose() {
-      this.visible = false;
-      this.current = null;
-    },
+      /* 表格数据源 */
+      datasource({ page, limit, where, order }) {
+        if (this.contactData.id) {
+          where['contactId'] = this.contactData.id;
+        }
+        if (this.businessOpportunityData.id) {
+          where['opportunityId'] = this.businessOpportunityData.id;
+        }
 
-    async selected() {
-      if (!this.current) {
-        return this.$message.warning('请至少选择一条数据');
-      }
-      let data = await this.addGenerateContract();
+        return getTableList({
+          pageNum: page,
+          size: limit,
+          ...where,
+          status: 2,
+          dataStatus: 1
+        });
+      },
+      /* 刷新表格 */
+      reload(where) {
+        this.$refs.table.reload({ page: 1, where });
+      },
+      // 单击获取id
+      cellClick(row) {
+        this.current = row;
+        this.radio = row.id;
+      },
+      handleClose() {
+        this.visible = false;
+        this.current = null;
+      },
 
-      if (data) {
-        this.$emit('changeParent', { data, sourceCode: this.current.code,sourceName:this.current.name });
+      async selected() {
+        if (!this.current) {
+          return this.$message.warning('请至少选择一条数据');
+        }
+        let data = null;
+        // if (this.isContractBook) {
+        //   data = await this.addGenerateContract();
+        // } else {
+        //   data = await getDetail(this.current.id);
+        // }
+        data = await this.addGenerateContract(true);
+        if (data) {
+          this.$emit('changeParent', {
+            data,
+            sourceCode: this.current.code,
+            sourceName: this.current.name,
+            sourceId: this.current.id
+          });
 
-        this.handleClose();
+          this.handleClose();
+        }
+      },
+      //新增合同
+      async addGenerateContract(type) {
+        //报价单是否生成过合同
+        let res = await isHasGeneratedContractAPI(this.current.id);
+        if (res&&!type) this.$message.warning('该报价单已生成过合同,请注意');
+        //获取详情
+        const data = await getDetail(this.current.id);
+        data.quoteProductList.forEach((item) => {
+          this.$set(item, 'discountTotalPrice', Number(item.totalPrice));
+          this.$set(item, 'discountSinglePrice', Number(item.singlePrice));
+        });
+        let obj = {
+          contractVO: {
+            categoryId: '',
+            categoryName: '',
+            contractEndDate: '',
+            contractFile: [],
+            contractName: data.contactName,
+            contractNo: '',
+            contractNumber: '',
+            contractStartDate: '',
+            createDept: '',
+            createTime: '',
+            createUsername: '',
+            enabled: '',
+            id: '',
+            settlementMode: data.settlementMode,
+            settlementModeName: data.settlementModeName,
+            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: this.current.id,
+            sourceType: 1,
+            sourceName: data.code,
+            status: '',
+            totalPrice: data.totalPrice,
+            discountTotalPrice: data.totalPrice,
+            type: '1',
+            typeName: '销售合同',
+            updateUsername: ''
+          },
+          receiptPaymentList: [],
+          productList: data.quoteProductList
+        };
+        return obj;
       }
-    },
-    //新增合同
-    async addGenerateContract() {
-      //报价单是否生成过合同
-      let res = await isHasGeneratedContractAPI(this.current.id);
-      if (res) this.$message.warning('该报价单已生成过合同,请注意');
-      //获取详情
-      const data = await getDetail(this.current.id);
-      data.quoteProductList.forEach((item) => {
-        this.$set(item, 'discountTotalPrice', Number(item.totalPrice));
-        this.$set(item, 'discountSinglePrice', Number(item.singlePrice));
-      });
-      let obj = {
-        contractVO: {
-          categoryId: '',
-          categoryName: '',
-          contractEndDate: '',
-          contractFile: [],
-          contractName: data.contactName,
-          contractNo: '',
-          contractNumber: '',
-          contractStartDate: '',
-          createDept: '',
-          createTime: '',
-          createUsername: '',
-          enabled: '',
-          id: '',
-          settlementMode: data.settlementMode,
-          settlementModeName: data.settlementModeName,
-          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: this.current.id,
-          sourceType: 1,
-          sourceName: data.code,
-          status: '',
-          totalPrice: data.totalPrice,
-          discountTotalPrice: data.totalPrice,
-          type: '1',
-          typeName: '销售合同',
-          updateUsername: ''
-        },
-        receiptPaymentList: [],
-        productList: data.quoteProductList
-      };
-      return obj;
     }
-  }
-};
+  };
 </script>
 
 <style lang="scss" scoped>
-.btns {
-  text-align: center;
-  padding: 10px 0;
-}
+  .btns {
+    text-align: center;
+    padding: 10px 0;
+  }
 </style>

+ 0 - 1
src/views/contractManage/contractBook/index.vue

@@ -234,7 +234,6 @@
   import tabMixins from '@/mixins/tableColumnsMixin';
   import {
     getTableList,
-    submit,
     deleteInformation,
     batchSubmitAPI
   } from '@/api/contractManage/contractBook';

+ 202 - 55
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -32,20 +32,59 @@
             >
             </DictSelection>
           </el-form-item>
-          <el-form-item label="选择合同" prop="contractName" >
+
+          <el-form-item
+            label="报价单"
+            prop="relationCode"
+            v-if="form.relationType == 2"
+          >
+            <el-input
+              clearable
+              readonly
+              @clear="clearContrcat"
+              v-model="form.relationCode"
+              @click.native="handQuotation"
+              placeholder="请输入"
+            />
+          </el-form-item>
+
+          <el-form-item
+            label="商机名称"
+            prop="relationName"
+            v-if="form.relationType == 1"
+          >
+            <el-input
+              clearable
+              v-model="form.relationName"
+              @click.native="handOpportunity"
+              readonly
+              @clear="clearContrcat"
+              placeholder="请输入"
+            />
+          </el-form-item>
+
+          <el-form-item
+            label="选择合同"
+            prop="relationName"
+            v-if="form.relationType == 3"
+          >
             <el-input
               clearable
-              v-model="form.contractName"
+              v-model="form.relationName"
               @click.native="handleContractBtn"
               @clear="clearContrcat"
               placeholder="请选择"
               :disabled="!!projectData.contractId"
             />
           </el-form-item>
-          <el-form-item label="项目名称" prop="projectName">
+          <el-form-item
+            label="项目名称"
+            prop="relationName"
+            v-if="form.relationType == 4"
+          >
             <el-input
               clearable
-              v-model="form.projectName"
+              v-model="form.relationName"
               @clear="clearContrcat('project')"
               placeholder="请输入"
               style="width: calc(100% - 80px)"
@@ -105,25 +144,29 @@
         </el-col>
 
         <el-col :span="12">
-          <!-- <el-form-item label="来源类型" prop="relationType">
+          <el-form-item label="来源类型" prop="relationType">
             <el-select
               v-model="form.relationType"
               filterable
               clearable
               style="width: 100%"
-              @change="handleChangeRelationType"
+              @change="clearContrcat"
             >
               <el-option :value="1" label="商机"></el-option>
               <el-option :value="2" label="报价"></el-option>
               <el-option :value="3" label="销售合同"></el-option>
               <el-option :value="4" label="项目"></el-option>
             </el-select>
-          </el-form-item> -->
+          </el-form-item>
 
-          <el-form-item label="合同编号" prop="contractNumber" >
+          <el-form-item
+            label="合同编号"
+            prop="relationCode"
+            v-if="form.relationType == 3"
+          >
             <el-input
               :disabled="!!form.contractId"
-              v-model="form.contractNumber"
+              v-model="form.relationCode"
             />
           </el-form-item>
 
@@ -434,6 +477,19 @@
 
       <el-button @click="cancel">返回</el-button>
     </div>
+    <quotationList
+      ref="quotationListRef"
+      @changeParent="changeQuotationList"
+      :isContractBook="false"
+    ></quotationList>
+
+    <!-- 商机   -->
+    <opportunity-dialog
+      :opportunityDialogFlag.sync="opportunityDialogFlag"
+      v-if="opportunityDialogFlag"
+      ref="opportunityDialogRef"
+      @changeParent="getOpportunityDetail"
+    ></opportunity-dialog>
 
     <parentList ref="parentRef" @changeParent="changeParent"></parentList>
     <head-list ref="headRef" @changeParent="changePersonel"></head-list>
@@ -487,6 +543,7 @@
     getByRepeatBomAttribute,
     saveOrderBomList
   } from '@/api/saleManage/saleorder';
+  import { getDetail as getOpportunityInfo } from '@/api/saleManage/businessOpportunity';
   import { getcontactlink } from '@/api/saleManage/businessFollow';
   import headList from '@/BIZComponents/user-select/user-select.vue';
   import contractListDialog from './contractListDialog.vue';
@@ -503,7 +560,8 @@
   import bomDialog from './bomDialog';
   import saleOrderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue';
   import { parameterGetByCode } from '@/api/main/index.js';
-
+  import quotationList from '@/views/contractManage/contractBook/components/quotationList.vue';
+  import opportunityDialog from '@/views/financialManage/components/opportunityDialog.vue';
   export default {
     mixins: [dictMixins],
     components: {
@@ -518,7 +576,9 @@
       parentList,
       typeList,
       bomDialog,
-      saleOrderListDialog
+      quotationList,
+      saleOrderListDialog,
+      opportunityDialog
     },
     props: {
       contactData: {
@@ -575,14 +635,15 @@
         needProduce: 1,
         planNumUnit: '立方',
         receivePerson: '',
-        relationType:'',
-        relationName:'',
-        relationCode:'',
-        relationId:''
+        relationType: '',
+        relationName: '',
+        relationCode: '',
+        relationId: ''
       };
 
       return {
         customerMark: '',
+        opportunityDialogFlag: false,
         projectData: {}, //项目数据
         clearing: false, //是否清除合同
         processSubmitDialogFlag: false,
@@ -765,15 +826,88 @@
         });
       },
 
+      //选择商机
+      handOpportunity(e) {
+        this.opportunityDialogFlag = true;
+        this.$nextTick(() => {
+          let item = {
+            id: this.form.sourceId
+          };
+          this.$refs.opportunityDialogRef.init(item);
+        });
+      },
+      //获取商机信息
+      async getOpportunityDetail(row) {
+        this.$set(this.form, 'relationName', row.name);
+        this.$set(this.form, 'relationId', row.id);
+        this.$set(this.form, 'relationCode', row.code);
+
+        let cusInfo = await contactDetail(row.contactId);
+        let info = await getOpportunityInfo(row?.id ?? '');
+        await this.getLinkInfo(cusInfo.base.id);
+        let totalPrice = info.productList.reduce((num, cur) => {
+          return num + Number(cur.totalPrice);
+        }, 0);
+        info.productList.forEach((item) => {
+          item.discountSinglePrice =
+            item.discountSinglePrice || item.singlePrice;
+          item.discountTotalPrice = item.discountTotalPrice || item.totalPrice;
+        });
+        let discountTotalPrice = info.productList.reduce((num, cur) => {
+          return num + Number(cur.discountTotalPrice);
+        }, 0);
+
+        this.form = Object.assign({}, this.form, {
+          partaName: cusInfo.base.name,
+          partaId: cusInfo.base.id,
+          partaUnifiedSocialCreditCode: cusInfo.base.unifiedSocialCreditCode,
+          partaAddress: cusInfo.base.addressName + cusInfo.base.address,
+          partaLinkName: cusInfo.linkList[0]?.linkName,
+          partaLinkId: cusInfo.linkList[0]?.id,
+          partaTel: cusInfo.linkList[0]?.mobilePhone,
+          totalPrice: totalPrice,
+          discountTotalPrice: discountTotalPrice
+        });
+        this.$nextTick(() => {
+          this.$refs.inventoryTable &&
+            this.$refs.inventoryTable.putTableValue(info);
+        });
+        // let form = {
+        //   contractVO: {
+
+        //   },
+        //   productList: info.productList || []
+        // };
+      },
+
+      //选择报价单
+      handQuotation(e) {
+        this.$refs.quotationListRef.open();
+      },
+
+      //报价单
+      async changeQuotationList({ data, sourceCode, sourceId }) {
+        this.form = Object.assign({}, this.form, {
+          relationCode: sourceCode,
+          relationId: sourceId
+        });
+        this.getDetailData('', data);
+      },
+
       //选择合同获取合同的详情
-      async getDetailData(id) {
+      async getDetailData(id, row) {
         this.loading = true;
-        const data = await getDetail(id);
+        let data = null;
+        if (row) {
+          data = row;
+        } else {
+          data = await getDetail(id);
+        }
         this.loading = false;
         if (data) {
           await this.changeParent({ id: data.contractVO?.partaId }, true);
+          let { contractVO } = data;
           this.$nextTick(() => {
-            let { contractVO } = data;
             let {
               partaAddress,
               partaEmail,
@@ -799,42 +933,54 @@
               settlementModeName,
               pricingWay,
               contractNo,
-              contractNumber
+              contractNumber,
+              contractName
             } = contractVO;
-            this.form = Object.assign({}, this.form, {
-              partaAddress,
-              partaEmail,
-              partaFax,
-              partaId,
-              partaLinkId,
-              partaLinkName,
-              partaName,
-              partaTel,
-              partbAddress,
-              partbEmail,
-              partbFax,
-              partbId,
-              partbLinkId,
-              partbLinkName,
-              partbName,
-              partbTel,
-              pricingWay,
-              totalPrice,
-              discountTotalPrice,
-              partaUnifiedSocialCreditCode,
-              partbUnifiedSocialCreditCode,
-              totalAmount: totalPrice,
-              payAmount: discountTotalPrice || totalPrice,
-              receiveAddress: partaAddress,
-              settlementMode,
-              settlementModeName,
-              contractNo,
-              contractNumber
-            });
+            this.form = Object.assign(
+              {},
+              this.form,
+              {
+                partaAddress,
+                partaEmail,
+                partaFax,
+                partaId,
+                partaLinkId,
+                partaLinkName,
+                partaName,
+                partaTel,
+                partbAddress,
+                partbEmail,
+                partbFax,
+                partbId,
+                partbLinkId,
+                partbLinkName,
+                partbName,
+                partbTel,
+                pricingWay,
+                totalPrice,
+                discountTotalPrice,
+                partaUnifiedSocialCreditCode,
+                partbUnifiedSocialCreditCode,
+                totalAmount: totalPrice,
+                payAmount: discountTotalPrice || totalPrice,
+                receiveAddress: partaAddress,
+                settlementMode,
+                settlementModeName,
+                contractNo,
+                contractNumber
+              },
+              !row
+                ? {
+                    relationName: contractName,
+                    relationCode: contractNumber,
+                    relationId: id
+                  }
+                : {}
+            );
             data.productList = data.productList.map((item) => {
-              item['saleCount'] = item.contractCount;
-              item['saleUnit'] = item.contractUnit;
-              item['saleUnitId'] = item.contractUnitId;
+              item['saleCount'] = item.contractCount || item.saleCount;
+              item['saleUnit'] = item.contractUnit || item.saleUnit;
+              item['saleUnitId'] = item.contractUnitId || item.saleUnitId;
               return item;
             });
 
@@ -1084,12 +1230,13 @@
           return;
         }
         this.clearing = true;
-        let { id, saleType, saleTypeName, orderFiles, remark } = this.form;
+        let { id, saleType, saleTypeName, orderFiles, remark, relationType } =
+          this.form;
         this.form = Object.assign({}, copyObj(this.formDef), {
           id,
           saleType,
           saleTypeName,
-          // deliveryDate,
+          relationType,
           orderFiles,
           remark
         });
@@ -1192,7 +1339,7 @@
       },
       getEnterprise() {
         let data = this.enterprisePage.find(
-          (item) => item.name == this.form.quoteName
+          (item) => item.name == this.form.partbName
         );
         this.form.partbName = data.name;
         this.form.partbUnifiedSocialCreditCode = data.unifiedSocialCreditCode;

+ 47 - 7
src/views/saleManage/saleOrder/components/darwerComponents/saleOrderInfo.vue

@@ -6,11 +6,19 @@
           <el-form-item label="订单编号:" prop="orderNo">
             <el-input v-model="form.orderNo" disabled></el-input>
           </el-form-item>
-          <el-form-item label="合同名称:" prop="contractName">
-            <el-input v-model="form.contractName" disabled></el-input>
-          </el-form-item>
-          <el-form-item label="合同编号:" prop="contractNumber">
-            <el-input v-model="form.contractNumber" disabled></el-input>
+
+          <el-form-item label="来源类型:" prop="relationType">
+            <el-select
+              v-model="form.relationType"
+              style="width: 100%"
+              disabled
+              placeholder=" "
+            >
+              <el-option :value="1" label="商机"></el-option>
+              <el-option :value="2" label="报价"></el-option>
+              <el-option :value="3" label="销售合同"></el-option>
+              <el-option :value="4" label="项目"></el-option>
+            </el-select>
           </el-form-item>
           <el-form-item label="结算方式:" prop="settlementModeName">
             <el-input v-model="form.settlementModeName" disabled></el-input>
@@ -22,8 +30,33 @@
         </el-col>
 
         <el-col :span="8">
-          <el-form-item label="项目名称:" prop="projectName">
-            <el-input v-model="form.projectName" disabled></el-input>
+          <el-form-item
+            label="项目名称:"
+            prop="relationName"
+            v-if="form.relationType == 4"
+          >
+            <el-input v-model="form.relationName" disabled></el-input>
+          </el-form-item>
+          <el-form-item
+            label="合同名称:"
+            prop="relationName"
+            v-if="form.relationType == 3"
+          >
+            <el-input v-model="form.relationName" disabled></el-input>
+          </el-form-item>
+          <el-form-item
+            label="报价单:"
+            prop="relationCode"
+            v-if="form.relationType == 2"
+          >
+            <el-input v-model="form.relationCode" disabled></el-input>
+          </el-form-item>
+          <el-form-item
+            label="商机名称:"
+            prop="relationName"
+            v-if="form.relationType == 1"
+          >
+            <el-input v-model="form.relationName" disabled></el-input>
           </el-form-item>
           <el-form-item label="销售部门:" prop="salesDeptName">
             <el-input v-model="form.salesDeptName" disabled></el-input>
@@ -56,6 +89,13 @@
           </el-form-item>
         </el-col>
         <el-col :span="8">
+          <el-form-item
+            label="合同编号:"
+            prop="relationCode"
+            v-if="form.relationType == 3"
+          >
+            <el-input v-model="form.relationCode" disabled></el-input>
+          </el-form-item>
           <el-form-item label="总金额:" prop="totalAmount">
             <el-input v-model="form.totalAmount" disabled>
               <template slot="append"> 元 </template>

+ 49 - 7
src/views/saleManage/saleOrder/components/detailDialog.vue

@@ -34,11 +34,35 @@
             <el-form-item label="订单编号:" prop="orderNo">
               <el-input v-model="form.orderNo" disabled></el-input>
             </el-form-item>
-            <el-form-item label="合同名称:" prop="contractName">
-              <el-input v-model="form.contractName" disabled></el-input>
+            <el-form-item
+              label="报价单"
+              prop="relationCode"
+              v-if="form.relationType == 2"
+            >
+              <el-input v-model="form.relationCode" disabled placeholder=" " />
+            </el-form-item>
+
+            <el-form-item
+              label="商机名称"
+              prop="relationName"
+              v-if="form.relationType == 1"
+            >
+              <el-input v-model="form.relationName" disabled placeholder=" " />
+            </el-form-item>
+
+            <el-form-item
+              label="选择合同"
+              prop="relationName"
+              v-if="form.relationType == 3"
+            >
+              <el-input v-model="form.relationName" placeholder=" " disabled />
             </el-form-item>
-            <el-form-item label="合同编号:" prop="contractNumber">
-              <el-input v-model="form.contractNumber" disabled></el-input>
+            <el-form-item
+              label="项目名称"
+              prop="relationName"
+              v-if="form.relationType == 4"
+            >
+              <el-input disabled v-model="form.relationName" placeholder=" " />
             </el-form-item>
             <el-form-item label="结算方式:" prop="settlementModeName">
               <el-input v-model="form.settlementModeName" disabled></el-input>
@@ -60,8 +84,26 @@
           </el-col>
 
           <el-col :span="12">
-            <el-form-item label="项目名称:" prop="projectName">
-              <el-input v-model="form.projectName" disabled></el-input>
+            <el-form-item label="来源类型" prop="relationType">
+              <el-select
+                v-model="form.relationType"
+                filterable
+                clearable
+                style="width: 100%"
+                :disabled="true"
+              >
+                <el-option :value="1" label="商机"></el-option>
+                <el-option :value="2" label="报价"></el-option>
+                <el-option :value="3" label="销售合同"></el-option>
+                <el-option :value="4" label="项目"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item
+              label="合同编号"
+              prop="relationCode"
+              v-if="form.relationType == 3"
+            >
+              <el-input disabled v-model="form.contractNumber" />
             </el-form-item>
             <el-form-item label="销售部门:" prop="salesDeptName">
               <el-input v-model="form.salesDeptName" disabled></el-input>
@@ -84,7 +126,7 @@
               prop="needProduce"
               style="margin-bottom: 22px"
             >
-              <el-radio v-model="form.needProduce" :label="1" disabled 
+              <el-radio v-model="form.needProduce" :label="1" disabled
                 >有客户生产性订单</el-radio
               >
               <el-radio v-model="form.needProduce" disabled :label="0"

+ 54 - 23
src/views/saleManage/saleOrder/index.vue

@@ -89,13 +89,13 @@
               </template>
 
               <!-- 查看详情列 -->
-              <template v-slot:contractNo="{ row }">
+              <template v-slot:relationCode="{ row }">
                 <el-link
                   type="primary"
                   :underline="false"
-                  @click="opencontractDetail(row)"
+                  @click="openRelationCodeDetail(row)"
                 >
-                  {{ row.contractNo }}
+                  {{ row.relationCode }}
                 </el-link>
               </template>
               <template v-slot:orderNo="{ row }">
@@ -293,6 +293,8 @@
       apiUrl="/eom/saleorder/importFile"
     />
     <bomDialog ref="bomDialogRef" @handleSubmit="bomDialogSuccess"></bomDialog>
+    <opportunityDetail ref="opportunityDetailRef"></opportunityDetail>
+    <quotationDetail ref="quotationDetailRef"></quotationDetail>
   </div>
 </template>
 
@@ -334,7 +336,8 @@
   import importDialog from '@/components/upload/import-dialog.vue';
   import exportButton from '@/components/upload/exportButton.vue';
   import { parameterGetByCode } from '@/api/main/index.js';
-
+  import opportunityDetail from '@/views/saleManage/businessOpportunity/components/opportunityDetailDialog.vue';
+  import quotationDetail from '@/views/saleManage/quotation/components/detailDialog.vue';
   export default {
     mixins: [dictMixins, tabMixins],
     components: {
@@ -359,7 +362,9 @@
       palletManagement,
       exportButton,
       importDialog,
-      bomDialog
+      bomDialog,
+      opportunityDetail,
+      quotationDetail
     },
     //客户管理数据
     props: {
@@ -485,6 +490,7 @@
               return businessType;
             }
           },
+
           {
             prop: 'preOrderNo',
             label: '预销售订单编码',
@@ -494,7 +500,38 @@
             minWidth: 200,
             fixed: 'left'
           },
+          {
+            prop: 'relationType',
+            label: '来源类型',
+            align: 'center',
+            showOverflowTooltip: true,
+            minWidth: 150,
+            formatter: (_row, _column, cellValue) => {
+              let businessType =
+                cellValue == 1
+                  ? '商机'
+                  : cellValue == 2
+                  ? '报价'
+                  : cellValue == 3
+                  ? '销售合同'
+                  : cellValue == 4
+                  ? '项目'
+                  : '';
 
+              return businessType;
+            }
+          },
+          {
+            prop: 'relationCode',
+            label: '来源单据',
+            align: 'center',
+            slot: 'relationCode',
+            showOverflowTooltip: true,
+            minWidth: 200,
+            formatter: (_row, _column, cellValue) => {
+              return _row.relationCode;
+            }
+          },
           {
             prop: 'progress',
             label: '订单进度',
@@ -661,20 +698,6 @@
               return reviewStatus[_row.orderStatus];
             }
           },
-          {
-            prop: 'contractNo',
-            label: '来源单据',
-            align: 'center',
-            slot: 'contractNo',
-            showOverflowTooltip: true,
-            minWidth: 200,
-            formatter: (_row, _column, cellValue) => {
-              return (
-                _row.contractNo +
-                (_row.contractNumber && ',' + _row.contractNumber)
-              );
-            }
-          },
 
           {
             prop: 'createUserName',
@@ -886,12 +909,20 @@
       handleAutoGenerate(id, isAuto = false) {
         this.$refs.autogenerateDialogRef.init(id, isAuto);
       },
-      //查看合同详情
-      opencontractDetail(row) {
+      //查看来源详情
+      openRelationCodeDetail(row) {
         let data = {
-          id: row.contractId
+          id: row.relationId
         };
-        this.$refs.contractDetailRef.open(data);
+        if (row.relationType == 1) {
+          this.$refs.opportunityDetailRef.open(data);
+        }
+        if (row.relationType == 2) {
+          this.$refs.quotationDetailRef.open(data);
+        }
+        if (row.relationType == 3) {
+          this.$refs.contractDetailRef.open(data);
+        }
       },
       uploadFile() {
         this.$refs.importDialogRef.open();