<template>
	<el-table
		:data="filterAuth"
		:span-method="objectSpanMethod"
		@selection-change="handleSelectionChange"
		ref="authTable"
		border
		style="margin-top: 20px"
	>
		<el-table-column label="行业" align="center" >
			<template slot-scope="scope">{{ scope.row.PermissionName }}</template>
		</el-table-column>
		<el-table-column label="产品类型" align="center" v-if="isMerge" >
			<template slot-scope="scope">{{ scope.row.PermissionTypeName }}</template>
		</el-table-column>
		<el-table-column label="状态" align="center" >
			<template slot-scope="scope">{{ scope.row.Status }}</template>
		</el-table-column>
		<el-table-column label="服务期限" align="center">
			<template slot-scope="scope">{{
				scope.row.StartDate + '—' + scope.row.EndDate
			}}</template>
		</el-table-column>
		<el-table-column label="剩余天数" align="center">
			<template slot-scope="scope">{{ scope.row.ExpireDay }}</template>
		</el-table-column>
            <el-table-column 
            v-if="fromType == 'edit'" 
            type="selection" 
            width="70"
            align="center"
            label-class-name="DisabledSelection"
            :selectable="canSelect">
            </el-table-column>
	</el-table>
</template>

<script>
/**权益权限ID
 * 科技-主观(20)-客观(37)
 * 消费-主观(21)-客观(38)
 * 医药-主观(22)-客观(39)
 * 智造-主观(19)-客观(36)
 * 策略(23)
 * 专家(29)
 * 固收(53)
 * 调研(54)
 * 路演服务(30)
 * 研选订阅(31)
 * 研选扣点包(52)
 */
export default {
	props: {
		authList: {
			type: Array,
		},
		/* 页面来源 */
		fromType: {
			type: String,
		},
		/* 表单位置 */
		form: {
			type: Number,
		},
	},
	data() {
		return {
			filterAuth: [],//权限表格
            indexArrEquity: [],//权益
			spanArrEquity: [],//权益
			posEquity: 0,//权益
		};
	},
	methods: {
		/* 处理合并数组 */
		getRowSpan() {
			this.filterAuth.map((v, i, s) => {
				if (!v.PermissionTypeName) {
				this.indexArrEquity.push(i);
				}
			});
			for (var i = 0; i < this.filterAuth.length; i++) {
				let element = this.filterAuth[i]
				if (i === 0) {
					this.spanArrEquity.push(1);
					this.posEquity = 0;
				} else {
					// 判断当前元素与上一个元素是否相同（line为标记）
					if (element.PermissionName === this.filterAuth[i - 1].PermissionName) {
						if(element.IsMerge){
							// 主客观都有，需要合并
							this.spanArrEquity[this.posEquity] += 1;
							this.spanArrEquity.push(0);
						}else{
							// 主客观都有 不需要合并，说明是服务期限或者状态不一样
							this.spanArrEquity[this.posEquity] += 0.5;
							this.spanArrEquity.push(0.5);
						}
					} else {
						this.spanArrEquity.push(1);
						this.posEquity = i;
					}
				}
			}
		},
		/* 合并行规则 */
		objectSpanMethod({ row, column, rowIndex, columnIndex }) {
			if(!this.isMerge){
				// 产品类型不显示
				const _row = this.spanArrEquity[rowIndex];
				if(_row == 0){
					return {
						rowspan: _row,
						colspan: 0,
					};
				}
			}else{
				//处理行的合并
				if (this.indexArrEquity.includes(rowIndex)) {
					if (columnIndex === 0) {
						return {
							rowspan: 1,
							colspan: 2,
						};
					} else if (columnIndex === 1) {
						return {
							rowspan: 0,
							colspan: 0,
						};
					}
				}
				// 权益行业主客观合并
				const _row = this.spanArrEquity[rowIndex];
				if(_row == 2){
					// 为2 是主客观都有，合并，这时合并行业和产品类型
					if(columnIndex === 0){
						return {
							rowspan: 1,
							colspan: 2,
						};
					}else if(columnIndex === 1){
						return {
							rowspan: 0,
							colspan: 0,
						};
					}
				}else if(_row == 0){
					// 为0 表示不需要这行，被合并掉了
					return {
						rowspan: _row,
						colspan: 0,
					};
				}else if(_row == 1.5){
					// 为1.5 是主客观都有，但不合并，这时合并行业
					if(columnIndex === 0){
						return {
							rowspan: 2,
							colspan: 1,
						};
					}
				}else if(_row == 0.5){
					if(columnIndex === 0){
						return {
							rowspan: 0,
							colspan: 0,
						};
					}
				}
			}
		},
		/* 勾选权限 */
		handleSelectionChange(val) {
			let selectArr = val.map((item, index) => {
				return item.ChartPermissionId;
			});
			this.form === 1
				? this.$emit('selectAuthHandle', selectArr)
				: this.$emit('selectAuthHandle2', selectArr);
		},
		// 是否可选择
		canSelect(row) {
			return row.ChartPermissionId === 1 ? false : true;
		}
	},
	created() {},
	mounted() {
		/* 处理表格数据格式 */
		this.filterAuth = this.authList.map((item) => {
			return item.Items;
		});
		this.filterAuth = this.filterAuth.flat(Infinity);
		/* 选中的id数组 */
		//查看是否领取但无权限
		let bol_have = this.authList.some((item) => item.CheckList.length);
		let select = this.authList.map((item) => {
			return item.CheckList;
		});
		select = bol_have ? select.flat(Infinity) : [];
		/* 默认勾选中的表格项 */
		let check_Auth = this.filterAuth.filter((item) => {
			return select.includes(item.ChartPermissionId);
		});
		if (this.fromType === 'edit') {
			/* 展示表格选中的key */
			let _this = this; 
			this.$nextTick(() => {
				if (check_Auth.length > 0) {
					check_Auth.forEach((item) => {
						_this.$refs.authTable.toggleRowSelection(item, true);
					});
				}
			});
		}else {
			/* 显示只有权限的数组 */
			this.filterAuth = [];
			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.getRowSpan();
	},
};
</script>
<style lang="scss">
/*表格表头全选*/
.DisabledSelection .cell::after{
	content:"全选";
	font-size: 12px;
	margin-left: 2px;
}
</style>
