Răsfoiți Sursa

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

Z 1 an în urmă
părinte
comite
e7a8a63414

+ 11 - 0
src/api/saleManage/saleorder.js

@@ -108,3 +108,14 @@ export async function submit(data) {
   }
   return Promise.reject(new Error(res.data.message));
 }
+
+/**
+ * 摘要卡片
+ */
+ export async function queryOrderNoCount(code) {
+  const res = await request.get(`/eom/saleorder/queryOrderNoCount/${code}`, {});
+  if (res.data.code == 0) {
+    return res.data.data;
+  }
+  return Promise.reject(new Error(res.data.message));
+}

+ 8 - 0
src/api/targetManage/index.js

@@ -53,3 +53,11 @@ export async function targetDefinitionDel(data) {
     }
     return Promise.reject(new Error(res.data.message));
 }
+// 删除指标
+export async function settlementAccountRemoveAPI(data) {
+    const res = await request.delete(`/eom/sales_target/delete`, {data});
+    if (res.data.code == 0) {
+        return res.data;
+    }
+    return Promise.reject(new Error(res.data.message));
+}

+ 1 - 1
src/enum/dict.js

@@ -55,7 +55,7 @@ export default {
   项目类型: 'pro_projects_type',
   预算单位: 'pro_projects_budget_unit',
   市场活动类型: 'activity_type',
-  
+  计量单位:'measuring_uint'
 };
 
 export const numberList = [

+ 90 - 32
src/views/marketManagem/components/addOrEditDialog.vue

@@ -6,7 +6,7 @@
     :title="title"
     :append-to-body="false"
     :close-on-click-modal="false"
-    width="70%"
+    width="80%"
     :before-close="cancel"
     :fullscreen="fullscreen"
   >
@@ -19,9 +19,10 @@
     <el-form
       ref="form"
       :rules="rules"
-      class="el-form-box"
+      class="el-form-box borNone"
       :model="form"
       label-width="0"
+      style="padding: 0 15px"
     >
       <el-row :gutter="15">
         <el-descriptions title="基本信息" :column="4" border>
@@ -50,7 +51,7 @@
           ></el-descriptions-item>
 
           <el-descriptions-item label="发起人">
-            <el-form-item prop="type">
+            <el-form-item prop="promoterName">
               <el-input
                 v-model="form.promoterName"
                 @click.native="userListOpen('promoterName')"
@@ -136,12 +137,10 @@
                 :default-time="['9:00:00', '12:00:00']"
                 value-format="yyyy-MM-dd HH:mm:ss"
               >
-              </el-date-picker> 
-              <span v-if="TimeArr.length>1">
-                 {{ getTimeArr }}  天
-              </span>
-              </el-form-item
-          ></el-descriptions-item>
+              </el-date-picker>
+              <span v-if="TimeArr.length > 1"> {{ getTimeArr }} 天 </span>
+            </el-form-item></el-descriptions-item
+          >
         </el-descriptions>
         <el-descriptions title="接待项目" :column="4" border>
           <el-descriptions-item label="项目类别">
@@ -247,13 +246,11 @@
                 ref="conferenceListRef"
                 v-if="item.name == '会议'"
                 :organizationList="organizationList"
-
               ></conferenceList>
               <companyList
                 ref="companyListRef"
                 v-if="item.name == '公司参观'"
                 :organizationList="organizationList"
-
               ></companyList>
               <visitList
                 ref="visitListRef"
@@ -267,6 +264,8 @@
     </el-form>
     <div slot="footer">
       <el-button type="primary" @click="save()">保存</el-button>
+      <el-button type="primary" @click="save('sub')">提交</el-button>
+
       <el-button @click="cancel">返回</el-button>
     </div>
     <UserList ref="userListRef" @success="userListSuccess"></UserList>
@@ -275,6 +274,13 @@
       ref="staffSelectionRef"
       @confirm="staffSelectionbk"
     ></staffSelection>
+    <process-submit-dialog
+      :processSubmitDialogFlag.sync="processSubmitDialogFlag"
+      v-if="processSubmitDialogFlag"
+      ref="processSubmitDialogRef"
+      @reload="done"
+      :isNotNeedProcess="false"
+    ></process-submit-dialog>
   </ele-modal>
 </template>
 <script>
@@ -331,6 +337,8 @@ import companyList from './companyList.vue';
 import visitList from './visitList.vue';
 //住宿
 import putUpList from './putUpList.vue';
+import processSubmitDialog from '@/BIZComponents/processSubmitDialog/processSubmitDialog.vue';
+
 export default {
   components: {
     deptSelect,
@@ -344,14 +352,23 @@ export default {
     modalTitle,
     putUpList,
     visitList,
-    staffSelection
+    staffSelection,
+    processSubmitDialog
   },
   mixins: [dictMixins],
   computed: {
     ...mapGetters(['user']),
-    getTimeArr(){
-      let [start,end]=this.TimeArr
-      return Math.ceil((new Date(end).getTime()-new Date(start).getTime())/1000/60/60/24)||''
+    getTimeArr() {
+      let [start, end] = this.TimeArr;
+      return (
+        Math.ceil(
+          (new Date(end).getTime() - new Date(start).getTime()) /
+            1000 /
+            60 /
+            60 /
+            24
+        ) || ''
+      );
     }
   },
   data() {
@@ -366,6 +383,7 @@ export default {
       organizationList: [],
       form: { ...defForm },
       linkList: [],
+      processSubmitDialogFlag: false,
       checkboxGroup: [
         {
           refKey: 'taskInfoTableRef',
@@ -404,7 +422,12 @@ export default {
         value: 'id',
         label: 'name'
       },
-      rules: {}
+      rules: {
+    
+        name: { required: true, message: '请输入', trigger: 'change' },
+        type: { required: true, message: '请选择', trigger: 'change' },
+        
+      }
     };
   },
   mounted() {},
@@ -430,17 +453,36 @@ export default {
             this.checkList.push(item.refKey);
           });
           this.activeName = this.checkList[0];
-          if(this.form.start&&this.form.end){
+          if (this.form.start && this.form.end) {
             this.TimeArr = [this.form.start, this.form.end];
           }
-          
         });
       } else {
         this.form.promoterName = this.user.info.name;
         this.form.promoterId = this.user.info.id;
       }
     },
-    async save() {
+    submit(data) {
+      
+      this.processSubmitDialogFlag = true;
+      this.$nextTick(() => {
+        let params = {
+          businessId: data.id,
+          businessKey: 'market_management_approve',
+          formCreateUserId: data.createUserId,
+          pcHandle: '/bpm/handleTask/components/marketManagem/submit.vue',
+          pcView: '/bpm/handleTask/components/marketManagem/view.vue',
+          variables: {
+            businessCode: data.code
+          }
+        };
+        this.$refs.processSubmitDialogRef.init(params);
+      });
+    },
+    done() {
+      this.$emit('done');
+    },
+    async save(type) {
       try {
         await this.getValidate();
         // 表单验证通过,执行保存操作
@@ -463,14 +505,22 @@ export default {
 
         // return;
         save(this.form)
-          .then((res) => {
+          .then(async (res) => {
             this.loading = false;
             this.$message.success('操作成功');
+            if (type == 'sub') {
+              if(this.form.id){
+                this.submit(this.form);
+              }else{
+                this.submit( await getById(res));
+              }
+            
+            }
             this.cancel();
             this.$emit('done');
           })
           .catch((e) => {
-            //this.loading = false;
+            this.loading = false;
           });
       } catch (error) {
         console.log(error);
@@ -560,20 +610,21 @@ export default {
       this.form.phone = phone;
       this.form.positionName = positionName;
     },
-    receptionDepartmentIdChange(){
-      this.$nextTick(()=>{
-        const data =this.$refs.deptRef.getCheckedNodes()
-        console.log(data,'data')
-        this.form.receptionDepartmentName=data.map(item=>item.label).toString()
-
-      })
+    receptionDepartmentIdChange() {
+      this.$nextTick(() => {
+        const data = this.$refs.deptRef.getCheckedNodes();
+        console.log(data, 'data');
+        this.form.receptionDepartmentName = data
+          .map((item) => item.label)
+          .toString();
+      });
     },
-   
+
     //关闭弹窗
     cancel() {
       this.addOrEditDialogFlag = false;
       this.checkList = [];
-      this.TimeArr=[]
+      this.TimeArr = [];
       this.form = {
         ...defForm
       };
@@ -582,9 +633,12 @@ export default {
 };
 </script>
 <style scoped lang="scss">
-:deep(.el-input__inner) {
-  border: none;
+.borNone{
+  :deep(.el-input__inner) {
+  border-color: #fff;
+}
 }
+
 :deep(.el-input-group__append) {
   border-left: 1px solid var(--border-color-base);
 }
@@ -617,4 +671,8 @@ export default {
     width: 400px;
   }
 }
+:deep(.el-tabs__item) {
+  font-size: 16px;
+  font-weight: 800;
+}
 </style>

+ 11 - 62
src/views/marketManagem/components/companyList.vue

@@ -74,56 +74,20 @@
             <el-input v-model="row.place"></el-input>
           </el-form-item>
         </template>
-
-        <template
-          v-slot:materialName="{ row, $index }"
-          v-if="dialogType !== 'view'"
-        >
-          <el-form-item :prop="'datasource.' + $index + '.materialName'">
-            <el-input v-model="row.materialName">
-              <template slot="append">
-                <el-link
-                  type="primary"
-                  :underline="false"
-                  @click.native="materialOpen(row, $index)"
-                >
-                  选择</el-link
-                >
-              </template>
-            </el-input>
-          </el-form-item>
-        </template>
-        <template
-          v-slot:materialNum="{ row, $index }"
-          v-if="dialogType !== 'view'"
-        >
-          <el-form-item :prop="'datasource.' + $index + '.materialNum'">
-            <el-input type="number" v-model="row.materialNum"></el-input>
-          </el-form-item>
-        </template>
-        <template
-          v-slot:ownershipId="{ row, $index }"
-          v-if="dialogType !== 'view'"
-        >
-          <el-form-item :prop="'datasource.' + $index + '.ownershipId'">
-            <el-cascader
-              class="ele-block"
-              :options="organizationList"
-              placeholder="请选择"
-              :props="defaultProps"
-              ref="deptRef"
-              :show-all-levels="false"
-              v-model="row.ownershipId"
-              @change="ownershipChange($index)"
-              clearable
-            ></el-cascader>
+        <template v-slot:text="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.text'">
+            <el-input v-model="row.text"></el-input>
           </el-form-item>
         </template>
+   
+   
+    
         <template v-slot:remark="{ row, $index }" v-if="dialogType !== 'view'">
           <el-form-item :prop="'datasource.' + $index + '.remark'">
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
+   
       </ele-pro-table>
     </el-form>
     <productList
@@ -203,29 +167,14 @@ export default {
           slot: 'place'
         },
         {
-          prop: 'materialName',
-          label: '物料名称',
-          align: 'center',
-          showOverflowTooltip: true,
-          minWidth: 200,
-          slot: 'materialName'
-        },
-        {
-          prop: 'materialNum',
-          label: '数量',
-          align: 'center',
-          showOverflowTooltip: true,
-          width: 100,
-          slot: 'materialNum'
-        },
-        {
-          prop: 'ownershipName',
-          label: '权属单位',
+          prop: 'text',
+          label: '参观行程',
           align: 'center',
           showOverflowTooltip: true,
           minWidth: 200,
-          slot: 'ownershipId'
+          slot: 'text'
         },
+       
 
         {
           prop: 'cost',

+ 19 - 0
src/views/marketManagem/components/conferenceList.vue

@@ -124,6 +124,17 @@
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
+        <template v-slot:unit="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.unit'">
+            <DictSelection
+                dictName="计量单位"
+                clearable
+                v-model="row.unit"
+              >
+              </DictSelection> 
+
+          </el-form-item>
+        </template>
       </ele-pro-table>
     </el-form>
     <productList
@@ -218,6 +229,14 @@ export default {
           width: 100,
           slot: 'materialNum'
         },
+        {
+          prop: 'unit',
+          label: '单位',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          slot: 'unit'
+        },
         {
           prop: 'ownershipId',
           label: '权属单位',

+ 36 - 3
src/views/marketManagem/components/mealList.vue

@@ -48,9 +48,9 @@
           <el-form-item :prop="'tableList.' + $index + '.dataTime'">
             <el-date-picker
               v-model="row.dataTime"
-              type="date"
-              placeholder="选择日期"
-              value-format="yyyy-MM-dd"
+              type="datetime"
+              placeholder="选择时间"
+              value-format="yyyy-MM-dd HH:mm:ss"
             >
             </el-date-picker>
           </el-form-item>
@@ -123,6 +123,23 @@
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
+
+        <template v-slot:name="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.name'">
+            <el-input v-model="row.name"></el-input>
+          </el-form-item>
+        </template>
+        <template v-slot:unit="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.unit'">
+            <DictSelection
+                dictName="计量单位"
+                clearable
+                v-model="row.unit"
+              >
+              </DictSelection> 
+
+          </el-form-item>
+        </template>
       </ele-pro-table>
     </el-form>
     <productList
@@ -177,6 +194,14 @@ export default {
           showOverflowTooltip: true,
           fixed: 'left'
         },
+        {
+          prop: 'name',
+          label: '名称',
+          align: 'center',
+          showOverflowTooltip: true,
+          width: 100,
+          slot: 'name'
+        },
         {
           prop: 'dataTime',
           label: '日期',
@@ -217,6 +242,14 @@ export default {
           width: 100,
           slot: 'materialNum'
         },
+        {
+          prop: 'unit',
+          label: '单位',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          slot: 'unit'
+        },
         {
           prop: 'ownershipName',
           label: '权属单位',

+ 9 - 0
src/views/marketManagem/components/putUpList.vue

@@ -103,6 +103,7 @@
             </el-date-picker>
           </el-form-item>
         </template>
+     
       </ele-pro-table>
     </el-form>
   </div>
@@ -200,6 +201,14 @@ export default {
           minWidth: 120,
           slot: 'cost'
         },
+        {
+          prop: 'remark',
+          label: '备注',
+          minWidth: 200,
+          align: 'center',
+          showOverflowTooltip: true,
+          slot: 'remark'
+        },
         {
           columnKey: 'action',
           slot: 'action',

+ 11 - 28
src/views/marketManagem/components/searchTable.vue

@@ -7,43 +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="code">
+      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="关键字:" prop="searchName">
           <el-input
             clearable
-            placeholder="请输入"
-            v-model.trim="params.code"
+            placeholder="编码/主题/来访单位/发起人"
+            v-model="params.searchName"
           ></el-input>
         </el-form-item>
-      </el-col> -->
+      </el-col>
       <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
         <el-form-item label="类型" prop="type">
           <DictSelection
             dictName="市场活动类型"
             clearable
-            v-model="params.type"
+            v-model="params.key"
           >
           </DictSelection>
         </el-form-item>
       </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
-        <el-form-item label="主题" prop="name">
-          <el-input
-            clearable
-            placeholder="请输入"
-            v-model.trim="params.name"
-          ></el-input>
-        </el-form-item>
-      </el-col>
-      <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
-        <el-form-item label="来访单位" prop="visitingUnitsName">
-          <el-input
-            clearable
-            placeholder="请输入"
-            v-model.trim="params.visitingUnitsName"
-          ></el-input>
-        </el-form-item>
-      </el-col>
+
       <el-col v-bind="styleResponsive ? { lg: 4, md: 12 } : { span: 4 }">
         <el-form-item label="来访时间" prop="targetTime">
           <el-date-picker
@@ -82,11 +65,11 @@ export default {
   data() {
     // 默认表单数据
     const defaultParams = {
-      code: '',
-      name: '',
+      // code: '',
+      // name: '',
       targetTime:'',
-      visitingUnitsName:'',
-      type:''
+      type:'',
+      searchName:""
     };
     return {
       defaultParams,

+ 20 - 0
src/views/marketManagem/components/souvenirList.vue

@@ -124,7 +124,19 @@
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
+        <template v-slot:unit="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.unit'">
+            <DictSelection
+                dictName="计量单位"
+                clearable
+                v-model="row.unit"
+              >
+              </DictSelection> 
+
+          </el-form-item>
+        </template>
       </ele-pro-table>
+   
     </el-form>
     <productList
       :currentIndex="-1"
@@ -211,6 +223,14 @@ export default {
           width: 100,
           slot: 'materialNum'
         },
+        {
+          prop: 'unit',
+          label: '单位',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          slot: 'unit'
+        },
         {
           prop: 'ownershipName',
           label: '权属单位',

+ 7 - 2
src/views/marketManagem/components/viewDialog.vue

@@ -5,7 +5,7 @@
     :visible.sync="addOrEditDialogFlag"
     :append-to-body="false"
     :close-on-click-modal="false"
-    width="70%"
+    width="80%"
     :fullscreen="fullscreen"
   >
     <template slot="title">
@@ -33,7 +33,8 @@
       class="el-form-box"
       :model="form"
       label-width="0"
-      v-if="activeComp=='main'"
+      v-show="activeComp=='main'"
+      style="padding:0px 15px"
     >
       <el-row :gutter="15">
         <el-descriptions title="基本信息" :column="4">
@@ -312,4 +313,8 @@ export default {
 :deep(.el-descriptions__title) {
   color: #1890ff;
 }
+:deep(.el-tabs__item){
+  font-size: 16px;
+  font-weight: 800;
+}
 </style>

+ 19 - 0
src/views/marketManagem/components/visitList.vue

@@ -122,6 +122,17 @@
             <el-input type="textarea" v-model="row.remark"></el-input>
           </el-form-item>
         </template>
+        <template v-slot:unit="{ row, $index }" v-if="dialogType !== 'view'">
+          <el-form-item :prop="'datasource.' + $index + '.unit'">
+            <DictSelection
+                dictName="计量单位"
+                clearable
+                v-model="row.unit"
+              >
+              </DictSelection> 
+
+          </el-form-item>
+        </template>
       </ele-pro-table>
     </el-form>
     <productList
@@ -216,6 +227,14 @@ export default {
           width: 100,
           slot: 'materialNum'
         },
+        {
+          prop: 'unit',
+          label: '单位',
+          align: 'center',
+          showOverflowTooltip: true,
+          minWidth: 100,
+          slot: 'unit'
+        },
         {
           prop: 'ownershipId',
           label: '权属单位',

+ 1 - 0
src/views/marketManagem/index.vue

@@ -91,6 +91,7 @@
       v-if="processSubmitDialogFlag"
       ref="processSubmitDialogRef"
       @reload="reload"
+      :isNotNeedProcess="false"
     ></process-submit-dialog>
   </div>
 </template>

+ 19 - 17
src/views/purchasingManage/producerManage/components/addContactDialog.vue

@@ -10,7 +10,7 @@
     @close="cancel"
   >
     <el-tabs v-model="activeName" type="card" @tab-click="handleActive">
-      <el-tab-pane label="基本信息" name="1">
+      <el-tab-pane label="基本信息" :name="1">
         <headerTitle title="基本信息" style="margin-top: 30px"></headerTitle>
         <el-form
           label-width="120px"
@@ -257,7 +257,7 @@
           </el-row>
         </el-form>
       </el-tab-pane>
-      <el-tab-pane label="银行信息" name="2">
+      <el-tab-pane label="银行信息" :name="2">
         <headerTitle title="银行信息" style="margin-top: 30px"></headerTitle>
         <ele-pro-table
           ref="table"
@@ -311,7 +311,7 @@
           </template>
         </ele-pro-table>
       </el-tab-pane>
-      <el-tab-pane label="联系人信息" name="3">
+      <el-tab-pane label="联系人信息" :name="3">
         <headerTitle title="联系人信息" style="margin-top: 30px"></headerTitle>
         <ele-pro-table
           ref="linkTable"
@@ -421,7 +421,7 @@
           </template>
         </ele-pro-table>
       </el-tab-pane>
-      <el-tab-pane label="其他信息" name="4">
+      <el-tab-pane label="其他信息" :name="4">
         <headerTitle title="其他信息" style="margin-top: 30px"></headerTitle>
         <el-form
           label-width="100px"
@@ -518,7 +518,7 @@
           </el-row>
         </el-form>
       </el-tab-pane>
-      <el-tab-pane label="供货列表" name="5">
+      <el-tab-pane label="供货列表" :name="5">
         <headerTitle title="供货列表" style="margin-top: 30px"></headerTitle>
         <ele-pro-table
           ref="supplyRef"
@@ -548,7 +548,7 @@
           </template>
         </ele-pro-table>
       </el-tab-pane>
-      <el-tab-pane label="证书资质" name="6">
+      <el-tab-pane label="证书资质" :name="6">
         <headerTitle title="证书资质" style="margin-top: 30px"></headerTitle>
         <ele-pro-table
           ref="certificateTable"
@@ -749,7 +749,7 @@ export default {
       certificateQualificationsDialogFlag: false,
       title: '',
       row: {},
-      activeName: '1',
+      activeName: 1,
       formDef,
       otherFormDef,
       form: copyObj(formDef),
@@ -1260,7 +1260,7 @@ export default {
       return new Promise((resolve, reject) => {
         this.$refs.form.validate((valid) => {
           if (!valid) {
-            this.activeName = '1';
+            this.activeName = 1;
             reject(false);
           } else {
             resolve(true);
@@ -1272,7 +1272,7 @@ export default {
       return new Promise((resolve, reject) => {
         this.$refs.otherForm.validate((valid) => {
           if (!valid) {
-            this.activeName = '4';
+            this.activeName = 4;
             reject(false);
           } else {
             resolve(true);
@@ -1283,7 +1283,7 @@ export default {
     tableLinkDataValid() {
       return new Promise((resolve, reject) => {
         if (this.tableLinkData.length == 0) {
-          this.activeName = '3';
+          this.activeName = 3;
           this.$message.error('联系人信息至少有1条');
           reject(false);
         } else {
@@ -1304,14 +1304,14 @@ export default {
         this.activeName -= 1;
       }
       if (type == 'next') {
-        if (this.activeName == '1' && !(await this.formValid())) {
+        if (this.activeName == 1 && !(await this.formValid())) {
           return;
         }
-        if (this.activeName == '3' && !(await this.tableLinkDataValid())) {
+        if (this.activeName == 3 && !(await this.tableLinkDataValid())) {
           this.$message.error('联系人信息至少有1条');
           return;
         }
-        if (this.activeName == '4' && !(await this.otherFormValid())) {
+        if (this.activeName == 4 && !(await this.otherFormValid())) {
           return;
         }
         this.activeName += 1;
@@ -1412,10 +1412,12 @@ export default {
               this.loading = false;
               this.$message.success('新增成功');
               this.cancel();
-              this._getById(id);
-              this.title = '编辑客户';
               this.$emit('done');
-              this.isUpdate = true;
+
+              // this._getById(id);
+              // this.title = '编辑客户';
+              // this.$emit('done');
+              // this.isUpdate = true;
             })
             .catch((e) => {
               //this.loading = false;
@@ -1427,7 +1429,7 @@ export default {
     },
     cancel() {
       this.$nextTick(() => {
-        this.activeName = '1';
+        this.activeName = 1;
         // 关闭后,销毁所有的表单数据
         this.$refs['otherForm'] && this.$refs['otherForm'].resetFields();
         this.$refs['formRef'] && this.$refs['formRef'].resetFields();

+ 2 - 0
src/views/saleManage/businessOpportunity/components/addOpportunityDialog.vue

@@ -393,6 +393,8 @@ export default {
       if (type == 'add') {
         if (row.id) {
           this.changeParent(row);
+          console.log(this.form.contactId,'this.form.contactId')
+          
         }
         this.isUpdate = false;
         if (this.contactId) { //客户管理详情进入

+ 62 - 22
src/views/saleManage/contact/components/drawer.vue

@@ -17,20 +17,36 @@
 
     <div class="ele-body" style="height: 100%">
       <div style="width: calc(100% - 350px); height: 100%">
-        <headerTitle title="摘要卡片" style="margin-top: 15px"></headerTitle>
+        <!-- <headerTitle title="摘要卡片" style="margin-top: 15px"></headerTitle> -->
 
         <div class="card">
-          <span>销售订单总额:</span>
-          <span> 退货单总额:</span>
-          <span>回款总额:</span>
-          <span> 退款总额:</span>
-          <span>待回款总额:</span>
+          <div
+            >
+            <span> 销售订单总额</span>
+            <span class="value">{{ contactCountData.totalAmountSaleOrder }}
+            &nbsp;&nbsp;元
+            </span>
+           
+         
+          </div>
+          <div>
+            <span> 退货单总额</span>
+            <span class="value">{{ contactCountData.totalAmountSaleOrderRecord }} 
+              &nbsp;&nbsp;元</span>
+            </div >
+          <div>   
+            <span> 回款总额</span>
+            <span class="value">{{ contactCountData.totalAmountReturn }}&nbsp;&nbsp;元</span></div>
+          <div>
+            <span> 退款总额</span>
+            <span class="value">{{ contactCountData.totalAmountRecord }}&nbsp;&nbsp;元</span></div>
+          <div
+            >
+            <span> 待回款总额</span>
+            <span class="value">{{ contactCountData.totalAmountTreatReturn }}&nbsp;&nbsp;元</span></div
+          >
         </div>
-        <el-tabs
-          v-model="activeName"
-
-          style="height: calc(100% - 124px)"
-        >
+        <el-tabs v-model="activeName" style="height: calc(100% - 124px)">
           <el-tab-pane label="详细信息" name="详细信息">
             <contactInfo ref="contactInfoRef"></contactInfo>
           </el-tab-pane>
@@ -107,7 +123,6 @@
               :id="row.base.processInstanceId"
             ></bpmDetail>
           </el-tab-pane>
-
         </el-tabs>
       </div>
 
@@ -158,7 +173,11 @@
 </template>
 
 <script>
-import { contactDetail, updateContactDynamics,queryContactIdCount } from '@/api/saleManage/contact';
+import {
+  contactDetail,
+  updateContactDynamics,
+  queryContactIdCount
+} from '@/api/saleManage/contact';
 import dictMixins from '@/mixins/dictMixins';
 import contactInfo from './darwerComponents/contactInfo.vue';
 
@@ -194,7 +213,7 @@ import receivableManage from '@/views/financialManage/receivableManage/index.vue
 import followList from './darwerComponents/followList.vue';
 import TinymceEditor from '@/components/TinymceEditor/index.vue';
 import { mapGetters } from 'vuex';
-import bpmDetail from "@/views/bpm/processInstance/detail.vue";
+import bpmDetail from '@/views/bpm/processInstance/detail.vue';
 
 export default {
   mixins: [dictMixins],
@@ -228,8 +247,14 @@ export default {
       content: '',
       commitCommentVisible: false,
       inputComment: '',
-      contactCountData:{},
-      pageName:'myList'
+      contactCountData: {
+        totalAmountSaleOrderRecord: '', //退货单总额:
+        totalAmountRecord: '', //退款总额
+        totalAmountTreatReturn: '', //待回款总额
+        totalAmountSaleOrder: '', //销售订单总额
+        totalAmountReturn: '' //回款总额
+      },
+      pageName: 'myList'
     };
   },
   created() {
@@ -239,10 +264,11 @@ export default {
     ...mapGetters(['user'])
   },
   methods: {
-    async open(row,pageName) {
+    async open(row, pageName) {
       this.row = await contactDetail(row.id);
-      this.pageName=pageName
-      // this.contactCountData=await queryContactIdCount(row.id)
+      this.pageName = pageName;
+      const contactCountData = await queryContactIdCount(row.id);
+      this.contactCountData=contactCountData.data
       this.drawer = true;
       this.$nextTick(() => {
         this.$refs.contactInfoRef.init(this.row.base);
@@ -302,9 +328,23 @@ export default {
   display: flex;
   padding: 15px;
   font-size: 16px;
-  span {
-    flex: 1;
-  }
+  >div{
+    flex:1;
+    margin:0px 20px ;
+    background: #1890ff;
+    color:#fff;
+    display: flex;
+    flex-direction:column;
+    align-items: center;
+    justify-content: center;
+    padding: 12px;
+    border-radius: 10px;
+    .value{
+      margin-top:8px
+    }
+   
+   }
+ 
 }
 .title {
   span {

+ 2 - 2
src/views/saleManage/saleOrder/components/addDialog.vue

@@ -132,7 +132,7 @@
               v-model="form.partaName"
               @click.native="handParent"
               placeholder="请选择"
-              :disabled="!!contactData?.id || !!projectData.contactId"
+              :disabled="!!contactData?.id"
             />
           </el-form-item>
           <el-form-item
@@ -529,7 +529,6 @@ export default {
         ],
         payAmount: [{ required: true, message: '请输入', trigger: 'blur' }]
       },
-
       // 提交状态
       loading: false,
       // 是否是修改
@@ -1049,6 +1048,7 @@ export default {
         this.$store.commit('order/clearUserData');
         this.form = copyObj(this.formDef);
         this.visible = false;
+        this.projectData={}
       });
     },
     //查找合同分类对应name

+ 80 - 10
src/views/saleManage/saleOrder/components/drawer.vue

@@ -14,12 +14,49 @@
     <headerTitle title="摘要卡片" style="margin-top: 15px"></headerTitle>
 
     <div class="card">
-      <span>订单数量:</span>
-      <span>订单总金额:</span>
-      <span>应收款:</span>
-      <span>发货数量:</span>
-      <span>退货数量:</span>
-      <span> 退货金额:</span>
+      <div>
+        <span> 订单数量</span>
+        <span class="value"
+          >{{ orderNoCountData.saleOrderNumber }}
+          &nbsp;&nbsp;
+        </span>
+      </div>
+      <div>
+        <span> 订单总金额</span>
+        <span class="value"
+          >{{ orderNoCountData.totalAmountSaleOrder }}
+          &nbsp;&nbsp;元
+        </span>
+      </div>
+      <div>
+        <span> 应收款</span>
+        <span class="value"
+          >{{ orderNoCountData.receivable }}
+          &nbsp;&nbsp;元
+        </span>
+      </div>
+      <div>
+        <span> 发货数量</span>
+        <span class="value"
+          >{{ orderNoCountData.sendNumber }}
+          &nbsp;&nbsp;
+        </span>
+      </div>
+      <div>
+        <span> 退货数量</span>
+        <span class="value"
+          >{{ orderNoCountData.returnNumber }}
+          &nbsp;&nbsp;
+        </span>
+      </div>
+      <div>
+        <span> 退货金额</span>
+        <span class="value"
+          >{{ orderNoCountData.returnAmount }}
+          &nbsp;&nbsp;元
+        </span>
+      </div>
+
       <!-- <span>预计结单日期:</span> -->
     </div>
     <div class="ele-body" style="height: calc(100% - 124px)">
@@ -76,8 +113,7 @@
           v-if="row.processInstanceId"
         >
           <bpmDetail
-            
-            v-if="row.processInstanceId&&activeName=='审批流程'"
+            v-if="row.processInstanceId && activeName == '审批流程'"
             :id="row.processInstanceId"
             :key="row.id"
           ></bpmDetail>
@@ -88,7 +124,10 @@
 </template>
 
 <script>
-import { getSaleOrderDetail } from '@/api/saleManage/saleorder';
+import {
+  getSaleOrderDetail,
+  queryOrderNoCount
+} from '@/api/saleManage/saleorder';
 
 import dictMixins from '@/mixins/dictMixins';
 
@@ -137,7 +176,15 @@ export default {
       title: '',
       activeName: '详细信息',
       row: { contactId: '' },
-      content: ''
+      content: '',
+      orderNoCountData: {
+        saleOrderNumber: '', //订单数量
+        totalAmountSaleOrder: '', //订单总金额
+        sendNumber: '', //发货数量
+        receivable: '', //应收款
+        returnNumber: '', //退货数量
+        returnAmount: '' //退货金额
+      }
     };
   },
   created() {},
@@ -145,9 +192,12 @@ export default {
   methods: {
     async open(row) {
       this.row = await getSaleOrderDetail(row.id);
+      this.orderNoCountData = await queryOrderNoCount(row.orderNo);
+
       this.drawer = true;
       this.$nextTick(() => {
         this.$refs.saleOrderInfoRef.init(this.row);
+
         // this.$refs.followListRef.init(row);
         // this.$refs.businessAddTable &&
         //   this.$refs.businessAddTable.putTableValue(
@@ -202,4 +252,24 @@ export default {
     color: #40a9ff;
   }
 }
+.card {
+  display: flex;
+  padding: 15px;
+  font-size: 16px;
+  > div {
+    flex: 1;
+    margin: 0px 20px;
+    background: #1890ff;
+    color: #fff;
+    display: flex;
+    flex-direction: column;
+    align-items: center;
+    justify-content: center;
+    padding: 12px;
+    border-radius: 10px;
+    .value {
+      margin-top: 8px;
+    }
+  }
+}
 </style>

+ 48 - 12
src/views/targetManage/salesTarget/components/addOrEditDialog.vue

@@ -9,10 +9,12 @@
     width="100%"
     :before-close="cancel"
     :fullscreen="fullscreen"
-
   >
-  <template slot="title">
-     <modalTitle :title="title" @setFullscreen="fullscreen=!fullscreen"></modalTitle>
+    <template slot="title">
+      <modalTitle
+        :title="title"
+        @setFullscreen="fullscreen = !fullscreen"
+      ></modalTitle>
     </template>
     <el-form
       ref="form"
@@ -22,7 +24,7 @@
       label-width="120px"
     >
       <el-row :gutter="15">
-        <el-col :span="6">
+        <el-col :span="4">
           <headerTitle title="基本信息"></headerTitle>
           <el-row>
             <el-col :span="24">
@@ -131,13 +133,19 @@
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="负责人" prop="branchName">
-                <el-input v-model="form.branchName"></el-input>
+              <el-form-item label="负责人" prop="superintendentName">
+                <el-input
+                  v-model="form.superintendentName"
+                  @click.native="userListOpen"
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
-              <el-form-item label="可见人" prop="branchName">
-                <el-input v-model="form.branchName"></el-input>
+              <el-form-item label="可见人" prop="participantsName">
+                <el-input
+                  v-model="participantsName"
+                  @click.native="receptionUserOpen"
+                ></el-input>
               </el-form-item>
             </el-col>
             <el-col :span="24">
@@ -147,7 +155,7 @@
             </el-col>
           </el-row>
         </el-col>
-        <el-col :span="18">
+        <el-col :span="20">
           <headerTitle title="目标"></headerTitle>
           <!-- <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
         <el-tab-pane
@@ -175,6 +183,11 @@
       <el-button type="primary" @click="handleSave(0)">保存</el-button>
       <el-button @click="cancel">返回</el-button>
     </div>
+    <staffSelection
+      ref="staffSelectionRef"
+      @confirm="staffSelectionbk"
+    ></staffSelection>
+    <UserList ref="userListRef" @success="userListSuccess"></UserList>
   </ele-modal>
 </template>
 <script>
@@ -192,6 +205,7 @@ const defForm = {
   superintendentName: '', //负责人名称
   participantsId: '',
   participantsName: '',
+  discernibleUserList: [],
   status: '',
   type: 1,
   describes: ''
@@ -209,16 +223,19 @@ 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';
+import staffSelection from '@/views/marketManagem/components/staffSelection.vue';
+import UserList from '@/views/marketManagem/components/userList.vue';
 
 export default {
-  components: { deptSelect,modalTitle },
+  components: { deptSelect, modalTitle, staffSelection, UserList },
   mixins: [dictMixins],
   computed: {},
   data() {
     return {
       dialogType: '',
-      fullscreen:false,
+      fullscreen: false,
       title: '',
+      participantsName: '',
       unitOption: [],
       addOrEditDialogFlag: false,
       activeName: '',
@@ -305,6 +322,11 @@ export default {
         if (this.form.departmentId) {
           this.getUserList({ groupId: this.form.departmentId });
         }
+        if (this.form.discernibleUserList) {
+          this.participantsName = this.form.discernibleUserList
+            .map((item) => item.name)
+            .toString();
+        }
 
         this.form.assessmentDimensions =
           this.form.assessmentDimensions.split(',');
@@ -313,7 +335,21 @@ export default {
         this.initTree();
       }
     },
-
+    receptionUserOpen() {
+      this.$refs.staffSelectionRef.open(this.form.participantsId || []);
+    },
+    staffSelectionbk(data) {
+      this.form.discernibleUserList = data;
+      this.participantsName = data.map((item) => item.name).toString();
+      // console.log(data,'data')
+    },
+    userListOpen(key) {
+      this.$refs.userListRef.open(key);
+    },
+    userListSuccess({ data }) {
+      this.form.superintendentName = data?.name;
+      this.form.superintendentId = data?.id;
+    },
     //tree更新
     initTree() {
       this.treeData.children = [];

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

@@ -7,7 +7,15 @@
     @submit.native.prevent
   >
     <el-row :gutter="15">
- 
+      <!-- <el-col v-bind="styleResponsive ? { lg: 6, md: 12 } : { span: 6 }">
+        <el-form-item label="编码:" prop="code">
+          <el-input
+            clearable
+            placeholder="请输入"
+            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="code">
           <el-input

+ 4 - 4
src/views/targetManage/salesTarget/index.vue

@@ -24,7 +24,7 @@
           >
             新建
           </el-button>
-          <el-button
+          <!-- <el-button
             size="small"
             type="danger"
             el-icon-delete
@@ -33,7 +33,7 @@
             :disabled="selection?.length === 0"
           >
             批量删除
-          </el-button>
+          </el-button> -->
         </template>
         <!-- 操作 -->
         <template v-slot:action="{ row }">
@@ -82,7 +82,7 @@ import dictMixins from '@/mixins/dictMixins';
 import addOrEditDialog from './components/addOrEditDialog.vue';
 import viewDialog from './components/viewDialog.vue';
 import searchTable from './components/searchTable.vue';
-import { salesTargetPage } from '@/api/targetManage/index.js';
+import { salesTargetPage ,settlementAccountRemoveAPI} from '@/api/targetManage/index.js';
 
 export default {
   mixins: [dictMixins],
@@ -184,7 +184,7 @@ export default {
           slot: 'modelType',
           showOverflowTooltip: true,
           formatter: (row, column) => {
-            return row.enabled ? '进行中' : '已完成';
+            // return row.enabled ? '进行中' : '已完成';
           }
         },
         {

+ 89 - 46
src/views/targetManage/util.js

@@ -200,7 +200,7 @@ export function getTargetManageTree(data, type) {
                 ratio: '',
                 value: '',
                 type: '3',
-                
+
               },
               {
                 id: data.id + '-' + '7',
@@ -434,67 +434,110 @@ export function renderInput(h, data, className, placeholder, form, children) {
       on: {
         input: (value) => {
           data[className == 'ratioInput' ? 'ratio' : 'value'] = value; // 监听输入事件,更新数据
-          flattenTree(data, className, children);
+          flattenTree(data, className, children, 'input');
+        },
+        focus: () => {
+          flattenTree(data, className, children, 'focus');
         }
       }
     },
     [className == 'ratioInput' ? h('slot', { slot: 'suffix' }, ['%']) : '']
   );
 }
-// 目标值改变递归更新数据
-function flattenTree(data, className, tree) {
+//占比改变
+function setRatio(data, tree, eventFn) {
   let ratio = 0
   tree.forEach((node) => {
-    if (className == 'select') {
-      if (data.id == node.pid) {
-        node.unit = data.unit
-        node.children.forEach((val) => {
-          val.unit = data.unit
-        });
+    if (data.pid == node.pid && data.id !== node.id) {
+      ratio += (+node.ratio)
+      if (eventFn == 'focus' && ratio) {
+        data.ratio = 100 - ratio >= 0 ? 100 - ratio : 0
+      }
+      if (eventFn == 'input') {
+        if (ratio + (+data.ratio) > 100) {
+          data.ratio = 100 - ratio
+        }
       }
+
+    }
+    if (node.children && node.children.length > 0) {
+      setRatio(data, node.children, eventFn);
+    }
+  })
+
+}
+//占比改变值改变
+function setValue(data, tree) {
+  tree.forEach((node) => {
+
+    if (node.id == data.pid) {
+      data.value = +(node.value * (data.ratio / 100)).toFixed(2)
+      //季度占比改变计算月度目标值
+    }
+    if (data.type == '2') {
+      data.children.forEach((val) => {
+        val.value = +(data.value * (val.ratio / 100)).toFixed(2)
+      });
+    }
+    if (node.children && node.children.length > 0) {
+      setValue(data, node.children);
     }
-    //占比改变根据父级目标值计算
-    if (className == 'ratioInput') {
+  })
 
-      if (data.pid == node.pid) {
-        ratio += (+node.ratio)
+}
 
-        if (ratio > 100) {
 
-          data.ratio = 100 - (ratio - data.ratio)
-          ratio = 100
-        }
-      }
-      // if (data.ratio < 0) {
-      //   data.ratio = 0
-      // }
-      // if (data.ratio > 100) {
-      //   data.ratio = 100
-      // }
-      if (node.id == data.pid) {
-        data.value = +(node.value * (data.ratio / 100)).toFixed(2)
-        //季度占比改变计算月度目标值
-      }
-      if (data.type == '2') {
-        data.children.forEach((val) => {
-          val.value = +(data.value * (val.ratio / 100)).toFixed(2)
-        });
-      }
+//设置单位
+function setSelect(data, tree) {
+  tree.forEach((node) => {
+
+    if (data.id == node.pid) {
+      node.unit = data.unit
+      node.children.forEach((val) => {
+        val.unit = data.unit
+      });
     }
-    //目标值改变根据子级占比计算
-    if (className == 'valueInput') {
-      if (node.pid == data.id) {
-        node.value = +(data.value * (node.ratio / 100)).toFixed(2)
-        //年度目标值改变月度目标
-        if (data.type == '1') {
-          node.children.forEach((val) => {
-            val.value = +(node.value * (val.ratio / 100)).toFixed(2)
-          });
-        }
+    if (node.children && node.children.length > 0) {
+      setSelect(data, node.children);
+    }
+  })
+
+}
+//改变值
+function setValueInput(data, tree) {
+  tree.forEach((node) => {
+
+    if (node.pid == data.id) {
+      node.value = +(data.value * (node.ratio / 100)).toFixed(2)
+      //年度目标值改变月度目标
+      if (data.type == '1') {
+        node.children.forEach((val) => {
+          val.value = +(node.value * (val.ratio / 100)).toFixed(2)
+        });
       }
     }
     if (node.children && node.children.length > 0) {
-      flattenTree(data, className, node.children);
+      setValueInput(data, node.children);
     }
-  });
+  })
+
+}
+
+
+// 目标值改变递归更新数据
+function flattenTree(data, className, tree, eventFn) {
+
+  if (className == 'ratioInput') {
+    setRatio(data, tree, eventFn) //设置占比
+    setValue(data, tree) //占比改变值更新
+
+  }
+  if (className == 'select') {
+    setSelect(data, tree,) //设置单位
+
+  }
+  //目标值改变根据子级占比计算
+  if (className == 'valueInput') {
+    setValueInput(data, tree) //改变值
+  }
 }

+ 1 - 1
vue.config.js

@@ -38,7 +38,7 @@ module.exports = {
         // target: 'http://192.168.1.132:18086', // 徐1
         // target: 'http://192.168.1.134:18086', //徐2
         //target: 'http://192.168.1.126:18086',
-        target: 'http://192.168.1.105:18086',
+        target: 'http://192.168.1.107:18086',
         // target: 'http://192.168.1.114:18086',
         changeOrigin: true, // 只有这个值为true的情况下 才表示开启跨域
         pathRewrite: {