浏览代码

Merge branch 'master' into crm_15.4

bding 1 年之前
父节点
当前提交
705717f357

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

@@ -129,6 +129,10 @@ const customInterence = {
     // return http.get('/custom/seller/check/list',params)
     // return http.get('/custom/seller/check/list',params)
     return http.get("/custom/seller/check/listV2", params);
     return http.get("/custom/seller/check/listV2", params);
   },
   },
+  /* 获取正式客户共享-原销售列表 */
+  getShareSale:(params)=>{
+    return http.get("/custom/seller/check/Sharelist2",params)
+  },
   /* 客户详情
   /* 客户详情
 		CompanyId 
 		CompanyId 
 	*/
 	*/
@@ -481,6 +485,12 @@ const customInterence = {
   salesShareList: (params) => {
   salesShareList: (params) => {
     return http.get("/custom/seller/share/list", params);
     return http.get("/custom/seller/share/list", params);
   },
   },
+  /**
+   * 获取分配销售列表,根据用户角色返回 共享客户组 or 权益销售组
+   */
+  getShareSaleList:(params)=>{
+    return http.get("/custom/seller/share/list", params);
+  },
   /**
   /**
    * 获取 共享客户列表
    * 获取 共享客户列表
    * SortParam 排序字段
    * SortParam 排序字段

+ 19 - 1
src/api/modules/overseasCustom.js

@@ -106,13 +106,31 @@ export const overseasCustomInterence = {
     },
     },
 
 
     /**
     /**
-     * 海外客户路演列表
+     * 海外客户路演列表 - 客户维度
      * @param {*} params 
      * @param {*} params 
      * ResearcherId SellerId  StartDate EndDate  CompanyStatus
      * ResearcherId SellerId  StartDate EndDate  CompanyStatus
      * @returns 
      * @returns 
      */
      */
     getOverseasRoadShowList: params => {
     getOverseasRoadShowList: params => {
         return http.get('/roadshow/overseas_custom/calendar/list',params)
         return http.get('/roadshow/overseas_custom/calendar/list',params)
+    },
+    /**
+     * 海外客户路演列表 - 销售维度
+     * @param {*} params 
+     * DataType StartDate EndDate
+     * @returns 
+    */
+    getOverseasSellerRoadShowList: params => {
+        return http.get('/roadshow/overseas_custom/seller/list',params)
+    },
+    /**
+     * 海外客户路演列表 - 研究员维度
+     * @param {*} params 
+     * DataType StartDate EndDate
+     * @returns 
+    */
+    getOverseasResearcherRoadShowList: params => {
+        return http.get('/roadshow/overseas_custom/researcher/list',params)
     }
     }
 
 
 }
 }

+ 8 - 1
src/api/modules/roadshowApi.js

