Просмотр исходного кода

Merge remote-tracking branch 'origin/dev' into dev

# Conflicts:
#	src/views/purchasingManage/purchaseNeedManage/components/addDialog.vue
#	src/views/saleManage/businessOpportunity/components/addOpportunityDialog.vue
#	src/views/saleManage/contact/components/addContactDialog.vue
#	src/views/saleManage/quotation/components/addDialog.vue
#	src/views/saleManage/saleOrder/accountstatement/components/addAccountDialog.vue
#	src/views/saleManage/saleOrder/components/addDialog.vue
Z 1 год назад
Родитель
Сommit
a6a8f21fc5
37 измененных файлов с 706 добавлено и 523 удалено
  1. 43 0
      src/BIZComponents/modalTitle.vue
  2. 14 5
      src/BIZComponents/saleGeneralityInventoryTable.vue
  3. 11 1
      src/api/saleManage/contact.js
  4. 8 3
      src/components/addDoc/main.vue
  5. 1 1
      src/styles/index.scss
  6. 8 1
      src/views/contractManage/contractBook/components/addDialog.vue
  7. 8 1
      src/views/contractManage/contractBook/components/detailDialog.vue
  8. 2 2
      src/views/purchasingManage/producerManage/components/addContactDialog.vue
  9. 8 1
      src/views/purchasingManage/purchaseNeedManage/components/addDialog.vue
  10. 7 1
      src/views/purchasingManage/purchaseNeedManage/components/detailDialog.vue
  11. 12 4
      src/views/purchasingManage/purchaseNeedManage/components/inventoryTable.vue
  12. 1 1
      src/views/purchasingManage/purchaseOrder/outSourceSend/components/inventoryTable.vue
  13. 13 5
      src/views/purchasingManage/purchasePlanManage/components/inventoryTable.vue
  14. 2 2
      src/views/purchasingManage/supplierManage/components/addContactDialog.vue
  15. 8 1
      src/views/saleManage/businessOpportunity/components/addOpportunityDialog.vue
  16. 11 0
      src/views/saleManage/businessOpportunity/components/darwerComponents/opportunityInfo.vue
  17. 1 1
      src/views/saleManage/businessOpportunity/components/drawer.vue
  18. 16 8
      src/views/saleManage/businessOpportunity/components/saleGeneralityInventoryTable.vue
  19. 8 0
      src/views/saleManage/businessOpportunity/index.vue
  20. 9 3
      src/views/saleManage/contact/components/addContactDialog.vue
  21. 13 0
      src/views/saleManage/contact/components/darwerComponents/contactInfo.vue
  22. 9 5
      src/views/saleManage/contact/components/drawer.vue
  23. 7 0
      src/views/saleManage/contact/contactList.vue
  24. 345 329
      src/views/saleManage/contact/contactListAdmin.vue
  25. 2 2
      src/views/saleManage/contact/index.vue
  26. 9 1
      src/views/saleManage/quotation/components/addDialog.vue
  27. 20 2
      src/views/saleManage/quotation/components/detailDialog.vue
  28. 7 2
      src/views/saleManage/saleOrder/accountstatement/components/addAccountDialog.vue
  29. 7 2
      src/views/saleManage/saleOrder/accountstatement/components/detailDialog.vue
  30. 20 16
      src/views/saleManage/saleOrder/components/addDialog.vue
  31. 7 0
      src/views/saleManage/saleOrder/components/darwerComponents/saleOrderInfo.vue
  32. 12 4
      src/views/saleManage/saleOrder/components/inventoryTable.vue
  33. 12 4
      src/views/saleManage/saleOrder/entrustedReceive/components/inventoryTable.vue
  34. 9 55
      src/views/targetManage/salesRegulation/components/searchTable.vue
  35. 8 2
      src/views/targetManage/salesTarget/components/addOrEditDialog.vue
  36. 9 55
      src/views/targetManage/salesTarget/components/searchTable.vue
  37. 19 3
      src/views/targetManage/salesTarget/index.vue

+ 43 - 0
src/BIZComponents/modalTitle.vue

@@ -0,0 +1,43 @@
+<template>
+ <div  class="modalTitle">
+        <span>
+          {{ title }}
+        </span>
+        <i class="el-icon-full-screen" @click="fullscreen"></i>
+      </div>
+</template>
+
+<script>
+
+  export default {
+    components: {},
+    props:{
+      title:""
+    },
+    data() {
+      return {
+        
+      };
+    },
+
+    methods:{
+      fullscreen(){
+        this.$emit('setFullscreen')
+      }
+    }
+  };
+</script>
+
+<style lang="scss" scoped>
+  .modalTitle{
+  width: 100%;
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  font-size: 16px;
+  i{
+    margin-right: 15px;
+    cursor: pointer;
+  }
+}
+</style>

+ 14 - 5
src/BIZComponents/saleGeneralityInventoryTable.vue

@@ -44,7 +44,7 @@
               prop="discountTotalPrice"
               :rules="{
                 required: true,
-                message: '请输入',
+                message: '请输入优惠后总金额',
                 trigger: 'change'
               }"
             >
@@ -91,7 +91,7 @@
           :prop="'datasource.' + $index + '.customerMark'"
           :rules="{
             required: true,
-            message: '请输入',
+            message: '请输入客户代号',
             trigger: 'change'
           }"
         >
@@ -129,7 +129,7 @@
           :rules="{
             required: pageName == 'businessOpportunity' ? false : true,
             pattern: numberReg,
-            message: '请输入数',
+            message: '请输入数',
             trigger: 'blur'
           }"
         >
@@ -478,7 +478,7 @@
         <el-form-item
           :rules="{
             required: true,
-            message: '请选择日期',
+            message: '请选择'+(contractBookType == 1 ? '客户期望交期' : '交付日期'),
             trigger: 'change'
           }"
           :prop="
@@ -516,6 +516,7 @@
           style="margin-bottom: 20px"
           :rules="{
             required: true,
+            message: '请输入单重',
             pattern: numberReg,
             trigger: ['change', 'blur']
           }"
