Эх сурвалжийг харах

Merge branch 'master' into crm_16.4

bding 4 сар өмнө
parent
commit
5ccd2b02a1
26 өөрчлөгдсөн 1305 нэмэгдсэн , 459 устгасан
  1. 9 1
      src/api/modules/rai/raiApi.js
  2. 7 0
      src/api/modules/statisticApi.js
  3. 1 1
      src/components/searchDistPicker.vue
  4. 7 1
      src/routes/modules/statisticRoutes.js
  5. 10 0
      src/views/business_trip_manage/businessApplication.vue
  6. 10 0
      src/views/business_trip_manage/businessApproval.vue
  7. 24 2
      src/views/business_trip_manage/businessCalendar.vue
  8. 15 2
      src/views/business_trip_manage/components/tripApplicationDia.vue
  9. 19 0
      src/views/business_trip_manage/components/tripApproveDia.vue
  10. 14 5
      src/views/contract_manage/addContract.vue
  11. 1 1
      src/views/contract_manage/components/QyServiceTable.vue
  12. 12 9
      src/views/custom_manage/customList/applyTurn.vue
  13. 326 280
      src/views/custom_manage/customList/components/raiPermissionbox.vue
  14. 4 4
      src/views/custom_manage/customList/updateServe.vue
  15. 82 0
      src/views/dataReport_manage/components/NotRenewedDlg.vue
  16. 6 4
      src/views/dataReport_manage/components/previousDetail.vue
  17. 103 23
      src/views/dataReport_manage/configdata.js
  18. 86 84
      src/views/dataReport_manage/equityCustomStatistics.vue
  19. 10 1
      src/views/dataReport_manage/equityServiceStatistics.vue
  20. 486 0
      src/views/dataReport_manage/raiStockCutomList.vue
  21. 2 0
      src/views/rai_manage/activityManage/components/addActivity.vue
  22. 2 0
      src/views/rai_manage/activityManage/components/addComopnents/ResearchDeduct.vue
  23. 41 35
      src/views/rai_manage/components/addChoiceness.vue
  24. 4 4
      src/views/rai_manage/components/report_preview/choicenessPre.vue
  25. 21 2
      src/views/seal_manage/approvalList.vue
  26. 3 0
      src/views/seal_manage/updateSeal.vue