@@ -222,7 +222,14 @@ const roadshowInterence={
 	statisticDetailList: params => {
 	statisticDetailList: params => {
 		return http.get('/roadshow/report/calendar/list',params)
 		return http.get('/roadshow/report/calendar/list',params)
 	},
 	},
-
+	/**
+	 * 统计详情列表-海外路演
+	 * @param {} params DataType StartDate EndDate AdminIds AdminType
+	 * @returns 
+	 */
+	overseaStatisticDetailList: params => {
+		return http.get('/roadshow/overseas/calendar/list',params)
+	},
 	/**
 	/**
 	 * 选择的研究员接口
 	 * 选择的研究员接口
 	 * @param {AdminIds} params DataType StartDate EndDate AdminId AdminType
 	 * @param {AdminIds} params DataType StartDate EndDate AdminId AdminType

+ 4 - 4
src/routes/modules/customRoutes.js

@@ -52,7 +52,7 @@ export default [
       {
       {
         path: "customListEn",
         path: "customListEn",
         component: () => import("@/views/custom_manage/customList/customListEn.vue"),
         component: () => import("@/views/custom_manage/customList/customListEn.vue"),
-        name: "英文客户列表",
+        name: "英文报告权限",
         hidden: false,
         hidden: false,
       },
       },
       {
       {
@@ -111,7 +111,7 @@ export default [
         hidden: true,
         hidden: true,
         meta: {
         meta: {
           pathFrom: "customListEn",
           pathFrom: "customListEn",
-          pathName: "英文客户列表",
+          pathName: "英文报告权限",
         },
         },
       },
       },
       {
       {
@@ -121,7 +121,7 @@ export default [
         hidden: true,
         hidden: true,
         meta: {
         meta: {
           pathFrom: "customListEn",
           pathFrom: "customListEn",
-          pathName: "英文客户列表",
+          pathName: "英文报告权限",
         },
         },
       },
       },
       {
       {
@@ -142,7 +142,7 @@ export default [
         hidden: true,
         hidden: true,
         meta: {
         meta: {
           pathFrom: "customListEn",
           pathFrom: "customListEn",
-          pathName: "英文客户列表",
+          pathName: "英文报告权限",
         },
         },
       },
       },
       {
       {

+ 3 - 2
src/views/Login.vue

@@ -541,7 +541,8 @@ export default {
 			departInterence.userLogin({
 			departInterence.userLogin({
 				LoginType:2,
 				LoginType:2,
 				Mobile:mobile,
 				Mobile:mobile,
-				VerifyCode:checkCode
+				VerifyCode:checkCode,
+				TelAreaCode:this.$refs[model].areaCodeSelect,
 			}).then(res=>{
 			}).then(res=>{
 				if(res.Ret!==200){
 				if(res.Ret!==200){
 					//刷新图形验证码
 					//刷新图形验证码
@@ -560,7 +561,7 @@ export default {
 			departInterence.userLogin({
 			departInterence.userLogin({
 				LoginType:3,
 				LoginType:3,
 				Email:email,
 				Email:email,
-				VerifyCode:checkCode
+				VerifyCode:checkCode,
 			}).then(res=>{
 			}).then(res=>{
 				if(res.Ret!==200){
 				if(res.Ret!==200){
 					//刷新图形验证码
 					//刷新图形验证码

+ 74 - 189
src/views/custom_manage/compontents/CauthList.vue

@@ -14,109 +14,23 @@
 		<!-- 权益拆分 -->
 		<!-- 权益拆分 -->
 		<div v-if="autharr[0] && autharr[0].RaiMerge == 2" class="qy_menuList">
 		<div v-if="autharr[0] && autharr[0].RaiMerge == 2" class="qy_menuList">
 			<el-table :data="autharr[0].dataList" :show-header="false" border :span-method="spanMethod">
 			<el-table :data="autharr[0].dataList" :show-header="false" border :span-method="spanMethod">
-				<el-table-column align="center">
+				<el-table-column align="center" :width="autharr[0].dataList[0][key].width?autharr[0].dataList[0][key].width:''" 
+				v-for="key in Object.keys(autharr[0].dataList[0])" :key="key">
 					<template slot-scope="scope">
 					<template slot-scope="scope">
-						<span v-if="!scope.row.PermissionTypeName">
-							{{scope.row.PermissionTypeName}}
-						</span>
-						<el-checkbox :label="scope.row.PermissionTypeName.value" v-else @change="handleCheckQY(scope.row.PermissionTypeName)"
-						v-model="scope.row.PermissionTypeName.isCheckAll" :disabled="scope.row.PermissionTypeName.isDisabled"
-						:indeterminate="scope.row.PermissionTypeName.isIndeterminate"></el-checkbox>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<el-checkbox v-if="scope.row.medicine.value === '医药'" :label="scope.row.medicine.value" :indeterminate="scope.row.medicine.isIndeterminate"
-						@change="handleCheckQY(scope.row.medicine)" v-model="scope.row.medicine.isCheckAll" :disabled="scope.row.medicine.isDisabled"></el-checkbox>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.medicine.value" class="checkbox-flex"
-							:disabled="scope.row.medicine.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<el-checkbox v-if="scope.row.consumption.value === '消费'" :label="scope.row.consumption.value" :indeterminate="scope.row.consumption.isIndeterminate"
-						@change="handleCheckQY(scope.row.consumption)" v-model="scope.row.consumption.isCheckAll" :disabled="scope.row.consumption.isDisabled"></el-checkbox>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.consumption.value" class="checkbox-flex"
-							:disabled="scope.row.consumption.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<el-checkbox v-if="scope.row.technology.value === '科技'" :label="scope.row.technology.value" :indeterminate="scope.row.technology.isIndeterminate"
-						@change="handleCheckQY(scope.row.technology)" v-model="scope.row.technology.isCheckAll" :disabled="scope.row.technology.isDisabled"></el-checkbox>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.technology.value" class="checkbox-flex"
-							:disabled="scope.row.technology.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<el-checkbox v-if="scope.row.smart.value === '智造'" :label="scope.row.smart.value" :indeterminate="scope.row.smart.isIndeterminate"
-						@change="handleCheckQY(scope.row.smart)" v-model="scope.row.smart.isCheckAll" :disabled="scope.row.smart.isDisabled"></el-checkbox>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.smart.value" class="checkbox-flex"
-							:disabled="scope.row.smart.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<span v-if="scope.row.strategy.value === '策略'">
-							{{scope.row.strategy.value}}
-						</span>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.strategy.value" class="checkbox-flex"
-							:disabled="scope.row.strategy.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<span v-if="scope.row.experts.value === '专家'">
-							{{scope.row.experts.value}}
-						</span>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.experts.value" class="checkbox-flex"
-							:disabled="scope.row.experts.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<span v-if="scope.row.roadshow.value === '路演服务'">
-							{{scope.row.roadshow.value}}
-						</span>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.roadshow.value" class="checkbox-flex"
-							:disabled="scope.row.roadshow.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center">
-					<template slot-scope="scope">
-						<span v-if="scope.row.choose.value === '研选订阅'">
-							{{scope.row.choose.value}}
-						</span>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.choose.value" class="checkbox-flex"
-							:disabled="scope.row.choose.isDisabled">{{''}}</el-checkbox>
-						</el-checkbox-group>
-					</template>
-				</el-table-column>
-				<el-table-column align="center" width="100px">
-					<template slot-scope="scope">
-						<span v-if="scope.row.points.value === '研选扣点包'">
-							{{scope.row.points.value}}
-						</span>
-						<el-checkbox-group v-model="qyCheckList" v-else >
-							<el-checkbox :label="scope.row.points.value" class="checkbox-flex"
-							:disabled="scope.row.points.isDisabled">{{''}}</el-checkbox>
+						<!-- 主客观 区分的品种+复选框-->
+						<el-checkbox :label="scope.row[key].value" @change="handleCheckQY(scope.row[key])"
+						v-model="scope.row[key].isCheckAll" :disabled="scope.row[key].isDisabled"
+						:indeterminate="scope.row[key].isIndeterminate"
+						v-if="(scope.row[key].ids && scope.row[key].ids.length) || (scope.row[key].bothIds&& scope.row[key].bothIds.length)"></el-checkbox>
+						<!-- 不区分 只有复选框-->
+						<el-checkbox-group v-model="qyCheckList" v-else-if="typeof(scope.row[key].value)=='number'">
+							<el-checkbox :label="scope.row[key].value" class="checkbox-flex"
+							:disabled="scope.row[key].isDisabled">{{''}}</el-checkbox>
 						</el-checkbox-group>
 						</el-checkbox-group>
+						<!-- 只有品种名称 -->
+						<template v-else>
+							{{scope.row[key].value}}
+						</template>
 					</template>
 					</template>
 				</el-table-column>
 				</el-table-column>
 			</el-table>
 			</el-table>
@@ -130,6 +44,20 @@
 </template>
 </template>
 
 
 <script>
 <script>
+// 权益的ID:
+/**
+ * 科技-主观(20)-客观(37)
+ * 消费-主观(21)-客观(38)
+ * 医药-主观(22)-客观(39)
+ * 智造-主观(19)-客观(36)
+ * 策略(23)
+ * 专家(29)
+ * 固收(53)
+ * 调研(54)
+ * 路演服务(30)
+ * 研选订阅(31)
+ * 研选扣点包(52)
+ */
 import { customInterence } from '@/api/api.js'
 import { customInterence } from '@/api/api.js'
 export default {
 export default {
 	name:'',
 	name:'',
@@ -144,43 +72,36 @@ export default {
 	},
 	},
 	watch: {
 	watch: {
 		autharr(value){
 		autharr(value){
+			// console.log(value,'valuevaluevaluevalue');
 			if(value[0] && value[0].customType=='权益') this.qyCheckList = value[0].CheckList
 			if(value[0] && value[0].customType=='权益') this.qyCheckList = value[0].CheckList
 		},
 		},
 		qyCheckList(value){
 		qyCheckList(value){
+			let checkedIds=value||[]
 			// 根据复选框选择的情况 改变医药、消费、科技、智造、主客观复选框的状态
 			// 根据复选框选择的情况 改变医药、消费、科技、智造、主客观复选框的状态
-			let arr = ['medicine','consumption','technology','smart']
-			for (let i = 0; i < arr.length; i++) {
-				let element = arr[i];
-				let arrLength = value.filter(item => {
-					return item == this.autharr[0].dataList[1][element].value || item == this.autharr[0].dataList[2][element].value
-				}).length
-				if(arrLength == 2){
-					this.autharr[0].dataList[0][element].isCheckAll=true
-					this.autharr[0].dataList[0][element].isIndeterminate=false
-				}else if(arrLength == 1){
-					this.autharr[0].dataList[0][element].isCheckAll=false
-					this.autharr[0].dataList[0][element].isIndeterminate=true
-				}else{
-					this.autharr[0].dataList[0][element].isCheckAll=false
-					this.autharr[0].dataList[0][element].isIndeterminate=false
-				}
-			}
-			for (let i = 0; i < 2; i++) {
-				let arrLength = value.filter(item => {
-					return item == this.autharr[0].dataList[i+1].medicine.value || item == this.autharr[0].dataList[i+1].consumption.value ||
-						item == this.autharr[0].dataList[i+1].technology.value || item == this.autharr[0].dataList[i+1].smart.value
-				}).length
-				if(arrLength == 4){
-					this.autharr[0].dataList[i+1].PermissionTypeName.isCheckAll=true
-					this.autharr[0].dataList[i+1].PermissionTypeName.isIndeterminate=false
-				}else if(arrLength == 0){
-					this.autharr[0].dataList[i+1].PermissionTypeName.isCheckAll=false
-					this.autharr[0].dataList[i+1].PermissionTypeName.isIndeterminate=false
+			this.autharr[0].dataList.map(it =>{
+				if(it.PermissionTypeName&&it.PermissionTypeName.value){
+					let idArr = [...checkedIds,...it.PermissionTypeName.ids]
+					let idArrLen = idArr.length
+					// 去重后的
+					let idRemovalArrLen = [...new Set(idArr)].length
+					it.PermissionTypeName.isCheckAll = idArrLen-idRemovalArrLen == it.PermissionTypeName.ids.length
+					it.PermissionTypeName.isIndeterminate = idArrLen-idRemovalArrLen < it.PermissionTypeName.ids.length && 
+																									idArrLen-idRemovalArrLen > 0					
 				}else{
 				}else{
-					this.autharr[0].dataList[i+1].PermissionTypeName.isCheckAll=false
-					this.autharr[0].dataList[i+1].PermissionTypeName.isIndeterminate=true
+					Object.values(it).forEach(permission =>{
+						if(permission.bothIds && permission.bothIds.length>1){
+							// 有主客观的
+							let idArr = [...checkedIds,...permission.bothIds]
+							let idArrLen = idArr.length
+							// 去重后的
+							let idRemovalArrLen = [...new Set(idArr)].length
+							permission.isCheckAll = idArrLen-idRemovalArrLen == permission.bothIds.length
+							permission.isIndeterminate = idArrLen-idRemovalArrLen < permission.bothIds.length && 
+																											idArrLen-idRemovalArrLen > 0
+						}
+					})
 				}
 				}
-			}
+			})
 		}
 		}
 	},
 	},
 	data () {
 	data () {
@@ -203,7 +124,6 @@ export default {
 				// 权益拆分
 				// 权益拆分
 				checkArr = this.qyCheckList
 				checkArr = this.qyCheckList
 			}
 			}
-
 			customInterence.addTryout({
 			customInterence.addTryout({
 				CompanyId:this.id,
 				CompanyId:this.id,
 				ChartPermissionId:checkArr.join()
 				ChartPermissionId:checkArr.join()
@@ -230,23 +150,27 @@ export default {
 				item.Items.map((it,i)=>{
 				item.Items.map((it,i)=>{
 					if(item.CheckList.includes(it.ChartPermissionId) && it.PermissionType==1){
 					if(item.CheckList.includes(it.ChartPermissionId) && it.PermissionType==1){
 						// 主观被选上,将客观的ID也push上
 						// 主观被选上,将客观的ID也push上
-						item.CheckList.push(item.Items[i+1].ChartPermissionId)
+						let ob=item.Items.find(pe => pe.PermissionName == it.PermissionName && pe.PermissionType==2)
+						item.CheckList.push(ob?ob.ChartPermissionId:0)
 					}else if(!item.CheckList.includes(it.ChartPermissionId) && it.PermissionType==1){
 					}else if(!item.CheckList.includes(it.ChartPermissionId) && it.PermissionType==1){
-						if(item.CheckList.indexOf(item.Items[i+1].ChartPermissionId)!=-1){
-							item.CheckList.splice(item.CheckList.indexOf(item.Items[i+1].ChartPermissionId),1)
+						// 主观被去除,将客观的ID也去除
+						let ob=item.Items.find(pe => pe.PermissionName == it.PermissionName && pe.PermissionType==2)
+						let obIndex = item.CheckList.indexOf(ob?ob.ChartPermissionId:0)
+						if(obIndex!=-1){
+							item.CheckList.splice(obIndex,1)
 						}
 						}
 					}
 					}
 				})
 				})
 			}
 			}
 			item.CheckList = [...new Set(item.CheckList)]
 			item.CheckList = [...new Set(item.CheckList)]
-			let len = item.CheckList.length;
+			let len = item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId)).length
 			item.checkAll = len === item.Items.length;
 			item.checkAll = len === item.Items.length;
 			item.isIndeterminate = len > 0 && len < item.Items.length;
 			item.isIndeterminate = len > 0 && len < item.Items.length;
 		},
 		},
 		// 权益选择套餐方法
 		// 权益选择套餐方法
 		// 合并单元格
 		// 合并单元格
 		spanMethod({ row, rowIndex, column,columnIndex  }){
 		spanMethod({ row, rowIndex, column,columnIndex  }){
-			if([5,6,7,8,9].includes(columnIndex)){
+			if(Object.values(row)[columnIndex].merge){
 				if(rowIndex == 1){
 				if(rowIndex == 1){
 					return [2,1]
 					return [2,1]
 				}else if(rowIndex == 2){
 				}else if(rowIndex == 2){
@@ -255,65 +179,26 @@ export default {
 			}
 			}
 		},
 		},
 		handleCheckQY(item){
 		handleCheckQY(item){
-			let arr = ['medicine','consumption','technology','smart']
-			let arrCh = ['医药','消费','科技','智造']
 			// 全选
 			// 全选
 			if(item.isCheckAll){
 			if(item.isCheckAll){
-				if(item.value == '主观'){
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
-						this.qyCheckList.push(this.autharr[0].dataList[1][element].value)
-						this.qyCheckList = [...new Set(this.qyCheckList)]
-					}
-				}else if(item.value == '客观'){
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
-						this.qyCheckList.push(this.autharr[0].dataList[2][element].value)
-						this.qyCheckList = [...new Set(this.qyCheckList)]
-					}
+				if(["客观","主观"].includes(item.value)){
+					this.qyCheckList = [...new Set([...this.qyCheckList,...item.ids])]
 				}else{
 				}else{
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
-						const elementCh = arrCh[i];
-						if(item.value == elementCh){
-							this.qyCheckList.push(this.autharr[0].dataList[1][element].value,this.autharr[0].dataList[2][element].value)
-							this.qyCheckList = [...new Set(this.qyCheckList)]
-							break
-						}
-					}
+					this.qyCheckList = [...new Set([...this.qyCheckList,...item.bothIds])]
 				}
 				}
 			}else{ //全部不选
 			}else{ //全部不选
-				if(item.value == '主观'){
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
+				if(["客观","主观"].includes(item.value)){
+					item.ids.map(pId =>{
 						// 需要删除的索引
 						// 需要删除的索引
-						let deleteIndex = this.qyCheckList.findIndex(id=> {
-							return id == this.autharr[0].dataList[1][element].value && (!this.autharr[0].dataList[2][element].isDisabled)
-						});
+						let deleteIndex = this.qyCheckList.findIndex(id=> id==pId && !(this.autharr[0].defaultAuth.includes(id)));
 						if(deleteIndex!=-1) this.qyCheckList.splice(deleteIndex,1)
 						if(deleteIndex!=-1) this.qyCheckList.splice(deleteIndex,1)
-					}
-				}else if(item.value == '客观'){
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
-						let deleteIndex = this.qyCheckList.findIndex(id=> {
-							return id == this.autharr[0].dataList[2][element].value && (!this.autharr[0].dataList[2][element].isDisabled)
-						});
-						if(deleteIndex!=-1) this.qyCheckList.splice(deleteIndex,1)
-					}
+					})
 				}else{
 				}else{
-					for (let i = 0; i < arr.length; i++) {
-						const element = arr[i];
-						const elementCh = arrCh[i];
-						if(item.value == elementCh){
-							for (let i = 0; i < 2; i++) {
-								let deleteIndex = this.qyCheckList.findIndex(id=> {
-									return id == this.autharr[0].dataList[i+1][element].value && (!this.autharr[0].dataList[i+1][element].isDisabled)
-								});
-								if(deleteIndex!=-1) this.qyCheckList.splice(deleteIndex,1)
-							}
-							break
-						}
-					}
+					item.bothIds.map(pId =>{
+						// 需要删除的索引
+						let deleteIndex = this.qyCheckList.findIndex(id=> id==pId && !(this.autharr[0].defaultAuth.includes(id)));
+						if(deleteIndex!=-1) this.qyCheckList.splice(deleteIndex,1)
+					})
 				}
 				}
 			}
 			}
 		}
 		}

+ 27 - 6
src/views/custom_manage/compontents/CpessionTable.vue

