<template>
	<div class="all-box">
		<!-- 头部提示 -->
		<div class="diy-tip" style="margin-bottom: 10px;">
			<div>
				当前组织架构成员通过钉钉通讯录同步，员工开启积分管理后才能正式启用并进入“功道云积分制”，如果您的钉钉通讯录有变动，点击
				<span class="blue" style="margin-left: 10px;cursor: pointer;" @click="tb()" v-loading="tbLoading">
					<i class="el-icon-refresh"></i>
					立即同步
				</span>
			</div>
		</div>
		<div class="all">
			<div class="flex-box">
				<div class="terr-left">
					<div class="rule_class_box" v-loading="ruleDeprt">
						<div class="company_name">
							<img src="@/assets/image/two.png" />
							<span>组织架构</span>
						</div>
						<el-tree
							:data="bmList"
							class="cate-tree"
							:highlight-current="true"
							:props="{ children: '_child', label: 'name' }"
							@node-click="handleNodeClick"
							:accordion="true"
							empty-text="您暂无部门数据,请同步钉钉通讯录"
						>
							<div
								content="tree"
								v-show="treedata.length != 0"
								class="flex-box flex-v-ce"
								slot-scope="{ node, data }"
								style="font-size: 14px;color: #606266; width:100%; text-align: left;"
							>
								<img src="@/assets/image/one.png" style="width: 20px;margin-right: 5px;" />
								<span class="name">{{ data.name }}</span>
							</div>
						</el-tree>
					</div>
				</div>
				<div class="terr-right border-right flex-1">
					<div class="margin-bottom">
						<el-button @click="participation()" :loading="enable_loading" size="medium" type="primary">批量启用</el-button>
						<el-button @click="forbidden()" :loading="enable_loading" size="medium" type="danger" style="margin-right: 10px;">批量禁用</el-button>
						<el-select v-model="status"  size="medium" style="margin-right: 10px;width: 150px;">
						  <el-option
						    v-for="item in options"
						    :key="item.value"
						    :label="item.label"
						    :value="item.value">
						  </el-option>
						</el-select>
						<el-input placeholder="输入同事姓名" size="medium" style="width: 230px;" v-model="keywords" clearable></el-input>
					</div>
					<el-table :data="userList" @selection-change="handleSelectionChange" v-loading="tableToading">
						<el-table-column type="selection" width="50" :selectable="selectable"></el-table-column>
						<el-table-column label="姓名">
							<template slot-scope="scope">
								<div class="flex-box flex-v-ce">
									<userImage :user_name="scope.row.name" :img_url="scope.row.img_url" width="44px" height="44px"></userImage>
									<div style="margin-left: 10px;">{{ scope.row.name }}</div>
									<div style="margin-left: 10px;" v-if="scope.row.is_creator" class="green">（创始人）</div>
									<div style="margin-left: 10px;" v-if="scope.row.id == userInfo.id" class="green">（我）</div>
								</div>
							</template>
						</el-table-column>
						<el-table-column label="部门">
							<template slot-scope="scope">
								<div class="flex-box flex-v-ce bms">
									<div v-for="(item, index) in scope.row.employee_detail.dept_list" :key="index">{{ item.dept_name }}</div>
								</div>
							</template>
						</el-table-column>
						<el-table-column prop="accedence_time" label="入职时间"></el-table-column>
						<el-table-column prop="id" label="员工标识" width="80">
							<template slot-scope="scope">
								<el-button size="mini" type="primary" @click="copyId(scope.row.id)">复制</el-button>
							</template>
						</el-table-column>
						<el-table-column label="是否参与排名" align="center">
							<template slot-scope="scope">
								<template v-if="scope.row.is_creator != 1">
									<span
										class="participateRank"
										:style="scope.row.is_ranking == 1 ? 'color:#409eff' : 'color:#F56C6C'"
										@click="rankingtakePartIn(scope.row.id, scope.row.is_ranking)"
									>
										{{ scope.row.is_ranking == 1 ? '参与' : '不参与' }}
									</span>
								</template>
								<span v-else class="fontColorB">不参与</span>
							</template>
						</el-table-column>
						<el-table-column label="启用积分管理">
							<template slot="header" slot-scope="scope">
								<el-popover placement="top-start" width="300" trigger="manual" v-model="visible">
									<div class="el-popover2">
										<div class="title">
											提示
											<i class="el-icon-info" style="margin-left: 5px;"></i>
										</div>
										<div style="margin-bottom: 10px;">在这里启用积分管理，即可进入系统</div>
										<div class="flex-box">
											<div class="flex-1"></div>
											<el-button size="small" @click="visible_close()">我知道了</el-button>
										</div>
									</div>
									<div slot="reference" class="popover" @click="visible = !visible">
										启用积分管理
										<i class="el-icon-info" style="margin-left: 5px;"></i>
									</div>
								</el-popover>
							</template>
							<template slot-scope="scope">
								<div :class="[scope.row.is_official == 1 ? 'switch-box' : '']" @click="changeIs(scope.row.is_official, scope.row.id)">
									<div class="switch"></div>
								</div>
							</template>
						</el-table-column>
						<template slot="empty">
							<noData></noData>
						</template>
					</el-table>
					<div class="pagination">
						<el-pagination
							@size-change="handleSizeChange"
							@current-change="handleCurrentChange"
							:current-page="page"
							:page-sizes="[10, 20, 50, 100]"
							:page-size="perPage"
							layout="total,sizes, prev, pager, next"
							:total="total"
						></el-pagination>
					</div>
				</div>
			</div>
			<!-- 隐藏文本，用于复制ID -->
			<input  v-model="copyIds" id="biao" style="opacity:0"/>
		</div>
		<el-dialog title="设置是否参与排名" :visible.sync="dialogVisible" top="30vh" width="520px" :before-close="handleClose">
			<div style="margin-left:20px;">
				<el-radio v-for="(item, index) in radioLi" :key="index" v-model="radio" :label="item.id">
					<span style="font-size:17px;">{{ item.name }}</span>
					<p style="font-size:14px;margin:8px 0 0 24px;">{{ item.kam }}</p>
				</el-radio>
			</div>
			<span slot="footer" class="dialog-footer">
				<el-button @click="dialogVisible = false">取 消</el-button>
				<el-button type="primary" @click="setRanking" :disabled="rangLoad">确 定</el-button>
			</span>
		</el-dialog>
	</div>
