bding 1 settimana fa
parent
commit
0e36364df2
44 ha cambiato i file con 1226 aggiunte e 709 eliminazioni
  1. 18 0
      src/api/modules/crmApi.js
  2. 13 1
      src/api/modules/rai/raiApi.js
  3. 5 0
      src/api/modules/sealApi.js
  4. BIN
      src/assets/img/contact_transfer.jpg
  5. 1 1
      src/components/searchDistPicker.vue
  6. 1 1
      src/views/Home.vue
  7. 10 0
      src/views/business_trip_manage/businessApplication.vue
  8. 10 0
      src/views/business_trip_manage/businessApproval.vue
  9. 24 2
      src/views/business_trip_manage/businessCalendar.vue
  10. 15 2
      src/views/business_trip_manage/components/tripApplicationDia.vue
  11. 19 0
      src/views/business_trip_manage/components/tripApproveDia.vue
  12. 14 5
      src/views/contract_manage/addContract.vue
  13. 1 1
      src/views/contract_manage/components/QyServiceTable.vue
  14. 12 0
      src/views/custom_manage/contacts/compontents/contactsColums.js
  15. 22 4
      src/views/custom_manage/contacts/contactsList.vue
  16. 1 1
      src/views/custom_manage/contacts/mixins/mutualAssistance.js
  17. 11 8
      src/views/custom_manage/contacts/mutualList.vue
  18. 13 10
      src/views/custom_manage/contacts/organizationList.vue
  19. 25 22
      src/views/custom_manage/contacts/wholeOrganization.vue
  20. 82 25
      src/views/custom_manage/contractStatistics.vue
  21. 12 9
      src/views/custom_manage/customList/applyTurn.vue
  22. 81 0
      src/views/custom_manage/customList/components/ContactTransferDlg.vue
  23. 326 280
      src/views/custom_manage/customList/components/raiPermissionbox.vue
  24. 15 1
      src/views/custom_manage/customList/customDetail.vue
  25. 4 4
      src/views/custom_manage/customList/updateServe.vue
  26. 3 1
      src/views/dataReport_manage/equityCustomStatistics.vue
  27. 5 10
      src/views/dataReport_manage/equityServiceStatistics.vue
  28. 2 0
      src/views/rai_manage/activityManage/components/addActivity.vue
  29. 2 0
      src/views/rai_manage/activityManage/components/addComopnents/ResearchDeduct.vue
  30. 85 67
      src/views/rai_manage/components/addChoiceness.vue
  31. 1 1
      src/views/rai_manage/components/matchingDlg.vue
  32. 6 6
      src/views/rai_manage/components/report_preview/choicenessPre.vue
  33. 2 2
      src/views/rai_manage/cygxManage/applyUserList.vue
  34. 3 3
      src/views/rai_manage/cygxManage/components/lableDlg.vue
  35. 1 2
      src/views/rai_manage/reportManage/appletsReport.vue
  36. 9 1
      src/views/roadshow_manage/compononts/addActivityCellDia.vue
  37. 2 2
      src/views/roadshow_manage/compononts/addMatterDia.vue
  38. 11 0
      src/views/roadshow_manage/compononts/addParticipateDia.vue
  39. 196 182
      src/views/roadshow_manage/compononts/showParticipateListDia.vue
  40. 46 40
      src/views/roadshow_manage/myCalendar.vue
  41. 5 0
      src/views/roadshow_manage/roleConfig/myCalendarConfig.js
  42. 80 14
      src/views/seal_manage/approvalList.vue
  43. 31 0
      src/views/seal_manage/updateSeal.vue
  44. 1 1
      src/views/system_manage/approvalManage.vue

+ 18 - 0
src/api/modules/crmApi.js

@@ -781,6 +781,16 @@ const customInterence = {
   getSimpleServiceList: () => {
     return http.get('/statistic_report/contract/service/simple')
   },
+  /**
+   * --------开票到款统计
+  */
+  /**
+   * 销售下拉
+   * @returns 
+   */
+  sellerSelectList: () => {
+    return http.get('/custom/seller/check/invoice_payment/list')
+  },
   /**
    * 获取客户合同商品到款列表
   * @param data.page_size - 每页数据量 - 必填
@@ -1073,6 +1083,14 @@ const customInterence = {
    */
   yananxuanPermissionOpen:(params)=>{
     return http.post("/custom/update/user/yananxuan/permission",params)
+  },
+  //查询移动记录列表
+    /**
+   * 
+   * @returns 
+   */
+  getCustomListMoveLog:(params)=>{
+      return http.get("/custom/user/listMoveLog",params)
   }
 };
 

+ 13 - 1
src/api/modules/rai/raiApi.js