@@ -139,14 +139,35 @@ export default {
 	mounted() {
 	mounted() {
 		this.isRaiMerge = this.authList[0].RaiMerge
 		this.isRaiMerge = this.authList[0].RaiMerge
 		/* 处理表格数据格式 */
 		/* 处理表格数据格式 */
-		this.filterAuth = this.authList.map((item) => {
+		let tempArr=this.authList.map((item) => {
 			return item.Items;
 			return item.Items;
 		});
 		});
-		this.filterAuth = this.filterAuth.flat(Infinity);
-		if(this.isRaiMerge==1){
+		tempArr = tempArr.flat(Infinity);
+		console.log(tempArr);
+		if(!this.isRaiMerge){
+			this.filterAuth = tempArr
+		}else if(this.isRaiMerge==1){
 			// 主客观合并 只取主观的
 			// 主客观合并 只取主观的
-			this.filterAuth = this.filterAuth.filter(it => {
-				return (['医药','消费','科技','智造'].includes(it.PermissionName) && it.PermissionType==1) || (!['医药','消费','科技','智造'].includes(it.PermissionName))
+			this.filterAuth = tempArr.filter(it => {
+				return it.PermissionType==1 || it.PermissionType==0
+			})
+		}else if(this.isRaiMerge==2){
+			// 主客观拆分 只取主观的
+			tempArr.map(item =>{
+				// 排下序 
+				if(item.PermissionType==1){
+					//主观 找客观
+					this.filterAuth.push(item)
+					let ob = tempArr.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+					ob && this.filterAuth.push(ob)
+				}else if(item.PermissionType==0){
+					this.filterAuth.push(item)
+				}else{
+					// 客观
+					if(!this.filterAuth.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+						this.filterAuth.push(item)
+					}
+				}
 			})
 			})
 		}
 		}
 		/* 选中的id数组 */
 		/* 选中的id数组 */
@@ -161,7 +182,7 @@ export default {
 		let check_Auth = this.filterAuth.filter((item) => {
 		let check_Auth = this.filterAuth.filter((item) => {
 			return select.includes(item.ChartPermissionId);
 			return select.includes(item.ChartPermissionId);
 		});
 		});
-
+		console.log(check_Auth,'check_Auth');
 		if (this.fromType === 'edit') {
 		if (this.fromType === 'edit') {
 			/* 展示表格选中的key */
 			/* 展示表格选中的key */
 			let _this = this; 
 			let _this = this; 

+ 32 - 4
src/views/custom_manage/compontents/CpessionTableEquity.vue

@@ -36,6 +36,19 @@
 </template>
 </template>
 
 
 <script>
 <script>
+/**权益权限ID
+ * 科技-主观(20)-客观(37)
+ * 消费-主观(21)-客观(38)
+ * 医药-主观(22)-客观(39)
+ * 智造-主观(19)-客观(36)
+ * 策略(23)
+ * 专家(29)
+ * 固收(53)
+ * 调研(54)
+ * 路演服务(30)
+ * 研选订阅(31)
+ * 研选扣点包(52)
+ */
 export default {
 export default {
 	props: {
 	props: {
 		authList: {
 		authList: {
@@ -61,7 +74,7 @@ export default {
 	methods: {
 	methods: {
 		/* 处理合并数组 */
 		/* 处理合并数组 */
 		getRowSpan() {
 		getRowSpan() {
-            this.filterAuth.map((v, i, s) => {
+			this.filterAuth.map((v, i, s) => {
 				if (!v.PermissionTypeName) {
 				if (!v.PermissionTypeName) {
 				this.indexArrEquity.push(i);
 				this.indexArrEquity.push(i);
 				}
 				}
@@ -200,9 +213,24 @@ export default {
 		}else {
 		}else {
 			/* 显示只有权限的数组 */
 			/* 显示只有权限的数组 */
 			this.filterAuth = [];
 			this.filterAuth = [];
-			this.filterAuth = check_Auth.filter((item) => {
-				return item.Status === '正式' || item.Status === '试用' || item.Status === '永续'||item.Status=='关闭'
-			});
+			check_Auth.map(item =>{
+				// 排序 以防合并问题
+				if(item.Status === '正式' || item.Status === '试用' || item.Status === '永续'||item.Status=='关闭'){
+					if(item.PermissionType==1){
+						//主观 找客观
+						this.filterAuth.push(item)
+						let ob = check_Auth.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+						ob && this.filterAuth.push(ob)
+					}else if(item.PermissionType==0){
+						this.filterAuth.push(item)
+					}else{
+						// 客观
+						if(!this.filterAuth.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+							this.filterAuth.push(item)
+						}
+					}
+				}
+			})
 			this.isMerge = this.filterAuth.some((item) => !item.IsMerge)
 			this.isMerge = this.filterAuth.some((item) => !item.IsMerge)
 		}
 		}
 		
 		

+ 17 - 2
src/views/custom_manage/customList/customAllList.vue

@@ -793,8 +793,23 @@
                         let authEquity = [] //权益
                         let authEquity = [] //权益
                         res.Data.ListRai ? res.Data.ListRai.forEach(item => { //权益
                         res.Data.ListRai ? res.Data.ListRai.forEach(item => { //权益
                             // 过滤没有权限的套餐
                             // 过滤没有权限的套餐
-                            authEquity.push(item.Items.filter(it => item.CheckList.includes(it
-                                .ChartPermissionId)))
+                            let check_Auth = item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId))
+                            check_Auth.map(item =>{
+                                // 排序 以防合并问题
+                                if(item.PermissionType==1){
+                                    //主观 找客观
+                                    authEquity.push(item)
+                                    let ob = check_Auth.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+                                    ob && authEquity.push(ob)
+                                }else if(item.PermissionType==0){
+                                    authEquity.push(item)
+                                }else{
+                                    // 客观
+                                    if(!authEquity.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+                                        authEquity.push(item)
+                                    }
+                                }
+                            })
                         }) : ''
                         }) : ''
                         this.lookAuthListEquity = authEquity.flat(Infinity) //权益
                         this.lookAuthListEquity = authEquity.flat(Infinity) //权益
                     }
                     }

+ 93 - 139
src/views/custom_manage/customList/customList.vue

@@ -1736,8 +1736,25 @@ ShareListDialog},
 					let authEquity =[] //权益
 					let authEquity =[] //权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 						// 过滤没有权限的套餐
 						// 过滤没有权限的套餐
-						authEquity.push(item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId)))
+						let check_Auth = item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId))
+						check_Auth.map(item =>{
+						// 排序 以防合并问题
+							if(item.PermissionType==1){
+								//主观 找客观
+								authEquity.push(item)
+								let ob = check_Auth.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+								ob && authEquity.push(ob)
+							}else if(item.PermissionType==0){
+								authEquity.push(item)
+							}else{
+								// 客观
+								if(!authEquity.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+									authEquity.push(item)
+								}
+							}
+						})
 					}):''
 					}):''
+
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 				}
 				}
 			})
 			})
@@ -1880,10 +1897,24 @@ ShareListDialog},
 						auth.push(obj)
 						auth.push(obj)
 					}):
 					}):
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
+					/**权益权限ID
+					 * 科技-主观(20)-客观(37)
+					 * 消费-主观(21)-客观(38)
+					 * 医药-主观(22)-客观(39)
+					 * 智造-主观(19)-客观(36)
+					 * 策略(23)
+					 * 专家(29)
+					 * 固收(53)
+					 * 调研(54)
+					 * 路演服务(30)
+					 * 研选订阅(31)
+					 * 研选扣点包(52)
+					 */
 					res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
 					res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
+						let checkedLen = item.Items.filter(it => item.CheckList && item.CheckList.includes(it.ChartPermissionId)).length
 						let obj = {
 						let obj = {
-							checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
-							isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
+							checkAll:checkedLen === item.Items.length,
+							isIndeterminate:checkedLen > 0 && checkedLen < item.Items.length,
 							defaultAuth:item.CheckList,
 							defaultAuth:item.CheckList,
 							...item,
 							...item,
 						}
 						}
@@ -1895,145 +1926,68 @@ ShareListDialog},
 							...item,
 							...item,
 						}	
 						}	
 						// 组合所需的数据格式
 						// 组合所需的数据格式
-						obj.dataList=[
-							{
-								PermissionTypeName:'',
-								medicine:{
-									value:'医药',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==2
-								},
-								consumption:{
-									value:'消费',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==2
-								},
-								technology:{
-									value:'科技',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==2
-								},
-								smart:{
-									value:'智造',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==2
-								},
-								strategy:{
-									value:'策略'
-								},
-								experts:{
-									value:'专家'
-								},
-								roadshow:{
-									value:'路演服务'
-								},
-								choose:{
-									value:'研选订阅'
-								},
-								points:{
-									value:'研选扣点包'
-								},
-							},
-							{
-								PermissionTypeName:{
-									value:'主观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[0].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[0].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[2].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[2].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[4].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[4].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[6].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[6].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+						let subjectivityIds=item.Items.filter(it => it.PermissionType==1).map(it => it.ChartPermissionId)//主观的ids
+						let subjectivityLength=subjectivityIds.length//有几个主观的id
+						let subjectivityCheckedLen = item.CheckList.filter(id => subjectivityIds.includes(id)).length//选中的有几个主观的id
+						let objectivityIds=item.Items.filter(it => it.PermissionType==2).map(it => it.ChartPermissionId)//客观的ids
+						let objectivityCheckedLen = item.CheckList.filter(id => objectivityIds.includes(id)).length//有几个客观的id
+						let objectivityLength=objectivityIds.length//选中的有几个客观的id
+						let arr = [{PermissionTypeName:''},
+											{PermissionTypeName:{
+												value:'主观',
+												isIndeterminate:subjectivityCheckedLen>0 && subjectivityCheckedLen<subjectivityLength,
+												isCheckAll:subjectivityCheckedLen == subjectivityLength,
+												isDisabled:subjectivityCheckedLen == subjectivityLength,
+												ids:subjectivityIds
+											}},
+											{PermissionTypeName:{
+												value:'客观',
+												isIndeterminate:objectivityCheckedLen > 0 && objectivityCheckedLen < objectivityLength,
+												isCheckAll:objectivityCheckedLen == objectivityLength,
+												isDisabled:objectivityCheckedLen == objectivityLength,
+												ids:objectivityIds
+											}}]
+						item.Items.map(cp =>{
+							if(cp.PermissionType==0){
+								// 没有主客观的权限
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									width:cp.PermissionName=='研选扣点包'?'100px':'',
+									merge:true
 								}
 								}
-							},
-							{
-								PermissionTypeName:{
-									value:'客观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[1].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[1].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[3].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[3].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[5].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[5].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[7].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[7].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
+								}
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
+								}
+							}else if(cp.PermissionType==1){
+								// 找出对应的客观Id
+								let objectivity = item.Items.find(it => it.PermissionName == cp.PermissionName && it.PermissionType==2)
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									isIndeterminate:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==1,
+									isCheckAll:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length == 2,
+									isDisabled:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==2,
+									bothIds:[cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0]
+								}
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
+								}
+							}else{
+								// 分主客观的客观
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
 								}
 								}
 							}
 							}
-						]
-
+						})
+						obj.dataList=arr
 						auth.push(obj)
 						auth.push(obj)
 					})
 					})
 					this.authList = auth;
 					this.authList = auth;