</template>

<script>
import noData from '@/components/noData';
import {_debounce} from '@/api/auth';
export default {
	data() {
		return {
			is: 1,
			no: 0,
			page: 1,
			perPage: 10,
			total: 0,
			info: {}, //公司信息
			tips_show: true,
			bmList: [],
			userList: [],
			class_type: '',
			treedata: [1],
			tableData: [],
			keywords: '',
			dept_id: 0,

			tableToading: false,
			tbLoading: false,
			selectIds: [],
			enable_loading: false,
			visible: false,

			ruleDeprt: false,
			dialogVisible: false,
			rankingtakePartInId: '',
			radio: '1',

			rangLoad: false,
			radioLi: [{ id: '1', name: '参与排名', kam: '在排名中展示此人' }, { id: '0', name: '不参与排名', kam: '排名不展示此人(自定义排名除外)' }],
			userInfo: this.$getUserData(),
			copyIds:'',
			options: [{
			  value: '-1',
			  label: '全部'
			}, {
			  value: '1',
			  label: '已开启'
			}, {
			  value: '0',
			  label: '已禁用'
			}],
			status: '-1'
		};
	},
	components: {
		noData
	},
	watch: {
		keywords: {
		  deep: true,
		  handler: _debounce(function(val) {
			this.page = 1;
			this.getEmployee();
		  })
		},
		dept_id(val) {
			this.getEmployee();
		},
		status(){
			 this.page = 1;
			 this.getEmployee();
		}
	},
	created() {
		this.getInfo();
		this.getEmployee();
	},
	mounted() {
		this.$nextTick(function() {
			if (localStorage.getItem('rule')) {
				this.tips_show = false;
			} else {
				this.tips_show = true;
			}
		});
	},
	methods: {
		// 复制ID
		copyId(id) {
			this.$axios('get', '/api/employee/code', { employee_id: id })
				.then(res => {
					if (res.data.code == 1) {
						this.copyIds = res.data.data.encrypt_code;
						this.$nextTick(()=>{
							this.copyToClipboard();
						})
					}
				})
		},
		copyToClipboard() {
			var Url2=document.getElementById("biao");
			console.log(Url2)
			Url2.select(); // 选择对象
			document.execCommand("Copy"); // 执行浏览器复制命令
			this.$message.success('已复制');
		},
		forbidden() {
			if (this.selectIds.length == 0) {
				this.$message.error({ message: '请选择禁用的人员！' });
				return;
			}
			this.$confirm('确定禁用选择的人员？', '提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning'
			}).then(() => {
				this.enable_loading = true;
				this.$axios('post', '/api/employee/disable', { employee_id: this.selectIds })
					.then(res => {
						if (res) {
							this.$message.success('已禁用');
							this.getEmployee();
						}
					})
					.finally(err => {
						this.enable_loading = false;
					});
			});
		},
		selectable(row) {
			if (row.is_creator) {
				return false;
			} else if (this.userInfo.id == row.id) {
				return false;
			} else {
				return true;
			}
		},
		setRanking() {
			this.rangLoad = true;
			let data = {
				employee_id: this.rankingtakePartInId,
				switch: Number(this.radio)
			};
			this.$axios('post', '/api/employee/ranking_switch', data)
				.then(res => {
					if (res.data.code == 1) {
						this.$message.success({ message: res.data.msg });
						this.getEmployee();
					}
				})
				.finally(() => {
					this.dialogVisible = false;
					setTimeout(() => {
						this.rangLoad = false;
					}, 200);
				});
		},
		rankingtakePartIn(id, is_ranking) {
			this.radio = is_ranking.toString();
			this.rankingtakePartInId = id;
			this.dialogVisible = true;
		},
		handleClose(done) {
			done();
		},
		//同步信息
		tb() {
			this.$confirm('下次同步时间需在10分钟之后，是否同步?', '提示', {
				confirmButtonText: '确定',
				cancelButtonText: '取消',
				type: 'warning'
			}).then(() => {
				this.tbLoading = true;
				this.$axios('post', '/api/ding/department_sync')
					.then(res => {
						this.$message.success({ message: '同步成功' });
						this.dept_id = 0;
						this.getInfo();
						this.getEmployee();
					})
					.finally(() => {
						this.tbLoading = false;
					});
			});
		},
		//搜索
		searchUser() {
			this.page = 1;
			this.getEmployee();
		},
		//是否开通
		changeIs(e, id) {
			var url = e == 1 ? '/api/employee/disable' : '/api/employee/enable';
			this.$axios('post', url, { employee_id: [id] }).then(res => {
				if (res) {
					if (e == 0) {
						this.$message.success({ message: '开启成功,可在"角色权限设置对应管理范围"' });
					} else {
						this.$message.success({ message: res.data.msg });
					}
					this.getEmployee();
				}
			});
		},
		//批量开通权限
		participation() {
			if (this.selectIds.length == 0) {
				this.$message.error({ message: '请选择参与的人员！' });
				return;
			}

			this.enable_loading = true;
			this.$axios('post', '/api/employee/enable', { employee_id: this.selectIds })
				.then(res => {
					if (res) {
						this.$message.success({ message: '开启成功,可在"角色权限设置对应管理范围"' });
						this.getEmployee();
					}
				})
				.finally(err => {
					this.enable_loading = false;
				});
		},
		//获取公司信息
		getInfo(is) {
			this.ruleDeprt = true;
			this.$axios('get', '/api/site/info').then(res => {
				this.info = res.data.data;
				this.getDepartment(is);
			});
		},
		//选择员工
		handleSelectionChange(e) {
			var arr = [];
			for (var item in e) {
				arr.push(e[item].id);
			}
			this.selectIds = arr;
		},
		//点击部门
		handleNodeClick(e) {
			this.page = 1;
			this.dept_id = e.id;
		},
		//获取部门
		getDepartment() {
			this.ruleDeprt = true;
			this.$axios('get', '/api/department/tree')
				.then(res => {
					var list = [
						{
							id: 0,
							name: this.info.name,
							_child: res.data.data.list
						}
					];
					this.bmList = list;
				})
				.finally(() => {
					this.ruleDeprt = false;
				});
		},
		//获取员工
		getEmployee() {
			this.tableToading = true;
			let data={
				dept_id: this.dept_id,
				keywords: this.keywords,
				page: this.page,
				page_size:this.perPage,
			}
			let is_official=this.status=='-1'? '':this.status;
			if(is_official){
				data.is_official=is_official;
			}
			this.$axios('get', '/api/employee/index', data).then(res => {
					this.total = res.data.data.pageInfo.count;
					this.userList = res.data.data.list;
					var visible = localStorage.getItem('visible');
					if (!visible) {
						this.visible = true;
					}
				})
				.finally(err => {
					this.tableToading = false;
				});
		},
		visible_close() {
			localStorage.setItem('visible', 'true');
			this.visible = false;
		},
		//关闭提示
		tips_close() {
			localStorage.setItem('rule', 'true');
			this.tips_show = false;
		},
		handleSizeChange: function(val) {
			this.perPage = val;
			this.page = 1;
			this.getEmployee();
		},
		//页码变更
		handleCurrentChange: function(val) {
			this.page = val;
			this.getEmployee();
		}
	}
};
</script>