+ 9 - 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);
+  },
   /**
    * 上
    * 周

+ 7 - 0
src/api/modules/statisticApi.js

@@ -34,6 +34,9 @@ const dataMainInterface = {
 	stackList:params => {
 		return http.get('/statistic_report/stack_company_list',params);
 	},
+	raiStackList:params => {
+		return http.get('/statistic_report/stack_company_list_rai',params);
+	},
 	/**
 	 * 获取增量客户列表接口
 	 * @param {PageSize} params 
@@ -186,6 +189,10 @@ const dataMainInterface = {
 	mergeCompanyPreviousDetail:params => {
 		return http.get('/statistic_report/merge_company_previous/detail',params);
 	},
+	// 客户数据未续约说明更多上一年
+	mergeCompanyPreviousDetailYear:params => {
+		return http.get('/statistic_report/merge_company_previous/last_year',params);
+	},
 	/**
 	 * 	// 获取图表阅读统计列表
 	 * @param {PageSize} params 

+ 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{

+ 7 - 1
src/routes/modules/statisticRoutes.js

@@ -27,6 +27,12 @@ export default [
 				name: '存量客户数据',
 				hidden: false
 			},
+			{
+				path: 'raiStocklist',
+				component: () => import('@/views/dataReport_manage/raiStockCutomList.vue'),
+				name: '权益存量客户',
+				hidden: false
+			},
 			{
 				path: 'contractlist',
 				component: () => import('@/views/dataReport_manage/contractList.vue'),
@@ -48,7 +54,7 @@ export default [
 			{
 				path: 'equityCustomStatistics',
 				component: () => import('@/views/dataReport_manage/equityCustomStatistics.vue'),
-				name: '权益客户统计',
+				name: '权益增量客户',
 				hidden: false
 			},
 			{

+ 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 - 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 = {

+ 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>

+ 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 = {

+ 82 - 0
src/views/dataReport_manage/components/NotRenewedDlg.vue

@@ -0,0 +1,82 @@
+<template>
+  <el-dialog :visible.sync="isNotRenewedDlg" :close-on-click-modal="false" :modal-append-to-body="false" @close="cancelHandle" center title="下载未续约率" width="35%">
+    <div>
+      <el-radio-group v-model="radio">
+        <el-radio style="margin-bottom: 20px" :label="1">下载当前销售的合同明细数据</el-radio>
+        <el-radio :label="2">下载所有销售未续约数据列表</el-radio>
+      </el-radio-group>
+    </div>
+    <span slot="footer" class="dialog-footer">
+      <el-button @click="cancelHandle">取 消</el-button>
+      <el-button type="primary" @click="downloadHandle">确 定</el-button>
+    </span>
+  </el-dialog>
+</template>
+
+<script>
+import { dataMainInterface } from "@/api/api.js";
+export default {
+  props: {
+    isNotRenewedDlg: {
+      type: Boolean,
+      default: false,
+    },
+    start_date: {
+      type: String,
+      default: "",
+    },
+    end_date: {
+      type: String,
+      default: "",
+    },
+    adminId: {
+      type: Array,
+      default: [],
+    },
+  },
+  watch: {},
+  data() {
+    return {
+      radio: 1,
+    };
+  },
+  methods: {
+    // 关闭弹框
+    cancelHandle() {
+      this.$emit("update:isNotRenewedDlg", false);
+    },
+    // 下载
+    downloadHandle() {
+      let paramStr = "";
+
+      let baseUrl = process.env.API_ROOT + "/statistic_report/merge_company/company_contract_percentage/list_export";
+      let token = localStorage.getItem("auth") || "";
+      let salesArr = [];
+      if (this.adminId.length) {
+        salesArr = this.adminId.map((item) => {
+          return item[item.length - 1];
+        });
+      }
+      let obj = {
+        EndDate: this.end_date,
+        StartDate: this.start_date,
+        ExportType: this.radio,
+        AdminId: salesArr.join(","),
+      };
+      for (let key in obj) {
+        paramStr = `${paramStr}&${key}=${obj[key]}`;
+      }
+      let link = document.createElement("a");
+      link.style.display = "none";
+      link.href = `${baseUrl}?${token}${paramStr}`;
+      link.setAttribute("download", name);
+      document.body.appendChild(link);
+      link.click();
+      document.body.removeChild(link);
+    },
+  },
+  created() {},
+  mounted() {},
+};
+</script>
+<style lang="scss"></style>

+ 6 - 4
src/views/dataReport_manage/components/previousDetail.vue

@@ -1,6 +1,6 @@
 <template>
   <el-dialog v-dialogDrag :visible.sync="previousDetailDlg" @close="handleClose" :modal-append-to-body="false" center title="维持套餐">
-    <p>上一合同信息</p>
+    <p>上一合同信息</p>
     <el-table :data="dataList" border max-height="250" style="margin: 20px 0">
       <el-table-column label="合同期限" prop="StartDate" align="center" width="220">
         <template slot-scope="{ row }">
@@ -43,12 +43,14 @@ export default {
     },
     async getrenewalReasonList() {
       console.log(this.rowInfo);
-      const res = await dataMainInterface.mergeCompanyPreviousDetail({
+      const res = await dataMainInterface.mergeCompanyPreviousDetailYear({
         CompanyContractId: this.rowInfo.CompanyContractId,
       });
       if (res.Ret == 200) {
-        this.dataList = [res.Data.Detail];
-        console.log(this.dataList);
+
+        this.dataList = res.Data.List || []
+
+        // console.log(this.dataList);
       }
     },
   },

+ 103 - 23
src/views/dataReport_manage/configdata.js

@@ -62,11 +62,6 @@ export const incrementTableColums = [
     textsty: "color:#409EFF;cursor:pointer;",
     link: true,
   },
-  {
-    label: "客户类型",
-    key: "ProductName",
-    widthsty: "100px",
-  },
   {
     label: "不续约归因",
     key: "AscribeContent",
@@ -136,7 +131,6 @@ export const incrementTableColums = [
     sort: true,
   },
 ];
-/* 存量客户表格列 */
 export const stockTableColums = [
   {
     label: "客户名称",
@@ -202,6 +196,79 @@ export const stockTableColums = [
     dataType: "未续约客户",
   },
 ];
+
+/* 存量客户表格列 */
+export const RaiStockTableColums = [
+  {
+    label: "客户名称",
+    key: "CompanyName",
+    widthsty: "300px",
+    textsty: "color:#409EFF;cursor:pointer;",
+    link: true,
+  },
+  {
+    label: "不续约归因",
+    key: "AscribeContent",
+    dataType: "未续约客户",
+    notRenewedConfirm: 1,
+    sort: true,
+  },
+  {
+    label: "客户状态",
+    key: "Status",
+    dataType: "未续约客户",
+  },
+  {
+    label: "所属销售",
+    key: "SellerName",
+    widthsty: "150px",
+  },
+  {
+    label: "服务销售",
+    key: "ShareSeller",
+    dataType: "新签客户,续约客户",
+  },
+  {
+    label: "合同期限",
+    dataType: "新签客户,续约客户",
+    key: "StartDate"
+  },
+  {
+    label: "合同金额",
+    dataType: "新签客户,续约客户",
+    key: "Money",
+  },
+  {
+    label: "签约套餐",
+    dataType: "新签客户,续约客户",
+    key: "PermissionName",
+  },
+  {
+    label: "最近合同到期时间",
+    key: "EndDate",
+    dataType: "未续约客户",
+  },
+  {
+    label: "备注",
+    key: "Remark",
+    dataType: "未续约客户",
+    widthsty: "100px",
+    sort: true,
+  },
+  {
+    label: "未续约说明",
+    key: "RenewalReason",
+    dataType: "未续约客户",
+    widthsty: "300px",
+  },
+  {
+    label: "超出到期时间(天)",
+    key: "ExpireDay",
+    widthsty: "150px",
+    dataType: "未续约客户",
+  },
+];
+
 /* 合同列表表格列 */
 export const contractTableColums = [
   {
@@ -315,6 +382,11 @@ export const equityTableColums = (type) => {
           key: "SellerName",
           widthsty: "150px",
         },
+        {
+          label: "服务销售",
+          key: "ShareSeller",
+          widthsty: "150px",
+        },
         {
           label: "合同期限",
           align: "center",
@@ -351,8 +423,13 @@ export const equityTableColums = (type) => {
           widthsty: "150px",
         },
         {
-          label: "合同到期时间",
-          key: "EndDate",
+          label: "服务销售",
+          key: "ShareSeller",
+          widthsty: "150px",
+        },
+        {
+          label: "合同期限",
+          key: "StartDate",
           dataType: "未续约客户",
           sort: true,
         },
@@ -366,20 +443,6 @@ export const equityTableColums = (type) => {
           key: "Money",
           dataType: "新签客户",
         },
-        {
-          label: "未续约说明",
-          key: "RenewalReason",
-          dataType: "未续约客户",
-          widthsty: "300px",
-          sort: true,
-        },
-        {
-          label: "备注",
-          key: "Remark",
-          dataType: "未续约客户",
-          widthsty: "100px",
-          sort: true,
-        },
         {
           label: "不续约归因",
           key: "AscribeContent",
@@ -387,5 +450,22 @@ export const equityTableColums = (type) => {
           sort: true,
         },
       ]
-    : [];
+    : type === "新增试用客户" 
+    ? [ {
+      label: "客户名称",
+      key: "CompanyName",
+      widthsty: "300px",
+      textsty: "color:#409EFF;cursor:pointer;",
+      link: true,
+    },
+    {
+      label: "所属销售",
+      key: "SellerName",
+      widthsty: "150px",
+    },
+    {
+      label: "新增时间",
+      key: "CreateTime",
+    }]
+    :[];
 };

+ 86 - 84
src/views/dataReport_manage/equityCustomStatistics.vue

@@ -37,7 +37,10 @@
                 {{ lableTextDisplay(item.label) }}数
                 <el-tooltip class="item" effect="dark" :content="item.label === '新签客户' ? '<br />' : item.label === '续约客户' ? '起始时间在所选时间段内的续约合同' : ''" placement="top">
                   <template slot="content">
-                    <div v-if="item.label === '新签客户'">
+                    <div v-if="item.label === '新增试用客户'">
+                      <p>新建试用客户的时间,包含在所选时间段内的客户数(流失领取的不计入)</p>
+                    </div>
+                    <div v-else-if="item.label === '新签客户'">
                       <p>起始时间在所选时间段内的新签合同</p>
                       <p>(第一份合同起始时间一年内的再次签约仍属于新签合同)</p>
                     </div>
@@ -45,7 +48,7 @@
                       <p>起始时间在所选时间段内的续约合同</p>
                       <p>(第一份合同起始时间一年以后的再次签约均属于续约合同)</p>
                     </div>
-                    <p v-else>合同截止时间在所选时间段内的非正式、非永续客户</p>
+                    <p v-else>当前客户状态为非正式、非X类试用,且截止时间在所选时间段内的合同数(打分客户佣金不计入)</p>
                   </template>
                   <i class="el-icon-info"></i>
                 </el-tooltip>
@@ -53,7 +56,9 @@
             </div>
             <div class="card-cont">
               {{
-                item.label === "新签客户"
+                item.label === "新增试用客户"
+                  ? TrialTotal
+                  : item.label === "新签客户"
                   ? NewCompanyTotal
                   : item.label === "续约客户"
                   ? RenewalCompanyTotal
@@ -64,54 +69,45 @@
             </div>
           </el-card>
         </div>
-        <div class="annual-select-content">
-          <div class="select-content">
-            <div class="lable-text">
-              不续约率
-              <el-tooltip style="margin-right: 16px" class="item" effect="dark" content="所选年度的续约合同/所选年度的到期合同" placement="top-start">
-                <template slot="content">
-                  <div>
-                    <p>所选时间段的已确认不续约的合同金额/所选时间段的到期的合同金额</p>
-                    <p>(剔除非业务不续约的金额)</p>
-                  </div>
-                </template>
-                <i class="el-icon-info" style="color: #999"></i>
-              </el-tooltip>
-            </div>
-            <el-date-picker
-              v-model="yearValue"
-              type="daterange"
-              format="yyyy-MM-dd"
-              value-format="yyyy-MM-dd"
-              :clearable="false"
-              @change="getIncrementalCompanyContractPercentageList"
-              range-separator="至"
-              start-placeholder="开始日期"
-              end-placeholder="结束日期"
-            >
-            </el-date-picker>
-          </div>
-          <div class="select-content">
-            <span class="editsty" v-if="RenewalDataForm.RenewalRateMoney" @click="renewalRateLableHandler">&nbsp;&nbsp;{{ RenewalDataForm.RenewalRateMoney }}&nbsp;&nbsp;</span>
-            {{ RenewalDataForm.RenewalRateTotalContent ? `(${RenewalDataForm.RenewalRateTotalContent})` : " -  -" }}
-          </div>
-        </div>
       </div>
       <div class="tabs-box">
-        <div class="tabs-box-confirm" v-if="filterObj.data_type =='续约客户'">
+        <div class="tabs-box-confirm"  v-if="filterObj.data_type == '续约客户'">
           <div style="margin-bottom: 0px" class="tabs-box-confirm" v-for="(item, index) in packageTypeList" :key="item">
             <div :class="['confirm-box-li', PackageDifference == item && 'active']" @click="notPackageDifferenceChange(item)">{{ item }}</div>
             <div v-if="index != 2" class="center-line"></div>
           </div>
+            <el-tooltip style="margin-right: 16px" class="item" effect="dark" content="今年续约合同总金额与上年度合同总金额对比" placement="top-start">
+             
+              <i class="el-icon-info" style="color: #999"></i>
+            </el-tooltip>
         </div>
       </div>
       <div class="tabs-box" v-if="filterObj.data_type == '未续约客户'">
-        <el-radio-group v-model="isNotRenewedConfirm" class="tabs-box-confirm" @change="notRenewedConfirmChange">
-          <el-radio-button :label="1">已确认</el-radio-button>
-          <div class="center-line"></div>
-          <el-radio-button :label="0">待确认</el-radio-button>
-        </el-radio-group>
-        <div class="tabs-box-status" v-show="isNotRenewedConfirm">
+        <div style="display: flex; align-items: cente; margin-bottom: 20px">
+          <el-radio-group v-model="isNotRenewedConfirm" style="margin: 0px 20px 0 0" class="tabs-box-confirm" @change="notRenewedConfirmChange">
+            <el-radio-button :label="1">已确认</el-radio-button>
+            <div class="center-line"></div>
+            <el-radio-button :label="0">待确认</el-radio-button>
+            <div class="center-line"></div>
+            <el-radio-button :label="2">到期合同</el-radio-button>
+          </el-radio-group>
+          <div class="lable-text">
+            未续约率
+            <el-tooltip style="margin-right: 16px" class="item" effect="dark" content="所选年度的续约合同/所选年度的到期合同" placement="top-start">
+              <template slot="content">
+                <div>
+                  <p>所选时间段的已确认不续约的合同金额/所选时间段的到期的合同金额</p>
+                  <p>(剔除非业务不续约的金额)</p>
+                </div>
+              </template>
+              <i class="el-icon-info" style="color: #999"></i>
+            </el-tooltip>
+            <p class="editsty" v-if="RenewalDataForm.RenewalRateMoney" @click="renewalRateLableHandler">&nbsp;&nbsp;{{ RenewalDataForm.RenewalRateMoney }}&nbsp;&nbsp;</p>
+            {{ RenewalDataForm.RenewalRateTotalContent ? `(${RenewalDataForm.RenewalRateTotalContent})` : " -  -" }}
+            <el-button v-if="canConfirmNotRenewed" type="primary" size="mini" style="margin-left: 20px" @click="isNotRenewedDlg = true">下载</el-button>
+          </div>
+        </div>
+        <div v-show="isNotRenewedConfirm">
           <el-select v-model="noRenewalReasonId" placeholder="请选择不续约归因" clearable @change="getTableData" style="width: 240px; margin-right: 50px">
             <el-option :label="item.AscribeContent" :value="item.CompanyAscribeId" v-for="item in noRenewalReasonList" :key="item.reasonId"></el-option>
           </el-select>
@@ -207,6 +203,7 @@
     <previous-detail :previousDetailDlg.sync="previousDetailDlg" :rowInfo="rowInfo" />
     <RenewalRateDetail :showRenewalRateDetailDlg.sync="showRenewalRateDetailDlg" :renewalRateDetailForm.sync="renewalRateDetailForm" :noRenewalReasonListSon="noRenewalReasonList" />
     <historical-notes-dlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
+    <NotRenewedDlg :isNotRenewedDlg.sync="isNotRenewedDlg" :start_date="start_date" :end_date="end_date" :adminId="filterObj.sale" />
   </div>
 </template>
 
@@ -221,12 +218,13 @@ import confirmedNoRenewal from "./components/noRenewalReasonDia/confirmedNoRenew
 import PreviousDetail from "./components/previousDetail.vue";
 import RenewalRateDetail from "./components/renewalRateDetail.vue";
 import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
-
+import NotRenewedDlg from "./components/NotRenewedDlg.vue";
 var moment = require("moment");
 moment().format();
 export default {
   name: "",
-  components: { mPage, renewalListDia, addRemark, viewRemark, confirmedNoRenewal, PreviousDetail, RenewalRateDetail, HistoricalNotesDlg },
+  components: { mPage, renewalListDia, addRemark, viewRemark, confirmedNoRenewal, PreviousDetail, RenewalRateDetail, HistoricalNotesDlg, NotRenewedDlg },
+
   computed: {
     exportExcel() {
       let baseUrl = process.env.API_ROOT + "/statistic_report/merge_company_list";
@@ -283,7 +281,7 @@ export default {
         month: "近1个月",
         date: [],
         sale: "",
-        data_type: "新客户",
+        data_type: "新增试用客户",
       },
       monthLabel: [
         {
@@ -307,6 +305,9 @@ export default {
       page_no: sessionStorage.getItem("incrementBack") ? JSON.parse(sessionStorage.getItem("incrementBack")).page_no : 1,
       total: 0,
       data_typeArr: [
+        {
+          label: "新增试用客户",
+        },
         {
           label: "新签客户",
         },
@@ -328,6 +329,7 @@ export default {
         { name: "冻结/流失", value: "非试用" },
       ],
       tabsActiveName: "",
+      TrialTotal: 0, //新增试用数
       NotRenewalNotTryOut: 0, //冻结流失的人数
       NotRenewalTryOut: 0, //试用的人数
       isNotRenewedConfirm: 1, //未续约的是否已确认
@@ -356,6 +358,8 @@ export default {
 
       historicalNotesDlgVisible: false, //历史备注的弹框
       historicalNotesId: 0,
+
+      isNotRenewedDlg: false, //未续约 弹框
     };
   },
   /* 页面跳转前记录参数 */
@@ -456,6 +460,7 @@ export default {
         if (res.Ret === 200) {
           this.tableData = res.Data.List || [];
           this.total = res.Data.Paging.Totals;
+          this.TrialTotal = res.Data.TrialTotal;
           this.NewCompanyTotal = res.Data.NewCompanyTotal;
           this.RenewalCompanyTotal = res.Data.RenewalCompanyTotal;
           this.NotRenewalCompanyTotal = res.Data.NotRenewalCompanyTotal;
@@ -479,6 +484,7 @@ export default {
       this.filterObj.month = label;
       let days = label == "近1个月" ? 1 : label == "近2个月" ? 2 : label == "近3个月" ? 3 : 0;
       this.filterDate(days);
+      this.getIncrementalCompanyContractPercentageList();
     },
     /* 选择服务日期 */
     dateChange(e) {
@@ -502,6 +508,7 @@ export default {
       this.incrementTableColums = equityTableColums(this.filterObj.data_type);
       this.noRenewalReasonId = "";
       if (label == "未续约客户") {
+        this.getIncrementalCompanyContractPercentageList();
         this.getNORenewalReasonList();
       }
       this.tabsActiveName = "";
@@ -513,9 +520,7 @@ export default {
       this.page_no = 1;
       this.searchVal = "";
       this.getTableData();
-      if (this.yearValue.length > 0) {
-        this.getIncrementalCompanyContractPercentageList();
-      }
+      this.getIncrementalCompanyContractPercentageList();
     },
     /* 切换页码 */
     handleCurrentChange(page) {
@@ -630,14 +635,15 @@ export default {
       this.previousDetailDlg = true;
     },
     lableTextDisplay(text) {
-      let str = text == "新签客户" ? "新签合同" : text == "续约客户" ? "续约合同" : "未续约客户";
+      
+      let str = text == "新增试用客户" ? "新增试用客户" : text == "新签客户" ? "新签合同" : text == "续约客户" ? "续约合同" : "未续约客户";
       return str;
     },
-    // 年度续约的标签点击事件
-    annualSelectHandler(item) {
-      this.annualSelectActivue = item.name;
-      this.getIncrementalCompanyContractPercentageList();
-    },
+    // // 年度续约的标签点击事件
+    // annualSelectHandler(item) {
+    //   this.annualSelectActivue = item.name;
+    //   this.getIncrementalCompanyContractPercentageList();
+    // },
     // 点击了续约率
     renewalRateLableHandler() {
       this.showRenewalRateDetailDlg = true;
@@ -645,6 +651,7 @@ export default {
     },
     // 获取年度续约的数据
     async getIncrementalCompanyContractPercentageList() {
+      if (this.filterObj.data_type != "未续约客户") return;
       let params = this.initCompanyContractPercentageList();
       const res = await dataMainInterface.incrementalCompanyContractPercentageListV2(params);
       if (res.Ret === 200) {
@@ -660,8 +667,8 @@ export default {
         });
       }
       let params = {
-        EndDate: this.yearValue.length > 0 ? this.yearValue[1] : "",
-        StartDate: this.yearValue.length > 0 ? this.yearValue[0] : "",
+        EndDate: this.end_date,
+        StartDate: this.start_date,
         AdminId: salesArr.join(","),
       };
       return params;
@@ -750,34 +757,29 @@ export default {
 .package-difference {
   cursor: pointer;
 }
-.annual-select-content {
-  .select-content {
-    display: flex;
-    align-items: center;
-    margin-bottom: 15px;
-    .lable-text {
-      flex-shrink: 0;
-    }
-    .select-lable {
-      display: flex;
-      align-items: center;
-      justify-content: center;
-      box-sizing: border-box;
-      margin-left: 10px;
-      width: 92px;
-      height: 40px;
-      color: #409eff;
-      background-color: #ecf5ff;
-      border: 1px solid #b3d8ff;
-      border-radius: 4px;
-      cursor: pointer;
-    }
-    .act-select-lable {
-      color: #fff;
-      background-color: #409eff;
-      border: none;
-    }
-  }
+
+.lable-text {
+  display: flex;
+  align-items: center;
+}
+.select-lable {
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  box-sizing: border-box;
+  margin-left: 10px;
+  width: 92px;
+  height: 40px;
+  color: #409eff;
+  background-color: #ecf5ff;
+  border: 1px solid #b3d8ff;
+  border-radius: 4px;
+  cursor: pointer;
+}
+.act-select-lable {
+  color: #fff;
+  background-color: #409eff;
+  border: none;
 }
 </style>
 <style lang="scss">

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

@@ -58,7 +58,16 @@
     </el-card>
     <el-card style="margin-top: 20px">
       <el-table :data="tableData" border style="width: 100%" @sort-change="sortChangeHandle">
-        <el-table-column align="center" prop="CompanyName" label="客户名称" width="180">
+        <el-table-column align="center" prop="CompanyName" width="180">
+          <template slot="header" slot-scope="{}">
+            <span>客户名称</span>
+            <el-tooltip effect="dark" placement="top-start">
+              <div slot="content">
+                <p>分配或者取消分配服务销售后,最多10分钟后客户会在此列表更新</p>
+              </div>
+              <i class="el-icon-warning"></i>
+            </el-tooltip>
+          </template>
           <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>

+ 486 - 0
src/views/dataReport_manage/raiStockCutomList.vue

@@ -0,0 +1,486 @@
+<template>
+  <div class="dataReport-container">
+    <div class="dataReport-main first">
+      <div class="main-top" style="display: flex; align-items: center">
+        <a :href="exportExcel" download>
+          <el-button type="primary" style="margin-right: 10px; margin-bottom: 8px">导出EXCEL</el-button>
+        </a>
+
+        <el-cascader
+          v-if="Role == 'finance' || Role == 'admin' || Role == 'ficc_admin' || Role == 'rai_admin' || ManageType != 0"
+          v-model="filterObj.sale"
+          placeholder="请选择销售"
+          style="min-width: 250px; margin-right: 10px; margin-bottom: 8px"
+          :options="salesArr"
+          :props="defaultSalesProps"
+          :show-all-levels="false"
+          collapse-tags
+          clearable
+          filterable
+          @change="changeFilter"
+        >
+        </el-cascader>
+
+        <el-input placeholder="请输入客户名称" v-model="searchVal" style="max-width: 400px; margin-left: auto; margin-bottom: 8px" @input="handleSearch" clearable>
+          <i slot="prefix" class="el-input__icon el-icon-search"></i>
+        </el-input>
+      </div>
+      <div class="main-section">
+        <el-row :gutter="36">
+          <el-col :span="8" v-for="item in data_typeArr" :key="item.label">
+            <el-card :class="['base-card', { 'main-card': filterObj.data_type === item.label }]" shadow="hover" @click.native="toggleType(item.label)">
+              <div slot="header" class="clearfix">
+                <span>
+                  {{ item.label }}数
+                  <el-tooltip
+                    class="item"
+                    effect="dark"
+                    :content="
+                      item.label === '新签客户'
+                        ? '当前为正式状态,且处于第一份合同起始日一年以内的客户'
+                        : item.label === '续约客户'
+                        ? '当前为正式状态,且处于第一份合同起始日一年以外的客户'
+                        : '历史上有过正式记录,且当前为非正式、非X类试用状态的客户'
+                    "
+                    placement="top"
+                  >
+                    <i class="el-icon-info"></i>
+                  </el-tooltip>
+                </span>
+              </div>
+              <div class="card-cont">
+                {{ item.label === "新签客户" ? NewCompanyTotal : item.label === "续约客户" ? RenewalCompanyTotal : item.label === "未续约客户" ? NotRenewalCompanyTotal : "" }}
+              </div>
+            </el-card>
+          </el-col>
+        </el-row>
+      </div>
+      <div>
+        <el-select v-model="noRenewalReasonId" placeholder="请选择不续约归因" v-show="filterObj.data_type == '未续约客户'" clearable @change="getTableData" style="width: 240px; margin-top: 40px">
+          <el-option :label="item.AscribeContent" :value="item.CompanyAscribeId" v-for="item in noRenewalReasonList" :key="item.reasonId"></el-option>
+        </el-select>
+        <el-select v-model="tabsActiveName" placeholder="当前状态" v-show="filterObj.data_type == '未续约客户'" clearable @change="getTableData" style="width: 240px; margin-left: 20px">
+          <el-option :label="item.name" :value="item.value" v-for="item in tabsList" :key="item.value"></el-option>
+        </el-select>
+      </div>
+
+      <el-table :data="tableData" border v-loading="isShowloadding" element-loading-text="数据加载中..." style="margin-top: 20px; min-height: 400px">
+        <template v-for="item in stockTableColums">
+          <el-table-column :key="item.label" :label="item.label" :width="item.widthsty" align="center" v-if="!item.dataType || item.dataType.split(',').includes(filterObj.data_type)">
+            <template slot-scope="scope">
+              <span :style="item.textsty" @click="jumpHandle(scope.row, item)" v-if="item.label == '服务期限' || item.label == '最近合同到期时间'">
+                {{
+                  item.label == "服务期限" && scope.row.StartDate.indexOf("/") == -1
+                    ? scope.row.StartDate + "~" + scope.row.EndDate
+                    : item.label == "服务期限" && scope.row.StartDate.indexOf("/") != -1
+                    ? scope.row.StartDate.substr(0, 10) + "~" + scope.row.EndDate.substr(0, 10) + "/" + scope.row.StartDate.substr(11) + "~" + scope.row.EndDate.substr(11)
+                    : scope.row[item.key] | formatTime
+                }}
+              </span>
+              <span v-else-if="item.label == '合同期限'">
+                <span>{{ scope.row.StartDate }} ~ {{ scope.row.EndDate }}</span>
+              </span>
+              <span v-else-if="item.label == '未续约说明'">
+                <span style="display: block" v-if="scope.row[item.key]">最新情况:{{ scope.row[item.key] }}</span>
+                <span v-if="scope.row.RenewalTodo">To Do 事项:{{ scope.row.RenewalTodo }}</span>
+                <span v-if="scope.row[item.key] || scope.row.RenewalTodo" style="color: #409eff; cursor: pointer" @click="renewalReasonMore(scope.row)">&emsp;更多>></span>
+              </span>
+              <!-- <div v-else-if="item.key == 'CompanyName'" style="padding: 4px 0">
+                <span :style="item.textsty" @click="jumpHandle(scope.row, item)">
+                  {{ scope.row[item.key] }}
+                </span>
+                <div class="package-difference" v-if="scope.row.PackageDifference">
+                  {{ scope.row.PackageDifference }}
+                </div>
+              </div> -->
+               <div v-else-if="item.key == 'CompanyName'" style="padding: 4px 0">
+                <el-tooltip effect="dark" placement="top-start" content="过去4周,kp均未覆盖服务" v-if="scope.row.IsUserMaker == -1">
+                  <span class="deletesty" @click="jumpHandle(scope.row, item)">{{ scope.row[item.key] }}</span>
+                </el-tooltip>
+                <span v-else class="editsty" @click="jumpHandle(scope.row, item)">{{ scope.row[item.key] }}</span>
+                <div class="package-difference" v-if="scope.row.PackageDifference" @click="previousDetailHadler(scope.row)">
+                  {{ scope.row.PackageDifference }}
+                </div>
+              </div>
+              <div v-else-if="item.key === 'Remark'" class="remark-row">
+                <span class="remark-text" @click="viewHistoryRemarkFun(scope.row)" v-if="scope.row.IsShowNoRenewedNote">...</span>
+              </div>
+              <div v-else-if="item.key == 'AscribeContent'">
+                <span style="color: #409eff; cursor: pointer" @click="editReasonLabel(scope.row)">
+                  {{ scope.row[item.key] }}
+                </span>
+              </div>
+              <span v-else :style="item.textsty" @click="jumpHandle(scope.row, item)">
+                {{ scope.row[item.key] }}
+              </span>
+            </template>
+          </el-table-column>
+        </template>
+        <el-table-column label="操作" width="180px" align="center">
+          <template slot-scope="{ row }">
+            <span v-if="isRoleType == 'admin' || isRoleType == '权益'" @click="historicalNotesClickHandler(row)" class="editsty">历史备注</span>
+          </template>
+        </el-table-column>
+        <div slot="empty" style="lineheight: 44px; margin: 60px 0; color: #999">
+          <img src="~@/assets/img/cus_m/nodata.png" alt="" style="display: block; width: 160px; height: 128px; margin: auto" />
+          <span>暂无数据</span>
+        </div>
+      </el-table>
+      <el-col :span="24" class="toolbar" v-if="total">
+        <m-page :total="total" :page_no="page_no" @handleCurrentChange="handleCurrentChange" />
+      </el-col>
+    </div>
+    <!-- 未续约说明列表弹窗 -->
+    <renewalListDia :isShow.sync="isRenewalShow" :rowInfo="rowInfo" />
+    <!-- 历史备注弹窗 -->
+    <viewRemark :isShow.sync="isViewRemarkShow" :tableData="historyRemarkList" />
+    <!-- 确认不续约弹窗 -->
+    <confirmedNoRenewal
+      :isShow.sync="isConfirmNoRenewalShow"
+      :dataForm="confirmNoRenewalForm"
+      :noRenewalReasonList="noRenewalReasonList"
+      @refreshReasonList="getNORenewalReasonList"
+      @saveLabel="saveLabel"
+    />
+
+    <!-- 历史备注的弹框 -->
+    <HistoricalNotesDlg :historicalNotesDlgVisible.sync="historicalNotesDlgVisible" :CompanyId.sync="historicalNotesId" />
+  </div>
+</template>
+
+<script>
+import { RaiStockTableColums } from "./configdata.js";
+import { dataMainInterface, customInterence } from "@/api/api.js";
+import mPage from "@/components/mPage.vue";
+import renewalListDia from "./components/renewalListDia.vue";
+import viewRemark from "./components/noRenewalReasonDia/viewRemark.vue";
+import confirmedNoRenewal from "./components/noRenewalReasonDia/confirmedNoRenewal.vue";
+import HistoricalNotesDlg from "@/components/historicalNotesDlg.vue";
+
+var moment = require("moment");
+moment().format();
+export default {
+  name: "",
+  components: { mPage, renewalListDia, viewRemark, confirmedNoRenewal, HistoricalNotesDlg },
+  computed: {
+    exportExcel() {
+      let baseUrl = process.env.API_ROOT + "/statistic_report/stack_company_list_rai";
+      let token = localStorage.getItem("auth") || "";
+      let paramStr = "";
+      // 处理销售筛选
+      let salesArr = [];
+      if (this.filterObj.sale.length) {
+        salesArr = this.filterObj.sale.map((item) => {
+          return item[item.length - 1];
+        });
+      }
+      let obj = {
+        PageSize: this.pageSize,
+        CurrentIndex: this.page_no,
+        CompanyType: this.filterObj.type,
+        AdminId: salesArr.join(","),
+        RegionType: this.filterObj.area,
+        Date: this.filterObj.date,
+        DataType: this.filterObj.data_type,
+        Keyword: this.searchVal,
+        IsExport: true,
+        IsConfirm: this.filterObj.data_type == "未续约客户" ? 1 : -1,
+        CompanyAscribeId: this.noRenewalReasonId,
+      };
+      for (let key in obj) {
+        paramStr = `${paramStr}&${key}=${obj[key]}`;
+      }
+      return `${baseUrl}?${token}${paramStr}`;
+    },
+
+    stockTableColums() {
+      return RaiStockTableColums;
+    },
+    Role() {
+      let role = localStorage.getItem("Role") || "";
+      return role;
+    },
+    //管理权限
+    ManageType() {
+      return localStorage.getItem("ManageType") || "";
+    },
+    // crm 15.9.1 历史备注 区分权益FICC的展示
+    isRoleType() {
+      return localStorage.getItem("RoleType") || "";
+    },
+  },
+  data() {
+    return {
+      searchVal: sessionStorage.getItem("stockBack") ? JSON.parse(sessionStorage.getItem("stockBack")).searchVal : "",
+
+      tableData: [],
+      isShowloadding: false,
+      /* 筛选条件 */
+      filterObj: {
+        date: moment().format("YYYY-MM-DD"),
+        type: "",
+        sale: "",
+        area: "",
+        data_type: this.$route.query.type || "新签客户",
+      },
+      salesArr: [], //销售列表
+      defaultSalesProps: {
+        multiple: true,
+        label: "RealName",
+        children: "ChildrenList",
+        value: "AdminId",
+      }, //销售级联配置
+      typeArr: [
+        {
+          name: "ficc",
+        },
+        {
+          name: "权益",
+        },
+      ], //类型
+      areaArr: ["国内", "海外"],
+      pageSize: 10,
+      page_no: sessionStorage.getItem("stockBack") ? JSON.parse(sessionStorage.getItem("stockBack")).page_no : 1,
+      total: 0,
+      data_typeArr: [
+        {
+          label: "新签客户",
+        },
+        {
+          label: "续约客户",
+        },
+        {
+          label: "未续约客户",
+        },
+      ], //数据类型
+      NewCompanyTotal: 0, //新签客户数
+      NotRenewalCompanyTotal: 0, //未续约客户数
+      RenewalCompanyTotal: 0, //续约客户数
+      isRenewalShow: false, //未续约说明列表弹框是否显示
+      rowInfo: null, // 未续约说明更多行信息
+      tabsList: [
+        { name: "试用", value: "试用" },
+        { name: "冻结/流失", value: "非试用" },
+      ],
+      tabsActiveName: "",
+      NotRenewalNotTryOut: 0, //冻结流失的人数
+      NotRenewalTryOut: 0, //试用的人数
+      noRenewalReasonList: [],
+      noRenewalReasonId: "",
+      selectItemRow: {}, // 当前选中的row
+      //历史备注
+      isViewRemarkShow: false,
+      historyRemarkList: [],
+      //确认不续约
+      isConfirmNoRenewalShow: false,
+      confirmNoRenewalForm: {
+        reason: "",
+        detailReason: "",
+      },
+
+      historicalNotesDlgVisible: false, //历史备注的弹框
+      historicalNotesId: 0,
+    };
+  },
+  /* 页面跳转前记录参数 */
+  beforeRouteLeave(to, form, next) {
+    let backData = {
+      page_no: this.page_no,
+      filterObj: this.filterObj,
+      searchVal: this.searchVal,
+    };
+    sessionStorage.setItem("stockBack", JSON.stringify(backData));
+    next();
+  },
+  /* 页面进入前是否清除参数 */
+  beforeRouteEnter(to, from, next) {
+    if (from.path != "/customDetail") {
+      sessionStorage.removeItem("stockBack");
+    }
+    next();
+  },
+  methods: {
+    // 搜索
+    handleSearch() {
+      this.page_no = 1;
+      this.filterObj = {
+        date: this.filterObj.date,
+        type: "",
+        sale: "",
+        area: "",
+        data_type: this.filterObj.data_type,
+      };
+      this.getTableData();
+    },
+    //tabs 的点击事件
+    tabsHandler(item) {
+      this.tabsActiveName = item.value;
+      this.page_no = 1;
+      this.getTableData();
+    },
+    /* 获取表格 */
+    getTableData() {
+      this.isShowloadding = true;
+      // 处理销售筛选
+      let salesArr = [];
+      if (this.filterObj.sale.length) {
+        salesArr = this.filterObj.sale.map((item) => {
+          return item[item.length - 1];
+        });
+      }
+      let params = {
+        PageSize: this.pageSize,
+        CurrentIndex: this.page_no,
+        CompanyType: this.filterObj.type,
+        AdminId: salesArr.join(","),
+        RegionType: this.filterObj.area,
+        Date: this.filterObj.date,
+        DataType: this.filterObj.data_type,
+        Keyword: this.searchVal,
+        TryOutType: this.filterObj.data_type == "未续约客户" ? this.tabsActiveName : "",
+        IsConfirm: -1,
+        CompanyAscribeId: this.noRenewalReasonId,
+      };
+      dataMainInterface.raiStackList(params).then((res) => {
+        if (res.Ret === 200) {
+          this.tableData = res.Data.List || [];
+          this.total = res.Data.Paging.Totals;
+          this.NewCompanyTotal = res.Data.NewCompanyTotal;
+          this.RenewalCompanyTotal = res.Data.RenewalCompanyTotal;
+          this.NotRenewalCompanyTotal = res.Data.NotRenewalCompanyTotal;
+          this.NotRenewalTryOut = res.Data.NotRenewalTryOut || 0;
+          this.NotRenewalNotTryOut = res.Data.NotRenewalNotTryOut || 0;
+          this.isShowloadding = false;
+        }
+      });
+    },
+    /* 获取销售 */
+    getSale() {
+      customInterence.getSalesRaiData().then((res) => {
+        if (res.Ret === 200) {
+          this.salesArr = res.Data.List;
+        }
+      });
+    },
+    /* 切换数据类型 */
+    toggleType(label) {
+      this.filterObj.data_type = label;
+      if (label == "未续约客户") {
+        this.getNORenewalReasonList();
+      }
+      this.noRenewalReasonId = "";
+      this.tabsActiveName = "";
+      this.page_no = 1;
+      this.searchVal = "";
+      this.getTableData();
+    },
+    /* 筛选改变时 */
+    changeFilter() {
+      this.page_no = 1;
+      this.searchVal = "";
+      this.getTableData();
+    },
+    /* 切换页码 */
+    handleCurrentChange(page) {
+      this.page_no = page;
+      this.getTableData();
+    },
+    /* 跳转 */
+    jumpHandle(row, item) {
+      if (item.link) {
+        this.$router.push({
+          path: "/customDetail",
+          query: {
+            id: row.CompanyId,
+          },
+        });
+      }
+    },
+
+    // 未续约说明更多按钮
+    renewalReasonMore(row) {
+      this.rowInfo = {
+        CompanyId: row.CompanyId,
+        ProductId: row.ProductId,
+      };
+      this.isRenewalShow = true;
+    },
+    getNORenewalReasonList() {
+      dataMainInterface.getAscribList().then((res) => {
+        if (res.Ret == 200) {
+          this.noRenewalReasonList = res.Data.List || [];
+        }
+      });
+    },
+    // 查看历史备注
+    viewHistoryRemarkFun(row) {
+      // console.log(row);
+      dataMainInterface.getNotRenewedRemarkList({ CompanyId: row.CompanyId, ProductId: row.ProductId }).then((res) => {
+        if (res.Ret == 200) {
+          this.historyRemarkList = res.Data.List || [];
+          this.isViewRemarkShow = true;
+        }
+      });
+    },
+    editReasonLabel(row) {
+      // console.log(row);
+      dataMainInterface.infoNoRenewedAscribe({ CompanyId: row.CompanyId, ProductId: row.ProductId }).then((res) => {
+        if (res.Ret == 200) {
+          this.confirmNoRenewalForm.reason = res.Data.Detail ? res.Data.Detail.CompanyAscribeId || "" : "";
+          this.confirmNoRenewalForm.detailReason = res.Data.Detail ? res.Data.Detail.Content || "" : "";
+          this.selectItemRow = row;
+          this.isConfirmNoRenewalShow = true;
+        }
+      });
+    },
+    saveLabel(item) {
+      // console.log(item);
+      let params = {
+        CompanyId: this.selectItemRow.CompanyId,
+        ProductId: this.selectItemRow.ProductId,
+        CompanyAscribeId: item.CompanyAscribeId,
+        Content: item.Content,
+      };
+      dataMainInterface.addNoRenewedAscribe(params).then((res) => {
+        if (res.Ret == 200) {
+          this.$message.success("确认成功");
+          this.isConfirmNoRenewalShow = false;
+          this.selectItemRow = {};
+          this.getTableData();
+        }
+      });
+    },
+    // 点击了历史留言
+    historicalNotesClickHandler(item) {
+      this.historicalNotesDlgVisible = true;
+      this.historicalNotesId = item.CompanyId;
+    },
+  },
+  created() {},
+  mounted() {
+    this.getSale();
+    if (sessionStorage.getItem("stockBack")) {
+      let backData = JSON.parse(sessionStorage.getItem("stockBack"));
+      this.page_no = backData.page_no;
+      this.filterObj = backData.filterObj;
+      this.searchVal = backData.searchVal;
+    }
+    this.getTableData();
+  },
+};
+</script>
+<style lang="scss" scoped>
+@import "./index.scss";
+.remark-row {
+  display: flex;
+  justify-content: center;
+  .remark-text {
+    width: 18px;
+    height: 18px;
+    margin-right: 8px;
+    font-size: 18px;
+    color: #409eff;
+    cursor: pointer;
+  }
+}
+</style>

+ 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类非公开

+ 41 - 35
src/views/rai_manage/components/addChoiceness.vue

@@ -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;
     },
@@ -370,34 +370,37 @@ export default {
     async confirmPerson() {
       if (this.stateValue) {
         const arr = this.subjectList.find((item) => item.ShowName === this.stateValue);
-        if (!arr) {
-          this.$message.error("输入正确的标的");
-          return;
-        }
         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.ShowName);
+                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.IndustrialManagementId + "",
-                IndustrialManagementName: arr.IndustryName,
-                IndustrialSubjectId: arr.IndustrialSubjectId + "",
-                IndustrialSubjectName: arr.SubjectName,
-                ShowName: arr.ShowName,
+                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 && overviewList.ArticleId,
-                OverviewArticleTitle: overviewList && overviewList.Title,
-                IsShowOverviewArticle: overviewList && overviewList.IsShowOverviewArticle,
+                OverviewArticleId: overviewList.ArticleId || 0,
+                OverviewArticleTitle: overviewList.Title || "",
+                IsShowOverviewArticle: overviewList.IsShowOverviewArticle || 0,
               });
             }
           });
@@ -409,39 +412,42 @@ export default {
     async editconfirmPerson() {
       if (this.stateValue) {
         const arr = this.subjectList.find((item) => item.ShowName === this.stateValue);
-        if (!arr) {
-          this.$message.error("输入正确的标的");
-          return;
-        }
         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.overviewList = overviewList;
           this.industryList.forEach((item) => {
             if (item.ChartPermissionId == this.chartPermissionId) {
               if (item.List.length > 0) {
-                var isNext = item.List.some((item) => item.IndustrialSubjectName == arr.SubjectName);
+                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.IndustrialManagementId + "",
-                IndustrialManagementName: arr.IndustryName,
-                IndustrialSubjectId: arr.IndustrialSubjectId + "",
-                IndustrialSubjectName: arr.SubjectName,
-                ShowName: arr.ShowName,
+                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,
-                OverviewArticleTitle: overviewList.Title,
-                IsShowOverviewArticle: overviewList.IsShowOverviewArticle,
+                OverviewArticleId: overviewList.ArticleId || 0,
+                OverviewArticleTitle: overviewList.Title || "",
+                IsShowOverviewArticle: overviewList.IsShowOverviewArticle || 0,
               };
               item.List.splice(this.editNum, 1, obj);
-              this.industrialSubjectName = arr.IndustryName || "";
+              this.industrialSubjectName = arr ? arr.IndustryName : res.Data.ThirdName || "";
             }
           });
         }
@@ -491,7 +497,7 @@ export default {
               sessionStorage.removeItem("addChoicenessQY");
               this.$message.success("操作成功!");
               this.init();
-              this.$router.back();
+              type != "保存" && this.$router.back();
             }
           }
         }

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

@@ -27,7 +27,7 @@
         <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">
+            <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>
@@ -42,15 +42,15 @@
             {{ 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}${it.SubjectName}`">
+            <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>

+ 21 - 2
src/views/seal_manage/approvalList.vue

@@ -136,7 +136,20 @@
             <table class="table-wrap" >
               <tbody>
                 <tr>
-                  <td class="table-item width-50">所属公司:{{detail.SealDetail.AffiliatedCompany}}</td>
+                  <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>
@@ -312,6 +325,7 @@ export default {
         this.optList=[]
         this.stepArr=[]
         this.approvalEditData={
+          AffiliatedCompany:'',//所属公司
           Use:'',//用印用途
           Type:'',//加盖印章 类型
           FileNum:'',//文件份数
@@ -381,6 +395,7 @@ export default {
       optList:[],
       stepArr:[],//审批流程数据
       approvalEditData:{
+        AffiliatedCompany:'',//所属公司
         Use:'',//用印用途
         Type:'',//加盖印章 类型
         FileNum:'',//文件份数
@@ -483,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
@@ -629,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()
@@ -673,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('审批成功')

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

@@ -268,6 +268,9 @@ export default {
       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]:''
+      }
     },
 
     // 获取用印详情