+ 167 - 151
src/views/custom_manage/customList/customShareList.vue

@@ -20,10 +20,24 @@
 			@change="getTableData"
 			@change="getTableData"
 			v-if="roleType!=='ficc_seller'"
 			v-if="roleType!=='ficc_seller'"
 		  />
 		  />
-          <el-select v-model="sales" placeholder="请选择分配销售" style="width: 214px; margin-right: 20px;" 
+          <!-- <el-select v-model="sales" placeholder="请选择分配销售" style="width: 214px; margin-right: 20px;" 
           clearable filterable multiple collapse-tags @change="getTableData">
           clearable filterable multiple collapse-tags @change="getTableData">
             <el-option :label="item.RealName" :value="item.AdminId" v-for="item in salesArr" :key="item.AdminId" ></el-option>
             <el-option :label="item.RealName" :value="item.AdminId" v-for="item in salesArr" :key="item.AdminId" ></el-option>
-          </el-select>
+          </el-select> -->
+          <el-cascader
+            v-model="sales"
+            :options="salesArr"
+            :show-all-levels="false"
+            placeholder="请选择分配销售"
+            :props="{
+                multiple:true,
+                emitPath:false,
+                value:'AdminId',
+                label:'RealName',
+                children:'ChildrenList'
+            }"
+            @change="getTableData">
+          </el-cascader>
         </div>
         </div>
         <div v-else>
         <div v-else>
             <el-button type="primary" @click="$router.push('/customCityList')">查看同城客户</el-button>
             <el-button type="primary" @click="$router.push('/customCityList')">查看同城客户</el-button>
@@ -44,7 +58,7 @@
           placeholder="客户名称/社会信用码/手机号码/邮箱"
           placeholder="客户名称/社会信用码/手机号码/邮箱"
           v-model="search_txt"
           v-model="search_txt"
           style="max-width:531px;margin-bottom: 8px;"
           style="max-width:531px;margin-bottom: 8px;"
-          @input="getTableData"
+          @input="handleCurrentChange(1)"
           clearable>
           clearable>
             <i slot="prefix" class="el-input__icon el-icon-search"></i>
             <i slot="prefix" class="el-input__icon el-icon-search"></i>
           </el-input>
           </el-input>
@@ -316,7 +330,8 @@
 								</span> -->
 								</span> -->
 								<div class="font-tool" style="display:flex;flex-direction:column;">
 								<div class="font-tool" style="display:flex;flex-direction:column;">
 									<span class="editsty" v-for="item in getToolBtnList(scope.row).slice(0,3)" :key="item.type" @click="itemclickHandle({type:item.type,data:scope.row})">
 									<span class="editsty" v-for="item in getToolBtnList(scope.row).slice(0,3)" :key="item.type" @click="itemclickHandle({type:item.type,data:scope.row})">
-										{{item.type==='分配销售'?scope.row.ShareSellerId?'修改销售':'分配销售':item.type}}
+										<!-- {{item.type==='分配销售'?scope.row.ShareSellerId?'修改销售':'分配销售':item.type}} -->
+										{{btnName(item,scope.row)}}
 									</span>
 									</span>
 								</div>
 								</div>
 								<el-dropdown size="medium" placement="bottom-start" @command="itemclickHandle" style="height: 16px;margin-left: 5px;" v-if="getToolBtnList(scope.row).length>3">
 								<el-dropdown size="medium" placement="bottom-start" @command="itemclickHandle" style="height: 16px;margin-left: 5px;" v-if="getToolBtnList(scope.row).length>3">
@@ -325,7 +340,7 @@
 										<el-dropdown-menu slot="dropdown">
 										<el-dropdown-menu slot="dropdown">
 											<el-dropdown-item :command="{type:item.type,data:scope.row}" 
 											<el-dropdown-item :command="{type:item.type,data:scope.row}" 
 											v-for="item in getToolBtnList(scope.row).slice(3)" :key="item.type">
 											v-for="item in getToolBtnList(scope.row).slice(3)" :key="item.type">
-												<span>{{item.type=='设置共享'&&scope.row.IsShare==1?'取消共享':item.type}}</span>
+												<span>{{btnName(item,scope.row)}}</span>
 											</el-dropdown-item>
 											</el-dropdown-item>
 										</el-dropdown-menu>
 										</el-dropdown-menu>
 									</span>
 									</span>
@@ -360,6 +375,7 @@
 		:close-on-click-modal="false"
 		:close-on-click-modal="false"
 		:modal-append-to-body='false'
 		:modal-append-to-body='false'
 		:title="assignedSellerTitle"
 		:title="assignedSellerTitle"
+		class="changeSaleDia"
 		@close="cancelAssign"
 		@close="cancelAssign"
 		center
 		center
 		width="444px">
 		width="444px">
@@ -368,13 +384,27 @@
 					<span style="fontSize:16px;">{{assignform.CompanyName}}</span>
 					<span style="fontSize:16px;">{{assignform.CompanyName}}</span>
 				</el-form-item>
 				</el-form-item>
 				<el-form-item label="分配销售" prop="SellsId">
 				<el-form-item label="分配销售" prop="SellsId">
-					<el-select
+					<!-- <el-select
 						v-model="assignform.SellsId"
 						v-model="assignform.SellsId"
 						placeholder="请选择修改的销售"
 						placeholder="请选择修改的销售"
 						style="width: 240px"
 						style="width: 240px"
 						filterable>
 						filterable>
 						<el-option :label="item.RealName" :value="item.AdminId" v-for="item in salesArr" :key="item.AdminId"></el-option>
 						<el-option :label="item.RealName" :value="item.AdminId" v-for="item in salesArr" :key="item.AdminId"></el-option>
-					</el-select>
+					</el-select> -->
+					<el-cascader
+						v-model="assignform.SellsId"
+						:options="salesArr"
+						:show-all-levels="false"
+						placeholder="请选择分配销售"
+						style="width: 240px"
+						:props="{
+							multiple:false,
+							emitPath:false,
+							value:'AdminId',
+							label:'RealName',
+							children:'ChildrenList'
+						}">
+					</el-cascader>
 				</el-form-item>
 				</el-form-item>
 			</el-form>	
 			</el-form>	
 			<div style="display:flex;justify-content:center;margin:60px 0 35px;">
 			<div style="display:flex;justify-content:center;margin:60px 0 35px;">
@@ -566,6 +596,12 @@ export default {
 		};
 		};
 	},
 	},
 	methods: {
 	methods: {
+		// 用于返回按钮名称
+		btnName(btnItem,row){
+			if(btnItem.code=='BtnShare') return row.IsShare===1?'取消共享':'设置共享'
+			if(btnItem.code=='BtnModifySeller') return row.ShareSellerId?'修改销售':'分配销售'
+			return btnItem.type
+		},
 		/* 获取表格 */
 		/* 获取表格 */
 		getTableData() {
 		getTableData() {
 			this.isShowloadding = true;
 			this.isShowloadding = true;
@@ -597,12 +633,22 @@ export default {
 				}
 				}
 			})
 			})
 		},
 		},
-		/* 获取销售 */
+		/* 获取可分配销售 */
 		getSale() {
 		getSale() {
-			customInterence.salesShareList().then(res => {
-				console.log(res);
+			customInterence.getShareSaleList().then(res => {
 				if(res.Ret === 200) {
 				if(res.Ret === 200) {
 					this.salesArr = res.Data|| []
 					this.salesArr = res.Data|| []
+					//无子级的组无法选择
+					const filterNodes = (arr)=>{
+						arr.length &&arr.forEach((item) => {
+							item.ChildrenList && filterNodes(item.ChildrenList);
+							if (!Number(item.AdminId)&&!item.ChildrenList) {
+								item.disabled = true
+							}
+						})
+					}
+					filterNodes(this.salesArr)
+					console.log('salesArr',this.salesArr)
 				}
 				}
 			})
 			})
 		},
 		},
@@ -620,7 +666,7 @@ export default {
 			const {BtnItem} = data
 			const {BtnItem} = data
 			for(const i in this.btnCommandList){
 			for(const i in this.btnCommandList){
 				if(BtnItem[i]){
 				if(BtnItem[i]){
-					toolList.push({type:this.btnCommandList[i]})
+					toolList.push({type:this.btnCommandList[i],code:i+''})
 				}
 				}
 			}
 			}
 			return toolList
 			return toolList
@@ -670,7 +716,23 @@ export default {
 					let authEquity =[] //权益
 					let authEquity =[] //权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 						// 过滤没有权限的套餐
 						// 过滤没有权限的套餐
-						authEquity.push(item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId)))
+						let check_Auth = item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId))
+						check_Auth.map(item =>{
+						// 排序 以防合并问题
+							if(item.PermissionType==1){
+								//主观 找客观
+								authEquity.push(item)
+								let ob = check_Auth.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+								ob && authEquity.push(ob)
+							}else if(item.PermissionType==0){
+								authEquity.push(item)
+							}else{
+								// 客观
+								if(!authEquity.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+									authEquity.push(item)
+								}
+							}
+						})
 					}):''
 					}):''
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 				}
 				}
@@ -682,6 +744,9 @@ export default {
 				CompanyId:row.CompanyId,
 				CompanyId:row.CompanyId,
 				SellsId:row.ShareSellerId==0?'':row.ShareSellerId+'',
 				SellsId:row.ShareSellerId==0?'':row.ShareSellerId+'',
 			}
 			}
+			//根据当前角色 获取salesArr
+			//若是ficc角色 取咨询组销售(一级)
+			//若是rai角色 去权益销售组(多级)
 			this.assignedSellerShow = true;
 			this.assignedSellerShow = true;
 		},
 		},
 		/* 页码改变 */
 		/* 页码改变 */