@@ -1005,7 +1005,15 @@ const raiInterface = {
   getReportSelectionArticle: (params) => {
     return http.get("/cygx/reportSelection/getArticle", params);
   },
-
+  /**
+   *  获取综述报告
+   * @param {ThirdName} params
+   * @param {ChartPermissionId} params
+   * @returns
+   */
+  getReportSelectionThird_name: (params) => {
+    return http.post("/cygx/reportSelection/add/third_name", params);
+  },
   /**
    * 上
    * 周
@@ -1095,6 +1103,10 @@ const raiInterface = {
   industrialSubjectSearch: (params) => {
     return http.get("cygx/industrialSubject/search", params);
   },
+  // 查找标的
+  industrialAndSubjectSearch: (params) => {
+    return http.get("cygx/industrialAndSubject/search", params);
+  },
   // 查找标的 标的详情搜索
   industrialSubjectSearchInfo: (params) => {
     return http.get("/cygx/industrialSubject/searchInfo", params);

+ 5 - 0
src/api/modules/sealApi.js

@@ -70,6 +70,11 @@ const sealInterence={
 	//上传/更新签回附件
 	sealCheckFileUpload:params=>{
 		return http.post('/seal/uploadCheckBackFile',params)
+	},
+
+	//获取归属公司
+	getBelongCompany: params => {
+		return http.get('/seal/getAffiliatedCompany')
 	}
 }
 

BIN
src/assets/img/contact_transfer.jpg


+ 1 - 1
src/components/searchDistPicker.vue

@@ -106,7 +106,7 @@ export default {
                     }else{
                         this.city = {cityKey:'',cityName:this.cityInfo}
                     }
-                    if(this.city.cityKey){
+                    if(this.city.cityKey && this.showArea){
                         const areaResult = Object.entries(area_sorce[this.city.cityKey]).find(([key,val])=>val===this.areaInfo)||['',this.areaInfo]
                         this.area={areaKey:areaResult[0],areaName:areaResult[1]}
                     }else{

+ 1 - 1
src/views/Home.vue

@@ -62,7 +62,7 @@
                   </template>
                   <el-menu-item
                     v-for="child in item.children"
-                    :index="child.path=='etaForum'?'etaForum':child.path"
+                    :index="child.path=='etaForum'?$route.fullPath:child.path"
                     :path="child.path"
                     :key="child.path"
                     v-show="!child.hidden"

+ 10 - 0
src/views/business_trip_manage/businessApplication.vue

@@ -39,6 +39,11 @@
           {{ row.Transportation.indexOf('其他')!=-1?row.Transportation.substring(row.Transportation.indexOf('-')+1):row.Transportation }}
         </template>
       </el-table-column>
+      <el-table-column label="行程说明" show-overflow-tooltip prop="Itinerary" align="center">
+        <template slot-scope="{row}">
+          {{ row.Itinerary }}
+        </template>
+      </el-table-column>
       <el-table-column label="同行人" prop="PeerPeopleName" align="center" show-overflow-tooltip>
         <template slot-scope="{row}">
           {{ row.PeerPeopleName || '无' }}
@@ -262,4 +267,9 @@ import mPage from "@/components/mPage.vue";
       }
     }
   }
+</style>
+<style lang="scss">
+.el-tooltip__popper{ 
+  max-width:700px;
+} 
 </style>

+ 10 - 0
src/views/business_trip_manage/businessApproval.vue

@@ -36,6 +36,11 @@
           {{ row.Transportation.indexOf('其他')!=-1?row.Transportation.substring(row.Transportation.indexOf('-')+1):row.Transportation }}
         </template>
       </el-table-column>
+      <el-table-column label="行程说明" show-overflow-tooltip prop="Itinerary" align="center">
+        <template slot-scope="{row}">
+          {{ row.Itinerary }}
+        </template>
+      </el-table-column>
       <el-table-column label="同行人" prop="PeerPeopleName" align="center" show-overflow-tooltip>
         <template slot-scope="{row}">
           {{ row.PeerPeopleName || '无' }}
@@ -204,4 +209,9 @@ import mPage from "@/components/mPage.vue";
       }
     }
   }
+</style>
+<style lang="scss">
+.el-tooltip__popper{ 
+  max-width:700px;
+} 
 </style>

+ 24 - 2
src/views/business_trip_manage/businessCalendar.vue

@@ -108,14 +108,22 @@
           {{ detailItem.Province+' '+detailItem.City }}
         </div>        
         <div class="detail-item">
-          <div class="detail-item-label"> 出差事由:</div>
+          <div class="detail-item-label">出差事由:</div>
           {{ detailItem.Reason }}
         </div>
         <div class="detail-item">
           <div class="detail-item-label">交通工具:</div>
           {{ detailItem.Transportation && detailItem.Transportation.indexOf('其他')!=-1?
           detailItem.Transportation.substring(detailItem.Transportation.indexOf('-')+1):detailItem.Transportation }}
-        </div>        
+        </div>
+        <div class="detail-item">
+          <div class="detail-item-label">行程说明:</div>
+          <el-tooltip popper-class="item-top-intro" :disabled="detailItem.Itinerary&&detailItem.Itinerary.length<61" effect="dark" :content="detailItem.Itinerary" placement="top">
+            <div class="itinerary-text">
+              {{ detailItem.Itinerary }}
+            </div>
+          </el-tooltip>
+        </div>    
         <div class="detail-item" style="line-height: 20px;" v-show="detailItem.PeerPeopleName">
           <div class="detail-item-label">同行人:</div>
           {{ detailItem.PeerPeopleName }}
@@ -391,6 +399,15 @@ import bussinessTrip from '@/views/business_trip_manage/mixins/bussinessTrip'
         min-width: 80px;
         text-align: right;
       }
+      .itinerary-text{
+        width:100%;
+        overflow:hidden; 
+        text-overflow:ellipsis;
+        display:-webkit-box;
+        line-clamp: 5;
+        -webkit-box-orient:vertical;
+        -webkit-line-clamp:5;
+      }
     }
     .detail-date{
       margin-bottom: 14px;
@@ -400,3 +417,8 @@ import bussinessTrip from '@/views/business_trip_manage/mixins/bussinessTrip'
   }
 }
 </style>
+<style lang="scss">
+.item-top-intro{
+  max-width: 400px;
+}
+</style>

+ 15 - 2
src/views/business_trip_manage/components/tripApplicationDia.vue

@@ -47,6 +47,14 @@
           placeholder="请输入交通工具" v-if="dataForm.vehicle=='其他'"></el-input>
         </div>
       </el-form-item>
+      <el-form-item label="行程说明" prop="Itinerary">
+        <el-input
+          type="textarea"
+          :autosize="{ minRows: 2, maxRows: 4}"
+          placeholder="请输入行程说明"
+          v-model="dataForm.Itinerary">
+        </el-input>
+      </el-form-item>
       <el-form-item label="同行人" prop="companion" >
         <el-cascader :options="userList" v-model="companionSelectList" filterable 
         ref="companionCascader" @remove-tag="removeTag"
@@ -93,6 +101,7 @@ import searchDistPicker from '@/components/searchDistPicker.vue';
         if(value&&this.reapply.BusinessApplyId){
           this.dataForm={
             BusinessApplyId:this.reapply.BusinessApplyId,
+            Itinerary:this.reapply.Itinerary,
             arriveTime:this.reapply.ArriveDate,
             backTime:this.reapply.ReturnDate,
             province:this.reapply.Province,
@@ -125,10 +134,12 @@ import searchDistPicker from '@/components/searchDistPicker.vue';
           vehicle:'',
           companion:'',
           companionName:'',
-          otherVehicle:''
+          otherVehicle:'',
+          Itinerary:''
         },
         companionSelectList:[],
         rules:{
+          Itinerary:{required:true,message:"行程说明不能为空",trigger:'blur'},
           arriveTime:{required:true,message:"到达日期不能为空",trigger:'change'},
           backTime:{required:true,message:"返程日期不能为空",trigger:'change'},
           city:{required:true,message:"目的地不能为空",trigger:'change'},
@@ -212,7 +223,8 @@ import searchDistPicker from '@/components/searchDistPicker.vue';
           vehicle:'',
           companion:'',
           companionName:'',
-          otherVehicle:''
+          otherVehicle:'',
+          Itinerary:''
         }
         this.companionSelectList=[]
         this.$nextTick(()=>{
@@ -240,6 +252,7 @@ import searchDistPicker from '@/components/searchDistPicker.vue';
               Transportation:this.dataForm.vehicle=='其他'?`${this.dataForm.vehicle}-${this.dataForm.otherVehicle}`:this.dataForm.vehicle,
               PeerPeopleId:this.dataForm.companion,
               PeerPeopleName:this.dataForm.companionName,
+              Itinerary:this.dataForm.Itinerary
             }
             // console.log(params);
             if(this.dataForm.BusinessApplyId){

+ 19 - 0
src/views/business_trip_manage/components/tripApproveDia.vue

@@ -29,6 +29,13 @@
         approveItem.Transportation.substring(approveItem.Transportation.indexOf('-')+1):
         approveItem.Transportation }}
       </el-form-item>
+      <el-form-item label="行程说明">
+        <el-tooltip popper-class="item-top-intro" :disabled="approveItem.Itinerary&&approveItem.Itinerary.length<51" effect="dark" :content="approveItem.Itinerary" placement="top">
+          <div class="itinerary-text">
+            {{ approveItem.Itinerary }}
+          </div>
+        </el-tooltip>
+      </el-form-item>
       <el-form-item label="同行人" v-show="approveItem.PeerPeopleName">
         {{ approveItem.PeerPeopleName }}
       </el-form-item>
@@ -117,6 +124,15 @@ import {businessTripInterence} from "api/api.js"
 </script>
 
 <style lang="scss" scoped>
+.itinerary-text{
+  width: 100%;
+  overflow:hidden; 
+  text-overflow:ellipsis;
+  display:-webkit-box;
+  line-clamp: 3;
+  -webkit-box-orient:vertical;
+  -webkit-line-clamp:3;
+}
 .dialog-footer{
   text-align: center;
   padding:60px 40px 20px ;
@@ -125,4 +141,7 @@ import {businessTripInterence} from "api/api.js"
 
 <style lang="scss">
 @import "../style/trip-dialog.scss";
+.item-top-intro{
+  max-width: 400px !important;
+}
 </style>

+ 14 - 5
src/views/contract_manage/addContract.vue

@@ -63,7 +63,7 @@
               <span>{{ RoleType === "ficc_seller" ? "FICC" : "权益" }}</span>
             </el-form-item>
           </div>
-          <el-form-item label="合同类型" prop="constractType" class="border-top">
+          <el-form-item label="合同类型" prop="constractType" class="border-top" v-if="!raiCompanyType && !raiCompanyStatus">
             <el-radio-group v-model="formData.constractType">
               <div style="display:flex">
                 <div style="margin-right:10px;">
@@ -106,15 +106,17 @@
           </div>
 
           <div class="flex border-top">
-            <el-form-item label="合同金额" prop="price" style="width: 50%">
-              <el-input v-model="formData.price" @focus="handlePriceBoxFocus('price')" @blur="handlePriceBoxBlur('price')" placeholder="请输入合同金额" style="width: 220px"></el-input>
+            <el-form-item :label="raiCompanyType ? '服务费总报价' : '合同金额'" prop="price" style="width: 50%">
+              <el-input v-model="formData.price" @focus="handlePriceBoxFocus('price')" @blur="handlePriceBoxBlur('price')" :placeholder="raiCompanyType ? '请输入服务费总报价(优惠前)' : '请输入合同金额'" style="width: 220px"></el-input>
             </el-form-item>
             <span style="line-height: 40px">{{ formData.price | digitUppercase }}</span>
           </div>
 
           <div class="flex border-top">
-            <el-form-item label="优惠后金额" prop="price2" style="width: 50%">
-              <el-input v-model="formData.price2" @focus="handlePriceBoxFocus('price2')" @blur="handlePriceBoxBlur('price2')" placeholder="请输入优惠后金额" style="width: 220px"></el-input>
+            <el-form-item  :label="raiCompanyType ? '实际付款金额' : '优惠后金额'"  prop="price2" style="width: 50%">
+              <el-input v-model="formData.price2" @focus="handlePriceBoxFocus('price2')" @blur="handlePriceBoxBlur('price2')" 
+              :placeholder="raiCompanyType ? '请输入实际付款金额(优惠后)' : '请输入优惠后金额'"
+              style="width: 220px"></el-input>
             </el-form-item>
             <span style="line-height: 40px">{{ formData.price2 | digitUppercase }}</span>
           </div>
@@ -368,6 +370,9 @@ export default {
       selectServiceData: [],
       editValue: {}, //修改小套餐的value
       PayChannelOptions:[],//搜索出付款方列表
+
+      raiCompanyType: false,// 是否是权益客户类型
+      raiCompanyStatus: false// 权益客户状态
     };
   },
   created() {
@@ -497,6 +502,10 @@ export default {
         this.formData.customeXYM=res.Data.Item.CreditCode
         this.formData.province=res.Data.Item.Province
         this.formData.city=res.Data.Item.City
+        this.raiCompanyType = res.Data.RaiItem && res.Data.RaiItem.ProductName == '权益'
+        this.raiCompanyStatus = res.Data.RaiItem && res.Data.RaiItem.Status.includes('X类试用')
+        console.log( this.raiCompanyType);
+        
       }
       // 获取以前的合同自动 填充部分信息
       let res4=await contractInterface.getHistoryContract({CompanyId:item.CompanyId})

+ 1 - 1
src/views/contract_manage/components/QyServiceTable.vue

@@ -404,7 +404,7 @@ export default {
         }
       }
       // 45万 70万 医药、消费、科技、智造的升级
-      if([5,6,23,24,25,26,12].includes(row.ServiceTemplateId)){
+      if([5,6,23,24,25,26,12,27].includes(row.ServiceTemplateId)){
         if(columnIndex==1){
           return [1,2]
         }else if(columnIndex==2){

+ 12 - 0
src/views/custom_manage/contacts/compontents/contactsColums.js

@@ -362,6 +362,10 @@ export const tableColums = (type) => {
           label: "路演形式",
           key: "ActivityType",
         },
+        {
+          label: "路演主题",
+          key: "RoadShowTheme",
+        },
         {
           label: "主题标签",
           key: "LabelKeyWord",
@@ -951,6 +955,10 @@ export const organizationTableColums = (type) => {
           label: "路演形式",
           key: "ActivityType",
         },
+        {
+          label: "路演主题",
+          key: "RoadShowTheme",
+        },
         {
           label: "主题标签",
           key: "LabelKeyWord",
@@ -1548,6 +1556,10 @@ export const wholeOrganizationTableColums = (type) => {
           label: "路演形式",
           key: "ActivityType",
         },
+        {
+          label: "路演主题",
+          key: "RoadShowTheme",
+        },
         {
           label: "主题标签",
           key: "LabelKeyWord",

+ 22 - 4
src/views/custom_manage/contacts/contactsList.vue

@@ -55,18 +55,24 @@
     </div>
     <el-card>
       <el-table :data="tableData" style="width: 100%" border @sort-change="sortChangeHandle">
-        <el-table-column align="center" prop="RealName" width="90" label="姓名"> </el-table-column>
+        <el-table-column align="center" prop="RealName" width="90" label="姓名">
+          <template slot-scope="{ row }">
+            <span>{{ row.RealName }}</span>
+            
+            <img width="16" v-if="row.HaveMoveButton" style="vertical-align: middle; cursor: pointer" src="../../../assets/img/contact_transfer.jpg" alt="" @click="clickContactTransfer(row)" />
+          </template>
+        </el-table-column>
         <el-table-column align="center" prop="Mobile" width="110" label="手机号/邮箱">
           <template slot-scope="{ row }"> {{ row.Mobile || row.Email }} </template>
         </el-table-column>
         <el-table-column align="center" prop="CompanyName" label="公司名称">
-          <template slot-scope="{row}">
+          <template slot-scope="{ row }">
             <el-tooltip effect="dark" placement="top-start" content="过去4周,kp均未覆盖服务" v-if="row.IsUserMaker == -1">
               <span class="deletesty" @click="goDetail(row)">{{ row.CompanyName }}</span>
             </el-tooltip>
             <span v-else class="editsty" @click="goDetail(row)">{{ row.CompanyName }}</span>
             <!-- <span class="editsty" @click="goDetail(scope.row)">{{ scope.row.CompanyName }}</span> -->
-            </template>
+          </template>
         </el-table-column>
         <el-table-column align="center" prop="Status" width="110" label="状态"> </el-table-column>
         <el-table-column align="center" prop="SellerName" width="110" label="所属销售"> </el-table-column>
@@ -154,6 +160,7 @@
     <label-dlg :isShowLabelDlg.sync="isShowLabelDlg" :dlgLabelList.sync="dlgLabelList" @labelChildren="labelChildren" :userLabel="userLabel" />
     <remind-dlg :isShowRemindDlg.sync="isShowRemindDlg" :remindList.sync="remindList" />
     <FeedbackDlg :showFeedbackDlg.sync="showFeedbackDlg" :remindList.sync="remindList" />
+    <ContactTransfer :contactTransferDlgVisible.sync="contactTransferDlgVisible" :TransferMobile.sync="TransferMobile" />
   </div>
 </template>
 
@@ -165,9 +172,11 @@ import InteractionDlg from "./compontents/interactionDlg.vue";
 import LabelDlg from "./compontents/labelDlg.vue";
 import RemindDlg from "./compontents/remindDlg.vue";
 import FeedbackDlg from "./compontents/feedbackDlg.vue";
+import ContactTransfer from "../customList/components/ContactTransferDlg.vue";
+
 export default {
   name: "",
-  components: { mPage, mDialog, InteractionDlg, LabelDlg, RemindDlg, FeedbackDlg },
+  components: { mPage, mDialog, InteractionDlg, LabelDlg, RemindDlg, FeedbackDlg, ContactTransfer },
   props: {},
   data() {
     return {
@@ -224,6 +233,10 @@ export default {
       isShowRemindDlg: false, // 消息提醒的弹框
       remindList: {}, // 消息提醒的数据
       showFeedbackDlg: false, // 交流反馈的弹框
+
+      TransferMobile: 0,
+
+      contactTransferDlgVisible: false, //联系人转移的弹框
     };
   },
   computed: {},
@@ -443,6 +456,11 @@ export default {
       this.remindList = item;
       this.showFeedbackDlg = true;
     },
+    // 点击了共享联系人
+    clickContactTransfer(item) {
+      this.contactTransferDlgVisible = true;
+      this.TransferMobile = item.Mobile;
+    },
   },
   /* 页面跳转前记录参数 */
   beforeRouteLeave(to, from, next) {

+ 1 - 1
src/views/custom_manage/contacts/mixins/mutualAssistance.js

@@ -60,7 +60,7 @@ export const mutualMixin = {
       return meetingList;
     },
     showSelectBox() {
-      return this.activeName === 1 || this.activeName === 2 || this.activeName === 11 || this.activeName === 12;
+      return this.activeName === 1 || this.activeName === 2 || this.activeName === 11;
     },
     tableColumsList() {
       let arr = this.activeTypeName === 2 ? this.tableColums.filter((_) => _.key != "PermissionName") : this.tableColums;

+ 11 - 8
src/views/custom_manage/contacts/mutualList.vue

@@ -12,8 +12,8 @@
         <span :class="['item', activeName == item.Source && 'active']" v-for="item in list" :key="item.Source" @click="handleTabsClick(item)">{{ item.PermissionName }} ({{ item.TotalNum }})</span>
       </div>
       <!--  -->
-      <div class="son-box" v-if="showSelectBox">
-        <div style="display: flex; align-items: center" v-if="activeName === 2">
+      <div class="son-box" v-if="showSelectBox || activeName == 15">
+        <div style="display: flex; align-items: center" v-if="activeName === 2 && showSelectBox">
           <el-checkbox-group v-model="checkActiveList" @change="dataChangeHandler">
             <el-checkbox :label="item.key" v-for="item in screenList" :key="item.key">{{ item.name }}</el-checkbox>
           </el-checkbox-group>
@@ -30,15 +30,17 @@
             type="date"
             range
             value-type="format"
-            :placeholder="activeName === 2 ? '活动时间' : '阅读时间'"
+            :placeholder="activeName === 2 ? '活动时间' : activeName === 15 ? '路演时间' : '阅读时间'"
             :editable="false"
             @change="dateChange"
             style="width: 200px; margin-right: 20px"
           />
-          <button :class="['button-sty', { act: filterObj.month === item.label }]" v-for="item in monthLabel" @click="toggleMonth(item.label)" :key="item.label">
-            {{ item.label }}
-          </button>
-          <el-input v-if="activeName === 2" placeholder="活动名称" v-model="searchVal" style="width: 200px" @input="handleSearch" clearable>
+          <template v-if="showSelectBox">
+            <button :class="['button-sty', { act: filterObj.month === item.label }]" v-for="item in monthLabel" @click="toggleMonth(item.label)" :key="item.label">
+              {{ item.label }}
+            </button>
+          </template>
+          <el-input v-if="activeName === 2 && showSelectBox" placeholder="活动名称" v-model="searchVal" style="width: 200px" @input="handleSearch" clearable>
             <i slot="prefix" class="el-input__icon el-icon-search"></i>
           </el-input>
           <a :href="exportExcel" download>
@@ -107,7 +109,7 @@ export default {
   props: {},
   computed: {
     exportExcel() {
-      let baseUrl = process.env.API_ROOT + "/cygx/user/export/interaction";
+      let baseUrl = process.env.API_ROOT + "/cygx/user/interaction/detail";
       let token = localStorage.getItem("auth") || "";
       let paramStr = "";
       let params = {
@@ -119,6 +121,7 @@ export default {
         StartDate: this.start_date,
         KeyWord: this.searchVal,
         ClassType: this.activeTypeName,
+        IsExport:true
       };
       for (let key in params) {
         paramStr = `${paramStr}&${key}=${params[key]}`;

+ 13 - 10
src/views/custom_manage/contacts/organizationList.vue

@@ -24,14 +24,14 @@
             <i class="el-icon-info"></i>
           </el-tooltip>
         </div>
-        <div class="dataReport-top"  v-if="showSelectBox">
+        <div class="dataReport-top" v-if="showSelectBox || activeName == 15">
           <template>
             <date-picker
               v-model="filterObj.date"
               type="date"
               range
               value-type="format"
-              :placeholder="activeName == 2 ? '活动时间' : '阅读时间'"
+              :placeholder="activeName == 2 ? '活动时间' : activeName === 15 ? '路演时间' : '阅读时间'"
               :editable="false"
               @change="dateChange"
               style="width: 200px; margin-right: 20px"
@@ -40,13 +40,15 @@
               {{ item.label }}
             </button>
           </template>
-          <el-input placeholder="手机号/邮箱/姓名" v-model="searchVal" style="width: 200px; margin-right: 20px" @input="handleSearchActivity" clearable>
-            <i slot="prefix" class="el-input__icon el-icon-search"></i>
-          </el-input>
-          <el-input v-if="activeName == 2" placeholder="活动名称" v-model="activityName" style="width: 200px" @input="handleSearchActivity" clearable>
-            <i slot="prefix" class="el-input__icon el-icon-search"></i>
-          </el-input>
-          <a :href="exportExcel" download >
+          <template v-if="showSelectBox">
+            <el-input placeholder="手机号/邮箱/姓名" v-model="searchVal" style="width: 200px; margin-right: 20px" @input="handleSearchActivity" clearable>
+              <i slot="prefix" class="el-input__icon el-icon-search"></i>
+            </el-input>
+            <el-input v-if="activeName == 2" placeholder="活动名称" v-model="activityName" style="width: 200px" @input="handleSearchActivity" clearable>
+              <i slot="prefix" class="el-input__icon el-icon-search"></i>
+            </el-input>
+          </template>
+          <a :href="exportExcel" download>
             <button class="button-sty act">下载EXCEL</button>
           </a>
         </div>
@@ -112,7 +114,7 @@ export default {
   mixins: [mutualMixin],
   computed: {
     exportExcel() {
-      let baseUrl = process.env.API_ROOT + "/cygx/user/company/export/interaction";
+      let baseUrl = process.env.API_ROOT + "/cygx/user/company/interaction/detail";
       let token = localStorage.getItem("auth") || "";
       let paramStr = "";
       let params = {
@@ -125,6 +127,7 @@ export default {
         KeyWord: this.searchVal,
         ActivityName: this.activityName,
         ClassType: this.activeTypeName,
+        IsExport:true
       };
       for (let key in params) {
         paramStr = `${paramStr}&${key}=${params[key]}`;

+ 25 - 22
src/views/custom_manage/contacts/wholeOrganization.vue

@@ -20,38 +20,40 @@
             <i class="el-icon-info"></i>
           </el-tooltip>
         </div>
-        <div class="dataReport-top" v-if="showSelectBox">
+        <div class="dataReport-top" v-if="showSelectBox || activeName == 15">
           <template>
             <date-picker
               v-model="filterObj.date"
               type="date"
               range
               value-type="format"
-              :placeholder="activeName == 2 ? '活动时间' : '阅读时间'"
+              :placeholder="activeName == 2 ? '活动时间' : activeName === 15 ? '路演时间' : '阅读时间'"
               :editable="false"
               @change="dateChange"
               style="width: 200px; margin-right: 20px"
             />
           </template>
-          <el-cascader
-            v-model="sales"
-            placeholder="所属销售"
-            style="width: 200px; margin-right: 20px"
-            :options="salesArr"
-            :props="defaultSalesProps"
-            :show-all-levels="false"
-            collapse-tags
-            clearable
-            filterable
-            @change="handleSearchActivity"
-          >
-          </el-cascader>
-          <el-input placeholder="手机号/邮箱/姓名/公司名" v-model="searchVal" style="width: 220px; margin-right: 20px" @input="handleSearchActivity" clearable>
-            <i slot="prefix" class="el-input__icon el-icon-search"></i>
-          </el-input>
-          <el-input v-if="activeName == 2" placeholder="活动名称" v-model="activityName" style="width: 200px" @input="handleSearchActivity" clearable>
-            <i slot="prefix" class="el-input__icon el-icon-search"></i>
-          </el-input>
+          <template v-if="showSelectBox">
+            <el-cascader
+              v-model="sales"
+              placeholder="所属销售"
+              style="width: 200px; margin-right: 20px"
+              :options="salesArr"
+              :props="defaultSalesProps"
+              :show-all-levels="false"
+              collapse-tags
+              clearable
+              filterable
+              @change="handleSearchActivity"
+            >
+            </el-cascader>
+            <el-input placeholder="手机号/邮箱/姓名/公司名" v-model="searchVal" style="width: 220px; margin-right: 20px" @input="handleSearchActivity" clearable>
+              <i slot="prefix" class="el-input__icon el-icon-search"></i>
+            </el-input>
+            <el-input v-if="activeName == 2" placeholder="活动名称" v-model="activityName" style="width: 200px" @input="handleSearchActivity" clearable>
+              <i slot="prefix" class="el-input__icon el-icon-search"></i>
+            </el-input>
+          </template>
           <a :href="exportExcel" download>
             <button class="button-sty act">下载EXCEL</button>
           </a>
@@ -121,7 +123,7 @@ export default {
   mixins: [mutualMixin],
   computed: {
     exportExcel() {
-      let baseUrl = process.env.API_ROOT + "/cygx/user/companyList/export/interaction";
+      let baseUrl = process.env.API_ROOT + "/cygx/user/company/list";
       let token = localStorage.getItem("auth") || "";
       let salesArr = [];
       if (this.sales.length) {
@@ -140,6 +142,7 @@ export default {
         ActivityName: this.activityName,
         AdminId: salesArr.join(","),
         ClassType: this.activeTypeName,
+        IsExport:true
       };
       for (let key in params) {
         paramStr = `${paramStr}&${key}=${params[key]}`;

+ 82 - 25
src/views/custom_manage/contractStatistics.vue

@@ -2,26 +2,51 @@
   <div id="customer-statistics-container" class="customer-statistics-container">
     <div class="search-zone">
       <div class="search-box">
-        <el-input v-model="searchParams.Keyword" placeholder="请输入客户名称" clearable class="search-item"
-        @input="searchList" prefix-icon="el-icon-search" style="width: 240px;" ></el-input>
-        <el-cascader :options="serviceList" style="width: 240px;margin: 0 0 8px 20px;" filterable v-model="checkedService"
-          @change="serviceChange" placeholder="请选择套餐信息" clearable collapse-tags :show-all-levels="false"
-          :props="{multiple:true,label:'title',value:'service_template_id',children:'children',emitPath:false}" key="serivce" >
-        </el-cascader>
-        <div class="date-box">
-          <el-date-picker v-model="searchDate" type="daterange" @change="currentDateTab=0" style="max-width: 240px;margin-right: 20px;"
-            value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
-          <el-select v-model="searchParams.TimeType" placeholder="请选择日期类型" @change="searchList"
-          style="width: 240px;margin-right: 20px;" clearable>
-            <el-option :label="item.label" :value="item.value" v-for="item in timeTypeData" :key="item.value"></el-option>
-          </el-select>
-          <div class="composition-button-tabs">
-            <el-button size="large" v-for="(item,index) in dateButtonData" :key="item.tabId"
-            class="date-button" 
-            :class="[index==0?'first-button':index==(dateButtonData.length-1)?'last-button':'inner-button',currentDateTab==item.tabId?'selectTab':'']" 
-            @click="changeDateType(item)">{{ item.text }}</el-button>
-          </div>
-        </div>
+        <el-form label-width="0" :inline="true" :model="formInline">
+            <el-form-item label="">
+              <el-input v-model="searchParams.Keyword" placeholder="请输入客户名称" clearable class="search-item"
+              @input="searchList" prefix-icon="el-icon-search" style="width: 240px;" ></el-input>
+            </el-form-item>
+            <el-form-item label="" v-if="currentSdId==AdminId ||Role=='admin'||Role=='ficc_admin'||Role=='rai_admin'">
+              <el-cascader :options="saleList" style="width: 240px;margin: 0 0 8px 0;" filterable v-model="checkedSale"
+                @change="saleChange" placeholder="请选择销售" clearable collapse-tags :show-all-levels="false"
+                :props="{multiple:true,label:'RealName',value:'AdminId',children:'ChildrenList',emitPath:false}" key="sale" >
+              </el-cascader>
+            </el-form-item>
+            <el-form-item label="">
+              <el-cascader :options="serviceList" style="width: 240px;margin: 0 0 8px 0;" filterable v-model="checkedService"
+                @change="serviceChange" placeholder="请选择套餐信息" clearable collapse-tags :show-all-levels="false"
+                :props="{multiple:true,label:'title',value:'service_template_id',children:'children',emitPath:false}" key="serivce" >
+              </el-cascader>
+            </el-form-item>
+            <el-form-item label="">
+              <div class="date-box">
+                <el-date-picker v-model="searchDate" type="daterange" @change="currentDateTab=0" style="max-width: 240px;margin-right: 15px;"
+                  value-format="yyyy-MM-dd" start-placeholder="开始日期" end-placeholder="结束日期"></el-date-picker>
+                <div class="composition-button-tabs">
+                  <el-button size="large" v-for="(item,index) in dateButtonData" :key="item.tabId"
+                  class="date-button" 
+                  :class="[index==0?'first-button':index==(dateButtonData.length-1)?'last-button':'inner-button',currentDateTab==item.tabId?'selectTab':'']" 
+                  @click="changeDateType(item)">{{ item.text }}</el-button>
+                </div>
+              </div>
+            </el-form-item>
+            <el-form-item label="">
+              <el-select v-model="searchParams.TimeType" placeholder="请选择日期类型" @change="searchList" style="width: 240px;" clearable>
+                  <el-option :label="item.label" :value="item.value" v-for="item in timeTypeData" :key="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="">
+              <el-select v-model="searchParams.HasInvoice" placeholder="请选择开票状态" @change="searchList" style="width: 240px;" clearable>
+                  <el-option :label="item.label" :value="item.value" v-for="item in invoiceData" :key="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="">
+              <el-select v-model="searchParams.HasPayment" placeholder="请选择到款状态" @change="searchList" style="width: 240px;" clearable>
+                  <el-option :label="item.label" :value="item.value" v-for="item in paymentData" :key="item.value"></el-option>
+              </el-select>
+            </el-form-item>
+        </el-form>
       </div>
     </div>
     <div class="amount-show-zone">
@@ -174,12 +199,17 @@ import {customInterence} from '@/api/api.js'
 
       this.payTypeArray=[{id:0,type:''},{id:1,type:'年付'},{id:2,type:'半年付'},{id:3,type:'季付'},{id:4,type:'次付'}]
       this.timeTypeData=[{label:'开票日期',value:1},{label:'到款日期',value:2},{label:'开票日期&到款日期',value:3}]
+      this.invoiceData=[{label:'未开票',value:0 },{label:'已开票',value:1}]
+      this.paymentData=[{label:'未到款',value:0 },{label:'到款',value:1}]
       this.dateButtonData=[{text:'近1周',tabId:1,type:'week',diff:1},{text:'近1月',tabId:2,type:'month',diff:1},
         {text:'近2月',tabId:3,type:'month',diff:2},{text:'近3月',tabId:4,type:'month',diff:3}]
 
       return {
+        currentSdId:process.env.NODE_ENV=='production'?13:233,
         serviceList:[],
+        saleList:[],
         checkedService:[],
+        checkedSale:[],
         searchParams:{
           CurrentIndex:1,
           PageSize:10,
@@ -191,6 +221,9 @@ import {customInterence} from '@/api/api.js'
           TimeType:1,
           SortType:'',
           SortParam:'',
+          HasInvoice:'',// 开票状态 0未开票,1已开票
+          HasPayment:'',// 到款状态 0未到款,1到款
+          SellerIds:''
         },
         currentDateTab:0,
         searchDate:[startDate,endDate],
@@ -206,6 +239,9 @@ import {customInterence} from '@/api/api.js'
       }
     },
     created(){
+      if(this.currentSdId==this.AdminId ||this.Role=='admin'||this.Role=='ficc_admin'||this.Role=='rai_admin'){
+        this.saleSelect()
+      }
       this.getSimpleServiceList()
       this.getList()
     },
@@ -223,8 +259,16 @@ import {customInterence} from '@/api/api.js'
     },
     computed:{
       isAdmin(){
-        return localStorage.getItem('Role').indexOf('admin')!=-1
-      }
+        return localStorage.getItem('Role').indexOf('admin')!=-1 || localStorage.getItem('RoleIdentity').indexOf('ficc_group')!=-1
+      },
+      Role() {
+        let role = localStorage.getItem('Role') || '';
+        return role;
+      },
+      AdminId() {
+        let role = localStorage.getItem('AdminId') || '';
+        return role;
+      },
     },
     methods: {
       getSimpleServiceList(){
@@ -266,6 +310,10 @@ import {customInterence} from '@/api/api.js'
         this.searchParams.CurrentIndex = pageNo
         this.getList()
       },
+      saleChange(value){
+        this.searchParams.SellerIds = value.join(',')
+        this.searchList()
+      },
       serviceChange(value){
         this.searchParams.ServiceType = value.join(',')
         this.searchList()
@@ -299,6 +347,13 @@ import {customInterence} from '@/api/api.js'
       disabledCheck(e){
         if(!this.domList[e]) return true
         return this.domList[e].offsetWidth<=this.domList[e].parentNode.offsetWidth
+      },
+      // 获取销售下拉列表
+      saleSelect(){
+        customInterence.sellerSelectList({}).then(res=>{
+          console.log(res)
+          this.saleList = res.Data.List || []
+        })
       }
     },
     mounted(){
@@ -323,18 +378,17 @@ import {customInterence} from '@/api/api.js'
       background-color: white;
       border-radius: 4px;
       .search-box{
-        margin-left: -20px;
         display: flex;
         align-items: center;
         flex-wrap: wrap;
         .search-item{
           width: 232px;
-          margin: 0 0 8px 20px;
+          margin: 0 0 8px 0;
         }
         .date-box{
           display: flex;
           align-items: center;
-          margin: 0 0 8px 20px;
+          margin: 0 0 8px 0;
           .composition-button-tabs{
             white-space: nowrap;
             .date-button{
@@ -468,4 +522,7 @@ import {customInterence} from '@/api/api.js'
       }
     }
   }
+  .el-form-item{
+    margin-bottom: 0;
+  }
 </style>

+ 12 - 9
src/views/custom_manage/customList/applyTurn.vue

@@ -49,7 +49,7 @@
 					ref="formData" 
 					label-width="100px"
 					class="demo-ruleForm">
-						<el-form-item label="合同类型" prop="contract_type" style="width:100%" v-if="formData.contract_type">
+						<el-form-item label="合同类型" prop="contract_type" style="width:100%" v-if="formData.contract_type && !isRaiCompany">
 							<el-radio style="margin-right:5px" v-model="formData.contract_type" :label="formData.contract_type"/>
 							<el-tooltip
 								style="cursor: pointer;"
@@ -96,7 +96,7 @@
 							<i style="color:#f00;fontSize:20px;position:absolute;left:-90px;top:10%;">*</i>
 							<el-input 
 							v-model.number="formData.amount"
-							placeholder="请输入金额"
+							:placeholder="isRaiCompany ? '请输入实际付款金额(优惠后)':'请输入金额'"
 							style="width:400px"
 							clearable></el-input>
 							<span style="color:#666;">元</span>
@@ -200,7 +200,10 @@ export default {
 	computed:{
 		isXClassCustom(){
 			return	this.companyInfo.Status.includes('永续') || this.companyInfo.Status.includes('X类试用')
-		}
+		},
+		isRaiCompany(){
+			return this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益'
+		},
 	},
 	data () {
 		return {
@@ -273,15 +276,15 @@ export default {
 					this.selectedQuarters = res.Data.Item.Quarter.split(',')
 					let newArr = [];
 					/* 处理权限列表 */
-					if((this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') && !this.isXClassCustom ) {
+					if(this.isRaiCompany && !this.isXClassCustom ) {
 						res.Data.Item.PermissionList[0].Items.map(item => {
 							item.disabled=item.isIndeterminate=false								
 							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
 						})
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54,138,62].includes(key.ChartPermissionId))
+						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {
@@ -317,15 +320,15 @@ export default {
 			}).then(res => {
 				let newArr = [];
 				if(res.Ret === 200) {
-					if((this.companyInfo.CompanyType == '权益' || this.isRoleType== '权益') && !this.isXClassCustom) {
+					if(this.isRaiCompany && !this.isXClassCustom) {
 						res.Data.List[0].Items.map(item => {
 							item.disabled=item.isIndeterminate=false								
 							if(item.ChartPermissionId==22 && (!item.Child)) this.hasNoChild=true
 						})
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54,138,62].includes(key.ChartPermissionId))
+						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,20031,20032,52,53,54].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {

+ 81 - 0
src/views/custom_manage/customList/components/ContactTransferDlg.vue

@@ -0,0 +1,81 @@
+<template>
+  <div class="container">
+    <el-dialog
+      :visible.sync="contactTransferDlgVisible"
+      :close-on-click-modal="false"
+      :modal-append-to-body="true"
+      :append-to-body="true"
+      title="联系人转移记录"
+      @close="$emit('update:contactTransferDlgVisible', false)"
+      width="800px"
+      v-dialogDrag
+      center
+    >
+      <el-table :data="dataList" border max-height="300">
+        <el-table-column label="转移时间" prop="CreateTime" align="center"> </el-table-column>
+        <el-table-column label="原公司" prop="CompanyName" align="center"> </el-table-column>
+        <el-table-column label="移至公司" prop="CompanyNameMove" align="center"> </el-table-column>
+      </el-table>
+      <div class="container-close">
+        <el-button @click="$emit('update:contactTransferDlgVisible', false)">关闭</el-button>
+      </div>
+    </el-dialog>
+  </div>
+</template>
+
+<script>
+import { customInterence } from "@/api/api.js";
+
+export default {
+  name: "",
+  components: {},
+  props: {
+    contactTransferDlgVisible: {
+      type: Boolean,
+      default: false,
+    },
+    TransferMobile:{
+      type: Number,
+      default: 0,
+    }
+  },
+  data() {
+    return {
+      dataList: [],
+    };
+  },
+  computed: {},
+  watch: {
+    contactTransferDlgVisible: {
+      handler(val) {
+        if (val) {
+          this.getDateList();
+        }
+      },
+      deep: true,
+      immediate: true,
+    },
+  },
+  created() {},
+  mounted() {},
+  methods: {
+    async getDateList() {
+      const res = await customInterence.getCustomListMoveLog({
+        Mobile: this.TransferMobile,
+      });
+      if (res.Ret === 200) {
+        this.dataList = res.Data.List;
+      }
+      console.log(res, "-----");
+    },
+  },
+};
+</script>
+<style scoped>
+.container-close {
+  margin: 20px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+}
+</style>

+ 326 - 280
src/views/custom_manage/customList/components/raiPermissionbox.vue

@@ -1,59 +1,90 @@
 <template>
   <div class="rai-checkbox-content" id="rai-checkbox-content">
     <div class="rai-checkbox-bigS-box">
-      <el-checkbox v-model="itB.Checked" v-for="itB in data.ItemsBig" :key="itB.PermissionName"
-      @change="(e)=>bigServeCheck(e,itB,data)"
-      :indeterminate="itB.isIndeterminate && !itB.disabled" class="bigS-item" 
-      :disabled="itB.disabled || (formData.qyBigServeCheck!=getQyBigServeCheckNumber(itB.PermissionName) && formData.qyBigServeCheck!=0)"
-      >{{itB.PermissionName}}</el-checkbox>
+      <el-checkbox
+        v-model="itB.Checked"
+        v-for="itB in data.ItemsBig"
+        :key="itB.PermissionName"
+        @change="(e) => bigServeCheck(e, itB, data)"
+        :indeterminate="itB.isIndeterminate && !itB.disabled"
+        class="bigS-item"
+        :disabled="itB.disabled || (formData.qyBigServeCheck != getQyBigServeCheckNumber(itB.PermissionName) && formData.qyBigServeCheck != 0)"
+        >{{ itB.PermissionName }}</el-checkbox
+      >
     </div>
     <div class="rai-checkbox-box">
       <div class="rai-checkbox-main-container">
         <div class="rai-checkbox-main-row">
-          <div class="rai-checkbox-item" v-for="it in data.Items" :key="it.ChartPermissionId" 
-          :style="{'width':it.ChartPermissionId==23?'84px':it.ChartPermissionId==30?'110px':'168px'}">
+          <div
+            class="rai-checkbox-item"
+            v-for="it in data.Items"
+            :key="it.ChartPermissionId"
+            :style="{ width: [23, 148, 62].includes(it.ChartPermissionId) ? '84px' : it.ChartPermissionId == 30 ? '110px' : '168px' }"
+          >
             <template v-if="it.Child">
-              <el-checkbox :label="it.PermissionName" style="margin-right: 8px;" v-model="it.Checked"
-              @change="handleItemCheck(it,data)" :indeterminate="it.isIndeterminate" :disabled="it.disabled"></el-checkbox>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset;" @change="handleQYChecked(it,data)" 
-              :disabled="it.disabled">
-                <div class="rai-checkbox-serve-box" >
-                  <el-checkbox :label="itChild.ChartPermissionId" v-for="itChild in it.Child" :key="itChild.ChartPermissionId"
-                  class="small-item" >{{ itChild.PermissionName }}</el-checkbox>
+              <el-checkbox
+                :label="it.PermissionName"
+                style="margin-right: 8px"
+                v-model="it.Checked"
+                @change="handleItemCheck(it, data)"
+                :indeterminate="it.isIndeterminate"
+                :disabled="it.disabled"
+              ></el-checkbox>
+              <el-checkbox-group v-model="data.CheckList" style="height: unset" @change="handleQYChecked(it, data)" :disabled="it.disabled">
+                <div class="rai-checkbox-serve-box">
+                  <el-checkbox :label="itChild.ChartPermissionId" v-for="itChild in it.Child" :key="itChild.ChartPermissionId" class="small-item">{{ itChild.PermissionName }}</el-checkbox>
                 </div>
               </el-checkbox-group>
             </template>
             <template v-else>
-              <el-checkbox-group v-model="data.CheckList" style="height: unset;margin-right: 8px;" @change="handleQYChecked(it,data)">
+              <el-checkbox-group v-model="data.CheckList" style="height: unset; margin-right: 8px" @change="handleQYChecked(it, data)">
                 <el-checkbox :label="it.ChartPermissionId" :disabled="it.disabled">{{ it.PermissionName }}</el-checkbox>
               </el-checkbox-group>
             </template>
           </div>
         </div>
-        <el-checkbox-group v-model="data.CheckList" style="height: unset;">
-          <div class="rai-checkbox-upS-box" >
-            <el-checkbox :label="itU.ChartPermissionId" v-for="itU in data.ItemsUp" :key="itU.ChartPermissionId"
-            class="rai-checkbox-item upS-item" :disabled="itU.disabled" 
-            @change="(e) => handleUpdateChecked(e,itU.PermissionName,data)">{{ itU.PermissionName }}</el-checkbox>
+        <el-checkbox-group v-model="data.CheckList" style="height: unset">
+          <div class="rai-checkbox-upS-box">
+            <el-checkbox
+              :label="itU.ChartPermissionId"
+              v-for="itU in data.ItemsUp"
+              :key="itU.ChartPermissionId"
+              class="rai-checkbox-item upS-item"
+              :disabled="itU.disabled"
+              @change="(e) => handleUpdateChecked(e, itU.PermissionName, data)"
+              >{{ itU.PermissionName }}</el-checkbox
+            >
           </div>
         </el-checkbox-group>
       </div>
       <div class="rai-checkbox-private-container">
-        <el-checkbox-group v-model="data.CheckList" style="height: unset;">
-          <div class="rai-checkbox-upS-box" >
-            <el-checkbox :label="itP.ChartPermissionId" v-for="(itP,inP) in data.ItemsPrivate" 
-            :key="itP.ChartPermissionId" :disabled="itP.disabled" :style="{'height':hasNoChild?'48px':'95px','width':itP.ChartPermissionId == 52 && data.CheckList.includes(52)? '220px' : itP.PermissionName.includes('研选')?'130px':'84px'}"
-            class="rai-checkbox-item upS-item" @change="e => handlePrivateChecked(e,itP,data)">
-            {{ itP.PermissionName }}
-            <p v-if="itP.ChartPermissionId == 31" class="checkbox-text">(30000元/年)</p>
-            <p v-if="itP.ChartPermissionId == 52" class="checkbox-text">(点/2000元)</p>
-            <input @click.stop @input="validateInteger" placeholder="请输入点数" style="margin-left:10px" v-if="itP.ChartPermissionId == 52 && data.CheckList.includes(52)" v-model="minus_sign_val" />
+        <el-checkbox-group v-model="data.CheckList" style="height: unset">
+          <div class="rai-checkbox-upS-box">
+            <el-checkbox
+              :label="itP.ChartPermissionId"
+              v-for="(itP, inP) in data.ItemsPrivate"
+              :key="itP.ChartPermissionId"
+              :disabled="itP.disabled"
+              :style="{ height: hasNoChild ? '48px' : '95px', width: itP.ChartPermissionId == 52 && data.CheckList.includes(52) ? '220px' : itP.PermissionName.includes('研选') ? '130px' : '84px' }"
+              class="rai-checkbox-item upS-item"
+              @change="(e) => handlePrivateChecked(e, itP, data)"
+            >
+              {{ itP.PermissionName }}
+              <p v-if="itP.ChartPermissionId == 31" class="checkbox-text">(30000元/年)</p>
+              <p v-if="itP.ChartPermissionId == 52" class="checkbox-text">(点/2000元)</p>
+              <input
+                @click.stop
+                @input="validateInteger"
+                placeholder="请输入点数"
+                style="margin-left: 10px"
+                v-if="itP.ChartPermissionId == 52 && data.CheckList.includes(52)"
+                v-model="minus_sign_val"
+              />
             </el-checkbox>
           </div>
         </el-checkbox-group>
-        <div class="rai-checkbox-notice-box" v-if="data.ItemsUp.length>0">
-          <span class="rai-checkbox-notice" v-if="formData.qyBigServeCheck">
-            同时包含{{formData.qyBigServeCheck==2?"10":"16"}}次专项调研</span>
+        <div class="rai-checkbox-notice-box" v-if="data.ItemsUp.length > 0">
+          <span class="rai-checkbox-notice" v-if="formData.qyBigServeCheck"> 同时包含{{ formData.qyBigServeCheck == 2 ? "12" : "16" }}次专项调研</span>
           <p class="rai-checkbox-notice" v-if="equityGroupDisabled(data.CheckList)">同时包含升级行业各5次专项调研</p>
         </div>
       </div>
@@ -62,268 +93,283 @@
 </template>
 
 <script>
-  export default {
-    name:'raiPermissionbox',
-    data() {
-      return {
-        minus_sign_val:''
+export default {
+  name: "raiPermissionbox",
+  data() {
+    return {
+      minus_sign_val: "",
+    };
+  },
+  props: {
+    data: {
+      required: true,
+      type: Object,
+    },
+    formData: {
+      //formData.qyBigServeCheck  0-无 1- 70万 2- 45万
+      required: true,
+      type: Object,
+    },
+    hasNoChild: {
+      type: Boolean,
+      default: false,
+    },
+  },
+  created() {
+    // 回显
+    if (this.data.CheckList && this.data.CheckList.length > 0) {
+      this.data.Items.map((item) => {
+        if (item.Child) {
+          item.Child.map((t) => {
+            this.handleQYChecked(item, this.data);
+          });
+        } else {
+          this.handleQYChecked(item, this.data);
+        }
+      });
+      this.data.ItemsPrivate.map((itP) => {
+        let flag = this.data.CheckList.includes(itP.ChartPermissionId);
+        this.handlePrivateChecked(flag, itP, this.data);
+      });
+      this.data.ItemsUp.map((itU) => {
+        let flag = this.data.CheckList.includes(itU.ChartPermissionId);
+        this.handleUpdateChecked(flag, itU.PermissionName, this.data);
+      });
+    }
+  },
+  methods: {
+    // 套餐选中逻辑修复
+    bigServeCheck(value, itB, item) {
+      this.formData.qyBigServeCheck = value ? this.getQyBigServeCheckNumber(itB.PermissionName) : 0;
+
+      // 更新 `indeterminate` 状态
+      item.ItemsBig.forEach((itB) => (itB.isIndeterminate = false));
+
+      const bigServeItems = this.hasNoChild
+        ? [22, 21, 20, 19, 23, 30]
+        : process.env.NODE_ENV === "production"
+        ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 30, 148, 62]
+        : [22, 37, 21, 36, 20, 35, 19, 34, 23, 30, 148, 62];
+
+      if (value) {
+        item.CheckList = [...new Set([...item.CheckList, ...bigServeItems])];
+      } else {
+        item.CheckList = item.CheckList.filter((t) => !bigServeItems.includes(t));
+      }
+
+      if (!this.hasNoChild) {
+        // 更新子级状态
+        item.Items.forEach((ele) => {
+          if (ele.Child) {
+            ele.Checked = value;
+            this.handleItemCheck(ele, item);
+          }
+        });
+      }
+    },
+    // 医药、消费、科技、智造(有主客观)选中
+    // 父子选中逻辑修复
+    handleItemCheck(it, item) {
+      const childIds = it.Child.map((t) => t.ChartPermissionId);
+
+      if (it.Checked) {
+        item.CheckList = [...new Set([...item.CheckList, ...childIds])];
+      } else {
+        item.CheckList = item.CheckList.filter((t) => !childIds.includes(t));
       }
+
+      this.updateParentStatus(it, item);
     },
-    props:{
-      data:{
-        required:true,
-        type:Object
-      },
-      formData:{ //formData.qyBigServeCheck  0-无 1- 70万 2- 45万
-        required:true,
-        type:Object
-      },
-      hasNoChild:{
-        type:Boolean,
-        default:false
+    // 更新父级状态
+    updateParentStatus(it, item) {
+      let count = 0;
+
+      if (it.Child) {
+        it.Child.forEach((child) => {
+          if (item.CheckList.includes(child.ChartPermissionId)) count++;
+        });
+        it.Checked = count === it.Child.length;
+        it.isIndeterminate = count > 0 && count < it.Child.length;
+      }
+
+      // 更新禁用状态
+      const relatedItem = item.ItemsUp.find((up) => up.PermissionName.includes(it.PermissionName));
+      if (relatedItem) {
+        relatedItem.disabled = count !== 0;
       }
     },
-    created(){
-      // 回显
-      if(this.data.CheckList && this.data.CheckList.length>0){
-        this.data.Items.map(item =>{
-          if(item.Child){
-            item.Child.map(t =>{
-              this.handleQYChecked(item,this.data)
-            })
-          }else{
-            this.handleQYChecked(item,this.data)
-          }
-        })
-        this.data.ItemsPrivate.map(itP =>{
-          let flag = this.data.CheckList.includes(itP.ChartPermissionId)
-          this.handlePrivateChecked(flag,itP,this.data)
-        })
-        this.data.ItemsUp.map(itU =>{
-          let flag = this.data.CheckList.includes(itU.ChartPermissionId)
-          this.handleUpdateChecked(flag,itU.PermissionName,this.data)
-        })
+    handleQYChecked(it, item) {
+      // console.log(it,item);
+      let count = 0;
+      if (it.Child) {
+        // 有主客观
+        it.Child.map((t) => {
+          if (item.CheckList.includes(t.ChartPermissionId)) count++;
+        });
+        it.Checked = count == 2;
+        it.isIndeterminate = count == 1;
+      }
+      if (this.hasNoChild) {
+        if (item.CheckList.includes(it.ChartPermissionId)) count++;
       }
+      // 设置升级套餐的禁用
+      let changeItem = item.ItemsUp.find((itUp) => itUp.PermissionName.includes(it.PermissionName));
+      if (changeItem) changeItem.disabled = count != 0;
+      // 设置大套餐的状态
+      let bigServeCheckNum;
+      if (this.formData.qyBigServeCheck) {
+        //qyBigServeCheck有值就作用在对应的大套餐
+        bigServeCheckNum = this.formData.qyBigServeCheck == 1 ? 1 : 0;
+      } else {
+        // 默认作用在45万上 原本有状态的话,就作用在有状态的大套餐
+        bigServeCheckNum = item.ItemsBig[1].isIndeterminate || item.ItemsBig[1].Checked ? 1 : 0;
+      }
+      // 正式服 各行业的客观的chartPermissionId和测试服的不一样
+      let allChartPermissionIds = process.env.NODE_ENV === "production" ? [22, 39, 21, 38, 20, 37, 19, 36, 23, 30, 148, 62] : [22, 37, 21, 36, 20, 35, 19, 34, 23, 30, 148, 62];
+
+      let bigServeItems = this.hasNoChild ? [22, 21, 20, 19, 23, 30] : allChartPermissionIds;
+      if (bigServeItems.every((t) => item.CheckList.includes(t))) {
+        item.ItemsBig[bigServeCheckNum].Checked = true;
+        this.formData.qyBigServeCheck = this.getQyBigServeCheckNumber(item.ItemsBig[bigServeCheckNum].PermissionName);
+      } else {
+        item.ItemsBig[bigServeCheckNum].Checked = false;
+        this.formData.qyBigServeCheck = 0;
+      }
+      item.ItemsBig[bigServeCheckNum].isIndeterminate = bigServeItems.some((t) => item.CheckList.includes(t)) && !item.ItemsBig[bigServeCheckNum].Checked;
     },
-    methods:{
-      // 套餐选中
-      bigServeCheck(value,itB,item){
-        // console.log(value,item);
-        this.formData.qyBigServeCheck = value?this.getQyBigServeCheckNumber(itB.PermissionName):0
-        item.ItemsBig.map(itB => itB.isIndeterminate=false)
-        if(value){
-          // 策略
-          item.CheckList= [...new Set([...item.CheckList,23,30])]
-        }else{
-          item.CheckList = item.CheckList.filter(t => ![23,30].includes(t))
+    handleUpdateChecked(value, name, item) {
+      let isDisabled = item.ItemsUp.some((itU) => item.CheckList.includes(itU.ChartPermissionId));
+      // 设置大套餐禁用
+      item.ItemsBig.map((itb) => (itb.disabled = isDisabled));
+      // 设置基础套餐禁用
+      item.Items.find((its) => name.includes(its.PermissionName)).disabled = value;
+    },
+    handlePrivateChecked(value, itP, item) {
+      if (![20032, 20031, 31].includes(itP.ChartPermissionId)) return;
+      // 买方严选的互斥
+      item.ItemsPrivate.forEach((itPri) => {
+        if ([20032, 20031, 31].includes(itPri.ChartPermissionId) && itP.ChartPermissionId != itPri.ChartPermissionId && value) {
+          itPri.disabled = true;
+        } else {
+          itPri.disabled = false;
         }
-        if(this.hasNoChild){
-          // 没有主客观
-          if(value){
-            item.CheckList= [...new Set([...item.CheckList,22, 21, 20, 19])]
-          }else{
-            item.CheckList = item.CheckList.filter(t => ![22, 21, 20, 19].includes(t))
+      });
+    },
+    equityGroupDisabled(item) {
+      return item.some((key) => key > 100000);
+    },
+    getQyBigServeCheckNumber(permissionName) {
+      return permissionName.includes("70") ? 1 : 2;
+    },
+    // 数字输入校验
+    validateInteger() {
+      this.minus_sign_val = this.minus_sign_val.replace(/[^0-9]/g, "");
+      if (this.minus_sign_val !== "") {
+        this.minus_sign_val = parseInt(this.minus_sign_val, 10);
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped>
+.rai-checkbox-content {
+  // width: 100%;
+  // height: 160px;
+  padding: 20px 0 20px 20px;
+  border: 1px dashed #aab4cc;
+  // display: flex;
+  .rai-checkbox-bigS-box {
+    display: flex;
+    .bigS-item {
+      display: inline-flex;
+      align-items: center;
+      padding: 4px 8px;
+      height: 22px;
+      margin: 0 20px 20px 0;
+    }
+  }
+  .rai-checkbox-box {
+    display: flex;
+    // flex-wrap: wrap;
+    .rai-checkbox-main-container {
+      .rai-checkbox-main-row {
+        display: flex;
+        .small-item {
+          display: inline-flex;
+          align-items: center;
+          border: solid 1px #dcdfe6;
+          padding: 4px 12px;
+          height: 48px;
+          width: 84px;
+          margin-right: -1px;
+          margin-bottom: -1px;
+          &:first-child {
+            margin-top: -1px;
           }
-          // 设置升级禁用状态
-          item.ItemsUp.map(u =>{
-            u.disabled=value
-          })
-        }else{
-          item.Items.map(ele =>{
-            if(ele.Child){
-              ele.Checked=value
-              this.handleItemCheck(ele,item)
-            }
-          })
-        }
-      },
-      // 医药、消费、科技、智造(有主客观)选中
-      handleItemCheck(it,item){
-        // console.log(it,item);
-        it.isIndeterminate=false
-        let childIds=it.Child.map(t => t.ChartPermissionId)
-        if(it.Checked){
-          item.CheckList= [...new Set([...item.CheckList,...childIds])]
-        }else{
-          item.CheckList = item.CheckList.filter(t => !childIds.includes(t))
-        }
-        this.handleQYChecked(it,item)
-      },
-      handleQYChecked(it,item){
-        // console.log(it,item);
-        let count=0
-        if(it.Child){
-          // 有主客观
-          it.Child.map(t => {
-            if(item.CheckList.includes(t.ChartPermissionId)) count++
-          })
-          it.Checked=count==2
-          it.isIndeterminate=count==1
         }
-        if(this.hasNoChild){
-          if(item.CheckList.includes(it.ChartPermissionId)) count++
-        }
-        // 设置升级套餐的禁用
-        let changeItem=item.ItemsUp.find(itUp => itUp.PermissionName.includes(it.PermissionName))
-        if(changeItem) changeItem.disabled=count!=0
-        // 设置大套餐的状态
-        let bigServeCheckNum
-        if(this.formData.qyBigServeCheck){
-          //qyBigServeCheck有值就作用在对应的大套餐
-          bigServeCheckNum=this.formData.qyBigServeCheck==1?1:0
-        }else{
-          // 默认作用在45万上 原本有状态的话,就作用在有状态的大套餐
-          bigServeCheckNum= item.ItemsBig[1].isIndeterminate || item.ItemsBig[1].Checked?1:0
+      }
+    }
+    .rai-checkbox-private-container {
+      .rai-checkbox-notice-box {
+        display: flex;
+        align-items: center;
+        border: solid 1px #dcdfe6;
+        border-left: none;
+        height: 48px;
+        margin-right: -1px;
+        margin-left: -276px;
+        padding-left: 200px;
+        .rai-checkbox-notice {
+          color: #f00;
         }
-        // 正式服 各行业的客观的chartPermissionId和测试服的不一样
-        let allChartPermissionIds=process.env.NODE_ENV === 'production'?[22,39,21,38,20,37,19,36,23,30]:[22,37,21,36,20,35,19,34,23,30]
-        
-        let bigServeItems=this.hasNoChild?[22,21,20,19,23,30]:allChartPermissionIds
-        if(bigServeItems.every(t => item.CheckList.includes(t))){
-          item.ItemsBig[bigServeCheckNum].Checked=true
-          this.formData.qyBigServeCheck=this.getQyBigServeCheckNumber(item.ItemsBig[bigServeCheckNum].PermissionName)
-        }else{
-          item.ItemsBig[bigServeCheckNum].Checked=false
-          this.formData.qyBigServeCheck=0
+      }
+    }
+    .rai-checkbox-upS-box {
+      display: flex;
+      .upS-item {
+        position: relative;
+        justify-content: flex-start;
+        .checkbox-text {
+          position: absolute;
+          font-size: 12px;
+          color: #999;
+          bottom: 15px;
+          left: 20px;
         }
-        item.ItemsBig[bigServeCheckNum].isIndeterminate=
-        bigServeItems.some(t =>item.CheckList.includes(t)) && (!item.ItemsBig[bigServeCheckNum].Checked)
-      },
-      handleUpdateChecked(value,name,item){
-        let isDisabled = item.ItemsUp.some(itU => item.CheckList.includes(itU.ChartPermissionId))
-        // 设置大套餐禁用
-        item.ItemsBig.map(itb => itb.disabled=isDisabled)
-        // 设置基础套餐禁用
-        item.Items.find(its => name.includes(its.PermissionName)).disabled=value
-      },
-      handlePrivateChecked(value,itP,item){
-        if(![20032,20031,31].includes(itP.ChartPermissionId)) return 
-        // 买方严选的互斥
-        item.ItemsPrivate.forEach(itPri => {
-         if([20032,20031,31].includes(itPri.ChartPermissionId)&&itP.ChartPermissionId!=itPri.ChartPermissionId && value){
-             itPri.disabled =true
-          }else {
-             itPri.disabled =false
-          }
-        })
-      },
-      equityGroupDisabled(item){
-        return item.some(key=> key>100000);
-      },
-      getQyBigServeCheckNumber(permissionName){
-        return permissionName.includes('70')?1:2
-      },
-      // 只允许输入数字和删除键
-      validateInteger() {
-        this.minus_sign_val = this.minus_sign_val.replace(/[^0-9]/g, '');
-
-        // 如果输入不为空,则转换为整数
-        if (this.minus_sign_val !== '') {
-          this.minus_sign_val = parseInt(this.minus_sign_val, 10);
+        input {
+          width: 90px;
+          height: 30px;
+          border-radius: 4px;
+          padding-left: 10px;
+          border: 1px solid #dcdfe6;
         }
       }
     }
+    .rai-checkbox-item {
+      display: flex;
+      align-items: center;
+      justify-content: space-between;
+      border: solid 1px #dcdfe6;
+      margin-bottom: -1px;
+      margin-right: -1px;
+      padding-left: 12px;
+      min-height: 48px;
+      width: 168px;
+      .rai-checkbox-serve-box {
+        display: flex;
+        flex-direction: column;
+        align-items: flex-start;
+        height: unset;
+      }
+    }
   }
-</script>
-
-<style lang="scss" scoped>
-	.rai-checkbox-content {
-		// width: 100%;
-		// height: 160px;
-		padding: 20px 0 20px 20px;
-		border:1px dashed #aab4cc;
-		// display: flex;
-		.rai-checkbox-bigS-box{
-			display: flex;
-			.bigS-item{
-				display: inline-flex;
-				align-items: center;
-				padding: 4px 8px;
-				height: 22px;
-				margin:0 20px 20px 0;
-			}
-		}
-		.rai-checkbox-box{
-			display: flex;
-			// flex-wrap: wrap;
-			.rai-checkbox-main-container{
-				.rai-checkbox-main-row{
-					display: flex;
-					.small-item{
-						display: inline-flex;
-						align-items: center;
-						border: solid 1px #DCDFE6;
-						padding: 4px 12px;
-						height: 48px;
-						width: 84px;
-						margin-right: -1px;
-						margin-bottom:-1px;
-						&:first-child{
-							margin-top:-1px;
-						}
-					}
-				}
-			}
-			.rai-checkbox-private-container{
-				.rai-checkbox-notice-box{
-					display: flex;
-					align-items: center;
-					border: solid 1px #DCDFE6;
-          border-left: none;
-					height: 48px;
-					margin-right: -1px;
-					margin-left: -192px;
-					padding-left: 200px;
-					.rai-checkbox-notice {
-						color: #f00;
-					}
-				}
-			}
-			.rai-checkbox-upS-box{
-				display: flex;
-				.upS-item{
-          position: relative;
-					justify-content: flex-start;
-          .checkbox-text {
-            position: absolute;
-            font-size: 12px;
-            color: #999;
-            bottom: 15px;
-            left: 20px;
-          }
-          input {
-            width: 90px;
-            height: 30px;
-            border-radius: 4px;
-            padding-left: 10px;
-            border: 1px solid #dcdfe6;
-          }
-				}
-			}
-			.rai-checkbox-item{
-				display: flex;
-				align-items: center;
-				justify-content: space-between;
-				border: solid 1px #DCDFE6;
-				margin-bottom:-1px;
-				margin-right: -1px;
-				padding-left: 12px;
-				min-height: 48px;
-				width: 168px;
-				.rai-checkbox-serve-box{
-					display: flex;
-					flex-direction: column;
-					align-items: flex-start;
-					height: unset;
-				}
-			}
-		}
-	}
+}
 </style>
 <style lang="scss">
-	#rai-checkbox-content{
-		.el-checkbox{
-			color: #333333;
-		}
-	}
-</style>
+#rai-checkbox-content {
+  .el-checkbox {
+    color: #333333;
+  }
+}
+</style>

+ 15 - 1
src/views/custom_manage/customList/customDetail.vue

@@ -234,6 +234,7 @@
 							@click="reviewCard(scope.row.BusinessCardUrl)">
 							<img src="~@/assets/img/icons/like-heart.png" class="name-follow-heart" v-if="scope.row.IsFollow==1">
 							<span :class="{'isShared':scope.row.IsShared}">{{scope.row.RealName}}</span>
+							<img v-if="scope.row.HaveMoveButton" width="16" style="vertical-align: middle;cursor: pointer;" src="../../../assets/img/contact_transfer.jpg" alt="" @click="clickContactTransfer(scope.row)">
 						</template>
 					</el-table-column>
 					<el-table-column prop="Position" label="职位" align="center" min-width="80px"></el-table-column>
@@ -716,6 +717,8 @@
 			@close="isPreview=false"
 		/>
 		<HistoricalNotesDlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId"/>
+		<ContactTransfer :contactTransferDlgVisible.sync="contactTransferDlgVisible" :TransferMobile.sync="TransferMobile"/>
+
 	</div>	
 </template>
 
@@ -736,9 +739,10 @@ import DeductDetailDlg from './components/deductDetailDlg.vue'
 import HistoryContract from '../compontents/historyContract.vue'
 
 import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
+import ContactTransfer from './components/ContactTransferDlg.vue'
 export default {
 	name:'',
-	components: { Ctimeline, Contactdia, Readia, ElImageViewer, CpessionTable, pdf, chartAuthDialog, ExportData, CpessionTableEquity, ProductReadInfo, DeductDetailDlg, HistoryContract, HistoricalNotesDlg },
+	components: { Ctimeline, Contactdia, Readia, ElImageViewer, CpessionTable, pdf, chartAuthDialog, ExportData, CpessionTableEquity, ProductReadInfo, DeductDetailDlg, HistoryContract, HistoricalNotesDlg, ContactTransfer},
 	computed:{
 		Role() {
 			let role = localStorage.getItem('Role') || '';
@@ -869,6 +873,9 @@ export default {
 
 			historicalNotesDlgVisible:false,//历史备注的弹框
 			historicalNotesId: 0,
+
+			contactTransferDlgVisible: false, //联系人转移的弹框
+			TransferMobile:0
 		};
 	},
 	methods: {
@@ -1690,6 +1697,13 @@ export default {
       this.historicalNotesDlgVisible = true;
 	  this.historicalNotesId = Number(this.companyId);
     },
+
+	// 点击了共享联系人
+	clickContactTransfer(item) {
+		this.contactTransferDlgVisible = true;
+		this.TransferMobile = item.Mobile;
+	},
+	
 	},
 	mounted() {
 		this.getDetail();

+ 4 - 4
src/views/custom_manage/customList/updateServe.vue

@@ -432,8 +432,8 @@ export default {
 						})
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.Item.PermissionList.length&&res.Data.Item.PermissionList.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54,138,62].includes(key.ChartPermissionId))
+						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {
@@ -508,8 +508,8 @@ export default {
 						})
 						/* 处理数据把复选框 拆分成三个*/
 						res.Data.List.length&&res.Data.List.forEach(item => {
-						let arr = item.Items.filter(key=> [22,21,20,19,23,30].includes(key.ChartPermissionId))
-						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54,138,62].includes(key.ChartPermissionId))
+						let arr = item.Items.filter(key=> [22,21,20,19,23,30,148,62].includes(key.ChartPermissionId))
+						let ItemsPrivate = item.Items.filter(key=> [29,31,52,20031,20032,53,54].includes(key.ChartPermissionId))
 						let ItemsUp = item.Items.filter(key=> key.PermissionName.includes('升级'))
 						let ItemsBig = item.Items.filter(key=> key.ChartPermissionId==0)
 							let obj = {

+ 3 - 1
src/views/dataReport_manage/equityCustomStatistics.vue

@@ -424,7 +424,7 @@ export default {
       this.page_no = 1;
       this.getTableData();
     },
-    notPackageDifferenceChange(type) {
+    notPackageDifferenceChange(type) {      
       if (this.PackageDifference == type) {
         this.PackageDifference = "";
       } else {
@@ -502,6 +502,8 @@ export default {
     },
     /* 切换数据类型 */
     toggleType(label) {
+      console.log(this.filterObj.data_type);
+      
       this.filterObj.data_type = label;
       this.incrementTableColums = equityTableColums(this.filterObj.data_type);
       this.noRenewalReasonId = "";

+ 5 - 10
src/views/dataReport_manage/equityServiceStatistics.vue

@@ -83,12 +83,12 @@
         <el-table-column align="center" prop="Status" label="当前状态" width="80"> </el-table-column>
         <el-table-column align="center" prop="SellerName" label="销售" width="100"> </el-table-column>
         <el-table-column align="center" prop="ShareSeller" label="服务组销售" width="100"> </el-table-column>
-        <el-table-column align="center" prop="StartDate" label="合同期限" width="180">
+        <el-table-column align="center" prop="StartDate" sortable="custom" label="合同期限" width="180">
           <template slot-scope="{ row }">
             <span>{{ row.StartDate }}~{{ row.EndDate }}</span>
           </template>
         </el-table-column>
-        <el-table-column align="center" prop="Money" sortable label="合同金额" width="110"> </el-table-column>
+        <el-table-column align="center" prop="Money" sortable="custom" label="合同金额" width="110"> </el-table-column>
         <el-table-column align="center" prop="PermissionName" label="签约套餐"> </el-table-column>
         <el-table-column align="center" prop="ThisWeekAmount" width="118">
           <template slot="header" slot-scope="{}">
@@ -192,6 +192,7 @@ export default {
       isServiceDetailsShow: false, //服务明细弹框
       dlgForm: {},
       sortType: "",
+      sortParam: "",
       lableOptions: [],
       tagType: "",
       tagId: "",
@@ -213,8 +214,6 @@ export default {
       }
       let SellerIds = [];
       if (this.filterObj.serveTypeId && this.filterObj.serveTypeId.length) {
-        console.log(this.filterObj.serveTypeId);
-
         SellerIds = this.filterObj.serveTypeId.map((item) => {
           return item[item.length - 1];
         });
@@ -240,8 +239,6 @@ export default {
     },
     // crm 15.9.1 区分权益FICC的展示
     isRoleType() {
-      console.log(localStorage.getItem("RoleType"), "=============");
-
       return localStorage.getItem("RoleType") || "";
     },
   },
@@ -302,8 +299,6 @@ export default {
       }
       let SellerIds = [];
       if (this.filterObj.serveTypeId && this.filterObj.serveTypeId.length) {
-        console.log(this.filterObj.serveTypeId);
-
         SellerIds = this.filterObj.serveTypeId.map((item) => {
           return item[item.length - 1];
         });
@@ -319,6 +314,7 @@ export default {
         Status: this.filterObj.status,
         SortType: this.sortType,
         KeyWord: this.searchVal,
+        SortParam: this.sortParam,
       });
       if (res.Ret === 200) {
         this.tableData = res.Data.List || [];
@@ -328,7 +324,7 @@ export default {
 
     sortChangeHandle({ column, prop, order }) {
       this.sortType = order === "ascending" ? "asc" : order === "descending" ? "desc" : "";
-      this.page = 1;
+      this.sortParam = prop == "Money" ? "money" : prop == "StartDate" ? "endDate" : "";
       this.getDataList();
     },
     /* 详情页 */
@@ -392,7 +388,6 @@ export default {
       const res = await dataMainInterface.getRaiServeCustomSellerList();
       if (res.Ret === 200) {
         this.customSellerList = res.Data || [];
-        console.log(this.customSellerList, res);
       }
     },
     // 点击了历史留言

+ 2 - 0
src/views/rai_manage/activityManage/components/addActivity.vue

@@ -562,6 +562,7 @@ export default {
           RefPage.isCanAppointmentMinutes = Data.IsCanAppointmentMinutes == 1 ? true : false;
           RefPage.isYidongConduct = Data.IsYidongConduct == 1 ? true : false;
           RefPage.isExternalLabel = Data.IsExternalLabel == 1 ? true : false;
+          RefPage.isZoom = Data.IsZoom == 1 ? true : false;
           RefPage.isCanOutboundCall = Data.IsCanOutboundCall == 1 ? true : false;
           RefPage.isDeduct = Data.IsResearchPoints == 1 ? true : false;
           RefPage.provideEmail = Data.IsNeedEmail == 1 ? true : false;
@@ -694,6 +695,7 @@ export default {
         VideoDetail,
         IsYidongConduct: RefPage.isYidongConduct ? 1 : 0,
         IsExternalLabel: RefPage.isExternalLabel ? 1 : 0,
+        IsZoom: RefPage.isZoom ? 1 : 0,
         IsCanOutboundCall: RefPage.isCanOutboundCall ? 1 : 0,
         IsResearchPoints: RefPage.isDeduct ? 1 : 0,
         IsNeedEmail: RefPage.provideEmail ? 1 : 0,

+ 2 - 0
src/views/rai_manage/activityManage/components/addComopnents/ResearchDeduct.vue

@@ -8,6 +8,7 @@
     </el-checkbox>
     <el-checkbox v-if="isResearch && [1, 3, 5, 8].includes(cactivityType)" v-model="isShowHz"> 同时在弘则活动页展示 </el-checkbox>
     <el-checkbox v-if="cactivityType == 3" v-model="isExternalLabel"> 外部资源 </el-checkbox>
+    <el-checkbox v-if="cactivityType == 3" v-model="isZoom"> zoom办会(请用zoom模板建会) </el-checkbox>
     <template v-if="cactivityType == 7 || cactivityType == 2">
       <el-checkbox v-model="isYidongConduct">
         易董办会
@@ -97,6 +98,7 @@ export default {
       isYidongConduct: false, // 易懂办会
       isCanOutboundCall: false, // 可提供外呼
       isExternalLabel: false, //外部资源
+      isZoom:false, //是否是Zoom模版
       institutionName: "", //机构名称
       isDeduct: false, // 研选扣点
       isBClass: false, // B类非公开

+ 85 - 67
src/views/rai_manage/components/addChoiceness.vue

@@ -61,8 +61,8 @@
             <div v-show="industryIndex == index">
               <RichText v-model="item.BodyChartSummary" :ref="'logic' + index" :spareId="'logictest' + index" :isText="contentTextLogic" />
               <draggable :list="item.List" animation="300" class="classification" filter=".addIndustrial" :move="onMove" @update="ificationSortChange">
-                <div v-for="(val, num) in item.List" :key="val.IndustrialSubjectId" class="industrial" @click="ificationIndustrialBtn(val, num)" :class="num == ificationIndustrial ? 'pitch' : ''">
-                  <span style="margin-right: 19px">{{ val.IndustrialSubjectName }}</span>
+                <div v-for="(val, num) in item.List" :key="val.ShowName" class="industrial" @click="ificationIndustrialBtn(val, num)" :class="num == ificationIndustrial ? 'pitch' : ''">
+                  <span style="margin-right: 19px">{{ val.ShowName }}</span>
                   <span v-if="num == ificationIndustrial">
                     <img src="~@/assets/img/icons/edit1.png" style="width: 12px; height: 12px; marginright: 10px" @click="editText(val, num)" />
                     <i class="el-icon-close" @click="deleteClassify(val, num)"></i>
@@ -70,7 +70,7 @@
                 </div>
                 <div class="addIndustrial" @click="addMulti" v-if="industryIndex == index">
                   <i class="el-icon-plus"></i>
-                  <span>添加标的</span>
+                  <span>添加标的/赛道</span>
                 </div>
               </draggable>
               <template v-for="(val, num) in item.List">
@@ -123,7 +123,7 @@
         <span style="font-size: 16px">{{ dialogText }}</span>
       </div>
       <div class="dlg-content">
-        <el-autocomplete class="inline-input" v-model="stateValue" :trigger-on-focus="false" :fetch-suggestions="handleSearchResult" placeholder="请输入标的名称" clearable></el-autocomplete>
+        <el-autocomplete class="inline-input" v-model="stateValue" :trigger-on-focus="false" :fetch-suggestions="handleSearchResult" placeholder="请输入标的或赛道名称" clearable></el-autocomplete>
       </div>
       <span slot="footer" class="dialog-footer">
         <el-button v-if="dialogText == '编辑'" type="primary" @click="editconfirmPerson">确定</el-button>
@@ -323,7 +323,7 @@ export default {
     editText(item, index) {
       this.dialogText = "编辑";
       this.chartPermissionId = item.ChartPermissionId;
-      this.stateValue = item.IndustrialSubjectName;
+      this.stateValue = item.IndustrialSubjectName || item.ShowName;
       this.addDialogVisible = true;
       this.editNum = index;
     },
@@ -337,6 +337,13 @@ export default {
         .then(() => {
           this.industryList[this.industryIndex].List.splice(index, 1);
           this.ificationIndustrial = 0;
+          let itemList = this.industryList[0].List[0];
+          this.industrialSubjectName = itemList.IndustrialManagementName || "";
+          this.overviewList = {
+            ArticleId: itemList.OverviewArticleId,
+            Title: itemList.OverviewArticleTitle,
+            IsShowOverviewArticle: itemList.IsShowOverviewArticle,
+          };
           this.$message({
             type: "success",
             message: "删除成功!",
@@ -351,7 +358,7 @@ export default {
     },
     //添加产业
     addMulti() {
-      this.dialogText = "添加标的";
+      this.dialogText = "添加标的/赛道";
       this.addDialogVisible = true;
     },
     //弹框的取消事件
@@ -362,78 +369,88 @@ export default {
     //弹框的确认事件
     async confirmPerson() {
       if (this.stateValue) {
-        const arr = this.subjectList.find((item) => item.SubjectName === this.stateValue);
-        if (!arr) {
-          this.$message.error("输入正确的标的");
-          return;
-        }
+        const arr = this.subjectList.find((item) => item.ShowName === this.stateValue);
         let overviewList = {};
-        const res = await raiInterface.getReportSelectionArticle({
-          IndustrialSubjectId: arr.IndustrialSubjectId,
-        });
+        const res = !arr
+          ? await raiInterface.getReportSelectionThird_name({
+              ThirdName: this.stateValue,
+              ChartPermissionId: this.chartPermissionId,
+            })
+          : await raiInterface.getReportSelectionArticle({
+              IndustrialSubjectId: arr.IndustrialSubjectId,
+            });
         if (res.Ret === 200) {
           overviewList = res.Data;
-        }
-        this.industryList.forEach((item) => {
-          if (item.ChartPermissionId == this.chartPermissionId) {
-            if (item.List.length > 0) {
-              var isNext = item.List.some((item) => item.IndustrialSubjectName == arr.SubjectName);
+          this.industryList.forEach((item) => {
+            if (item.ChartPermissionId == this.chartPermissionId) {
+              if (item.List.length > 0) {
+                var isNext = item.List.some((item) => item.ShowName == (arr ? arr.ShowName : res.Data.ThirdName));
+              }
+              if (isNext) return this.$message.error("标的重复!");
+              item.List.push({
+                Body: "",
+                ChartPermissionId: this.chartPermissionId,
+                IndustrialManagementId: arr ? arr.IndustrialManagementId + "" : "",
+                IndustrialManagementName: arr ? arr.IndustryName : "",
+                IndustrialSubjectId: arr ? arr.IndustrialSubjectId + "" : "",
+                IndustrialSubjectName: arr ? arr.SubjectName : "",
+                ShowName: arr ? arr.ShowName || arr.IndustryName : res.Data.ThirdName,
+                ThirdId: res.Data.ThirdId || "",
+                ThirdName: res.Data.ThirdName || "",
+                CompanyLabel: [{ name: "", value: item.List.length + 1 }],
+                OverviewArticleId: overviewList.ArticleId || 0,
+                OverviewArticleTitle: overviewList.Title || "",
+                IsShowOverviewArticle: overviewList.IsShowOverviewArticle || 0,
+              });
             }
-            if (isNext) return this.$message.error("标的重复!");
-            item.List.push({
-              Body: "",
-              ChartPermissionId: this.chartPermissionId,
-              IndustrialManagementId: arr.IndustrialManagementId + "",
-              IndustrialManagementName: arr.IndustryName,
-              IndustrialSubjectId: arr.IndustrialSubjectId + "",
-              IndustrialSubjectName: arr.SubjectName,
-              CompanyLabel: [{ name: "", value: item.List.length + 1 }],
-              OverviewArticleId: overviewList.ArticleId,
-              OverviewArticleTitle: overviewList.Title,
-              IsShowOverviewArticle: overviewList.IsShowOverviewArticle,
-            });
-          }
-        });
+          });
+        }
       }
       this.stateValue = "";
       this.addDialogVisible = false;
     },
     async editconfirmPerson() {
       if (this.stateValue) {
-        const arr = this.subjectList.find((item) => item.SubjectName === this.stateValue);
-        if (!arr) {
-          this.$message.error("输入正确的标的");
-          return;
-        }
+        const arr = this.subjectList.find((item) => item.ShowName === this.stateValue);
         let overviewList = {};
-        const res = await raiInterface.getReportSelectionArticle({
-          IndustrialSubjectId: arr.IndustrialSubjectId,
-        });
+        const res = !arr
+          ? await raiInterface.getReportSelectionThird_name({
+              ThirdName: this.stateValue,
+              ChartPermissionId: this.chartPermissionId,
+            })
+          : await raiInterface.getReportSelectionArticle({
+              IndustrialSubjectId: arr.IndustrialSubjectId,
+            });
         if (res.Ret === 200) {
           overviewList = res.Data;
-        }
-        this.industryList.forEach((item) => {
-          if (item.ChartPermissionId == this.chartPermissionId) {
-            if (item.List.length > 0) {
-              var isNext = item.List.some((item) => item.IndustrialSubjectName == arr.SubjectName);
+          this.overviewList = overviewList;
+          this.industryList.forEach((item) => {
+            if (item.ChartPermissionId == this.chartPermissionId) {
+              if (item.List.length > 0) {
+                var isNext = item.List.some((item) => item.ShowName == (arr ? arr.ShowName : res.Data.ThirdName));
+              }
+              if (isNext) return this.$message.error("标的重复!");
+              const obj = {
+                Body: (this.$refs.twoRich && this.$refs.twoRich.value) || "",
+                ChartPermissionId: this.chartPermissionId,
+                IndustrialManagementId: arr ? arr.IndustrialManagementId + "" : "",
+                IndustrialManagementName: arr ? arr.IndustryName : "",
+                IndustrialSubjectId: arr ? arr.IndustrialSubjectId + "" : "",
+                IndustrialSubjectName: arr ? arr.SubjectName : "",
+                ShowName: arr ? arr.ShowName || arr.IndustryName : res.Data.ThirdName,
+                ThirdId: res.Data.ThirdId || "",
+                ThirdName: res.Data.ThirdName || "",
+                CompanyLabel:
+                  item.List[this.editNum].CompanyLabel && item.List[this.editNum].CompanyLabel.length > 0 ? item.List[this.editNum].CompanyLabel : [{ name: "", value: item.List.length + 1 }],
+                OverviewArticleId: overviewList.ArticleId || 0,
+                OverviewArticleTitle: overviewList.Title || "",
+                IsShowOverviewArticle: overviewList.IsShowOverviewArticle || 0,
+              };
+              item.List.splice(this.editNum, 1, obj);
+              this.industrialSubjectName = arr ? arr.IndustryName : res.Data.ThirdName || "";
             }
-            if (isNext) return this.$message.error("标的重复!");
-            const obj = {
-              Body: this.$refs.twoRich.value || "",
-              ChartPermissionId: this.chartPermissionId,
-              IndustrialManagementId: arr.IndustrialManagementId + "",
-              IndustrialManagementName: arr.IndustryName,
-              IndustrialSubjectId: arr.IndustrialSubjectId + "",
-              IndustrialSubjectName: arr.SubjectName,
-              CompanyLabel:
-                item.List[this.editNum].CompanyLabel && item.List[this.editNum].CompanyLabel.length > 0 ? item.List[this.editNum].CompanyLabel : [{ name: "", value: item.List.length + 1 }],
-              OverviewArticleId: overviewList.ArticleId,
-              OverviewArticleTitle: overviewList.Title,
-              IsShowOverviewArticle: overviewList.IsShowOverviewArticle,
-            };
-            item.List.splice(this.editNum, 1, obj);
-          }
-        });
+          });
+        }
       }
       this.stateValue = "";
       this.addDialogVisible = false;
@@ -442,11 +459,11 @@ export default {
     async handleSearchResult(data, cb) {
       if (data) {
         cb([]);
-        let res = await raiInterface.industrialSubjectSearch({ KeyWord: data, ChartPermissionId: this.chartPermissionId });
+        let res = await raiInterface.industrialAndSubjectSearch({ KeyWord: data, ChartPermissionId: this.chartPermissionId });
         if (res.Ret === 200) {
           if (res.Data.List && res.Data.List.length > 0) {
             let arr = res.Data.List.map((item) => {
-              return { value: item.SubjectName, ...item };
+              return { value: item.ShowName, ...item };
             });
             this.subjectList = arr;
             cb(arr);
@@ -464,6 +481,7 @@ export default {
               key.CompanyLabel && key.CompanyLabel.length > 0 && isText.push(key.CompanyLabel.some((val) => val.name));
             });
           });
+
           if (isText && isText.includes(false)) {
             return this.$message.error("请输入公司标签");
           }
@@ -479,7 +497,7 @@ export default {
               sessionStorage.removeItem("addChoicenessQY");
               this.$message.success("操作成功!");
               this.init();
-              this.$router.back();
+              type != "保存" && this.$router.back();
             }
           }
         }

+ 1 - 1
src/views/rai_manage/components/matchingDlg.vue

@@ -55,7 +55,7 @@ export default {
     async remoteMethod(query) {
       if (query !== "") {
         this.dataQueryList = [];
-        const res = await raiInterface.activityMeetMatchingList({ KeyWord: query });
+        const res = await raiInterface.activityMeetMatchingList({ KeyWord: query, ActivityId: this.matchingId, });
         if (res.Ret === 200) {
           let obj = {};
           res.Data.List &&

+ 6 - 6
src/views/rai_manage/components/report_preview/choicenessPre.vue

@@ -27,8 +27,8 @@
         <div class="industry-li" v-for="(item, index) in dataListSubject" :key="index">
           <div class="industry-name">{{ item.ChartPermissionName }}</div>
           <div class="industry-subject">
-            <div class="subject-item" @click="positionSubject(key)" v-for="key in item.ListSubject" :key="key.IndustrialSubjectId">
-              <a :href="`#miao${key.IndustrialSubjectId}`">{{ key.SubjectName }}</a>
+            <div class="subject-item" v-for="key in item.ListSubject" :key="key.IndustrialSubjectId">
+              <a :href="`#miao${key.IndustrialSubjectId}${key.SubjectName}`">{{ key.ShowName }}</a>
               <img v-if="key.IsNew" class="icon_subject" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_subject.png" />
             </div>
           </div>
@@ -42,16 +42,16 @@
             {{ item.ChartPermissionText }}
           </div>
           <div class="report-content-report" v-for="it in item.contetList" :key="it.IndustrialSubjectId">
-            <div class="content-report-title">
-              {{ it.IndustrialSubjectName }}
+            <div class="content-report-title" :id="`miao${it.IndustrialSubjectId}${it.SubjectName}`">
+              {{ it.IndustrialSubjectName || it.ThirdName || it.ShowName }}
             </div>
             <div v-html="it.Body" class="content-report-body"></div>
             <div class="content-report-detail" v-if="it.OverviewArticleId > 0">
               公司综述报告请
               <span @click="goArticle(it.OverviewArticleId)"> 点击查看 </span>
             </div>
-            <div class="company-label" :id="`miao${it.IndustrialSubjectId}`">
-              <span class="item">{{ it.SubjectName }}</span>
+            <div class="company-label">
+              <span class="item">{{ it.ShowName }}</span>
               <img v-if="it.IsNew" src="https://hzchart.oss-cn-shanghai.aliyuncs.com/cygx/new_report.png" />
               <span class="item item-subject-name" v-for="val in it.CompanyLabel" :key="val"># {{ val }}</span>
             </div>

+ 2 - 2
src/views/rai_manage/cygxManage/applyUserList.vue

@@ -65,7 +65,8 @@
         </el-table-column>
         <el-table-column prop="Title" label="申请内容" min-width="130" align="center">
           <template slot-scope="scope">
-            <span class="editsty" @click="applicationContent(scope.row)">{{ scope.row.Title }}</span>
+            <span v-if="scope.row.IsGray">{{ scope.row.Title }}</span>
+            <span v-else class="editsty" @click="applicationContent(scope.row)">{{ scope.row.Title }}</span>
           </template>
         </el-table-column>
         <el-table-column label="操作" align="center" min-width="110">
@@ -196,7 +197,6 @@ export default {
     // 申请内容
     applicationContent(item) {
       window.open(item.HttpUrl, "_blank");
-      console.log(item);
     },
   },
   created() {},

+ 3 - 3
src/views/rai_manage/cygxManage/components/lableDlg.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="container lable-add-content">
-    <el-dialog :title="visibleTitle" :visible.sync="showRegularDlg" width="600px" v-dialogDrag :close-on-click-modal="false" :modal-append-to-body="false" center @close="handleClose">
+    <el-dialog :title="visibleTitle" :visible.sync="showRegularDlg" width="700px" v-dialogDrag :close-on-click-modal="false" :modal-append-to-body="false" center @close="handleClose">
       <div v-if="dataRegular.TagType == 1">
         <div v-for="(item, index) in addDataList" :key="index" class="add-name-item">
           <el-autocomplete style="width: 90%" v-model="item.name" clearable :fetch-suggestions="querySearchAsync" @select="tableSelectHandel(item)" placeholder="请输入内容"></el-autocomplete>
@@ -58,7 +58,7 @@ export default {
           : this.dataRegular.TagType == 4
           ? "所有问答系列音频"
           : this.dataRegular.TagType == 5
-          ? "医药-趋势观察 ,科技-产业跟踪 ,智造-产业跟踪 ,消费-月度调研"
+          ? "医药-趋势观察 ,科技-产业跟踪 ,智造-产业跟踪 ,消费-月度调研,策略-每日复盘,固收-债市复盘"
           : "";
       return str;
     },
@@ -164,7 +164,7 @@ export default {
 <style scoped lang="scss">
 .lable-add-content {
   .text-content {
-    width: 487px;
+    width: 620px;
     height: 40px;
     line-height: 40px;
     border-radius: 4px;

+ 1 - 2
src/views/rai_manage/reportManage/appletsReport.vue

@@ -549,8 +549,7 @@ export default {
     //文章详情
     async lookDetail(item) {
       if (item.PublishStatus === 1) {
-        let href = `${process.env.CYGX_WEB}/material/info/${item.ArticleId}`;
-        window.open(href, "_blank");
+        window.open(item.HttpUrl, "_blank");
       } else {
         const res = await raiInterface.reportArticleDetail({ ArticleId: item.ArticleId });
         if (res.Ret === 200) {

+ 9 - 1
src/views/roadshow_manage/compononts/addActivityCellDia.vue

@@ -29,7 +29,7 @@
             v-model="formData.selectResearchers[0].researcherId"
             :options="researcherList"
             :show-all-levels="false"
-            disabled
+            :disabled="isEditType !='RaiEdit'"
             :props="{
               expandTrigger: 'hover',
               children: 'ResearcherList',
@@ -116,6 +116,7 @@
           <el-select
             v-model="formData.activityType"
             placeholder="请选择活动类型"
+            :disabled="isEditType =='RaiEdit'"
             @change="activityTypeChange"
           >
             <el-option
@@ -166,6 +167,9 @@
             hide-area
           ></v-distpicker> -->
           <search-dist-picker 
+            :provinceInfo="formData.roadshowCity[0]"
+            :cityInfo="formData.roadshowCity[1]"
+            :areaInfo="formData.District||''"
             :showArea="isRaiRole"
             @selected="onChangeCity($event,'roadshow')"/>
         </el-form-item>
@@ -459,6 +463,10 @@ export default {
     edit_rs_id: {
       type: Number,
       default: 0,
+    },
+    isEditType:{
+      type: String,
+      default: '',
     }
   },
   mixins: [publicMixins],

+ 2 - 2
src/views/roadshow_manage/compononts/addMatterDia.vue

@@ -70,9 +70,9 @@
         <el-form-item label="事项内容" prop="matterContent">
           <el-input v-model.trim="formData.matterContent" clearable placeholder="请输入事项内容"></el-input>
         </el-form-item>
-        <el-form-item label="修改原因" prop="EditReason" v-if="edit_matter_id">
+        <!-- <el-form-item label="修改原因" prop="EditReason" v-if="edit_matter_id">
           <el-input v-model.trim="formData.EditReason" clearable placeholder="请输入修改原因"></el-input>
-        </el-form-item>
+        </el-form-item> -->
       </el-form>
       <div class="btn-group">
         <el-button @click="cancel">取消</el-button>

+ 11 - 0
src/views/roadshow_manage/compononts/addParticipateDia.vue

@@ -1,6 +1,9 @@
 <template>
   <el-dialog title="提交参会名单" :visible.sync="isAddParticipateShow" width="500px" append-to-body @close="closeDlg">
     <div class="partic-dialog-container">
+      <div v-if="isType !== '查看'">
+        <el-input style="width: 392px; margin-bottom: 20px" v-model="roadShowTheme" placeholder="请输入路演主题名称"></el-input>
+      </div>
       <template v-if="isType !== '查看'">
         <div v-if="isShowPermission" style="margin-bottom: 20px">
           <el-tag type="info" size="small"> {{ this.chartPermissionName }}</el-tag>
@@ -69,6 +72,10 @@ export default {
       type: String,
       default: "",
     },
+    addRoadShowTheme: {
+      type: String,
+      default: "",
+    },
   },
   watch: {
     isAddParticipateShow(newval) {
@@ -90,6 +97,7 @@ export default {
       tagName: "",
       chartPermissionName: "",
       isShowPermission: false,
+      roadShowTheme: "",
     };
   },
   methods: {
@@ -165,12 +173,14 @@ export default {
     confirmPerson() {
       //校验
       const useId = this.dynamicItem.map((i) => i.id).filter((i) => i);
+      if (!this.roadShowTheme && this.isType !== "查看") return this.$message.error("请输入路演主题名称");
       if (!useId.length) return this.$message.error("请输入姓名");
       roadshowInterence
         .addMeetingUser({
           RsCalendarId: this.RsCalendarId,
           UserId: useId,
           TagList: this.tagList,
+          RoadShowTheme: this.roadShowTheme || this.addRoadShowTheme,
         })
         .then((res) => {
           if (res.Ret !== 200) return;
@@ -226,6 +236,7 @@ export default {
       this.tagName = "";
       this.chartPermissionName = "";
       this.isShowPermission = false;
+      this.roadShowTheme = "";
       this.$emit("close");
     },
   },

+ 196 - 182
src/views/roadshow_manage/compononts/showParticipateListDia.vue

@@ -1,203 +1,217 @@
 <template>
-    <el-dialog
-        title="查看参会名单"
-        :visible.sync="isParticipateShow"
-        width="700px"
-        append-to-body
-        @close="closeDlg"
-    >
-        <div class="partic-list-dialog-container">
-            <div v-if="isShowPermission" style="margin-bottom:20px">
-              <el-tag type="info" size="small"> {{this.chartPermissionName}}</el-tag>
-            </div>
-            <el-select v-else v-model="hashtagValue" multiple filterable remote reserve-keyword placeholder="请输入路演主题标签(可多选)" :remote-method="remoteMethodHandler" style="width:392px;margin-bottom:20px" @change="tagSelectHandler">
-                <el-option v-for="item in hashtagOptions" :key="item.Md5Key" :label="item.TagName" :value="item.Md5Key"> </el-option>
-            </el-select>
-            <el-table :data="tableData" border>
-                <el-table-column align="center"
-                    prop="RealName" label="姓名"
-                ></el-table-column>
-                <el-table-column align="center"
-                    prop="Position" label="职位"
-                ></el-table-column>
-                <el-table-column label="操作" align="center">
-                    <template slot-scope="{ row }" >
-                        <span
-                        class="deletesty"
-                        @click="deleteItem(row)">
-                            删除</span>
-                    </template>
-                </el-table-column>
-            </el-table>
-            <div @click="addItem" class="add-box">
-                <img :src="$icons.addblue" alt="" />
-                <span>添加</span>
-            </div>
-        </div>
-        <div slot="footer" class="dialog-footer" style="text-align: center;">
-            <el-button @click="closeDlg">关闭</el-button>
-            <el-button type="primary" @click="saveTagsHandler">保存</el-button>
-
-        </div>
-        <addParticipateDia 
-            :isAddParticipateShow="isAddShow"
-            :RsCalendarId="RsCalendarId"
-            isType="查看"
-            @close="isAddShow=false;"
-            @confirm="getTableData();isAddShow=false;"
-        />
-    </el-dialog>
+  <el-dialog title="查看参会名单" :visible.sync="isParticipateShow" width="700px" append-to-body @close="closeDlg">
+    <div class="partic-list-dialog-container">
+      <div>
+        <el-input style="width: 392px; margin-bottom: 20px" v-model="roadShowTheme" placeholder="请输入路演主题名称"></el-input>
+      </div>
+      <div v-if="isShowPermission" style="margin-bottom: 20px">
+        <el-tag type="info" size="small"> {{ this.chartPermissionName }}</el-tag>
+      </div>
+      <el-select
+        v-else
+        v-model="hashtagValue"
+        multiple
+        filterable
+        remote
+        reserve-keyword
+        placeholder="请输入路演主题标签(可多选)"
+        :remote-method="remoteMethodHandler"
+        style="width: 392px; margin-bottom: 20px"
+        @change="tagSelectHandler"
+      >
+        <el-option v-for="item in hashtagOptions" :key="item.Md5Key" :label="item.TagName" :value="item.Md5Key"> </el-option>
+      </el-select>
+      <el-table :data="tableData" border>
+        <el-table-column align="center" prop="RealName" label="姓名"></el-table-column>
+        <el-table-column align="center" prop="Position" label="职位"></el-table-column>
+        <el-table-column label="操作" align="center">
+          <template slot-scope="{ row }">
+            <span class="deletesty" @click="deleteItem(row)"> 删除</span>
+          </template>
+        </el-table-column>
+      </el-table>
+      <div @click="addItem" class="add-box">
+        <img :src="$icons.addblue" alt="" />
+        <span>添加</span>
+      </div>
+    </div>
+    <div slot="footer" class="dialog-footer" style="text-align: center">
+      <el-button @click="closeDlg">关闭</el-button>
+      <el-button type="primary" @click="saveTagsHandler">保存</el-button>
+    </div>
+    <addParticipateDia
+      :isAddParticipateShow="isAddShow"
+      :RsCalendarId="RsCalendarId"
+      isType="查看"
+      :addRoadShowTheme="roadShowTheme"
+      @close="isAddShow = false"
+      @confirm="
+        getTableData();
+        isAddShow = false;
+      "
+    />
+  </el-dialog>
 </template>
 
 <script>
 import { roadshowInterence } from "@/api/api.js";
 import addParticipateDia from "./addParticipateDia.vue";
 export default {
-    props: {
-        isParticipateShow: {
-            type: Boolean,
-            default: false
-        },
-        RsCalendarId: {
-            type: Number,
-            default: 0
-        },
-        ResearcherId:{
-            type:Number,
-            default:0
-        }
+  props: {
+    isParticipateShow: {
+      type: Boolean,
+      default: false,
     },
-    data() {
-        return {
-            tableData: [],
-            isAddShow:false,
-            hashtagValue:[],// 主题标签
-            hashtagOptions:[],// 主题数据
-            tagList:[],// /标签类型
-            tagName: '',
-            chartPermissionName:'',
-            isShowPermission:false
-        };
+    RsCalendarId: {
+      type: Number,
+      default: 0,
     },
-    watch: {
-        isParticipateShow(newval) {
-            if (newval) {
-                this.getTableData();
-                this.getIsPermissionName()
-            }
-        },
+    ResearcherId: {
+      type: Number,
+      default: 0,
     },
-    methods: {
-        getTableData() {
-            roadshowInterence.getMeetingUserList({
-                RsCalendarId: this.RsCalendarId
-            }).then(res => {
-                if (res.Ret !== 200)
-                    return;
-                this.tableData = res.Data.List;
-                this.hashtagOptions = res.Data.ListLebel
-                console.log(res);
-                if(this.hashtagOptions.length){
-                    this.hashtagValue = []
-                    this.hashtagOptions.forEach(item=>{
-                        this.hashtagValue.push(item.Md5Key)
-                    })
-                    this.tagSelectHandler()
-                }
+  },
+  data() {
+    return {
+      tableData: [],
+      isAddShow: false,
+      hashtagValue: [], // 主题标签
+      hashtagOptions: [], // 主题数据
+      tagList: [], // /标签类型
+      tagName: "",
+      chartPermissionName: "",
+      isShowPermission: false,
+      roadShowTheme: "",
+    };
+  },
+  watch: {
+    isParticipateShow(newval) {
+      if (newval) {
+        this.getTableData();
+        this.getIsPermissionName();
+      }
+    },
+  },
+  methods: {
+    getTableData() {
+      roadshowInterence
+        .getMeetingUserList({
+          RsCalendarId: this.RsCalendarId,
+        })
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          this.tableData = res.Data.List;
+          this.hashtagOptions = res.Data.ListLebel;
+          this.roadShowTheme = res.Data.RoadShowTheme || "";
+
+          if (this.hashtagOptions.length) {
+            this.hashtagValue = [];
+            this.hashtagOptions.forEach((item) => {
+              this.hashtagValue.push(item.Md5Key);
             });
-        },
-        addItem() {
-            this.isAddShow = true
-        },
-        deleteItem(row){
-            roadshowInterence.deleteMeetingUser({
-                RsCalendarMeetingUserId:row.RsCalendarMeetingUserId
-            }).then(res=>{
-                if(res.Ret!==200) return 
-                this.$message.success('删除成功')
-                this.getTableData()
-            })
-        },
-        // 获取标签
-        async remoteMethodHandler(query){
-          if (query !== '') {
-            let KeyWord = this.tagName? this.tagName + ',' + query : query;
-            const res = await roadshowInterence.rai_serve_search_tag({
-                KeyWord,
-                ResearcherId:this.ResearcherId,
-            })
-            if( res.Ret===200 ){
-                this.hashtagOptions = res.Data.List || []
-            }
-          }else if(!this.hashtagValue.length && !query){
-            this.hashtagOptions =[]
+            this.tagSelectHandler();
           }
-        },
-        // 标签选择后处理
-        tagSelectHandler(){
-            let tagListArr = []
-            let nameArr = []
-            this.hashtagOptions.forEach(item=>{
-                if(this.hashtagValue.length && this.hashtagValue.includes(item.Md5Key)) {
-                    tagListArr.push({
-                       TagType: item.TagType,
-                       TagId: item.TagId,
-                    })
-                    nameArr.push(item.TagName)
-                }
-            })
-            this.tagList = tagListArr
-            this.tagName = nameArr.join(',')
-        },
-        // 提交标签
-        saveTagsHandler(){
-            if(!this.tagList.length) return this.$message.error('请输入主题标签')
-            roadshowInterence.addMeetingUser({
-                RsCalendarId:this.RsCalendarId,
-                TagList:this.tagList
-            }).then(res=>{
-                if(res.Ret!==200) return 
-                this.$message.success('提交成功')
-                this.closeDlg()
-            })
-        },
-        // 进入看看是否是策略
-        async getIsPermissionName(){
-            const res = await roadshowInterence.rai_serve_search_chcck_PermissionName({ResearcherId:this.ResearcherId})
-              if( res.Ret===200 ){
-                this.chartPermissionName = res.Data.ChartPermissionName
-                this.isShowPermission = res.Data.Belong
-                this.tagList = res.Data.List
-            }
-        },
-        // 关闭弹框
-         closeDlg(){
-            this.hashtagValue = ''// 主题标签
-            this.hashtagOptions = []// 主题数据
-            this.tagList = []// /标签类型
-            this.tagName =  ''
-            this.chartPermissionName = ''
-            this.isShowPermission = false
-            this.$emit('close')
+        });
+    },
+    addItem() {
+      this.isAddShow = true;
+    },
+    deleteItem(row) {
+      roadshowInterence
+        .deleteMeetingUser({
+          RsCalendarMeetingUserId: row.RsCalendarMeetingUserId,
+        })
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          this.$message.success("删除成功");
+          this.getTableData();
+        });
+    },
+    // 获取标签
+    async remoteMethodHandler(query) {
+      if (query !== "") {
+        let KeyWord = this.tagName ? this.tagName + "," + query : query;
+        const res = await roadshowInterence.rai_serve_search_tag({
+          KeyWord,
+          ResearcherId: this.ResearcherId,
+        });
+        if (res.Ret === 200) {
+          this.hashtagOptions = res.Data.List || [];
         }
+      } else if (!this.hashtagValue.length && !query) {
+        this.hashtagOptions = [];
+      }
     },
-    components: { addParticipateDia }
+    // 标签选择后处理
+    tagSelectHandler() {
+      let tagListArr = [];
+      let nameArr = [];
+      this.hashtagOptions.forEach((item) => {
+        if (this.hashtagValue.length && this.hashtagValue.includes(item.Md5Key)) {
+          tagListArr.push({
+            TagType: item.TagType,
+            TagId: item.TagId,
+          });
+          nameArr.push(item.TagName);
+        }
+      });
+      this.tagList = tagListArr;
+      this.tagName = nameArr.join(",");
+    },
+    // 提交标签
+    saveTagsHandler() {
+      if (!this.roadShowTheme) return this.$message.error("请输入路演主题名称");
+
+      roadshowInterence
+        .addMeetingUser({
+          RsCalendarId: this.RsCalendarId,
+          TagList: this.tagList,
+          RoadShowTheme: this.roadShowTheme,
+        })
+        .then((res) => {
+          if (res.Ret !== 200) return;
+          this.$message.success("提交成功");
+          this.closeDlg();
+        });
+    },
+    // 进入看看是否是策略
+    async getIsPermissionName() {
+      const res = await roadshowInterence.rai_serve_search_chcck_PermissionName({ ResearcherId: this.ResearcherId });
+      if (res.Ret === 200) {
+        this.chartPermissionName = res.Data.ChartPermissionName;
+        this.isShowPermission = res.Data.Belong;
+        this.tagList = res.Data.List;
+      }
+    },
+    // 关闭弹框
+    closeDlg() {
+      this.hashtagValue = ""; // 主题标签
+      this.hashtagOptions = []; // 主题数据
+      this.tagList = []; // /标签类型
+      this.tagName = "";
+      this.chartPermissionName = "";
+      this.isShowPermission = false;
+      this.roadShowTheme = "";
+      this.$emit("close");
+    },
+  },
+  components: { addParticipateDia },
 };
 </script>
 
 <style scoped lang="scss">
-.partic-list-dialog-container{
-    .add-box {
-        margin-top:15px;
-        display: flex;
-        align-items: center;
-        color: #5882ef;
-        cursor: pointer;
-        img {
-            width: 16px;
-            height: 16px;
-            margin-right: 10px;
-        }
+.partic-list-dialog-container {
+  .add-box {
+    margin-top: 15px;
+    display: flex;
+    align-items: center;
+    color: #5882ef;
+    cursor: pointer;
+    img {
+      width: 16px;
+      height: 16px;
+      margin-right: 10px;
     }
+  }
 }
 </style>

+ 46 - 40
src/views/roadshow_manage/myCalendar.vue

@@ -141,7 +141,7 @@
             </template>
             <!-- 事项的操作栏由后端控制 -->
             <template v-if="default_tab===5">
-                <span class="editsty" v-if="row.EditReason" @click="showReason(row)">最近修改记录</span>
+                <!-- <span class="editsty" v-if="row.EditReason" @click="showReason(row)">最近修改记录</span> -->
                 <span
                   class="editsty"
                   v-if="!row.ButtonAuth.EditDisabled"
@@ -155,6 +155,11 @@
             </template>
             <!-- 提交/查看参会名单 按钮由后端控制 -->
             <template v-if="default_tab===2">
+              <span
+                  class="editsty"
+                  v-if="row.EditButton"
+                  @click="editActivityHandle(row)"
+                  >修改</span>
                   <span 
                     class="deletesty"
                     v-if="row.SubmitButton"
@@ -230,6 +235,7 @@
       :edit_rs_id="edit_rs_id"
       @ensureCallback="refreshData"
       ref="addActivityCellDia"
+      :isEditType='isRaiEditType'
     />
 
 
@@ -409,6 +415,7 @@ export default {
       },
       isReasonDiaShow:false,
       currentResearcherId:0,
+      isRaiEditType:''
     };
   },
   methods: {
@@ -573,17 +580,11 @@ export default {
 
     /* 编辑活动 或事项 */
     editActivityHandle(row) {
-
-      const { RsCalendarId,RsCalendarResearcherId,RsMattersId,MatterContent,StartDate,StartTime,EndTime,EndDate } = row;
-      //编辑活动
-      if(!RsMattersId) {
-        this.resubmitData = this.editInfoBack(row,2);
-        this.edit_id = RsCalendarId;
-        this.edit_rs_id = RsCalendarResearcherId;
-        this.isActivityBtnDiaShow = true;
-      } else {
-        //编辑事项
-        this.editMatterHandle({ RsMattersId,StartDate,StartTime,EndDate,EndTime,MatterContent });
+      this.isRaiEditType ='RaiEdit'
+      if(this.default_tab==5){
+        this.editMatterHandle(row);
+      }else{
+        this.raiEditMatterHandle(row)
       }
     },
 
@@ -676,39 +677,44 @@ export default {
     /* 日历入口 编辑活动时 回显内容 */
     editCallback({ ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany}) {
       if(RsCalendarId) { // 编辑活动
-        this.sonData = {
-          activityType: ActivityType, // 活动类型
-          roadshowType: RoadshowType, // 路演形式
-          roadshowPlatform: RoadshowPlatform, // 路演平台
-          roadshowCity: Province ? [Province,City] : [], // 路演城市
-          companyId: CompanyId, // 客户id
-          companyName: CompanyName, // 客户名称
-          englishCompany:EnglishCompany,// 是否是海外客户
-          meetingType: RoadshowType, // 会议形式
-          meetingPlatform: RoadshowPlatform, // 会议平台
-          meetingCity: Province ? [Province,City] : [], // 会议城市
-          meetingTheme: Theme, // 会议主题
-          partnersName: CooperationName, // 合作方名称
-          activityClass: ActivityCategory, // 活动类别
-          selectResearchers: [
-            // 选择的研究员
-            {
-              researcherId: Number(ResearcherId),
-              startDate: new Date(StartDate),
-              startTime: new Date(`${StartDate} ${StartTime}`),
-              endDate: new Date(EndDate),
-              endTime: new Date(`${EndDate} ${EndTime}`),
-            },
-          ],
-        };
-        this.edit_id = RsCalendarId;
-        this.edit_rs_id = RsCalendarResearcherId;
-        this.isActivityCellDiaShow = true;
+       this.raiEditMatterHandle({ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany})
       }else { //编辑事项
         this.editMatterHandle({ RsMattersId,StartDate,StartTime,EndDate,EndTime,MatterContent });
       }
     },
 
+    raiEditMatterHandle({ ActivityType,RoadshowType,RoadshowPlatform,City,Province,CompanyId,CompanyName,ResearcherId,RsCalendarResearcherId,Theme,CooperationName,ActivityCategory,StartDate,EndDate,RsCalendarId,RsMattersId,StartTime,EndTime,MatterContent,EnglishCompany,District=''}){
+        this.sonData = {
+                  activityType: ActivityType, // 活动类型
+                  roadshowType: RoadshowType, // 路演形式
+                  roadshowPlatform: RoadshowPlatform, // 路演平台
+                  roadshowCity: Province ? [Province,City] : [], // 路演城市
+                  companyId: CompanyId, // 客户id
+                  companyName: CompanyName, // 客户名称
+                  englishCompany:EnglishCompany,// 是否是海外客户
+                  meetingType: RoadshowType, // 会议形式
+                  meetingPlatform: RoadshowPlatform, // 会议平台
+                  meetingCity: Province ? [Province,City] : [], // 会议城市
+                  meetingTheme: Theme, // 会议主题
+                  partnersName: CooperationName, // 合作方名称
+                  activityClass: ActivityCategory, // 活动类别
+                  District: District || '',
+
+                  selectResearchers: [
+                    // 选择的研究员
+                    {
+                      researcherId: Number(ResearcherId),
+                      startDate: new Date(StartDate),
+                      startTime: new Date(`${StartDate} ${StartTime}`),
+                      endDate: new Date(EndDate),
+                      endTime: new Date(`${EndDate} ${EndTime}`),
+                    },
+                  ],
+                };
+                this.edit_id = RsCalendarId;
+                this.edit_rs_id = RsCalendarResearcherId;
+                this.isActivityCellDiaShow = true;
+    },
     /* 编辑事项 */
     editMatterHandle({ RsMattersId,StartDate,StartTime,EndDate,EndTime,MatterContent }) {
       this.edit_matter_id = RsMattersId;

+ 5 - 0
src/views/roadshow_manage/roleConfig/myCalendarConfig.js

@@ -164,6 +164,11 @@ export const tableColums = (type) => {
 			hidden: !ENUM_RESEARCHLIST.includes(role),
 			// widthsty: '100px',
 		},
+		{
+			label: '提交人',
+			key: 'SysUserRealName',
+			// widthsty: '100px',
+		},
 	] : type === 3 ? [
 		{
 			label: '活动时间',

+ 80 - 14
src/views/seal_manage/approvalList.vue

@@ -2,6 +2,14 @@
 <div class="seal-approval-wrap">
   <div class="content">
       <div class="select-wrap" style="margin-bottom:30px">
+        <el-select v-model="belongCompany" placeholder="请选择归属公司" @change="handleSelectChange" clearable style="margin-right:20px">
+          <el-option
+            v-for="item in belongCompanyOption"
+            :key="item"
+            :label="item"
+            :value="item">
+          </el-option>
+        </el-select>
         <el-select v-model="contractTypeVal" placeholder="合同类型" @change="handleSelectChange" clearable style="margin-right:20px">
           <el-option
             v-for="item in contractTypeList"
@@ -49,15 +57,25 @@
           clearable
           @input="handleSearch">
         </el-input>
-        <el-button 
-          type="primary" 
-          style="float:right" 
-          @click="$router.push('/addSeal')" 
-          v-if="['ficc_seller','rai_seller','compliance'].includes(RoleType)"
-        >添加用印</el-button>
+
+        <div style="float:right" >
+          <el-button 
+            type="primary" 
+            @click="$router.push('/addSeal')" 
+            v-if="['ficc_seller','rai_seller','compliance'].includes(RoleType)"
+          >添加用印</el-button>
+          <a :href="exportUrl" download v-if="['admin','ficc_admin','compliance'].includes(RoleType)">
+            <el-button type="primary">导出</el-button>
+          </a>
+        </div>
       </div>
       <div class="list-wrap">
         <el-table :data="tableList" border>
+          <el-table-column align="center"  prop="CompanyName" label="归属公司">
+            <template slot-scope="scope"> 
+              <span>{{scope.row.AffiliatedCompany}}</span>
+            </template>
+          </el-table-column>
           <el-table-column align="center"  prop="CompanyName" label="客户名称">
             <template slot-scope="scope"> 
               <span>{{scope.row.CompanyName}}</span>
@@ -118,6 +136,20 @@
             <table class="table-wrap" >
               <tbody>
                 <tr>
+                  <td class="table-item width-50">
+                    <p v-if="detail.OpButton.CheckEdit">
+                      <span>所属公司:</span>
+                      <el-select v-model="approvalEditData.AffiliatedCompany" placeholder="请选择">
+                        <el-option
+                          v-for="item in belongCompanyOption"
+                          :key="item"
+                          :label="item"
+                          :value="item">
+                        </el-option>
+                      </el-select>
+                    </p>
+                    <p v-else>所属公司:{{detail.SealDetail.AffiliatedCompany}}</p>
+                  </td>
                   <td class="table-item width-50">
                     <p v-if="detail.OpButton.CheckEdit">
                       <span>用印用途:</span>
@@ -133,14 +165,16 @@
                     </p>
                     <p v-else>用印用途:{{detail.SealDetail.Use}}</p>
                   </td>
-                  <td class="table-item width-50">所属销售:{{detail.SealDetail.UserName}}</td>
                 </tr>
                 <tr>
+                  <td class="table-item width-50">所属销售:{{detail.SealDetail.UserName}}</td>
                   <td class="table-item width-50">客户名称:{{detail.SealDetail.CompanyName}}</td>
+                </tr>
+                <tr>
                   <td class="table-item width-50">社会信用码:{{detail.SealDetail.CreditCode}}</td>
+                  <td class="table-item width-50">合同类型:{{detail.SealDetail.ServiceType}}</td>  
                 </tr>
                 <tr>
-                  <td class="table-item width-50">合同类型:{{detail.SealDetail.ServiceType}}</td>
                   <td class="table-item width-50">
                     <p v-if="detail.OpButton.CheckEdit">
                       <span>文件份数:</span>
@@ -149,8 +183,6 @@
                     </p>
                     <p v-else>文件份数:{{detail.SealDetail.FileNum}}</p>
                   </td>
-                </tr>
-                <tr>
                   <td class="table-item">
                     <p v-if="detail.OpButton.CheckEdit">
                       <span>加盖印章:</span>
@@ -158,12 +190,15 @@
                         <el-option label="合同章" value="合同章"></el-option>
                         <el-option label="公章" value="公章"></el-option>
                         <el-option label="法人章" value="法人章"></el-option>
+                        <el-option label="电子合同章" value="电子合同章"></el-option>
                       </el-select>
                     </p>
                     <p v-else>加盖印章:{{detail.SealDetail.SealType}}</p>
                   </td>
-                  <td class="table-item">实际使用方:{{detail.SealDetail.UseCompanyName||detail.SealDetail.CompanyName}}</td>
                 </tr>
+                <tr>
+                  <td class="table-item" colspan="2">实际使用方:{{detail.SealDetail.UseCompanyName||detail.SealDetail.CompanyName}}</td>
+                </tr>  
                 <tr>
                   <td class="table-item" colspan="2" style="text-align: left">
                     <p v-if="detail.OpButton.CheckEdit" style="display:flex">
@@ -290,6 +325,7 @@ export default {
         this.optList=[]
         this.stepArr=[]
         this.approvalEditData={
+          AffiliatedCompany:'',//所属公司
           Use:'',//用印用途
           Type:'',//加盖印章 类型
           FileNum:'',//文件份数
@@ -315,6 +351,21 @@ export default {
       
     }
   },
+  computed: {
+    exportUrl() {
+      let auth = localStorage.getItem("auth") || "";
+      let salesArr=[]
+			if(this.seller.length){
+				salesArr=this.seller.map(item=>{
+					return item[item.length-1]
+				})
+			}
+
+      return `${process.env.API_ROOT}/seal/getApprovalPageList?IsExport=true&${auth}&PageSize=${this.pageSize}&CurrentIndex=${this.page}&ContractType=${this.contractTypeVal}&Status=${this.sealStatusVal}&SellerId=${salesArr.join(',')}&StartTime=${this.time&&this.time[0]||''}&EndTime=${this.time&&this.time[1]||''}&Keyword=${this.searchVal}&AffiliatedCompany=${this.belongCompany}`
+        
+      
+    }
+  },
   data () {
     return {
       RoleType:localStorage.getItem('Role')||'',
@@ -344,6 +395,7 @@ export default {
       optList:[],
       stepArr:[],//审批流程数据
       approvalEditData:{
+        AffiliatedCompany:'',//所属公司
         Use:'',//用印用途
         Type:'',//加盖印章 类型
         FileNum:'',//文件份数
@@ -369,11 +421,15 @@ export default {
       },//上传/更新附件文件数据
       showAttachment:false,// 是否显示预览附件弹窗
       attachmentUrls:[],// 附件列表
+
+      belongCompany: '',//归属公司
+      belongCompanyOption: []
     }
   },
   created () {
     this.getSellerList();
     this.getSealApprovalList()
+    this.getBelongCompanyOptions()
     if(['ficc_seller','rai_seller'].includes(this.RoleType)){
       this.sealStatusList=['待审批','已撤回','处理中','已审批','已驳回','已签回','已作废']
     }else{
@@ -381,6 +437,12 @@ export default {
     }
   },
   methods: {
+    async getBelongCompanyOptions() {
+      const res = await sealInterence.getBelongCompany()
+      if(res.Ret !==200 ) return
+      this.belongCompanyOption = res.Data || []
+    },
+
     //获取所属销售列表
     getSellerList() {
       contractInterface.getSellerList().then((res) => {
@@ -405,7 +467,8 @@ export default {
         SellerId:salesArr.join(','),
         StartTime:this.time&&this.time[0]||'',
         EndTime:this.time&&this.time[1]||'',
-        Keyword:this.searchVal
+        Keyword:this.searchVal,
+        AffiliatedCompany: this.belongCompany
       })
       if(res.Ret===200){
         this.tableList=res.Data.List
@@ -435,8 +498,10 @@ export default {
       this.getSealOprationList(e.SealId)
       const res=await sealInterence.getSealDetail({SealId:e.SealId})
       if(res.Ret==200){
+        console.log(res.Data)
         this.showDetail=true
         this.detail=res.Data
+        this.approvalEditData.AffiliatedCompany=res.Data.SealDetail.AffiliatedCompany
         this.approvalEditData.Use=res.Data.SealDetail.Use
         this.approvalEditData.Type=res.Data.SealDetail.SealType.split(',')
         this.approvalEditData.FileNum=res.Data.SealDetail.FileNum
@@ -581,7 +646,8 @@ export default {
             const flag2=Number(this.approvalEditData.FileNum)===Number(this.detail.SealDetail.FileNum)
             const flag3=this.approvalEditData.Type.join(',')===this.detail.SealDetail.SealType
             const flag4=this.approvalEditData.Remark===this.detail.SealDetail.Remark
-            if(flag1&&flag2&&flag3&&flag4){
+            const flag5=this.approvalEditData.AffiliatedCompany===this.detail.SealDetail.AffiliatedCompany
+            if(flag1&&flag2&&flag3&&flag4&&flag5){
               this.handleApprovalPass()
             }else{
               this.handleApprovePassModify()
@@ -625,6 +691,7 @@ export default {
         Remark:this.approvalEditData.Remark,
         SealType:this.approvalEditData.Type.join(','),
         Use:this.approvalEditData.Use,
+        AffiliatedCompany:this.approvalEditData.AffiliatedCompany,
       })
       if(res.Ret==200){
         this.$message.success('审批成功')
@@ -883,7 +950,6 @@ export default {
       font-weight: bold;
       color: #333;
       float: left;
-      margin-top: 4px;
     }
     .user-box{
       padding-left: 100px;

+ 31 - 0
src/views/seal_manage/updateSeal.vue

@@ -8,6 +8,19 @@
     >
       <div class="one-part">
         <div class="box">
+          <el-form-item label="归属公司:" prop="AffiliatedCompany">
+            <el-select v-model.trim="sealForm.AffiliatedCompany" clearable>
+              <el-option
+                v-for="item in belongCompanyOption"
+                :key="item"
+                :label="item"
+                :value="item"
+              ></el-option>
+            </el-select>
+            <el-tooltip class="item" effect="dark" content="归属公司:申请用章公司" placement="top">
+              <i class="el-icon-warning"></i>
+            </el-tooltip>
+          </el-form-item>
           <el-form-item label="用印用途:" prop="Use">
             <el-select v-model.trim="sealForm.Use" clearable>
               <el-option
@@ -176,9 +189,11 @@ export default {
         Remark: "", //审批备注
         fileList: [], //合同附件
         ContractId: 0, //合同id(默认为0)
+        AffiliatedCompany:''
       },
       sealRules: {
         //表单校验规则
+        AffiliatedCompany: [{ required: true, message: "请选择归属公司", trigger: "blur" }],
         Use: [{ required: true, message: "请选择用印用途", trigger: "blur" }],
         CompanyName: [
           { required: true, message: "请选择客户名称", trigger: "blur" },
@@ -221,8 +236,11 @@ export default {
         { label: "合同章", value: 1 },
         { label: "公章", value: 2 },
         { label: "法人章", value: 3 },
+        { label: "电子合同章", value: 4 },
       ],
       isWatch: true, // 控制watch是否触发
+
+      belongCompanyOption:[]
     };
   },
   created() {
@@ -230,6 +248,7 @@ export default {
     if (this.sealId) {
       this.getsealApprovalDetail();
     }
+    this.getBelongCompanyOptions()
   },
   computed: {
     // 用印id,有则表示编辑,无表示新增
@@ -245,6 +264,15 @@ export default {
     },
   },
   methods: {
+    async getBelongCompanyOptions() {
+      const res = await sealInterence.getBelongCompany()
+      if(res.Ret !==200 ) return
+      this.belongCompanyOption = res.Data || []
+      if (!this.sealId) {
+        this.sealForm.AffiliatedCompany=this.belongCompanyOption.length?this.belongCompanyOption[0]:''
+      }
+    },
+
     // 获取用印详情
     async getsealApprovalDetail() {
       try {
@@ -269,6 +297,7 @@ export default {
           this.sealForm.SealType = SealDetail.SealType.split(",");
           this.sealForm.ServiceType = SealDetail.ServiceType;
           this.sealForm.UseCompanyName = SealDetail.UseCompanyName;
+          this.sealForm.AffiliatedCompany = SealDetail.AffiliatedCompany;
           this.sealForm.source =
             SealDetail.ContractId > 0 ? "系统合同" : "上传附件";
           // 打开监听
@@ -385,6 +414,7 @@ export default {
           ServiceType: this.sealForm.ServiceType,
           Use: this.sealForm.Use,
           UseCompanyName: this.sealForm.UseCompanyName,
+          AffiliatedCompany: this.sealForm.AffiliatedCompany,
         };
         let res = {};
         if (this.sealId) {
@@ -439,6 +469,7 @@ export default {
         Remark: "", //审批备注
         fileList: [], //合同附件
         ContractId: 0, //合同id(默认为0)
+        AffiliatedCompany:''
       };
       // 清除校验提示
       this.$nextTick(() => {

+ 1 - 1
src/views/system_manage/approvalManage.vue

@@ -99,7 +99,7 @@ import {departInterence} from '@/api/api.js'
 const config={
   '客户审批':[{id:1,name:'FICC部门'},{id:2,name:'权益部门'}],
   '合同审批':[{id:3,name:'FICC部门'},{id:4,name:'权益部门'}],
-  '用印审批':[{id:5,name:'合同章'},{id:6,name:'公章/法人章'}]
+  '用印审批':[{id:5,name:'合同章/电子合同章'},{id:6,name:'公章/法人章'}]
 }
 export default {
   data () {