<style lang="scss" scoped="scoped">
.title {
	font-size: 16px;
	color: #909399;
	margin-bottom: 10px;
}
.popover {
	border: none;
	// color: #909399;
	font-weight: 600;
	cursor: pointer;
}
.popover:hover {
	background-color: #fff;
	border-color: #fff;
}

.switch {
	margin: 0;
	display: inline-block;
	position: relative;
	width: 40px;
	height: 20px;
	border: 1px solid #dcdfe6;
	outline: none;
	border-radius: 10px;
	box-sizing: border-box;
	background: #dcdfe6;
	cursor: pointer;
	transition: border-color 0.3s, background-color 0.3s;
	vertical-align: middle;
}
.switch:after {
	content: '';
	position: absolute;
	top: 1px;
	left: 1px;
	border-radius: 100%;
	transition: all 0.3s;
	width: 16px;
	height: 16px;
	background-color: #fff;
}
.switch-box .switch {
	border-color: #409eff;
	background-color: #409eff;
}
.switch-box .switch:after {
	left: 100%;
	margin-left: -17px;
}
.name {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	width: 80%;
}
.bms div {
	margin-right: 10px;
}
.top-msg div:nth-child(1) {
	margin-bottom: 10px;
}
.company_name {
	position: relative;
	display: block;
	font-family: 'Microsoft YaHei';
	text-align: left;
	padding: 15px 25px;
	cursor: pointer;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
	border-bottom: 1px #f8f8f8 solid;
}
.company_name img {
	position: relative;
	display: inline-block;
	top: 2px;
	width: 18px;
	height: 18px;
	margin-right: 4px;
}
.terr-right {
	.custom-tree-node {
		margin-left: -4px;
	}
	.custom-tree-node * {
		vertical-align: middle;
	}
	.custom-tree-node:hover {
		.treeIcon {
			display: inline-block;
			width: 55%;
		}
	}
}