@@ -700,6 +765,10 @@ export default {
 		saveAssign() {
 		saveAssign() {
 			this.$refs.assignform.validate((valid) => {
 			this.$refs.assignform.validate((valid) => {
 				if (valid) {
 				if (valid) {
+					if(!Number(this.assignform.SellsId)){
+						this.$message.warning("请选择销售而不是分组!")
+						return
+					}
 					let param={
 					let param={
 						CompanyId:this.assignform.CompanyId,
 						CompanyId:this.assignform.CompanyId,
 						SellsId:+this.assignform.SellsId
 						SellsId:+this.assignform.SellsId
@@ -855,10 +924,24 @@ export default {
 						auth.push(obj)
 						auth.push(obj)
 					}):
 					}):
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
+					/**权益权限ID
+					 * 科技-主观(20)-客观(37)
+					 * 消费-主观(21)-客观(38)
+					 * 医药-主观(22)-客观(39)
+					 * 智造-主观(19)-客观(36)
+					 * 策略(23)
+					 * 专家(29)
+					 * 固收(53)
+					 * 调研(54)
+					 * 路演服务(30)
+					 * 研选订阅(31)
+					 * 研选扣点包(52)
+					 */
 					res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
 					res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
+						let checkedLen = item.Items.filter(it => item.CheckList && item.CheckList.includes(it.ChartPermissionId)).length
 						let obj = {
 						let obj = {
-							checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
-							isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
+							checkAll:checkedLen === item.Items.length,
+							isIndeterminate:checkedLen > 0 && checkedLen < item.Items.length,
 							defaultAuth:item.CheckList,
 							defaultAuth:item.CheckList,
 							...item,
 							...item,
 						}
 						}
@@ -870,145 +953,68 @@ export default {
 							...item,
 							...item,
 						}	
 						}	
 						// 组合所需的数据格式
 						// 组合所需的数据格式
-						obj.dataList=[
-							{
-								PermissionTypeName:'',
-								medicine:{
-									value:'医药',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==2
-								},
-								consumption:{
-									value:'消费',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==2
-								},
-								technology:{
-									value:'科技',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==2
-								},
-								smart:{
-									value:'智造',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==2
-								},
-								strategy:{
-									value:'策略'
-								},
-								experts:{
-									value:'专家'
-								},
-								roadshow:{
-									value:'路演服务'
-								},
-								choose:{
-									value:'研选订阅'
-								},
-								points:{
-									value:'研选扣点包'
-								},
-							},
-							{
-								PermissionTypeName:{
-									value:'主观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[0].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[0].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[2].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[2].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[4].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[4].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[6].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[6].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+						let subjectivityIds=item.Items.filter(it => it.PermissionType==1).map(it => it.ChartPermissionId)//主观的ids
+						let subjectivityLength=subjectivityIds.length//有几个主观的id
+						let subjectivityCheckedLen = item.CheckList.filter(id => subjectivityIds.includes(id)).length//选中的有几个主观的id
+						let objectivityIds=item.Items.filter(it => it.PermissionType==2).map(it => it.ChartPermissionId)//客观的ids
+						let objectivityCheckedLen = item.CheckList.filter(id => objectivityIds.includes(id)).length//有几个客观的id
+						let objectivityLength=objectivityIds.length//选中的有几个客观的id
+						let arr = [{PermissionTypeName:''},
+											{PermissionTypeName:{
+												value:'主观',
+												isIndeterminate:subjectivityCheckedLen>0 && subjectivityCheckedLen<subjectivityLength,
+												isCheckAll:subjectivityCheckedLen == subjectivityLength,
+												isDisabled:subjectivityCheckedLen == subjectivityLength,
+												ids:subjectivityIds
+											}},
+											{PermissionTypeName:{
+												value:'客观',
+												isIndeterminate:objectivityCheckedLen > 0 && objectivityCheckedLen < objectivityLength,
+												isCheckAll:objectivityCheckedLen == objectivityLength,
+												isDisabled:objectivityCheckedLen == objectivityLength,
+												ids:objectivityIds
+											}}]
+						item.Items.map(cp =>{
+							if(cp.PermissionType==0){
+								// 没有主客观的权限
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									width:cp.PermissionName=='研选扣点包'?'100px':'',
+									merge:true
+								}
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
+								}
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
+								}
+							}else if(cp.PermissionType==1){
+								// 找出对应的客观Id
+								let objectivity = item.Items.find(it => it.PermissionName == cp.PermissionName && it.PermissionType==2)
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									isIndeterminate:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==1,
+									isCheckAll:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length == 2,
+									isDisabled:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==2,
+									bothIds:[cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0]
 								}
 								}
-							},
-							{
-								PermissionTypeName:{
-									value:'客观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[1].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[1].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[3].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[3].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[5].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[5].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[7].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[7].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
+								}
+							}else{
+								// 分主客观的客观
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
 								}
 								}
 							}
 							}
-						]
-
+						})
+						obj.dataList=arr
 						auth.push(obj)
 						auth.push(obj)
 					})
 					})
 					this.authList = auth;
 					this.authList = auth;
@@ -1020,11 +1026,16 @@ export default {
 
 
 		/* 获取销售 */
 		/* 获取销售 */
 		getoriginalSale() {
 		getoriginalSale() {
-			let status=0;
+			/* let status=0;
 			customInterence.getSale({"Status":status}).then(res => {
 			customInterence.getSale({"Status":status}).then(res => {
 				if(res.Ret === 200) {
 				if(res.Ret === 200) {
 					this.originalSalesArr = res.Data.List||[];
 					this.originalSalesArr = res.Data.List||[];
 				}
 				}
+			}) */
+			customInterence.getShareSale().then(res=>{
+				if(res.Ret === 200){
+					this.originalSalesArr = res.Data.List||[]
+				}
 			})
 			})
 		},
 		},
 	},
 	},
@@ -1045,6 +1056,11 @@ export default {
 			}
 			}
 		}
 		}
 	}
 	}
+	.changeSaleDia{
+		.el-cascader .el-input{
+			width: 100%;
+		}
+	}
 </style>
 </style>
 <style lang='scss' scoped>
 <style lang='scss' scoped>
 	.ficc-package {
 	.ficc-package {

+ 95 - 142
src/views/custom_manage/customSearch.vue

@@ -861,7 +861,23 @@ export default {
 					let authEquity =[] //权益
 					let authEquity =[] //权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 					res.Data.ListRai ?	res.Data.ListRai.forEach(item=> {//权益
 						// 过滤没有权限的套餐
 						// 过滤没有权限的套餐
-						authEquity.push(item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId)))
+						let check_Auth = item.Items.filter(it => item.CheckList.includes(it.ChartPermissionId))
+						check_Auth.map(item =>{
+						// 排序 以防合并问题
+							if(item.PermissionType==1){
+								//主观 找客观
+								authEquity.push(item)
+								let ob = check_Auth.find(it => it.PermissionName == item.PermissionName && it.PermissionType!=1)
+								ob && authEquity.push(ob)
+							}else if(item.PermissionType==0){
+								authEquity.push(item)
+							}else{
+								// 客观
+								if(!authEquity.find(t => t.ChartPermissionId == item.ChartPermissionId)){
+									authEquity.push(item)
+								}
+							}
+						})
 					}):''
 					}):''
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 					this.lookAuthListEquity = authEquity.flat(Infinity) //权益
 					this.isPermissionTypeShow = this.lookAuthListEquity.some(item => !item.IsMerge)
 					this.isPermissionTypeShow = this.lookAuthListEquity.some(item => !item.IsMerge)
@@ -1341,10 +1357,24 @@ export default {
 						auth.push(obj)
 						auth.push(obj)
 					}):
 					}):
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
 					// 权益 RaiMerge 0不管 1合并 2拆分 所传入的数据结构不一样
-					res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
+						/**权益权限ID
+						 * 科技-主观(20)-客观(37)
+						 * 消费-主观(21)-客观(38)
+						 * 医药-主观(22)-客观(39)
+						 * 智造-主观(19)-客观(36)
+						 * 策略(23)
+						 * 专家(29)
+						 * 固收(53)
+						 * 调研(54)
+						 * 路演服务(30)
+						 * 研选订阅(31)
+						 * 研选扣点包(52)
+						*/
+					 	res.Data.ListRai[0].RaiMerge==1?res.Data.ListRai.forEach(item=> { // 合并
+						let checkedLen = item.Items.filter(it => item.CheckList && item.CheckList.includes(it.ChartPermissionId)).length
 						let obj = {
 						let obj = {
-							checkAll:item.CheckList&&item.CheckList.length===item.Items.length?true:false,
-							isIndeterminate:item.CheckList&&item.CheckList.length>0 && item.CheckList.length<item.Items.length,
+							checkAll:checkedLen === item.Items.length,
+							isIndeterminate:checkedLen > 0 && checkedLen < item.Items.length,
 							defaultAuth:item.CheckList,
 							defaultAuth:item.CheckList,
 							...item,
 							...item,
 						}
 						}
@@ -1352,149 +1382,72 @@ export default {
 					}): res.Data.ListRai.forEach(item=> { // 拆分
 					}): res.Data.ListRai.forEach(item=> { // 拆分
 						let obj = {
 						let obj = {
 							defaultAuth:item.CheckList,
 							defaultAuth:item.CheckList,
-							customType:'权益',
+							customType:item.ClassifyName,
 							...item,
 							...item,
 						}	
 						}	
 						// 组合所需的数据格式
 						// 组合所需的数据格式
-						obj.dataList=[
-							{
-								PermissionTypeName:'',
-								medicine:{
-									value:'医药',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[1].ChartPermissionId].includes(id)).length ==2
-								},
-								consumption:{
-									value:'消费',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[2].ChartPermissionId,obj.Items[3].ChartPermissionId].includes(id)).length ==2
-								},
-								technology:{
-									value:'科技',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[4].ChartPermissionId,obj.Items[5].ChartPermissionId].includes(id)).length ==2
-								},
-								smart:{
-									value:'智造',
-									isIndeterminate:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==1,
-									isCheckAll:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 2,
-									isDisabled:item.CheckList.filter(id => [obj.Items[6].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==2
-								},
-								strategy:{
-									value:'策略'
-								},
-								experts:{
-									value:'专家'
-								},
-								roadshow:{
-									value:'路演服务'
-								},
-								choose:{
-									value:'研选订阅'
-								},
-								points:{
-									value:'研选扣点包'
-								},
-							},
-							{
-								PermissionTypeName:{
-									value:'主观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[0].ChartPermissionId,obj.Items[2].ChartPermissionId,
-										obj.Items[4].ChartPermissionId,obj.Items[6].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[0].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[0].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[2].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[2].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[4].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[4].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[6].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[6].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+						let subjectivityIds=item.Items.filter(it => it.PermissionType==1).map(it => it.ChartPermissionId)//主观的ids
+						let subjectivityLength=subjectivityIds.length//有几个主观的id
+						let subjectivityCheckedLen = item.CheckList.filter(id => subjectivityIds.includes(id)).length//选中的有几个主观的id
+						let objectivityIds=item.Items.filter(it => it.PermissionType==2).map(it => it.ChartPermissionId)//客观的ids
+						let objectivityCheckedLen = item.CheckList.filter(id => objectivityIds.includes(id)).length//有几个客观的id
+						let objectivityLength=objectivityIds.length//选中的有几个客观的id
+						let arr = [{PermissionTypeName:''},
+											{PermissionTypeName:{
+												value:'主观',
+												isIndeterminate:subjectivityCheckedLen>0 && subjectivityCheckedLen<subjectivityLength,
+												isCheckAll:subjectivityCheckedLen == subjectivityLength,
+												isDisabled:subjectivityCheckedLen == subjectivityLength,
+												ids:subjectivityIds
+											}},
+											{PermissionTypeName:{
+												value:'客观',
+												isIndeterminate:objectivityCheckedLen > 0 && objectivityCheckedLen < objectivityLength,
+												isCheckAll:objectivityCheckedLen == objectivityLength,
+												isDisabled:objectivityCheckedLen == objectivityLength,
+												ids:objectivityIds
+											}}]
+						item.Items.map(cp =>{
+							if(cp.PermissionType==0){
+								// 没有主客观的权限
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									width:cp.PermissionName=='研选扣点包'?'100px':'',
+									merge:true
+								}
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
 								}
 								}
-							},
-							{
-								PermissionTypeName:{
-									value:'客观',
-									isIndeterminate:[1,2,3].includes(item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length),
-									isCheckAll:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length == 4,
-									isDisabled:item.CheckList.filter(id => [obj.Items[1].ChartPermissionId,obj.Items[3].ChartPermissionId,
-										obj.Items[5].ChartPermissionId,obj.Items[7].ChartPermissionId].includes(id)).length ==4
-								},
-								medicine:{
-									value:obj.Items[1].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[1].ChartPermissionId)
-								},
-								consumption:{
-									value:obj.Items[3].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[3].ChartPermissionId)
-								},
-								technology:{
-									value:obj.Items[5].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[5].ChartPermissionId)
-								},
-								smart:{
-									value:obj.Items[7].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[7].ChartPermissionId)
-								},
-								strategy:{
-									value:obj.Items[8].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[8].ChartPermissionId)
-								},
-								experts:{
-									value:obj.Items[9].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[9].ChartPermissionId)
-								},
-								roadshow:{
-									value:obj.Items[10].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[10].ChartPermissionId)
-								},
-								choose:{
-									value:obj.Items[11].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[11].ChartPermissionId)
-								},
-								points:{
-									value:obj.Items[12].ChartPermissionId,
-									isDisabled:item.CheckList.includes(obj.Items[12].ChartPermissionId)
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId),
+									merge:true
+								}
+							}else if(cp.PermissionType==1){
+								// 找出对应的客观Id
+								let objectivity = item.Items.find(it => it.PermissionName == cp.PermissionName && it.PermissionType==2)
+								arr[0][cp.PermissionName]={
+									value:cp.PermissionName,
+									isIndeterminate:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==1,
+									isCheckAll:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length == 2,
+									isDisabled:item.CheckList.filter(id => [cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0].includes(id)).length ==2,
+									bothIds:[cp.ChartPermissionId,objectivity?objectivity.ChartPermissionId:0]
+								}
+								arr[1][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
+								}
+							}else{
+								// 分主客观的客观
+								arr[2][cp.PermissionName]={
+									value:cp.ChartPermissionId,
+									isDisabled:item.CheckList.includes(cp.ChartPermissionId)
 								}
 								}
 							}
 							}