@@ -1382,7 +1383,15 @@
 
       validateForm(callback) {
         //开始表单校验
-        this.$refs.form.validate((valid) => {
+        this.$refs.form.validate((valid,obj) => {
+          if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
           callback(valid);
         });
       }

+ 11 - 1
src/api/saleManage/contact.js

@@ -227,4 +227,14 @@ export async function updateContactDynamics(data) {
     return res.data.data;
   }
   return Promise.reject(new Error(res.data.message));
-}
+}
+/**
+ * 摘要卡片
+ */
+ export async function queryContactIdCount(id) {
+  const res = await request.get(`eom/contact/queryContactIdCount/`+id);
+  if (res.data.code == 0) {
+    return res.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 8 - 3
src/components/addDoc/main.vue

@@ -16,7 +16,7 @@
       :needPage="false"
       row-key="id"
     >
-      <template v-slot:toolbar   v-if="type != 'view'">
+      <template v-slot:toolbar v-if="type != 'view'">
         <el-button type="primary" @click="fileEditOpen">本地上传</el-button>
         <el-button type="primary" @click="fileShow = true">
           关联文档库
@@ -49,7 +49,9 @@
     </ele-pro-table>
     <template v-slot:footer>
       <el-button @click="showEditFlag = false">取消</el-button>
-      <el-button type="primary" @click="addFile" v-if="type != 'view'"> 确认 </el-button>
+      <el-button type="primary" @click="addFile" v-if="type != 'view'">
+        确认
+      </el-button>
     </template>
     <fileEdit ref="fileEditRef" @done="done"></fileEdit>
     <ele-modal
@@ -161,7 +163,8 @@ export default {
   created() {},
 
   methods: {
-    open(fileId, type) { //查看详情:view 新增:add
+    open(fileId, type) {
+      //查看详情:view 新增:add
       this.showEditFlag = true;
       this.fileId = fileId || [];
       if (type) {
@@ -179,6 +182,8 @@ export default {
     async init() {
       if (this.fileId.length > 0) {
         this.tableList = await queryIds({ ids: "'" + this.fileId + "'" });
+      } else {
+        this.tableList = [];
       }
     },
     done(id) {

+ 1 - 1
src/styles/index.scss

@@ -6,7 +6,7 @@ $--ele-font-path: '~ele-admin/es/style/fonts';
 
 
 .long-dialog-form .el-dialog__body{
-    max-height: 700px;
+    max-height: calc(100vh - 129px);
     overflow-y: auto;
     padding-bottom: 30px;
 }

+ 8 - 1
src/views/contractManage/contractBook/components/addDialog.vue

@@ -8,8 +8,12 @@
     :close-on-click-modal="false"
     width="70%"
     append-to-body
+    :fullscreen="fullscreen"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-form
       ref="form"
       :model="form"
@@ -517,6 +521,7 @@
 </template>
 
 <script>
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 import { emailReg, phoneReg, numberReg } from 'ele-admin';
 import { acceptUnpackoptions } from '@/enum/dict';
 import inventoryTable from './inventoryTable.vue';
@@ -586,7 +591,7 @@ export default {
     parentList,
     inquiryList,
     quotationList,
-    fileMain
+    fileMain,modalTitle
   },
   data() {
     let formDef = {
@@ -630,6 +635,8 @@ export default {
     };
 
     return {
+      fullscreen:false,
+
       payWayOptions: [],
       delDetailIds: [],
       paymentTypeOptions: [

+ 8 - 1
src/views/contractManage/contractBook/components/detailDialog.vue

@@ -8,8 +8,12 @@
     :close-on-click-modal="false"
     :append-to-body="true"
     width="70%"
+    :fullscreen="fullscreen"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <div class="switch">
       <div class="switch_left">
         <ul>
@@ -224,16 +228,19 @@ import { copyObj } from '@/utils/util';
 import bpmDetail from '@/views/bpm/processInstance/detail.vue';
 import inventoryTabledetail from './inventoryTabledetail.vue';
 import fileMain from '@/components/addDoc/index';
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 
 export default {
   mixins: [dictMixins],
   components: {
     inventoryTabledetail,
     bpmDetail,
-    fileMain
+    fileMain,modalTitle
   },
   data() {
     return {
+      fullscreen:false,
+
       activeComp: 'main',
       tabOptions: [
         { key: 'main', name: '合同详情' },

+ 2 - 2
src/views/purchasingManage/producerManage/components/addContactDialog.vue

@@ -632,7 +632,7 @@
         :disabled="activeName == 6"
         >下一步</el-button
       >
-      <el-button type="primary" v-if="activeName == 6" @click="save"
+      <el-button type="primary" v-if="activeName == 6||title!='新建生产厂家'" @click="save"
         >保存</el-button
       >
       <el-button @click="cancel">返回</el-button>
@@ -1411,7 +1411,7 @@ export default {
             .then((id) => {
               this.loading = false;
               this.$message.success('新增成功');
-              // this.cancel();
+              this.cancel();
               this._getById(id);
               this.title = '编辑客户';
               this.$emit('done');

+ 8 - 1
src/views/purchasingManage/purchaseNeedManage/components/addDialog.vue

@@ -7,8 +7,12 @@
     :title="title"
     :close-on-click-modal="false"
     width="80%"
+    :fullscreen="fullscreen"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-form
       ref="form"
       :model="form"
@@ -195,7 +199,9 @@ import contractListDialog from '@/views/saleManage/saleOrder/components/contract
 import orderListDialog from '@/views/saleManage/saleOrder/invoice/components/orderListDialog.vue';
 import { getTableList as getSaleOrderListAPI } from '@/api/saleManage/saleorder';
 import fileMain from '@/components/addDoc/index';
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
+
 export default {
   props: {
     categoryTreeList: Array
@@ -211,7 +217,7 @@ export default {
     deptSelect,
     parentList,
     personSelect,
-    fileMain
+    fileMain,modalTitle
   },
   data() {
     let formDef = {
@@ -240,6 +246,7 @@ export default {
       clearing: false, //是否清除合同
       visible: false,
       processSubmitDialogFlag: false,
+      fullscreen:false,
       title: '',
       delDetailIds: [],
       formDef,

+ 7 - 1
src/views/purchasingManage/purchaseNeedManage/components/detailDialog.vue

@@ -8,8 +8,12 @@
     :close-on-click-modal="false"
     width="80%"
     @close="cancel"
+    :fullscreen="fullscreen"
     :modal="isModal"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <div class="switch">
       <div class="switch_left">
         <ul>
@@ -188,6 +192,7 @@ import {copyObj} from '@/utils/util';
 import bpmDetail from '@/views/bpm/processInstance/detail.vue';
 import timeDialog from '@/components/timeDialog/index.vue';
 import fileMain from '@/components/addDoc/index';
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 
 export default {
   mixins: [dictMixins],
@@ -197,10 +202,11 @@ export default {
     }
   },
   components: {
-    bpmDetail, timeDialog,fileMain
+    bpmDetail, timeDialog,fileMain,modalTitle
   },
   data() {
     return {
+      fullscreen:false,
       activeComp: 'main',
       tabOptions: [
         {key: 'main', name: '需求详情'},

+ 12 - 4
src/views/purchasingManage/purchaseNeedManage/components/inventoryTable.vue

@@ -85,7 +85,7 @@
           :rules="{
             required: true,
             pattern: numberReg,
-            message: '请输入数',
+            message: '请输入数',
             trigger: 'blur'
           }"
         >
@@ -236,7 +236,7 @@
           :prop="'datasource.' + scope.$index + '.expectReceiveDate'"
           :rules="{
             required: true,
-            message: '请选择日期',
+            message: '请选择到货日期',
             trigger: 'blur'
           }"
         >
@@ -268,7 +268,7 @@
           :prop="'datasource.' + scope.$index + '.arrivalWay'"
           :rules="{
             required: true,
-            message: '请选择',
+            message: '请选择到货方式',
             trigger: 'blur'
           }"
         >
@@ -703,7 +703,15 @@ export default {
 
     validateForm(callback) {
       //开始表单校验
-      this.$refs.form.validate((valid) => {
+      this.$refs.form.validate((valid,obj) => {
+        if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
         callback(valid);
       });
     }

+ 1 - 1
src/views/purchasingManage/purchaseOrder/outSourceSend/components/inventoryTable.vue

@@ -121,7 +121,7 @@
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.totalCount'"
           :rules="[
-            { required: true, message: '请输入数字', trigger: 'blur' },
+            { required: true, message: '请输入发货数量', trigger: 'blur' },
 
           ]"
         >

+ 13 - 5
src/views/purchasingManage/purchasePlanManage/components/inventoryTable.vue

@@ -83,7 +83,7 @@
           :rules="{
             required: true,
             pattern: numberReg,
-            message: '请输入数',
+            message: '请输入数',
             trigger: 'blur'
           }"
         >
@@ -232,7 +232,7 @@
           :prop="'datasource.' + scope.$index + '.expectReceiveDate'"
           :rules="{
             required: true,
-            message: '请选择日期',
+            message: '请选择到货日期',
             trigger: 'blur'
           }"
         >
@@ -264,7 +264,7 @@
           :prop="'datasource.' + scope.$index + '.arrivalWay'"
           :rules="{
             required: true,
-            message: '请选择',
+            message: '请选择到货方式',
             trigger: 'blur'
           }"
         >
@@ -291,7 +291,7 @@
           :prop="'datasource.' + scope.$index + '.supplierName'"
           :rules="{
             required: isNeedInquiry===0,
-            message: '请选择',
+            message: '请选择供应商',
             trigger: 'change'
           }"
         >
@@ -774,7 +774,15 @@ export default {
 
     validateForm(callback) {
       //开始表单校验
-      this.$refs.form.validate((valid) => {
+      this.$refs.form.validate((valid,obj) => {
+        if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
         callback(valid);
       });
     }

+ 2 - 2
src/views/purchasingManage/supplierManage/components/addContactDialog.vue

@@ -408,7 +408,7 @@
         :disabled="activeName == 6"
         >下一步</el-button
       >
-      <el-button type="primary" v-if="activeName == 6" @click="save"
+      <el-button type="primary" v-if="activeName == 6||title!='新建供应商'" @click="save"
         >保存</el-button
       >
       <el-button @click="cancel">返回</el-button>
@@ -1211,7 +1211,7 @@ export default {
             .then((id) => {
               this.loading = false;
               this.$message.success("新增成功");
-              // this.cancel();
+              this.cancel();
               this._getById(id)
               this.title = '编辑客户'
               this.$emit('done');

+ 8 - 1
src/views/saleManage/businessOpportunity/components/addOpportunityDialog.vue

@@ -9,7 +9,12 @@
     :append-to-body="true"
     width="70%"
     @close="cancel"
+    :fullscreen="fullscreen"
+
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <headerTitle title="基本信息"></headerTitle>
     <el-form
       label-width="120px"
@@ -194,6 +199,7 @@ import { copyObj } from '@/utils/util';
 import inventoryTable from './saleGeneralityInventoryTable.vue';
 import fileUpload from '@/components/upload/fileUpload';
 import fileMain from "@/components/addDoc/index.vue";
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
 
 export default {
@@ -213,7 +219,7 @@ export default {
     headList,
     parentList,
     personSelect,
-    inventoryTable
+    inventoryTable,modalTitle
   },
   data() {
     let formDef = {
@@ -238,6 +244,7 @@ export default {
     };
 
     return {
+      fullscreen:false,
       delDetailIds: [],
       PersonnelDetailIds: [],
       visible: false,

+ 11 - 0
src/views/saleManage/businessOpportunity/components/darwerComponents/opportunityInfo.vue

@@ -65,6 +65,17 @@
           <el-input type="textarea" v-model="form.remark" disabled> </el-input>
         </el-form-item>
       </el-col>
+      <el-col :span="24">
+        <el-form-item label="创建人:" prop="createUsername">
+          <el-input v-model="form.createUsername" disabled></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="24">
+        <el-form-item label="创建时间:" prop="createTime">
+          <el-input v-model="form.createTime" disabled></el-input>
+        </el-form-item>
+      </el-col>
+     
     </el-row>
   </el-form>
 </template>

+ 1 - 1
src/views/saleManage/businessOpportunity/components/drawer.vue

@@ -3,7 +3,7 @@
     :visible.sync="drawer"
     direction="rtl"
     :append-to-body="true"
-    size="90%"
+    size="100%"
   >
     <div slot="title" class="title">
       <span style="margin: 0" class="name">商机名称:{{ row.name }}</span>

+ 16 - 8
src/views/saleManage/businessOpportunity/components/saleGeneralityInventoryTable.vue

@@ -53,7 +53,7 @@
               prop="discountTotalPrice"
               :rules="{
                 required: true,
-                message: '请输入',
+                message: '请输入优惠后总金额',
                 trigger: 'change'
               }"
             >
@@ -100,7 +100,7 @@
           :prop="'datasource.' + $index + '.customerMark'"
           :rules="{
             required: true,
-            message: '请输入',
+            message: '请输入客户代号',
             trigger: 'change'
           }"
         >
@@ -138,7 +138,7 @@
           :rules="{
             required: pageName == 'businessOpportunity' ? false : true,
             pattern: numberReg,
-            message: '请输入数',
+            message: '请输入数',
             trigger: 'blur'
           }"
         >
@@ -198,7 +198,7 @@
           <el-input v-model="scope.row.specification" disabled></el-input>
         </el-form-item>
       </template>
-      <template v-slot:deliveryDays="scope">
+      <!-- <template v-slot:deliveryDays="scope">
         <el-form-item
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.deliveryDays'"
@@ -215,7 +215,7 @@
             placeholder="请输入"
           ></el-input>
         </el-form-item>
-      </template>
+      </template> -->
       <template v-slot:guaranteePeriod="scope">
         <div class="period">
           <div class="borderleftnone">
@@ -225,7 +225,7 @@
               :rules="{
                 required:true,
                 pattern: numberReg,
-                message: '请输入数字',
+                message: '请输入质保期',
                 trigger: 'blur'
               }"
             >
@@ -476,7 +476,7 @@
         <el-form-item
           :rules="{
             required: true,
-            message: '请选择日期',
+            message: '请选择'+(contractBookType == 1 ? '客户期望交期' : '交付日期'),
             trigger: 'change'
           }"
           :prop="
@@ -1337,7 +1337,15 @@
 
       validateForm(callback) {
         //开始表单校验
-        this.$refs.form.validate((valid) => {
+        this.$refs.form.validate((valid,obj) => {
+          if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
           callback(valid);
         });
       },

+ 8 - 0
src/views/saleManage/businessOpportunity/index.vue

@@ -269,6 +269,14 @@
               return _row.expectedClosingDate?.substr(0, 10) || '';
             }
           },
+          // {
+          //   prop: 'expectedClosingDate',
+          //   label: '有效期',
+          //   align: 'center',
+          //   showOverflowTooltip: true,
+          //   minWidth: 140,
+           
+          // },
           {
             prop: 'remark',
             label: '备注',

+ 9 - 3
src/views/saleManage/contact/components/addContactDialog.vue

@@ -8,8 +8,12 @@
     :close-on-click-modal="false"
     :append-to-body="true"
     width="70%"
+    :fullscreen="fullscreen"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-tabs v-model="activeName" type="card" @tab-click="handleActive">
       <el-tab-pane label="基本信息" :name="1">
         <headerTitle title="基本信息" style="margin-top: 30px"></headerTitle>
@@ -646,7 +650,7 @@
         :disabled="activeName == 5"
         >下一步</el-button
       >
-      <el-button type="primary" v-if="activeName == 5" @click="save"
+      <el-button type="primary" v-if="activeName == 5||title!='新建客户'" @click="save"
         >保存</el-button
       >
 
@@ -700,6 +704,7 @@ import { deepClone } from '@/utils';
 import searchTable from '@/views/saleManage/saleOrder/components/searchTable.vue';
 import { getTableList } from '@/api/saleManage/saleorder';
 import fileMain from "@/components/addDoc/index.vue";
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
 
 export default {
@@ -715,7 +720,7 @@ export default {
     fileUpload,
     deptSelect,
     personSelect,
-    parentList
+    parentList,modalTitle
   },
   data() {
     let formDef = {
@@ -763,6 +768,7 @@ export default {
       senderPhone: ''
     };
     return {
+      fullscreen:false,
       visible: false,
       certificateQualificationsDialogFlag: false,
       processSubmitDialogFlag: false,
@@ -1321,7 +1327,7 @@ export default {
             .then((id) => {
               this.loading = false;
               this.$message.success('新增成功');
-              // this.cancel();
+              this.cancel();
               this._getById(id);
               this.title = '编辑客户';
               this.$emit('done');

+ 13 - 0
src/views/saleManage/contact/components/darwerComponents/contactInfo.vue

@@ -159,6 +159,19 @@
         </el-form-item>
       </el-col>
     </el-row>
+    <el-row>
+      <el-col :span="8">
+        <el-form-item label="创建人:" prop="createUsername">
+          <el-input v-model="form.createUsername" disabled></el-input>
+        </el-form-item>
+      </el-col>
+      <el-col :span="8">
+        <el-form-item label="创建时间:" prop="createTime">
+          <el-input v-model="form.createTime" disabled></el-input>
+        </el-form-item>
+      </el-col>
+     
+    </el-row>
   </el-form>
 </template>
 

+ 9 - 5
src/views/saleManage/contact/components/drawer.vue

@@ -3,7 +3,7 @@
     :visible.sync="drawer"
     direction="rtl"
     :append-to-body="true"
-    size="90%"
+    size="100%"
   >
     <div slot="title" class="title">
       <span style="margin: 0" class="name">客户名称:{{ row.base.name }}</span>
@@ -28,7 +28,7 @@
         </div>
         <el-tabs
           v-model="activeName"
-          type="border-card"
+        
           style="height: calc(100% - 124px)"
         >
           <el-tab-pane label="详细信息" name="详细信息">
@@ -151,7 +151,7 @@
 </template>
 
 <script>
-import { contactDetail, updateContactDynamics } from '@/api/saleManage/contact';
+import { contactDetail, updateContactDynamics,queryContactIdCount } from '@/api/saleManage/contact';
 import dictMixins from '@/mixins/dictMixins';
 import contactInfo from './darwerComponents/contactInfo.vue';
 
@@ -218,7 +218,9 @@ export default {
       row: {},
       content: '',
       commitCommentVisible: false,
-      inputComment: ''
+      inputComment: '',
+      contactCountData:{},
+      pageName:'myList'
     };
   },
   created() {
@@ -228,8 +230,10 @@ export default {
     ...mapGetters(['user'])
   },
   methods: {
-    async open(row) {
+    async open(row,pageName) {
       this.row = await contactDetail(row.id);
+      this.pageName=pageName
+      // this.contactCountData=await queryContactIdCount(row.id)
       this.drawer = true;
       this.$nextTick(() => {
         this.$refs.contactInfoRef.init(this.row.base);

+ 7 - 0
src/views/saleManage/contact/contactList.vue

@@ -241,6 +241,13 @@
             showOverflowTooltip: true,
             minWidth: 120
           },
+          {
+          prop: 'salesmanName',
+          label: '销售员',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
           {
             prop: 'status',
             label: '状态',

+ 345 - 329
src/views/saleManage/contact/contactListAdmin.vue

@@ -7,11 +7,14 @@
     :right-style="{ overflow: 'hidden' }"
   >
     <div>
-      <div class="ele-border-lighter sys-organization-list" style="margin-left: 10px">
+      <div
+        class="ele-border-lighter sys-organization-list"
+        style="margin-left: 10px"
+      >
         <AssetTree
           @handleNodeClick="handleNodeClick"
           :defaultExpandedKeys="defaultExpandedKeys"
-          :defaultExpandAll = false
+          :defaultExpandAll="false"
           id="17"
           :isFirstRefreshTable="false"
           ref="treeList"
@@ -20,7 +23,11 @@
     </div>
 
     <template v-slot:content>
-      <div class="ele-border-lighter form-content" v-loading="loading" style="margin-right: 10px">
+      <div
+        class="ele-border-lighter form-content"
+        v-loading="loading"
+        style="margin-right: 10px"
+      >
         <contact-search @search="reload"> </contact-search>
 
         <!-- 数据表格 -->
@@ -90,12 +97,15 @@
               :underline="false"
               icon="el-icon-edit"
               @click="openEdit('编辑客户', row)"
+              v-if="row.assignStatus !== 1"
             >
               修改
             </el-link>
             <el-link
               type="primary"
-              v-if="row.assignStatus === 0&&$hasPermission('eom:contact:assign')"
+              v-if="
+                row.assignStatus === 0 && $hasPermission('eom:contact:assign')
+              "
               :underline="false"
               @click="assign('', row)"
             >
@@ -110,7 +120,7 @@
               释放
             </el-link>
             <el-link
-              v-if="row.status === 2"
+              v-if="row.status === 2 && row.assignStatus !== 1"
               type="primary"
               :underline="false"
               icon="el-icon-check"
@@ -119,7 +129,7 @@
               启用
             </el-link>
             <el-link
-              v-if="row.status === 1"
+              v-if="row.status === 1 && row.assignStatus !== 1"
               type="primary"
               :underline="false"
               icon="el-icon-close"
@@ -131,6 +141,7 @@
             <el-popconfirm
               class="ele-action"
               title="确定要删除此客户信息吗?"
+              v-if="row.assignStatus !== 1"
               @confirm="remove(row)"
             >
               <template v-slot:reference>
@@ -158,7 +169,6 @@
       @done="commitBtn"
     />
     <drawer ref="drawerRef"></drawer>
-
   </ele-split-layout>
   <!-- </el-card> -->
 
@@ -166,345 +176,351 @@
 </template>
 
 <script>
-  import ContactSearch from './components/contactSearch.vue';
-  import AddContactDialog from './components/addContactDialog.vue';
-  import assignDialog from './components/assignDialog.vue';
-  import ContactDetailDialog from './components/contactDetailDialog.vue';
-  import popModal from '@/components/pop-modal';
-  import AssetTree from '@/components/AssetTree';
-  import {
-    contactDelete,
-    contactPage,
-    contactTypeTree,
-    updateStatus,
-    free
-  } from '@/api/saleManage/contact';
-  import dictMixins from '@/mixins/dictMixins';
-  import drawer from './components/drawer.vue';
+import ContactSearch from './components/contactSearch.vue';
+import AddContactDialog from './components/addContactDialog.vue';
+import assignDialog from './components/assignDialog.vue';
+import ContactDetailDialog from './components/contactDetailDialog.vue';
+import popModal from '@/components/pop-modal';
+import AssetTree from '@/components/AssetTree';
+import {
+  contactDelete,
+  contactPage,
+  contactTypeTree,
+  updateStatus,
+  free
+} from '@/api/saleManage/contact';
+import dictMixins from '@/mixins/dictMixins';
+import drawer from './components/drawer.vue';
+import { mapGetters } from 'vuex';
 
-  export default {
-    mixins: [dictMixins],
-    components: {
-      AssetTree,
-      ContactSearch,
-      popModal,
-      AddContactDialog,
-      ContactDetailDialog,
-      assignDialog,drawer
-    },
-    data() {
-      return {
-        selection: [],
-        defaultExpandedKeys:[],
-        delVisible: false,
-        // 加载状态
-        loading: false,
-        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: 140
-          },
-          {
-            prop: 'name',
-            label: '客户名称',
-            align: 'center',
-            slot: 'name',
-            showOverflowTooltip: true,
-            minWidth: 200
-          },
-          {
-            prop: 'serialNo',
-            label: '客户代号',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 140
-          },
-          {
-            prop: 'phone',
-            label: '客户电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
-          {
-            prop: 'addressName',
-            label: '单位地址',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120,
-            formatter: (_row, _column, cellValue) => {
-              let addr =
-                '' + _row.addressName
-                  ? _row.addressName.replaceAll(',', '')
-                  : '';
-              addr += _row.address ? _row.address : '';
-              return addr;
-            }
-          },
-          {
-            prop: 'linkName',
-            label: '联系人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
-          {
-            prop: 'linkPhone',
-            label: '联系人电话',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
+export default {
+  mixins: [dictMixins],
+  components: {
+    AssetTree,
+    ContactSearch,
+    popModal,
+    AddContactDialog,
+    ContactDetailDialog,
+    assignDialog,
+    drawer
+  },
+  data() {
+    return {
+      selection: [],
+      defaultExpandedKeys: [],
+      delVisible: false,
+      // 加载状态
+      loading: false,
+      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: 140
+        },
+        {
+          prop: 'name',
+          label: '客户名称',
+          align: 'center',
+          slot: 'name',
+          showOverflowTooltip: true,
+          minWidth: 200
+        },
+        {
+          prop: 'serialNo',
+          label: '客户代号',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 140
+        },
+        {
+          prop: 'phone',
+          label: '客户电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'addressName',
+          label: '单位地址',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120,
+          formatter: (_row, _column, cellValue) => {
+            let addr =
+              '' + _row.addressName ? _row.addressName.replaceAll(',', '') : '';
+            addr += _row.address ? _row.address : '';
+            return addr;
+          }
+        },
+        {
+          prop: 'linkName',
+          label: '联系人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'linkPhone',
+          label: '联系人电话',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
 
-          {
-            prop: 'parentName',
-            label: '上级单位',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
-          {
-            prop: 'salesmanName',
-            label: '销售员',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 120
-          },
-          {
-            prop: 'assignStatus',
-            label: '是否指派',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return _row.assignStatus === 1 ? '是' : '否';
-            }
-          },
+        {
+          prop: 'parentName',
+          label: '上级单位',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'salesmanName',
+          label: '销售员',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 120
+        },
+        {
+          prop: 'assignStatus',
+          label: '是否指派',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return _row.assignStatus === 1 ? '是' : '否';
+          }
+        },
 
-          {
-            prop: 'status',
-            label: '状态',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100,
-            formatter: (_row, _column, cellValue) => {
-              return _row.status === 1 ? '启用' : '禁用';
-            }
-          },
-          {
-            prop: 'createUsername',
-            label: '创建人',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 100
-          },
-          {
-            prop: 'createTime',
-            label: '创建时间',
-            align: 'center',
-            showOverflowTooltip: true,
-            minWidth: 160,
-            formatter: (_row, _column, cellValue) => {
-              return this.$util.toDateString(cellValue);
-            }
-          },
-          {
-            columnKey: 'action',
-            label: '操作',
-            width: 280,
-            align: 'center',
-            resizable: false,
-            slot: 'action',
-            showOverflowTooltip: true,
-            fixed: 'right'
+        {
+          prop: 'status',
+          label: '状态',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          formatter: (_row, _column, cellValue) => {
+            return _row.status === 1 ? '启用' : '禁用';
           }
-        ],
-        current: {},
-        curNodeData: {},
-        treeList: [],
-        treeLoading: false,
-        formData: {},
-        rootTreeId: null,
-        defaultProps: {
-          children: 'children',
-          label: 'name'
         },
-        showEdit: true
-      };
-    },
-    computed: {},
-    created() {
-      this.requestDict('客户状态');
-      this.getTreeData();
-    },
-    methods: {
-      /* 表格数据源 */
-      datasource({ page, limit, where, order }) {
-        return contactPage({
-          pageNum: page,
-          size: limit,
-          type: 1,
-          ...where
-        });
-      },
-      async getTreeData() {
-        try {
-          this.treeLoading = true;
-          const res = await contactTypeTree({ type: 17 });
-          this.treeLoading = false;
-          if (res?.code === '0') {
-            this.treeList = res.data;
-            this.$nextTick(() => {
-              this.defaultExpandedKeys = this.treeList?.map(item=>item.id) ||[17]
-              // 默认高亮第一级树节点
-              // if (this.treeList[0]) {
-              //   this.rootTreeId = this.treeList[0].id;
-              //   this.getDetail(this.treeList[0].id);
-              // }
-            });
-            return this.treeList;
+        {
+          prop: 'createUsername',
+          label: '创建人',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100
+        },
+        {
+          prop: 'createTime',
+          label: '创建时间',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 160,
+          formatter: (_row, _column, cellValue) => {
+            return this.$util.toDateString(cellValue);
           }
-        } catch (error) {}
-        this.treeLoading = false;
-      },
-      handleNodeClick(data, node) {
-        this.curNodeData = data;
-        this.reload({ categoryId: data.id });
-      },
-      /* 刷新表格 */
-      reload(where) {
-        this.$refs.table.reload({ page: 1, where });
-      },
-      openEdit(row, type) {
-        this.current = row;
-        this.showEdit = true;
-        this.$refs.addContactDialogRef.open(row, type, this.curNodeData.id);
-        this.$refs.addContactDialogRef.$refs.form &&
-          this.$refs.addContactDialogRef.$refs.form.clearValidate();
-      },
-      //批量删除
-      allDelBtn() {
-        if (this.selection.length === 0) return;
-        this.delVisible = true;
+        },
+        {
+          columnKey: 'action',
+          label: '操作',
+          width: 280,
+          align: 'center',
+          resizable: false,
+          slot: 'action',
+          showOverflowTooltip: true,
+          fixed: 'right'
+        }
+      ],
+      current: {},
+      curNodeData: {},
+      treeList: [],
+      treeLoading: false,
+      formData: {},
+      rootTreeId: null,
+      defaultProps: {
+        children: 'children',
+        label: 'name'
       },
-      commitBtn() {
-        const dataId = this.selection.map((v) => v.id);
-        contactDelete(dataId).then((res) => {
-          this.$message.success('删除成功!');
+      showEdit: true
+    };
+  },
+
+  computed: {
+    ...mapGetters(['user'])
+  },
+  created() {
+    this.requestDict('客户状态');
+    this.getTreeData();
+  },
+  methods: {
+    /* 表格数据源 */
+    datasource({ page, limit, where, order }) {
+      return contactPage({
+        pageNum: page,
+        size: limit,
+        type: 1,
+        ...where
+      });
+    },
+    async getTreeData() {
+      try {
+        this.treeLoading = true;
+        const res = await contactTypeTree({ type: 17 });
+        this.treeLoading = false;
+        if (res?.code === '0') {
+          this.treeList = res.data;
+          this.$nextTick(() => {
+            this.defaultExpandedKeys = this.treeList?.map(
+              (item) => item.id
+            ) || [17];
+            // 默认高亮第一级树节点
+            // if (this.treeList[0]) {
+            //   this.rootTreeId = this.treeList[0].id;
+            //   this.getDetail(this.treeList[0].id);
+            // }
+          });
+          return this.treeList;
+        }
+      } catch (error) {}
+      this.treeLoading = false;
+    },
+    handleNodeClick(data, node) {
+      this.curNodeData = data;
+      this.reload({ categoryId: data.id });
+    },
+    /* 刷新表格 */
+    reload(where) {
+      this.$refs.table.reload({ page: 1, where });
+    },
+    openEdit(type,row) {
+      // console.log(row,'user')
+      // this.user.info.id
+      this.current = row;
+      this.showEdit = true;
+      this.$refs.addContactDialogRef.open( type,row, this.curNodeData.id);
+      this.$refs.addContactDialogRef.$refs.form &&
+        this.$refs.addContactDialogRef.$refs.form.clearValidate();
+    },
+    //批量删除
+    allDelBtn() {
+      if (this.selection.length === 0) return;
+      this.delVisible = true;
+    },
+    commitBtn() {
+      const dataId = this.selection.map((v) => v.id);
+      contactDelete(dataId).then((res) => {
+        this.$message.success('删除成功!');
+        this.reload();
+      });
+    },
+    remove(row) {
+      contactDelete([row.id]).then((res) => {
+        this.$message.success('删除成功!');
+        this.reload();
+      });
+    },
+    /** 启用客户 */
+    enableOption(row) {
+      updateStatus(row.id, 1)
+        .then((msg) => {
+          this.$message.success('客户启用成功');
           this.reload();
+        })
+        .catch((e) => {
+          this.$message.error(e.message);
         });
-      },
-      remove(row) {
-        contactDelete([row.id]).then((res) => {
-          this.$message.success('删除成功!');
+    },
+    /** 禁用客户 */
+    disableOption(row) {
+      updateStatus(row.id, 2)
+        .then((msg) => {
+          this.$message.success('客户禁用成功');
           this.reload();
+        })
+        .catch((e) => {
+          this.$message.error(e.message);
         });
-      },
-      /** 启用客户 */
-      enableOption(row) {
-        updateStatus(row.id, 1)
-          .then((msg) => {
-            this.$message.success('客户启用成功');
-            this.reload();
-          })
-          .catch((e) => {
-            this.$message.error(e.message);
-          });
-      },
-      /** 禁用客户 */
-      disableOption(row) {
-        updateStatus(row.id, 2)
-          .then((msg) => {
-            this.$message.success('客户禁用成功');
-            this.reload();
-          })
-          .catch((e) => {
-            this.$message.error(e.message);
-          });
-      },
-      //指派
-      assign(type, row) {
-        let contactIds = [];
-        let contactNames = [];
-        let isAssign = false;
-        if (type == 'all') {
-          contactIds = this.selection.map((item) => item.id);
-          contactNames = this.selection.map((item) => item.name);
-          this.selection.forEach((item) => {
-            if (item.assignStatus === 1) {
-              isAssign = true;
-            }
-          });
-        } else {
-          contactIds = [row.id];
-          contactNames = [row.name];
-        }
-        if (isAssign) {
-          this.$message.warning('请先释放已指派的客户!');
-          return;
-        }
-        this.$refs.assignDialogRef.open(contactIds, contactNames);
-      },
-      //释放
-      setFree(type, row) {
-        let contactIds = [];
-        let contactNames = [];
-        if (type == 'all') {
-          contactIds = this.selection.map((item) => item.id).toString();
-          contactNames = this.selection.map((item) => item.name).toString();
-        } else {
-          contactIds = row.id;
-          contactNames = row.name;
-        }
-        free({ contactIds, contactNames }).then((res) => {
-          this.$message.success('释放成功');
-          this.reload();
+    },
+    //指派
+    assign(type, row) {
+      let contactIds = [];
+      let contactNames = [];
+      let isAssign = false;
+      if (type == 'all') {
+        contactIds = this.selection.map((item) => item.id);
+        contactNames = this.selection.map((item) => item.name);
+        this.selection.forEach((item) => {
+          if (item.assignStatus === 1) {
+            isAssign = true;
+          }
         });
-      },
-
-      openDetail(row) {
-        // this.$refs.contactDetailDialogRef.open(row);
-      this.$refs.drawerRef.open(row);
-
+      } else {
+        contactIds = [row.id];
+        contactNames = [row.name];
+      }
+      if (isAssign) {
+        this.$message.warning('请先释放已指派的客户!');
+        return;
       }
+      this.$refs.assignDialogRef.open(contactIds, contactNames);
+    },
+    //释放
+    setFree(type, row) {
+      let contactIds = [];
+      let contactNames = [];
+      if (type == 'all') {
+        contactIds = this.selection.map((item) => item.id).toString();
+        contactNames = this.selection.map((item) => item.name).toString();
+      } else {
+        contactIds = row.id;
+        contactNames = row.name;
+      }
+      free({ contactIds, contactNames }).then((res) => {
+        this.$message.success('释放成功');
+        this.reload();
+      });
+    },
+
+    openDetail(row) {
+      // this.$refs.contactDetailDialogRef.open(row);
+      this.$refs.drawerRef.open(row,'allList');
     }
-  };
+  }
+};
 </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 :deep(.el-tree-node__content) {
-    height: 40px;
-    & > .el-tree-node__expand-icon {
-      margin-left: 10px;
-    }
+.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;
+  & > .el-tree-node__expand-icon {
+    margin-left: 10px;
   }
+}
 </style>

+ 2 - 2
src/views/saleManage/contact/index.vue

@@ -210,7 +210,7 @@ export default {
       activeComp: 'myContact',
       tabOptions: [
         { key: 'myContact', name: '我的客户' },
-        { key: 'contactList', name: '客户列表' }
+        { key: 'contactList', name: '公海客户' }
       ],
       selection: [],
       defaultExpandedKeys: [],
@@ -455,7 +455,7 @@ export default {
     openDetail(row) {
       // this.$refs.contactDetailDialogRef.open(row);
       
-      this.$refs.drawerRef.open(row);
+      this.$refs.drawerRef.open(row,'myList');
     }
   }
 };

+ 9 - 1
src/views/saleManage/quotation/components/addDialog.vue

@@ -8,8 +8,13 @@
     :close-on-click-modal="false"
     :append-to-body="true"
     width="70%"
+    :fullscreen="fullscreen"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
+
     <el-form
       ref="form"
       :model="form"
@@ -293,6 +298,7 @@ import { copyObj } from '@/utils/util';
 import { contactDetail } from '@/api/saleManage/contact';
 import fileMain from "@/components/addDoc/index.vue";
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 
 export default {
   props: {
@@ -317,7 +323,7 @@ export default {
     inventoryTable,
     deptSelect,
     parentList,
-    personSelect
+    personSelect,modalTitle
   },
   data() {
     let formDef = {
@@ -349,6 +355,8 @@ export default {
     };
 
     return {
+      fullscreen:false,
+
       opportunityTypeList: [
         { label: '有', value: 1 },
         { label: '无', value: 0 }

+ 20 - 2
src/views/saleManage/quotation/components/detailDialog.vue

@@ -7,9 +7,13 @@
     :title="title"
     :append-to-body="true"
     :close-on-click-modal="false"
+    :fullscreen="fullscreen"
     width="70%"
     @close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <div class="switch">
       <div class="switch_left">
         <ul>
@@ -75,7 +79,11 @@
               prop="contactAddress">
               <el-input v-model="form.contactAddress" disabled></el-input>
             </el-form-item>
-
+            <el-form-item
+              label="创建人"
+              prop="createUsername">
+              <el-input v-model="form.createUsername" disabled></el-input>
+            </el-form-item>
           </el-col>
           <el-col :span="12">
             <el-form-item
@@ -117,6 +125,12 @@
                 {{ form.askFile.name }}</el-link
               >
             </el-form-item>
+           
+            <el-form-item
+              label="创建时间"
+              prop="createTime">
+              <el-input v-model="form.createTime" disabled></el-input>
+            </el-form-item>
           </el-col>
         </el-row>
         <headerTitle title="报价单产品清单"></headerTitle>
@@ -187,14 +201,18 @@
   import bpmDetail from '@/views/bpm/processInstance/detail.vue';
   import inventoryTabledetail from '@/views/contractManage/contractBook/components/inventoryTabledetail.vue';
   import {acceptUnpackoptions} from '@/enum/dict';
+  import modalTitle from '@/BIZComponents/modalTitle.vue';
+
   export default {
     mixins: [dictMixins],
     components: {
       bpmDetail,
-      inventoryTabledetail
+      inventoryTabledetail,modalTitle
     },
     data() {
       return {
+      fullscreen:false,
+
         activeComp: 'main',
         tabOptions: [
           { key: 'main', name: '报价详情' },

+ 7 - 2
src/views/saleManage/saleOrder/accountstatement/components/addAccountDialog.vue

@@ -6,9 +6,13 @@
     :title="title"
     :append-to-body="true"
     :close-on-click-modal="false"
+    :fullscreen="fullscreen"
     width="85%"
     :before-close="cancel"
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <!--销售表单-->
     <sale-form
       @handleSearch="handleSearch"
@@ -69,13 +73,13 @@ import {
   updateAccountStatementAPI
 } from '@/api/saleManage/accountstatement';
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
-
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 export default {
   name: 'addAccountDialog',
   components: {
     processSubmitDialog,
     InventoryTable,
-    saleForm
+    saleForm,modalTitle
   },
   //客户管理数据
   props: {
@@ -98,6 +102,7 @@ export default {
   },
   data() {
     return {
+      fullscreen:false,
       datasource: [],
       dataForm: {
         sourceType: 1,

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

@@ -6,10 +6,13 @@
     :title="title"
     :append-to-body="true"
     :close-on-click-modal="false"
+    :fullscreen="fullscreen"
     width="70%"
     :before-close="cancel"
   >
-
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-card shadow="never">
       <div class="switch">
         <div class="switch_left">
@@ -63,13 +66,14 @@ import bpmDetail from '@/views/bpm/processInstance/detail.vue';
 import InventoryTable from "@/views/saleManage/saleOrder/accountstatement/components/inventoryTable.vue";
 import saleForm from "@/views/saleManage/saleOrder/accountstatement/components/saleForm.vue";
 import {infoAccountStatementAPI} from "@/api/saleManage/accountstatement";
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 
 export default {
   props: ['detailDialogFlag'],
   components: {
     saleForm,
     InventoryTable,
-    bpmDetail
+    bpmDetail,modalTitle
   },
   data() {
     return {
@@ -78,6 +82,7 @@ export default {
         {key: 'main', name: '对账单详情'},
         {key: 'bpm', name: '流程详情'}
       ],
+      fullscreen:false,
 
       visible: false,
       form: {},

+ 20 - 16
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -4,12 +4,15 @@
     :centered="true"
     v-if="visible"
     :visible.sync="visible"
-    :title="title"
     :close-on-click-modal="false"
     :append-to-body="true"
     width="70%"
     @close="cancel"
+    :fullscreen="fullscreen"
   >
+    <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-form
       ref="form"
       :model="form"
@@ -62,13 +65,13 @@
             >
           </el-form-item>
           <el-form-item prop="orderFiles" label="订单附件">
-            <fileMain v-model="form.orderFiles" ></fileMain>
-<!--            <fileUpload-->
-<!--              v-model="form.orderFiles"-->
-<!--              module="main"-->
-<!--              :showLib="false"-->
-<!--              :limit="10"-->
-<!--            />-->
+            <fileMain v-model="form.orderFiles"></fileMain>
+            <!--            <fileUpload-->
+            <!--              v-model="form.orderFiles"-->
+            <!--              module="main"-->
+            <!--              :showLib="false"-->
+            <!--              :limit="10"-->
+            <!--            />-->
           </el-form-item>
         </el-col>
 
@@ -129,8 +132,7 @@
               v-model="form.partaName"
               @click.native="handParent"
               placeholder="请选择"
-              :disabled="!!contactData?.id||!!projectData.contactId"
-
+              :disabled="!!contactData?.id || !!projectData.contactId"
             />
           </el-form-item>
           <el-form-item
@@ -389,7 +391,8 @@ import paymentList from './paymentList.vue';
 import { listOrganizations } from '@/api/system/organization';
 import { copyObj } from '@/utils/util';
 import { enterprisePage } from '@/api/contractManage/contractBook';
-import fileMain from "@/components/addDoc/index.vue";
+import fileMain from '@/components/addDoc/index.vue';
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 import processSubmitDialog from "@/BIZComponents/processSubmitDialog/processSubmitDialog.vue";
 
 export default {
@@ -403,7 +406,7 @@ export default {
     projectListDialog,
     paymentList,
     inventoryTable,
-    parentList
+    parentList,modalTitle
   },
   props: {
     contactData: {
@@ -456,9 +459,10 @@ export default {
     };
 
     return {
-    projectData:{},//项目数据
+      projectData: {}, //项目数据
       clearing: false, //是否清除合同
       processSubmitDialogFlag: false,
+      fullscreen: false, //全屏
       payWayOptions: [],
       delDetailIds: [],
       linkNameOptions: [],
@@ -783,11 +787,10 @@ export default {
     },
     //选择项目回调
     async changeProject(obj) {
-      this.projectData=obj
+      this.projectData = obj;
       this.form = Object.assign({}, this.form, {
         projectName: obj.name,
-        projectId: obj.id,
-
+        projectId: obj.id
       });
 
       if (obj.contractId) {
@@ -1072,4 +1075,5 @@ export default {
   font-size: 16px;
   padding-right: 30px;
 }
+
 </style>

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

@@ -117,6 +117,9 @@
           <el-form-item label="客户地址:" prop="partaAddress">
             <el-input v-model="form.partaAddress" disabled></el-input>
           </el-form-item>
+          <el-form-item label="创建人:" prop="createUsername">
+          <el-input v-model="form.createUsername" disabled></el-input>
+        </el-form-item>
           <!-- <el-form-item
               label="客户税号"
               prop="contactAddress"
@@ -165,6 +168,10 @@
           <el-form-item label="售出方地址:" prop="partbAddress">
             <el-input v-model="form.partbAddress" disabled></el-input>
           </el-form-item>
+  
+      <el-form-item label="创建时间:" prop="createTime">
+          <el-input v-model="form.createTime" disabled></el-input>
+        </el-form-item>
         </el-col>
       </el-row>
     </el-form>

+ 12 - 4
src/views/saleManage/saleOrder/components/inventoryTable.vue

@@ -91,7 +91,7 @@
           :prop="'datasource.' + $index + '.customerMark'"
           :rules="{
             required: clientEnvironmentId!=4?true:false,
-            message: '请输入',
+            message: '请输入客户代号',
             trigger: 'change'
           }"
         >
@@ -483,7 +483,7 @@
         <el-form-item
           :rules="{
             required: true,
-            message: '请选择日期',
+            message: '请选择'+(contractBookType == 1 ? '客户期望交期' : '交付日期'),
             trigger: 'change'
           }"
           :prop="
@@ -559,7 +559,7 @@
       <template v-slot:blockCount="scope">
         <el-form-item
           :prop="'datasource.' + scope.$index + '.blockCount'"
-          :rules="[{ required: true, message: '请输入', trigger: 'blur' }]"
+          :rules="[{ required: true, message: '请输入块数', trigger: 'blur' }]"
         >
           <el-input
             v-model="scope.row.blockCount"
@@ -1461,7 +1461,15 @@ export default {
 
     validateForm(callback) {
       //开始表单校验
-      this.$refs.form.validate((valid) => {
+      this.$refs.form.validate((valid,obj) => {
+        if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
         callback(valid);
       });
     }

+ 12 - 4
src/views/saleManage/saleOrder/entrustedReceive/components/inventoryTable.vue

@@ -122,7 +122,7 @@
           style="margin-bottom: 20px"
           :prop="'datasource.' + scope.$index + '.totalCount'"
           :rules="[
-            { required: true, message: '请输入数字', trigger: 'blur' },
+            { required: true, message: '请输入本次收货数量', trigger: 'blur' },
             { validator: validateTotalCount(scope.row), trigger: 'blur' }
           ]"
         >
@@ -585,10 +585,10 @@ export default {
     validateTotalCount(row) {
       return (rule, value, callback) => {
         if (isNaN(value) || Number(value) <= 0) {
-          this.$message.error('请输入大于0的数');
+          // this.$message.error('请输入大于0的数');
           callback(new Error('请输入大于0的数字'));
         } else if ((Number(value)+Number(row.receiveTotalCount)) > row.orderTotalCount) {
-          this.$message.error('输入的数字不能大于最大发货值');
+          // this.$message.error('输入的数字不能大于最大发货值');
           callback(new Error('输入的数字不能大于最大发货值'));
         } else {
           callback();
@@ -672,7 +672,15 @@ export default {
 
     validateForm(callback) {
       //开始表单校验
-      this.$refs.form.validate((valid) => {
+      this.$refs.form.validate((valid,obj) => {
+        if(obj){
+          let messages= Object.keys(obj).map(key=>obj[key][0])
+          if(messages.length>0){
+            this.$message.warning(messages[0].message);
+
+          }
+        
+          }
         callback(valid);
       });
     }

+ 9 - 55
src/views/targetManage/salesRegulation/components/searchTable.vue

@@ -7,62 +7,26 @@
     @submit.native.prevent
   >
     <el-row :gutter="15">
+ 
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="类型:" prop="account">
+        <el-form-item label="编码:" prop="code">
           <el-input
             clearable
             placeholder="请输入"
-            v-model.trim="params.account"
+            v-model.trim="params.code"
           ></el-input>
         </el-form-item>
       </el-col>
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="编码:" prop="bankName">
+        <el-form-item label="名称" prop="name">
           <el-input
             clearable
             placeholder="请输入"
-            v-model.trim="params.bankName"
+            v-model.trim="params.name"
           ></el-input>
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="银行名称:" prop="bankName">
-          <el-input
-            clearable
-            placeholder="请输入"
-            v-model.trim="params.bankName"
-          ></el-input>
-        </el-form-item>
-      </el-col>
-<!--       <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
-<!--        <el-form-item label="费用类型:" prop="feeTypeName">-->
-<!--          <el-input-->
-<!--            clearable-->
-<!--            placeholder="请输入"-->
-<!--            v-model.trim="params.feeTypeName"-->
-<!--          ></el-input>-->
-<!--        </el-form-item>-->
 
-<!--      </el-col>-->
-<!--      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
-
-<!--        <el-form-item label="审核状态:" prop="reviewStatus">-->
-<!--          <el-select v-model="params.reviewStatus" placeholder="请选择" class="w100" clearable>-->
-<!--            <el-option-->
-<!--              v-for="item in reviewStatusEnum"-->
-<!--              :key="item.value"-->
-<!--              :label="item.label"-->
-<!--              :value="item.value"-->
-<!--            ></el-option>-->
-<!--          </el-select>-->
-<!--        </el-form-item>-->
-
-<!--      </el-col>-->
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="组织机构:">
-          <auth-selection data-type="Array" v-model="params.deptIds" style="width: 100%"></auth-selection>
-        </el-form-item>
-      </el-col>
       <el-col style="display: flex;justify-content: end" v-bind="styleResponsive ? { lg:6, md: 6 } : { span:6 }">
 
         <div class="ele-form-actions">
@@ -81,22 +45,16 @@
   </el-form>
 </template>
 <script>
-import {reviewStatusEnum} from '@/enum/dict';
-const applyDeptNameOptions=[
-  {value:0,label:'否'},
-  {value:1,label:'是'},
-]
+
   export default {
     data () {
       // 默认表单数据
       const defaultParams = {
-        account:'',
-        bankName:'',
+        code:'',
+        name:'',
       };
       return {
-        reviewStatusEnum,
         defaultParams,
-        applyDeptNameOptions,
         // 表单数据
         params: { ...defaultParams }
       };
@@ -108,11 +66,7 @@ const applyDeptNameOptions=[
       }
     },
     methods: {
-      //选择时间
-      changeDate(e){
-       this.createTime=e
-      },
-      /* 搜索 */
+      
       search () {
         this.$emit('search', {
           ...this.params

+ 8 - 2
src/views/targetManage/salesTarget/components/addOrEditDialog.vue

@@ -8,7 +8,12 @@
     :close-on-click-modal="false"
     width="100%"
     :before-close="cancel"
+    :fullscreen="fullscreen"
+
   >
+  <template slot="title">
+     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    </template>
     <el-form
       ref="form"
       :rules="rules"
@@ -203,14 +208,16 @@ import {
 import deptSelect from '@/components/CommomSelect/dept-select.vue';
 import { getUserPage } from '@/api/system/organization';
 import dictMixins from '@/mixins/dictMixins';
+import modalTitle from '@/BIZComponents/modalTitle.vue';
 
 export default {
-  components: { deptSelect },
+  components: { deptSelect,modalTitle },
   mixins: [dictMixins],
   computed: {},
   data() {
     return {
       dialogType: '',
+      fullscreen:false,
       title: '',
       unitOption: [],
       addOrEditDialogFlag: false,
@@ -456,7 +463,6 @@ export default {
   }
 }
 :deep(.long-dialog-form .el-dialog__body) {
-  max-height: calc(100vh - 192px);
   min-height: 700px;
 }
 :deep(.org-tree-node-label .org-tree-node-label-inner) {

+ 9 - 55
src/views/targetManage/salesTarget/components/searchTable.vue

@@ -7,62 +7,26 @@
     @submit.native.prevent
   >
     <el-row :gutter="15">
+ 
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="类型:" prop="account">
+        <el-form-item label="编码:" prop="code">
           <el-input
             clearable
             placeholder="请输入"
-            v-model.trim="params.account"
+            v-model.trim="params.code"
           ></el-input>
         </el-form-item>
       </el-col>
       <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="编码:" prop="bankName">
+        <el-form-item label="名称" prop="name">
           <el-input
             clearable
             placeholder="请输入"
-            v-model.trim="params.bankName"
+            v-model.trim="params.name"
           ></el-input>
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="银行名称:" prop="bankName">
-          <el-input
-            clearable
-            placeholder="请输入"
-            v-model.trim="params.bankName"
-          ></el-input>
-        </el-form-item>
-      </el-col>
-<!--       <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
-<!--        <el-form-item label="费用类型:" prop="feeTypeName">-->
-<!--          <el-input-->
-<!--            clearable-->
-<!--            placeholder="请输入"-->
-<!--            v-model.trim="params.feeTypeName"-->
-<!--          ></el-input>-->
-<!--        </el-form-item>-->
 
-<!--      </el-col>-->
-<!--      <el-col v-bind="styleResponsive ? { lg:6, md: 12 } : { span:6 }">-->
-
-<!--        <el-form-item label="审核状态:" prop="reviewStatus">-->
-<!--          <el-select v-model="params.reviewStatus" placeholder="请选择" class="w100" clearable>-->
-<!--            <el-option-->
-<!--              v-for="item in reviewStatusEnum"-->
-<!--              :key="item.value"-->
-<!--              :label="item.label"-->
-<!--              :value="item.value"-->
-<!--            ></el-option>-->
-<!--          </el-select>-->
-<!--        </el-form-item>-->
-
-<!--      </el-col>-->
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="组织机构:">
-          <auth-selection data-type="Array" v-model="params.deptIds" style="width: 100%"></auth-selection>
-        </el-form-item>
-      </el-col>
       <el-col style="display: flex;justify-content: end" v-bind="styleResponsive ? { lg:6, md: 6 } : { span:6 }">
 
         <div class="ele-form-actions">
@@ -81,22 +45,16 @@
   </el-form>
 </template>
 <script>
-import {reviewStatusEnum} from '@/enum/dict';
-const applyDeptNameOptions=[
-  {value:0,label:'否'},
-  {value:1,label:'是'},
-]
+
   export default {
     data () {
       // 默认表单数据
       const defaultParams = {
-        account:'',
-        bankName:'',
+        code:'',
+        name:'',
       };
       return {
-        reviewStatusEnum,
         defaultParams,
-        applyDeptNameOptions,
         // 表单数据
         params: { ...defaultParams }
       };
@@ -108,11 +66,7 @@ const applyDeptNameOptions=[
       }
     },
     methods: {
-      //选择时间
-      changeDate(e){
-       this.createTime=e
-      },
-      /* 搜索 */
+      
       search () {
         this.$emit('search', {
           ...this.params

+ 19 - 3
src/views/targetManage/salesTarget/index.vue

@@ -73,7 +73,7 @@
       ref="addOrEditDialogRef"
       @reload="reload"
     ></add-or-edit-dialog>
-    <viewDialog  ref="viewDialogRef"></viewDialog>
+    <viewDialog ref="viewDialogRef"></viewDialog>
   </div>
 </template>
 
@@ -88,7 +88,8 @@ export default {
   mixins: [dictMixins],
   components: {
     addOrEditDialog,
-    searchTable,viewDialog
+    searchTable,
+    viewDialog
   },
   data() {
     return {
@@ -153,6 +154,21 @@ export default {
               : '个人';
           }
         },
+
+        {
+          minWidth: 150,
+          prop: 'departmentName',
+          label: '部门',
+          align: 'center',
+          showOverflowTooltip: true
+        },
+        {
+          minWidth: 100,
+          prop: 'userName',
+          label: '姓名',
+          align: 'center',
+          showOverflowTooltip: true
+        },
         {
           minWidth: 200,
           prop: 'assessmentDimensions',
@@ -200,7 +216,7 @@ export default {
         this.$nextTick(() => {
           this.$refs.viewDialogRef.open(row);
         });
-        return
+        return;
       }
       this.$nextTick(() => {
         this.$refs.addOrEditDialogRef.open(row, type);