.el-popover2 {
	// background-color: #409eff !important;
	color: #409eff;
}
.rule_class_box {
	::v-deep .el-tree-node {
		border-bottom: 1px #f8f8f8 solid;
	}
	::v-deep .el-tree-node__content {
		padding: 10px 0;
		// border-bottom: 1px #f8f8f8 solid;
	}
	::v-deep .el-tree-node__content:hover {
		background: #ecf5ff;
		border-radius: 4px;
	}
	::v-deep .el-tree--highlight-current .el-tree-node.is-current > .el-tree-node__content .name {
		color: #409eff !important;
		font-weight: normal;
		transition: 0.35s ease-in-out;
	}
	// ::v-deep .is-current .el-tree-node__content .el-icon-caret-right {
	// 	color: #409eff !important;
	// }
	// ::v-deep .is-current .el-tree-node__content .el-tree-node__label {
	// 	color: #409eff !important;
	// }
	// ::v-deep .is-current .el-tree-node__children .el-icon-caret-right {
	// 	color: #c0c4cc !important;
	// }
	// ::v-deep .is-current .el-tree-node__children .el-tree-node__label {
	// 	color: #606266 !important;
	// }
	// ::v-deep .is-current .name {
	// 	color: #409eff !important;
	// 	font-weight: normal;
	// 	transition: 0.35s ease-in-out;
	// }
}
.participateRank {
	cursor: pointer;
	text-decoration: underline;
}
</style>