-						]
-
+						})
+						obj.dataList=arr
 						auth.push(obj)
 						auth.push(obj)
 					})
 					})
 					this.authList = auth;
 					this.authList = auth;
@@ -1564,7 +1517,7 @@ export default {
 		btnList(btnItem,part){
 		btnList(btnItem,part){
 			const allBtnList=[]
 			const allBtnList=[]
 			for (const key in btnItem) {
 			for (const key in btnItem) {
-				btnItem[key]&&key!=='BtnClose' && allBtnList.push(key)
+				btnItem[key]&&key!=='BtnClose'&&key!=='BtnShare' && allBtnList.push(key)
 			}
 			}
 			if(part==='front'){
 			if(part==='front'){
 				// 返回前三个按钮
 				// 返回前三个按钮

+ 462 - 49
src/views/custom_manage/overseasList/overseasCustomRoadshow.vue

@@ -1,7 +1,13 @@
 <template>
 <template>
   <div class="overseas-custom-roadshow-box">
   <div class="overseas-custom-roadshow-box">
-    <div class="top-wrapper">
-      <div class="left-select">
+    <div class="tab-box">
+      <el-button type="primary" :plain="roadshowTab==1?false:true" class="tab-item" @click="tabChange(1)">客户维度</el-button>
+      <el-button type="primary" :plain="roadshowTab==2?false:true" class="tab-item" @click="tabChange(2)">销售维度</el-button>
+      <el-button type="primary" :plain="roadshowTab==3?false:true" class="tab-item" @click="tabChange(3)">研究员维度</el-button>
+    </div>
+    <template v-if="roadshowTab==1">
+      <div class="top-wrapper">
+        <div class="left-select">
         <el-cascader
         <el-cascader
             v-model="sales"
             v-model="sales"
             :options="salesOptions"
             :options="salesOptions"
@@ -65,56 +71,185 @@
 						style="width:200px;margin-right:10px;margin-bottom:8px;"
 						style="width:200px;margin-right:10px;margin-bottom:8px;"
         />
         />
 
 
+        </div>
+        <el-input 
+            prefix-icon="el-icon-search" 
+            placeholder="客户名称" 
+            style="width:317px;" clearable
+            v-model="searchWord"
+            @input="pageChange(1)"
+        />
       </div>
       </div>
-      <el-input 
-          prefix-icon="el-icon-search" 
-          placeholder="客户名称" 
-          style="width:317px;" clearable
-          v-model="searchWord"
-          @input="pageChange(1)"
-      />
-    </div>
-
-    <div class="cont-wrapper">
-      <el-table
-        ref="tableRef"
-        :data="tableData"
-        :loading="tabeLoading"
-        border
-        @sort-change="handleSortChange"
-      >
-        <el-table-column 
-            align="center"
-            v-for="item in columns" :key="item.key"
-            :prop="item.key" :label="item.label"
-            :min-width="item.minWidth"
-            :sortable="item.sortable?'custom':false"
+      <div class="cont-wrapper">
+        <el-table
+          ref="tableRef"
+          :data="tableData"
+          :loading="tabeLoading"
+          border
+          @sort-change="handleSortChange"
         >
         >
-          <template slot-scope="{row}">
-              <!-- 客户名称 -->
-              <div v-if="item.key==='CompanyName'" class="editor" @click="toCustomDetail(row)">{{row[item.key]}}</div>
+          <el-table-column 
+              align="center"
+              v-for="item in columns" :key="item.key"
+              :prop="item.key" :label="item.label"
+              :min-width="item.minWidth"
+              :sortable="item.sortable?'custom':false"
+          >
+            <template slot-scope="{row}">
+                <!-- 客户名称 -->
+                <div v-if="item.key==='CompanyName'" class="editor" @click="toCustomDetail(row)">{{row[item.key]}}</div>
 
 
-              <span v-else>{{row[item.key]}}</span>
-          </template>
-        </el-table-column>
-      </el-table>
+                <span v-else>{{row[item.key]}}</span>
+            </template>
+          </el-table-column>
+        </el-table>
 
 
-       <!-- 页数选择器 -->
-      <m-page
-        :page_no="currentIndex"
-        :pageSize="pageSize"
-        :total="total"
-        style="position: absolute;right: 50px;bottom: 50px;"
-        @handleCurrentChange="pageChange"
-      />
-    </div>
+        <!-- 页数选择器 -->
+        <m-page
+          :page_no="currentIndex"
+          :pageSize="pageSize"
+          :total="total"
+          style="position: absolute;right: 50px;bottom: 50px;"
+          @handleCurrentChange="pageChange"
+        />
+      </div>
+    </template>
+    <template v-else-if="roadshowTab==2">
+      <ul class="date-tab-box">
+				<li :class="['date-tab-item',{'act':tab === salesDimension.dateTab}]" v-for="tab in staticTabs" :key="tab" @click="changeTabHandle(tab)">
+					{{tab}}
+				</li>
+        <date-picker
+          v-model="salesDimension.selectDate"
+          type="date" 
+          range
+          value-type="format"
+          :clearable="false"
+          @change="dateChange"
+          placeholder="请选择统计时间"/>
+			</ul>
+      <div class="table-body-wrapper" v-show="dataLoading">
+				<table>
+					<thead>
+						<tr>
+							<td rowspan="2" class="thead-rs" style="width: 100px;">销售</td>
+							<td
+								:colspan="['周度统计表','月度统计表'].includes(salesDimension.dateTab) ? 3 : 1"
+								v-for="item in salesDimension.tableTheadColumns" 
+								:key="item" 
+								class="head-column"
+							>
+								{{item}}
+							</td>	
+						</tr>
+						<tr v-if="['月度统计表','周度统计表'].includes(salesDimension.dateTab)">
+							<template v-for="(item,index) in new Array(6)">
+								<td :key="index+'_0'">试用</td>
+								<td :key="index+'_1'">正式</td>
+								<td :key="index+'_2'">关闭</td>
+							</template>
+						</tr>
+					</thead>
+					<tbody>
+            <tr v-for="item in salesDimension.datalist" :key="item.AdminId">
+              <td class="thead-rs">{{item.Name}}</td>
+              <td class="data-cell" v-for="(data,data_key) in item.dataArr" :key="data_key" @click="openDiaHandle(data)">
+                {{ data.value !== 0 ? data.value : '' }}
+              </td>
+            </tr>
+					</tbody>
+					<tfoot>
+						<tr>
+							<td>合计</td>
+							<td v-for="(total_data,total_data_key) in salesDimension.totalGroupArr" :key="total_data_key" 
+              class="data-cell" @click="openDiaHandle(total_data)">
+								{{ total_data.value !== 0 ? total_data.value : '' }}
+							</td>
+						</tr>
+					</tfoot>
+				</table>
+			</div>	
+    </template>
+    <template v-if="roadshowTab==3">
+      <ul class="date-tab-box">
+				<li :class="['date-tab-item',{'act':tab === researchersDimension.dateTab}]" v-for="tab in staticTabs" :key="tab" @click="changeTabHandle(tab)">
+					{{tab}}
+				</li>
+        <date-picker
+          v-model="researchersDimension.selectDate"
+          type="date" 
+          range
+          value-type="format"
+          :clearable="false"
+          @change="dateChange"
+          placeholder="请选择统计时间"/>
+			</ul>
+      <div class="table-body-wrapper" v-show="dataLoading">
+				<table>
+					<thead>
+						<tr>
+							<td rowspan="2" class="thead-rs" style="width: 100px;">研究员</td>
+							<td
+								:colspan="['周度统计表','月度统计表'].includes(researchersDimension.dateTab) ? 3 : 1"
+								v-for="item in researchersDimension.tableTheadColumns" 
+								:key="item" 
+								class="head-column"
+							>
+								{{item}}
+							</td>	
+						</tr>
+            <tr v-if="['月度统计表'].includes(researchersDimension.dateTab)">
+              <template v-for="(item,index) in new Array(4)">
+								<td :key="index+'_0'">试用</td>
+								<td :key="index+'_1'">正式</td>
+								<td :key="index+'_2'">关闭</td>
+              </template>
+            </tr>
+            <tr v-if="['周度统计表'].includes(researchersDimension.dateTab)">
+              <template v-for="(item,index) in new Array(3)">
+								<td :key="index+'_0'">试用</td>
+								<td :key="index+'_1'">正式</td>
+								<td :key="index+'_2'">关闭</td>
+              </template>
+            </tr>
+					</thead>
+					<tbody>
+            <tr v-for="item in researchersDimension.datalist" :key="item.AdminId">
+              <td class="thead-rs">{{item.Name}}</td>
+              <td class="data-cell" v-for="(data,data_key) in item.dataArr" :key="data_key" @click="openDiaHandle(data)">
+                {{ data.value !== 0 ? data.value : '' }}
+              </td>
+            </tr>
+					</tbody>
+					<tfoot>
+						<tr>
+							<td>合计</td>
+							<td v-for="(total_data,total_data_key) in researchersDimension.totalGroupArr" :key="total_data_key" 
+              class="data-cell" @click="openDiaHandle(total_data)">
+								{{ total_data.value !== 0 ? total_data.value : '' }}
+							</td>
+						</tr>
+					</tfoot>
+				</table>
+			</div>	
+    </template>
+
+    <!-- 详情弹窗 -->
+		<actiyityDetailDia
+			:isShow.sync="isShowDia"
+			:title="diaTitle"
+			:form="dialogForm"
+			:fromType="roadshowTab==2?'seller':'researcher'"
+      region="oversea"
+		/>
   </div>
   </div>
 </template>
 </template>
 <script>
 <script>
 import { overseasCustomInterence } from '@/api/modules/overseasCustom.js'
 import { overseasCustomInterence } from '@/api/modules/overseasCustom.js'
 import mPage from '@/components/mPage.vue'
 import mPage from '@/components/mPage.vue'
+import actiyityDetailDia from '@/views/roadshow_manage/compononts/activityDetailDia';
 export default {
 export default {
-  components: { mPage },
+  components: { mPage,actiyityDetailDia },
   data() {
   data() {
     return {
     return {
       tabeLoading: false,
       tabeLoading: false,
@@ -148,8 +283,30 @@ export default {
         { label: '正式', val: '正式' },
         { label: '正式', val: '正式' },
         { label: '试用', val: '试用' },
         { label: '试用', val: '试用' },
         { label: '关闭', val: '关闭' },
         { label: '关闭', val: '关闭' },
-      ]
-
+      ],
+      roadshowTab:1,
+      staticTabs: [ '周度统计表','月度统计表','近1个月','近3个月','近6个月' ],
+      dataLoading:false,
+      // 销售维度
+      salesDimension:{
+        dateTab:"周度统计表",
+        selectDate:"",
+        tableTheadColumns:[],
+        datalist:[],//表格数据
+        totalGroupArr:[] //合计数据
+      },
+      // 研究员维度
+      researchersDimension:{
+        dateTab:"周度统计表",
+        selectDate:"",
+        tableTheadColumns:[],
+        datalist:[],//表格数据
+        totalGroupArr:[] //合计数据
+      },
+      // 详情弹窗
+      isShowDia:false,
+      diaTitle:'路演详情',
+      dialogForm:{}
     }
     }
   },
   },
   mounted(){
   mounted(){
@@ -228,24 +385,203 @@ export default {
       const href = this.$router.resolve({path,query}).href
       const href = this.$router.resolve({path,query}).href
       window.open(href,"_blank")
       window.open(href,"_blank")
     },
     },
-
     /* 切换筛选 */
     /* 切换筛选 */
     changeSelectOpts() {
     changeSelectOpts() {
       
       
+    },
+    tabChange(tab){
+      if(this.roadshowTab==tab) return 
+      this.roadshowTab=tab
+      this.changeTabHandle('周度统计表')
+    },
+    /* 	获取几周前 周一周日日期 或前几月月份*/
+		getWeekOrMonthDate(weeknum,type='week') {
+			if(type === 'week') {
+				const weekStart = this.$moment().subtract(weeknum, 'week').startOf('isoWeek').format('YYYY.MM.DD'); //周一
+				const weekEnd = this.$moment().subtract(weeknum, 'week').endOf('isoWeek').format('YYYY.MM.DD'); //周日
+	
+				// console.log(weekStart,weekEnd)
+				return `${weekStart}~${weekEnd}`;
+			} else {
+				const month = this.$moment().subtract(weeknum,'M').format('YYYY.MM');
+				return month;
+			}
+		},
+    changeTabHandle(tab){
+      if(this.roadshowTab == 1){
+        return
+      }else if(this.roadshowTab == 2){
+        this.salesDimension.dateTab = tab;
+        switch(tab) {
+          case '周度统计表':
+            this.salesDimension.tableTheadColumns = [
+                `本周(${this.getWeekOrMonthDate(0)})`,
+                `上一周(${this.getWeekOrMonthDate(1)})`,
+                `上两周(${this.getWeekOrMonthDate(2)})`,
+                `上三周(${this.getWeekOrMonthDate(3)})`,
+                `上四周(${this.getWeekOrMonthDate(4)})`,
+                `上五周(${this.getWeekOrMonthDate(5)})`]
+            break;
+          case '月度统计表':
+            this.salesDimension.tableTheadColumns = [
+                this.getWeekOrMonthDate(0,'month'),
+                this.getWeekOrMonthDate(1,'month'),
+                this.getWeekOrMonthDate(2,'month'),
+                this.getWeekOrMonthDate(3,'month'),
+                this.getWeekOrMonthDate(4,'month'),
+                this.getWeekOrMonthDate(5,'month')]
+            break;
+          default:
+          this.salesDimension.tableTheadColumns = ['试用','正式','关闭']
+
+          break;
+        }
+      }else{
+        this.researchersDimension.dateTab = tab;
+        switch(tab) {
+          case '周度统计表':
+            this.researchersDimension.tableTheadColumns =  ['上一周','本周','下一周']
+            break;
+          case '月度统计表':
+            this.researchersDimension.tableTheadColumns = [
+              this.getWeekOrMonthDate(0,'month'),
+              this.getWeekOrMonthDate(1,'month'),
+              this.getWeekOrMonthDate(2,'month'),
+              this.getWeekOrMonthDate(3,'month'),
+            ]
+            break;
+          default:
+          this.researchersDimension.tableTheadColumns = ['试用','正式','关闭']
+          break;
+        }
+      }
+      this.$nextTick(()=>{
+        $('.table-body-wrapper')[0].scrollTop = 0;
+      })
+      let typeObj = {
+        '近1个月': 1,
+        '近3个月': 3,
+        '近6个月': 6,
+      };
+      typeObj[tab] ? this.filterDate(typeObj[tab]) : this.filterDate(0);
+
+      this.getData();
+    },
+    dateChange(){
+      if(this.roadshowTab==2){
+        this.salesDimension.dateTab = '';
+        this.salesDimension.tableTheadColumns = ['试用','正式','关闭'];
+      }else{
+        this.researchersDimension.dateTab = '';
+			  this.researchersDimension.tableTheadColumns = ['试用','正式','关闭'];
+      }
+
+			this.getData();
+    },
+    filterDate(month){
+      if(month) {
+				let date_before = this.$moment().subtract(month,'M').format("YYYY-MM-DD");
+				let date_now = this.$moment().format("YYYY-MM-DD");
+				let date = [date_before,date_now]
+				this.roadshowTab==2?(this.salesDimension.selectDate = date):(this.researchersDimension.selectDate = date);
+			}else {
+        this.roadshowTab==2?(this.salesDimension.selectDate = ''):(this.researchersDimension.selectDate = '');
+			}
+    },
+    // 销售维度、研究员维度
+    getData(){
+      let apiName=this.roadshowTab==2?"getOverseasSellerRoadShowList":"getOverseasResearcherRoadShowList"
+      let params=this.roadshowTab==2?{
+        DataType: this.salesDimension.dateTab === '周度统计表' ? 'week' : this.salesDimension.dateTab === '月度统计表' ? 'month' : 'time_interval',
+        StartDate: this.salesDimension.selectDate ? this.salesDimension.selectDate[0] : '',
+        EndDate: this.salesDimension.selectDate ? this.salesDimension.selectDate[1] : '',
+      }:{
+        DataType: this.researchersDimension.dateTab === '周度统计表' ? 'week' : this.researchersDimension.dateTab === '月度统计表' ? 'month' : 'time_interval',
+        StartDate: this.researchersDimension.selectDate ? this.researchersDimension.selectDate[0] : '',
+        EndDate: this.researchersDimension.selectDate ? this.researchersDimension.selectDate[1] : '',
+      }
+      this.dataLoading=false
+      overseasCustomInterence[apiName](params).then(res=>{
+        if(res.Ret == 200){
+          // console.log(res,'res');
+          const dataList=res.Data.List||[]
+          const totalGroupArr=res.Data.RsReportRecordNumList || []
+          dataList.forEach((da)=>{
+            da.dataArr = this.filterTableData(da.RsReportRecordNumList,[da.AdminId])
+          })
+          if(this.roadshowTab==2){
+            this.salesDimension.datalist=dataList
+            this.salesDimension.totalGroupArr=this.filterTableData(totalGroupArr,dataList.map(it => it.AdminId))
+          }else{
+            this.researchersDimension.datalist=dataList
+            this.researchersDimension.totalGroupArr=this.filterTableData(totalGroupArr,dataList.map(it => it.AdminId))
+          }
+          this.dataLoading=true
+        }
+      })
+
+    },
+    /* 处理数据结构 便于页面渲染 userid 时间用于弹窗获取列表*/
+		filterTableData(data,userid=[]) {
+			let list = data.map(item => ([
+        {
+					key: '试用',
+					value: item.TryOutNum,
+					startDate: item.StartDate,
+					endDate: item.EndDate,
+					userid
+				},
+        {
+					key: '正式',
+					value: item.FormalNum,
+					startDate: item.StartDate,
+					endDate: item.EndDate,
+					userid
+				},
+				{
+					key: '关闭',
+					value: item.CloseNum,
+					startDate: item.StartDate,
+					endDate: item.EndDate,
+					userid
+				}
+			]))
+			
+			return list.flat(Infinity);
+		},
+    openDiaHandle({ startDate,endDate,userid,value,key }){
+      if(value === 0) return;
+
+      this.dialogForm = {
+        startDate,
+        endDate,
+        userid,
+        key
+      }
+      this.isShowDia = true;
     }
     }
   },
   },
 }
 }
 </script>
 </script>
 <style scoped lang="scss">
 <style scoped lang="scss">
 .overseas-custom-roadshow-box {
 .overseas-custom-roadshow-box {
-    height: calc(100vh - 110px);
+    min-height: calc(100vh - 110px);
     background-color: white;
     background-color: white;
     border: 1px solid #ECECEC;
     border: 1px solid #ECECEC;
     border-radius: 2px;
     border-radius: 2px;
     box-sizing: border-box;
     box-sizing: border-box;
     padding: 20px 30px 30px 30px;
     padding: 20px 30px 30px 30px;
     box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
     box-shadow: 0 3px 6px rgba(0, 0, 0, 0.05);
-
+    .tab-box{
+      margin-bottom: 20px;
+      display: flex;
+      align-items: center;
+      gap: 15px;
+      .tab-item{
+        min-width: 120px;
+        margin: 0;
+      }
+    }
     .top-wrapper {
     .top-wrapper {
       display: flex;
       display: flex;
       flex-wrap: wrap;
       flex-wrap: wrap;
@@ -253,6 +589,7 @@ export default {
     }
     }
     .cont-wrapper {
     .cont-wrapper {
       margin-top: 10px;
       margin-top: 10px;
+      padding-bottom: 40px;
     }
     }
     .editor{
     .editor{
         color:#409EFF;
         color:#409EFF;
@@ -261,7 +598,83 @@ export default {
             text-decoration: underline;
             text-decoration: underline;
         }
         }
     }
     }
+    .date-tab-box{
+      display: flex;
+			align-items: center;
+			color: #333;
+			margin-bottom: 30px;
+      gap: 20px;
+      .date-tab-item{
+        cursor: pointer;
+        &:hover {
+					color: #409EFF;
+				}
+				&.act {
+					color: #409EFF;
+					position: relative;
+					&::after {
+						content: "";
+						width: 100%;
+						height: 2px;
+						position: absolute;
+						bottom: -10px;
+						left: 50%;
+						transform: translateX(-50%);
+						background: #409EFF;
+					}
+				}
+      }
+    }
+    .table-body-wrapper {
+			max-height: calc(100vh - 300px);
+			margin-right: -6px;
+			overflow-y: scroll;
+			overflow-x: auto;
+			border-bottom: 1px solid #dcdfe6;
+			border-top: 1px solid #dcdfe6;
+		}
+
+		table {
+			width: 100%;
+			font-size: 14px;
+			color: #666;
+			thead{
+				position: sticky;
+				top: 0;
+				left: 0;
+				border-left: 1px solid #dcdfe6;
+				border-right: 1px solid #dcdfe6;
+				td{
+					border: none;
+					outline-color: #dcdfe6;
+					outline-style: solid;
+					outline-width: 0.5px;
+				}
+			}
+			td,
+			th {
+				min-width: 35px;
+				// word-break: break-all;
+				border: 1px solid #dcdfe6;
+				height: 45px;
+				text-align: center;
+				background-color: #fff;
+			}
+	
+			.head-column {
+				background-color: #F0F2F5;
+			}
+	
+			.data-cell{
+				color: #409EFF;
+				cursor: pointer;
+			}
+
+			.thead-sticky {
+				position: sticky;
+				top: 0;
+			}
+		}
 }
 }
-</style>import { join } from 'lodash'
-import { join } from 'lodash'
+</style>
 
 

+ 38 - 3
src/views/dataReport_manage/statistic/newCustomlist.vue

@@ -15,7 +15,7 @@
 				:min-width="item.minwidthsty"
 				:min-width="item.minwidthsty"
 				:prop="item.key"
 				:prop="item.key"
 				align="center"
 				align="center"
-				:sortable="['viewTotal','RoadShowTotal','LastViewTime','ExpireDay','createTime'].includes(item.key) ? 'custom' : false"
+				:sortable="sortableCheck(item.key)"
 			>
 			>
 				<template slot-scope="{row}">
 				<template slot-scope="{row}">
 
 
@@ -80,6 +80,7 @@
 				sortable="custom"
 				sortable="custom"
 				align="center" 
 				align="center" 
 				min-width="120"
 				min-width="120"
+				v-if="!isRenewalException"
 			>
 			>
 				<template slot-scope="scope">
 				<template slot-scope="scope">
 					<span>
 					<span>
@@ -92,9 +93,29 @@
 					</span> 
 					</span> 
 				</template>
 				</template>
 			</el-table-column>
 			</el-table-column>
-			<el-table-column label="操作" align="center">
+			<el-table-column
+				prop="ServiceYears"
+				sortable="custom"
+				align="center" 
+				min-width="120"
+				v-else
+			>
+				<template slot="header" slot-scope="scope">
+					<el-tooltip content="客户年限=(当前年月日-首签合同开始年月日)/365,结果进行四舍五入,保存一位小数" placement="top">
+						<div style="display: inline-flex;align-items: center;">
+							<span style="margin-right: 4px;">客户年限</span>
+							<i class="el-icon-info" style="color: #333333;"/>
+						</div>
+					</el-tooltip>
+				</template>
+				<template slot-scope="scope">
+					<span>{{scope.row.ServiceYears}}</span> 
+				</template>
+			</el-table-column>
+			<el-table-column label="操作" align="center" prop="LatestServiceRecord" :sortable="isRenewalException?'custom':false">
 				<span slot-scope="scope">
 				<span slot-scope="scope">
 					<el-button type="text" @click="handleShowShareRecode(scope.row,'list')">沟通记录</el-button>
 					<el-button type="text" @click="handleShowShareRecode(scope.row,'list')">沟通记录</el-button>
+					<span style="white-space: nowrap;" v-if="isRenewalException">{{ scope.row.LatestServiceRecord }}</span>
 				</span>
 				</span>
 			</el-table-column>
 			</el-table-column>
 			<div slot="empty" style="lineHeight:44px;margin:60px 0;color:#999;">
 			<div slot="empty" style="lineHeight:44px;margin:60px 0;color:#999;">
@@ -106,6 +127,7 @@
 			<m-page
 			<m-page
 				:total="total"
 				:total="total"
 				:page_no="page_no"
 				:page_no="page_no"
+				:pageSize="pageSize"
 				@handleCurrentChange="handleCurrentChange"
 				@handleCurrentChange="handleCurrentChange"
 			/>
 			/>
 		</div>
 		</div>
@@ -205,6 +227,10 @@ export default {
 		Role() {
 		Role() {
 			return localStorage.getItem('Role');
 			return localStorage.getItem('Role');
 		},
 		},
+		// 是否是续约异常
+		isRenewalException(){
+			return this.$route.path=="/abnormalRenewalCustomlist"
+		},
 		tableColumnsComputed(){
 		tableColumnsComputed(){
 			// 分配销售 续约统计和续约异常统计需要显示
 			// 分配销售 续约统计和续约异常统计需要显示
 			let hasDistributionSales = this.Role.indexOf('rai')==-1 && 
 			let hasDistributionSales = this.Role.indexOf('rai')==-1 && 
@@ -244,6 +270,10 @@ export default {
 			this.getTableData();
 			this.getTableData();
 		},
 		},
 
 
+		sortableCheck(key){
+			return ( ['viewTotal','RoadShowTotal','LastViewTime','ExpireDay','createTime'].includes(key) ||
+							(['ShareSeller','SellerName','Status'].includes(key) && this.isRenewalException) ) ? 'custom' : false
+		},
 		/* 排序变化时 */
 		/* 排序变化时 */
 		sortChangeHandle({ prop,order }) {
 		sortChangeHandle({ prop,order }) {
 			console.log(prop,order)
 			console.log(prop,order)
@@ -253,6 +283,11 @@ export default {
 				'RoadShowTotal': 'roadShowTotal',
 				'RoadShowTotal': 'roadShowTotal',
 				'LastViewTime': 'viewTime',
 				'LastViewTime': 'viewTime',
 				'ExpireDay': 'expireDay',
 				'ExpireDay': 'expireDay',
+				'ShareSeller':'shareSellerName',
+				'SellerName':'sellerName',
+				'Status':'status',
+				'ServiceYears':'serviceYears',
+				'LatestServiceRecord':'latestServiceRecord'
 			}
 			}
 
 
 			this.sort_obj = {
 			this.sort_obj = {
@@ -322,7 +357,7 @@ export default {
       		this.title = title;
       		this.title = title;
 			this.sort_obj = sort_obj
 			this.sort_obj = sort_obj
     	}
     	}
-
+		this.pageSize=this.isRenewalException?50:10
 		this.ids && this.getTableData();
 		this.ids && this.getTableData();
 	},
 	},
 }
 }

+ 2 - 1
src/views/login_manage/ForgetPassModel.vue

@@ -283,7 +283,8 @@ export default {
                 VerifyCode:code,
                 VerifyCode:code,
                 UserName:this.form.account,
                 UserName:this.form.account,
                 Mobile:this.checkWay==='mobile'?this.userMobile:'',
                 Mobile:this.checkWay==='mobile'?this.userMobile:'',
-                Email:this.checkWay==='email'?this.userEmail:''
+                Email:this.checkWay==='email'?this.userEmail:'',
+                TelAreaCode:this.checkWay==='mobile'?this.TelAreaCode:''
             }).then(res=>{
             }).then(res=>{
                 if(res.Ret!==200) return
                 if(res.Ret!==200) return
                 this.goSteps()
                 this.goSteps()

+ 55 - 19
src/views/roadshow_manage/compononts/activityDetailDia.vue

@@ -13,6 +13,7 @@
 			class="table-cont"
 			class="table-cont"
 			max-height="300"
 			max-height="300"
 			border
 			border
+			ref="tableRef"
 		>
 		>
 			<el-table-column
 			<el-table-column
 				v-for="item in tableColumns"
 				v-for="item in tableColumns"
@@ -20,7 +21,9 @@
 				:label="item.label"
 				:label="item.label"
 				:width="item.widthsty"
 				:width="item.widthsty"
 				:min-width="item.minwidthsty"
 				:min-width="item.minwidthsty"
+				:prop="item.key"
 				align="center"
 				align="center"
+				:sortable="region=='oversea' && (item.key=='time')"
 			>
 			>
 				<template slot-scope="{row}">
 				<template slot-scope="{row}">
 
 
@@ -74,14 +77,18 @@ export default {
 		fromType: {
 		fromType: {
 			type: String,
 			type: String,
 			default: 'researcher'
 			default: 'researcher'
+		},
+		// oversea 海外
+		region: {
+			type: String,
+			default: 'home'
 		}
 		}
 	},
 	},
 	watch: {
 	watch: {
 		isShow(newval) {
 		isShow(newval) {
 			if(newval) {
 			if(newval) {
 				this.initState();
 				this.initState();
-				console.log(this.form)
-				this.getStatisticDetail();
+				this.getStatisticDetail();				
 			}
 			}
 		}
 		}
 	},
 	},
@@ -97,25 +104,49 @@ export default {
 		/* 获取列表 */
 		/* 获取列表 */
 		getStatisticDetail() {
 		getStatisticDetail() {
 			const { startDate,endDate,userid,key } = this.form;
 			const { startDate,endDate,userid,key } = this.form;
-			const typeMapObj = {
-				试用路演: 'try_out',
-				正式路演: 'formal',
-				公开会议: 'meeting',
-			}
-			roadshowInterence.statisticDetailList({
-				DataType: typeMapObj[key] && typeMapObj[key],
-				StartDate: startDate,
-				EndDate: endDate,
-				AdminId: userid,
-				AdminType: this.fromType
-			}).then(res => {
-				const { Ret,Data } = res;
+			if(this.region=='oversea'){
+				// 海外
+				const typeMapObj = {
+					试用: 'try_out',
+					正式: 'formal',
+					关闭: 'close',
+				}
+				roadshowInterence.overseaStatisticDetailList({
+					DataType: typeMapObj[key] && typeMapObj[key],
+					StartDate: startDate,
+					EndDate: endDate,
+					AdminIds: userid?userid.join(','):'',
+					AdminType: this.fromType
+				}).then(res => {
+					const { Ret,Data } = res;
 
 
-				if(Ret !== 200) return
+					if(Ret !== 200) return
 
 
-				this.tableData = Data || [];
+					this.tableData = Data || [];
+
+				})
+			}else {
+				const typeMapObj = {
+					试用路演: 'try_out',
+					正式路演: 'formal',
+					公开会议: 'meeting',
+				}
+				roadshowInterence.statisticDetailList({
+					DataType: typeMapObj[key] && typeMapObj[key],
+					StartDate: startDate,
+					EndDate: endDate,
+					AdminId: userid,
+					AdminType: this.fromType
+				}).then(res => {
+					const { Ret,Data } = res;
+
+					if(Ret !== 200) return
+
+					this.tableData = Data || [];
+
+				})
+			}
 
 
-			})
 		},
 		},
 
 
 		/* 取消 */
 		/* 取消 */
@@ -182,6 +213,11 @@ export default {
 						},
 						},
 						{ ...dynamic_column }
 						{ ...dynamic_column }
 				]	
 				]	
+			this.$refs.tableRef && this.$refs.tableRef.clearSort()
+			this.$nextTick(()=>{
+				// 滚动条高度归零
+				this.$refs.tableRef && (this.$refs.tableRef.$el.querySelector('.el-table__body-wrapper').scrollTop=0)
+			})
 		}
 		}
 	},
 	},
 	created() {},
 	created() {},
@@ -197,4 +233,4 @@ export default {
 .company-tip-poper {
 .company-tip-poper {
 	max-width: 400px;
 	max-width: 400px;
 }
 }
-</style>e>
+</style>